From 75a45f9163034ca9ba126cf07b3f87f3f24b1249 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Sat, 17 Feb 2018 13:11:36 -0800 Subject: Add unit test for main method discovery --- .../hello-world-no-main/core/src-2.10/Shim.scala | 5 ++++ .../hello-world-no-main/core/src-2.11/Shim.scala | 5 ++++ .../hello-world-no-main/core/src-2.12/Shim.scala | 5 ++++ .../hello-world-no-main/core/src/Main.scala | 11 +++++++ .../hello-world-no-main/core/src/Result.scala | 7 +++++ .../test/src/mill/scalalib/HelloWorldTests.scala | 34 ++++++++++++++++------ 6 files changed, 58 insertions(+), 9 deletions(-) create mode 100644 scalalib/test/resources/hello-world-no-main/core/src-2.10/Shim.scala create mode 100644 scalalib/test/resources/hello-world-no-main/core/src-2.11/Shim.scala create mode 100644 scalalib/test/resources/hello-world-no-main/core/src-2.12/Shim.scala create mode 100644 scalalib/test/resources/hello-world-no-main/core/src/Main.scala create mode 100644 scalalib/test/resources/hello-world-no-main/core/src/Result.scala (limited to 'scalalib/test') diff --git a/scalalib/test/resources/hello-world-no-main/core/src-2.10/Shim.scala b/scalalib/test/resources/hello-world-no-main/core/src-2.10/Shim.scala new file mode 100644 index 00000000..025cff5c --- /dev/null +++ b/scalalib/test/resources/hello-world-no-main/core/src-2.10/Shim.scala @@ -0,0 +1,5 @@ +object Shim{ + def main(args: Array[String]): Unit = { + Main0(args(0), scala.util.Properties.versionNumberString + " rox") + } +} \ No newline at end of file diff --git a/scalalib/test/resources/hello-world-no-main/core/src-2.11/Shim.scala b/scalalib/test/resources/hello-world-no-main/core/src-2.11/Shim.scala new file mode 100644 index 00000000..d98a6de1 --- /dev/null +++ b/scalalib/test/resources/hello-world-no-main/core/src-2.11/Shim.scala @@ -0,0 +1,5 @@ +object Shim{ + def main(args: Array[String]): Unit = { + Main0(args(0), scala.util.Properties.versionNumberString + " pwns") + } +} \ No newline at end of file diff --git a/scalalib/test/resources/hello-world-no-main/core/src-2.12/Shim.scala b/scalalib/test/resources/hello-world-no-main/core/src-2.12/Shim.scala new file mode 100644 index 00000000..1f3e1c0f --- /dev/null +++ b/scalalib/test/resources/hello-world-no-main/core/src-2.12/Shim.scala @@ -0,0 +1,5 @@ +object Shim{ + def main(args: Array[String]): Unit = { + Main0(args(0), scala.util.Properties.versionNumberString + " leet") + } +} \ No newline at end of file diff --git a/scalalib/test/resources/hello-world-no-main/core/src/Main.scala b/scalalib/test/resources/hello-world-no-main/core/src/Main.scala new file mode 100644 index 00000000..5f68fd3f --- /dev/null +++ b/scalalib/test/resources/hello-world-no-main/core/src/Main.scala @@ -0,0 +1,11 @@ +import scala.collection._ +import java.nio.file.{Files, Paths} + +import Main.{args, greeting} +object Main0{ + def apply(s: String, greeting: String) = { + val resultPath = Paths.get(s) + Files.createDirectories(resultPath.getParent) + Files.write(resultPath, greeting.getBytes) + } +} diff --git a/scalalib/test/resources/hello-world-no-main/core/src/Result.scala b/scalalib/test/resources/hello-world-no-main/core/src/Result.scala new file mode 100644 index 00000000..d7d29a51 --- /dev/null +++ b/scalalib/test/resources/hello-world-no-main/core/src/Result.scala @@ -0,0 +1,7 @@ +object Person { + def fromString(s: String): Person = { + val Array(name, age) = s.split(":") + Person(name, age.toInt) + } +} +case class Person(name: String, age: Int) diff --git a/scalalib/test/src/mill/scalalib/HelloWorldTests.scala b/scalalib/test/src/mill/scalalib/HelloWorldTests.scala index 945bec27..7a788b1f 100644 --- a/scalalib/test/src/mill/scalalib/HelloWorldTests.scala +++ b/scalalib/test/src/mill/scalalib/HelloWorldTests.scala @@ -122,7 +122,7 @@ object HelloWorldTests extends TestSuite { "Person$.class" ) - def workspaceTest[T, M <: TestUtil.BaseModule: Discover](m: M) + def workspaceTest[T, M <: TestUtil.BaseModule: Discover](m: M, resourcePath: Path = resourcePath) (t: TestEvaluator[M] => T) (implicit tp: TestPath): T = { val eval = new TestEvaluator(m) @@ -300,11 +300,27 @@ object HelloWorldTests extends TestSuite { read(runResult) == "hello rockjam, your age is: 25" ) } - 'notRunWithoutMainClass - workspaceTest(HelloWorldWithoutMain){eval => - val Left(Result.Exception(err, _)) = eval.apply(HelloWorldWithoutMain.core.run()) + 'notRunWithoutMainClass - workspaceTest( + HelloWorldWithoutMain, + pwd / 'scalalib / 'test / 'resources / "hello-world-no-main" + ){eval => + val Left(Result.Failure(_, None)) = eval.apply(HelloWorldWithoutMain.core.run()) + } + + 'runDiscoverMainClass - workspaceTest(HelloWorldWithoutMain){eval => + // Make sure even if there isn't a main class defined explicitly, it gets + // discovered by Zinc and used + val runResult = eval.outPath / 'core / 'run / 'dest / "hello-mill" + val Right((_, evalCount)) = eval.apply( + HelloWorldWithoutMain.core.run(runResult.toString) + ) + + assert(evalCount > 0) + assert( - err.isInstanceOf[RuntimeException] + exists(runResult), + read(runResult) == "hello rockjam, your age is: 25" ) } } @@ -337,12 +353,12 @@ object HelloWorldTests extends TestSuite { read(runResult) == "hello rockjam, your age is: 25" ) } - 'notRunWithoutMainClass - workspaceTest(HelloWorldWithoutMain){eval => - val Left(Result.Exception(err, _)) = eval.apply(HelloWorldWithoutMain.core.runLocal()) + 'notRunWithoutMainClass - workspaceTest( + HelloWorldWithoutMain, + pwd / 'scalalib / 'test / 'resources / "hello-world-no-main" + ){eval => + val Left(Result.Failure(_, None)) = eval.apply(HelloWorldWithoutMain.core.runLocal()) - assert( - err.isInstanceOf[RuntimeException] - ) } } 'jar - { -- cgit v1.2.3