From 368fafb79b5ae416127eedfd7a67effc315b759b Mon Sep 17 00:00:00 2001 From: David Corbin Date: Thu, 17 Jan 2013 11:44:33 -0500 Subject: [PATCH] Added Implicit conversion of "minder' to mock. Renamed MockMinder to Mock --- scala/project/plugins.sbt | 3 +- scala/project_sbt0.7/build.properties | 2 +- .../{MockMinder.scala => Mock.scala} | 9 +++- .../{MockMinderTest.scala => MockTest.scala} | 43 ++++++++++--------- .../scala/sample/MockGenericRepository.scala | 2 +- .../test/scala/sample/MockRequestQueue.scala | 2 +- .../test/scala/sample/MockWidgetPainter.scala | 2 +- .../test/scala/sample/PaintingTaskTest.scala | 13 +++--- 8 files changed, 43 insertions(+), 33 deletions(-) rename scala/src/main/scala/replicant/{MockMinder.scala => Mock.scala} (77%) rename scala/src/test/scala/replicant/{MockMinderTest.scala => MockTest.scala} (77%) diff --git a/scala/project/plugins.sbt b/scala/project/plugins.sbt index f6559a4..310b1b0 100644 --- a/scala/project/plugins.sbt +++ b/scala/project/plugins.sbt @@ -1,2 +1,3 @@ - addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.0.0") + +addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.2.0") diff --git a/scala/project_sbt0.7/build.properties b/scala/project_sbt0.7/build.properties index 2ab84f6..0718907 100644 --- a/scala/project_sbt0.7/build.properties +++ b/scala/project_sbt0.7/build.properties @@ -4,5 +4,5 @@ project.organization=kiel project.name=replicant sbt.version=0.7.3 project.version=0.1 -build.scala.versions=2.9.0 2.8.1 2.8.0 +build.scala.versions=2.9.1 2.9.0 2.8.1 2.8.0 project.initialize=false diff --git a/scala/src/main/scala/replicant/MockMinder.scala b/scala/src/main/scala/replicant/Mock.scala similarity index 77% rename from scala/src/main/scala/replicant/MockMinder.scala rename to scala/src/main/scala/replicant/Mock.scala index de9607b..1be8b8e 100644 --- a/scala/src/main/scala/replicant/MockMinder.scala +++ b/scala/src/main/scala/replicant/Mock.scala @@ -1,8 +1,12 @@ package replicant -trait MockMinder[Mock] { +object Mock { + implicit def toMock[Subject](minder: Mock[Subject]) : Subject = minder.mock +} - val mock: Mock +trait Mock[Subject] { + + val mock: Subject protected def method[Result: ResponseFallback](methodName: String, target: () => Result) = Mocker0[Result](mock, methodName) @@ -13,4 +17,5 @@ trait MockMinder[Mock] { protected def method[Arg1, Arg2, Result: ResponseFallback](methodName: String, target: (Arg1, Arg2) => Result) = Mocker[(Arg1, Arg2), Result](mock, methodName) + } \ No newline at end of file diff --git a/scala/src/test/scala/replicant/MockMinderTest.scala b/scala/src/test/scala/replicant/MockTest.scala similarity index 77% rename from scala/src/test/scala/replicant/MockMinderTest.scala rename to scala/src/test/scala/replicant/MockTest.scala index 72668da..fe00fb8 100644 --- a/scala/src/test/scala/replicant/MockMinderTest.scala +++ b/scala/src/test/scala/replicant/MockTest.scala @@ -9,7 +9,7 @@ import org.junit.runner._ import testing._ @RunWith(classOf[JUnitRunner]) -class MockMinderTest extends junit.JUnit3Suite with ShouldMatchers { +class MockTest extends junit.JUnit3Suite with ShouldMatchers { trait Foo { def noArgMethod: A @@ -17,7 +17,7 @@ class MockMinderTest extends junit.JUnit3Suite with ShouldMatchers { def twoArgMethod(arg1: A, arg2: B): C } - class FooMinder extends MockMinder[Foo] { minder => + class MockFoo extends Mock[Foo] { minder => val mock: Foo = new Foo { def noArgMethod = minder.noArgMethod() @@ -31,36 +31,39 @@ class MockMinderTest extends junit.JUnit3Suite with ShouldMatchers { } @Test def testControllerWithNoArgMethod { - val minder = new FooMinder - + val minder = new MockFoo + val mock: Foo = minder + val noArgMethod: Mocker0[A] = minder.noArgMethod minder.noArgMethod should equal(Mocker0[A](minder.mock, "noArgMethod")) - + minder.noArgMethod.expect { A(7) } - minder.mock.noArgMethod should equal(A(7)) - } - + mock.noArgMethod should equal(A(7)) + } + + @Test def testControllerWithOneArgMethod { - val minder = new FooMinder - + val minder = new MockFoo + val mock: Foo = minder + val oneArgMethod: Mocker[A, B] = minder.oneArgMethod - + minder.oneArgMethod should equal(Mocker[A, B](minder.mock, "oneArgMethod")) minder.oneArgMethod.expect(A(3)) { B(7) } - minder.mock.oneArgMethod(A(3)) should equal(B(7)) - } - + mock.oneArgMethod(A(3)) should equal(B(7)) + } + @Test def testControllerWithTwoArgMethod { - val minder = new FooMinder - + val minder = new MockFoo + val mock: Foo = minder + val twoArgMethod: Mocker[(A, B), C] = minder.twoArgMethod - + minder.twoArgMethod should equal(Mocker[(A, B), C](minder.mock, "twoArgMethod")) minder.twoArgMethod.expect(A(3), B(7)) { C(11) } - minder.mock.twoArgMethod(A(3), B(7)) should equal(C(11)) - } - + mock.twoArgMethod(A(3), B(7)) should equal(C(11)) + } } \ No newline at end of file diff --git a/scala/src/test/scala/sample/MockGenericRepository.scala b/scala/src/test/scala/sample/MockGenericRepository.scala index e8ceb56..db27a5e 100644 --- a/scala/src/test/scala/sample/MockGenericRepository.scala +++ b/scala/src/test/scala/sample/MockGenericRepository.scala @@ -3,7 +3,7 @@ package sample import replicant._ -class MockGenericRepository[Subject: ResponseFallback] extends MockMinder[GenericRepository[Subject]] { minder => +class MockGenericRepository[Subject: ResponseFallback] extends Mock[GenericRepository[Subject]] { minder => protected class BaseSubject { def store(subject: Subject) = minder.store(subject) diff --git a/scala/src/test/scala/sample/MockRequestQueue.scala b/scala/src/test/scala/sample/MockRequestQueue.scala index ec1ef2e..bfcc955 100644 --- a/scala/src/test/scala/sample/MockRequestQueue.scala +++ b/scala/src/test/scala/sample/MockRequestQueue.scala @@ -3,7 +3,7 @@ package sample import replicant._ -class MockRequestQueue extends MockMinder[RequestQueue] { minder => +class MockRequestQueue extends Mock[RequestQueue] { minder => val mock: RequestQueue = new RequestQueue { def nextRequest: Option[Request] = minder.nextRequest() diff --git a/scala/src/test/scala/sample/MockWidgetPainter.scala b/scala/src/test/scala/sample/MockWidgetPainter.scala index 550574d..d6c7166 100644 --- a/scala/src/test/scala/sample/MockWidgetPainter.scala +++ b/scala/src/test/scala/sample/MockWidgetPainter.scala @@ -3,7 +3,7 @@ package sample import replicant._ -class MockWidgetPainter extends MockMinder[WidgetPainter] { minder => +class MockWidgetPainter extends Mock[WidgetPainter] { minder => val mock: WidgetPainter = new WidgetPainter { def paintWidget(widget: Widget) { minder.paintWidget(widget) } diff --git a/scala/src/test/scala/sample/PaintingTaskTest.scala b/scala/src/test/scala/sample/PaintingTaskTest.scala index 96fe4d1..1e4b632 100644 --- a/scala/src/test/scala/sample/PaintingTaskTest.scala +++ b/scala/src/test/scala/sample/PaintingTaskTest.scala @@ -23,7 +23,7 @@ class PaintingTaskTest extends junit.JUnit3Suite with ShouldMatchers { val requestQueue = new MockRequestQueue val painter = new MockWidgetPainter val widgetRepository = new MockGenericRepository[Widget] - val paintingTask = new PaintingTask(requestQueue.mock, painter.mock, widgetRepository.mock) + val paintingTask = new PaintingTask(requestQueue, painter, widgetRepository) val requests = mutable.Queue(Some(Request(17)), Some(Request(42)), Some(Request(37)), None) requestQueue.nextRequest.expect { @@ -42,15 +42,16 @@ class PaintingTaskTest extends junit.JUnit3Suite with ShouldMatchers { @Test def testOrderingResponses { val queue = new MockRequestQueue + val mockedQueue: RequestQueue = queue val requests = mutable.Queue(Some(Request(1)), Some(Request(2)), Some(Request(3)), None) queue.nextRequest.expect { requests.dequeue } - queue.mock.nextRequest should equal(Some(Request(1))) - queue.mock.nextRequest should equal(Some(Request(2))) - queue.mock.nextRequest should equal(Some(Request(3))) - queue.mock.nextRequest should equal(None) - intercept[java.util.NoSuchElementException] { queue.mock.nextRequest } + mockedQueue.nextRequest should equal(Some(Request(1))) + mockedQueue.nextRequest should equal(Some(Request(2))) + mockedQueue.nextRequest should equal(Some(Request(3))) + mockedQueue.nextRequest should equal(None) + intercept[java.util.NoSuchElementException] { mockedQueue.nextRequest } } class Mocker2[Args1, Args2, Result](mock: Any, methodName: String) {