diff options
author | Nik Vanderhoof <nikolasrvanderhoof@gmail.com> | 2019-05-18 23:22:13 -0400 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2019-05-19 11:22:13 +0800 |
commit | c4a65baab92890d2d5682329a87469bec605fe5d (patch) | |
tree | 1d8caffb159d847e7cafa211572204164b3eabc2 /contrib/scoverage/test | |
parent | 6c86609a6474e952e3d4972852f032af944631dc (diff) | |
download | mill-c4a65baab92890d2d5682329a87469bec605fe5d.tar.gz mill-c4a65baab92890d2d5682329a87469bec605fe5d.tar.bz2 mill-c4a65baab92890d2d5682329a87469bec605fe5d.zip |
Add support for Scoverage (#571)
* Add initial work for ScoverageModule
* style: Move package scoverage from lib to contrib
Suggested by @lefou
> I think, it would be better to add under `mill.contrib.scoverage`.
Pull request: #571
* Initial changes to non-hardcoded scoverage version
* Using task context api to specify dataDir
Now measurement data will be written to:
PROJECT_ROOT/out/MODULE/scoverage/data/
and the html report will be written to:
PROJECT_ROOT/out/MODULE/scoverage/data/htmlReport/
* Remove wild card imports in scoverage
Also remove scoverage dependency from build.sc
* Move htmlReport into worker
Based on what I've seen in
scalalib, scalajslib, scalanativelib, playlib, and twirllib modules.
Still need to add tests
* Add basic docs + tests for scoverage
I still am working on testing the actual generation of
reports.
* Use cross-module for scoverage worker
Now we can support multiple versions of scoverage
by adding them to the crossmodule list.
Also now running the local publish script succeeds.
* Add scoverage to ci tests
* Add detailed ScoverageModule documentation
* Test scoverage dataDir
* Remove <pre> tags in scaladoc
* Add scoverage dependency in less hacky way
* Modify scoverage tests to check classpaths
* Put docs in alphabetical order
* Test classpaths for scoverage runtime
* Remove abstract def test: ScoverageTests
* Construct classloader differently
* Revert "Construct classloader differently"
This reverts commit fccf9a94cc38fb9e2be58a9ff90b00b65f339db6.
* Revert "Construct classloader differently"
Also fixes unfound error in html report
This reverts commit fccf9a94cc38fb9e2be58a9ff90b00b65f339db6.
* Fix classpath for scoverage worker
Diffstat (limited to 'contrib/scoverage/test')
-rw-r--r-- | contrib/scoverage/test/resources/hello-world/core/src/Greet.scala | 6 | ||||
-rw-r--r-- | contrib/scoverage/test/src/HelloWorldTests.scala | 107 |
2 files changed, 113 insertions, 0 deletions
diff --git a/contrib/scoverage/test/resources/hello-world/core/src/Greet.scala b/contrib/scoverage/test/resources/hello-world/core/src/Greet.scala new file mode 100644 index 00000000..608becc9 --- /dev/null +++ b/contrib/scoverage/test/resources/hello-world/core/src/Greet.scala @@ -0,0 +1,6 @@ +object Greet { + def greet(name: String, prefix: Option[String]): String = prefix match { + case Some(p) => s"Hello, ${p} ${name}!" + case None => s"Hello, ${name}!" + } +} diff --git a/contrib/scoverage/test/src/HelloWorldTests.scala b/contrib/scoverage/test/src/HelloWorldTests.scala new file mode 100644 index 00000000..98a4201c --- /dev/null +++ b/contrib/scoverage/test/src/HelloWorldTests.scala @@ -0,0 +1,107 @@ +package mill.contrib.scoverage + +import mill._ +import mill.api.Result +import mill.scalalib._ +import mill.util.{TestEvaluator, TestUtil} +import utest._ +import utest.framework.TestPath + +object HelloWorldTests extends utest.TestSuite { + val resourcePath = os.pwd / 'contrib / 'scoverage / 'test / 'resources / "hello-world" + trait HelloBase extends TestUtil.BaseModule { + def millSourcePath = TestUtil.getSrcPathBase() / millOuterCtx.enclosing.split('.') + } + + object HelloWorld extends HelloBase { + object core extends ScoverageModule { + def scalaVersion = "2.12.4" + def scoverageVersion = "1.3.1" + + object test extends ScoverageTests { + override def ivyDeps = Agg(ivy"org.scalatest::scalatest:3.0.5") + def testFrameworks = Seq("org.scalatest.tools.Framework") + } + } + } + + def workspaceTest[T](m: TestUtil.BaseModule, resourcePath: os.Path = resourcePath) + (t: TestEvaluator => T) + (implicit tp: TestPath): T = { + val eval = new TestEvaluator(m) + os.remove.all(m.millSourcePath) + os.remove.all(eval.outPath) + os.makeDir.all(m.millSourcePath / os.up) + os.copy(resourcePath, m.millSourcePath) + t(eval) + } + + def tests: utest.Tests = utest.Tests { + "HelloWorld" - { + "core" - { + "scoverageVersion" - workspaceTest(HelloWorld) { eval => + val Right((result, evalCount)) = eval.apply(HelloWorld.core.scoverageVersion) + + assert( + result == "1.3.1", + evalCount > 0 + ) + } + "scoverage" - { + "ivyDeps" - workspaceTest(HelloWorld) { eval => + val Right((result, evalCount)) = + eval.apply(HelloWorld.core.scoverage.ivyDeps) + + assert( + result == Agg(ivy"org.scoverage::scalac-scoverage-runtime:1.3.1"), + evalCount > 0 + ) + } + "scalacPluginIvyDeps" - workspaceTest(HelloWorld) { eval => + val Right((result, evalCount)) = + eval.apply(HelloWorld.core.scoverage.scalacPluginIvyDeps) + + assert( + result == Agg(ivy"org.scoverage::scalac-scoverage-plugin:1.3.1"), + evalCount > 0 + ) + } + "dataDir" - workspaceTest(HelloWorld) { eval => + val Right((result, evalCount)) = eval.apply(HelloWorld.core.scoverage.dataDir) + + assert( + result.toString.endsWith("mill/target/workspace/mill/contrib/scoverage/HelloWorldTests/eval/HelloWorld/core/scoverage/dataDir/core/scoverage/data"), + evalCount > 0 + ) + } + } + "test" - { + "upstreamAssemblyClasspath" - workspaceTest(HelloWorld) { eval => + val Right((result, evalCount)) = eval.apply(HelloWorld.core.scoverage.upstreamAssemblyClasspath) + + assert( + result.map(_.toString).exists(_.contains("scalac-scoverage-runtime")), + evalCount > 0 + ) + } + "compileClasspath" - workspaceTest(HelloWorld) { eval => + val Right((result, evalCount)) = eval.apply(HelloWorld.core.scoverage.compileClasspath) + + assert( + result.map(_.toString).exists(_.contains("scalac-scoverage-runtime")), + evalCount > 0 + ) + } + "runClasspath" - TestUtil.disableInJava9OrAbove(workspaceTest(HelloWorld) { eval => + val Right((result, evalCount)) = eval.apply(HelloWorld.core.scoverage.runClasspath) + + assert( + result.map(_.toString).exists(_.contains("scalac-scoverage-runtime")), + evalCount > 0 + ) + }) + } + } + } + } +} |