summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNils Homer <nh13@users.noreply.github.com>2019-05-28 04:10:51 -0700
committerTobias Roeser <le.petit.fou@web.de>2019-05-28 13:10:51 +0200
commit68c8135341c77ef545327a820590c3e920784fbd (patch)
tree7c6675f476ac625b499917a21f272ce2f31973e4
parentd3e277f813dd0ad96a4ddeac5cdf62546ebcec41 (diff)
downloadmill-68c8135341c77ef545327a820590c3e920784fbd.tar.gz
mill-68c8135341c77ef545327a820590c3e920784fbd.tar.bz2
mill-68c8135341c77ef545327a820590c3e920784fbd.zip
Scoverage can output an XML report (#618)
* use the _.scoverage.xmlReport task
-rw-r--r--contrib/scoverage/api/src/ScoverageReportWorkerApi.scala1
-rw-r--r--contrib/scoverage/src/ScoverageModule.scala10
-rw-r--r--contrib/scoverage/test/src/HelloWorldTests.scala10
-rw-r--r--contrib/scoverage/worker/1.3.1/src/ScoverageReportWorkerImpl.scala27
-rw-r--r--docs/pages/9 - Contrib Modules.md4
5 files changed, 45 insertions, 7 deletions
diff --git a/contrib/scoverage/api/src/ScoverageReportWorkerApi.scala b/contrib/scoverage/api/src/ScoverageReportWorkerApi.scala
index d74e1275..91c0e969 100644
--- a/contrib/scoverage/api/src/ScoverageReportWorkerApi.scala
+++ b/contrib/scoverage/api/src/ScoverageReportWorkerApi.scala
@@ -4,4 +4,5 @@ import mill.eval.PathRef
trait ScoverageReportWorkerApi {
def htmlReport(sources: Seq[PathRef], dataDir: String, selfDir: String): Unit
+ def xmlReport(sources: Seq[PathRef], dataDir: String, selfDir: String): Unit
}
diff --git a/contrib/scoverage/src/ScoverageModule.scala b/contrib/scoverage/src/ScoverageModule.scala
index 8c1735a0..335643b6 100644
--- a/contrib/scoverage/src/ScoverageModule.scala
+++ b/contrib/scoverage/src/ScoverageModule.scala
@@ -45,9 +45,11 @@ import mill.moduledefs.Cacher
*
* - mill foo.test # tests your project and collects metrics on code coverage
* - mill foo.scoverage.htmlReport # uses the metrics collected by a previous test run to generate a coverage report in html format
+ * - mill foo.scoverage.xmlReport # uses the metrics collected by a previous test run to generate a coverage report in xml format
*
* The measurement data is available at `out/foo/scoverage/data/`,
- * And the html report is saved in `out/foo/scoverage/htmlReport/`.
+ * the html report is saved in `out/foo/scoverage/htmlReport/`,
+ * and the xml report is saved in `out/foo/scoverage/xmlReport/`.
*/
trait ScoverageModule extends ScalaModule { outer: ScalaModule =>
def scoverageVersion: T[String]
@@ -100,6 +102,12 @@ trait ScoverageModule extends ScalaModule { outer: ScalaModule =>
.bridge(toolsClasspath().map(_.path))
.htmlReport(sources(), dataDir().toString, selfDir().toString)
}
+ def xmlReport() = T.command {
+ ScoverageReportWorkerApi
+ .scoverageReportWorker()
+ .bridge(toolsClasspath().map(_.path))
+ .xmlReport(sources(), dataDir().toString, selfDir().toString)
+ }
}
trait ScoverageTests extends outer.Tests {
diff --git a/contrib/scoverage/test/src/HelloWorldTests.scala b/contrib/scoverage/test/src/HelloWorldTests.scala
index 6d5c3032..433e413b 100644
--- a/contrib/scoverage/test/src/HelloWorldTests.scala
+++ b/contrib/scoverage/test/src/HelloWorldTests.scala
@@ -99,6 +99,11 @@ object HelloWorldTests extends utest.TestSuite {
val Right((result, evalCount)) = eval.apply(HelloWorld.core.scoverage.htmlReport)
assert(evalCount > 0)
}
+ "xmlReport" - workspaceTest(HelloWorld) { eval =>
+ val Right((_, _)) = eval.apply(HelloWorld.core.test.compile)
+ val Right((result, evalCount)) = eval.apply(HelloWorld.core.scoverage.xmlReport)
+ assert(evalCount > 0)
+ }
}
"test" - {
"upstreamAssemblyClasspath" - workspaceTest(HelloWorld) { eval =>
@@ -135,6 +140,11 @@ object HelloWorldTests extends utest.TestSuite {
val Right((result, evalCount)) = eval.apply(HelloWorldSbt.core.scoverage.htmlReport)
assert(evalCount > 0)
}
+ "xmlReport" - workspaceTest(HelloWorldSbt, sbtResourcePath) { eval =>
+ val Right((_, _)) = eval.apply(HelloWorldSbt.core.test.compile)
+ val Right((result, evalCount)) = eval.apply(HelloWorldSbt.core.scoverage.xmlReport)
+ assert(evalCount > 0)
+ }
}
}
}
diff --git a/contrib/scoverage/worker/1.3.1/src/ScoverageReportWorkerImpl.scala b/contrib/scoverage/worker/1.3.1/src/ScoverageReportWorkerImpl.scala
index b869ea90..63fdd693 100644
--- a/contrib/scoverage/worker/1.3.1/src/ScoverageReportWorkerImpl.scala
+++ b/contrib/scoverage/worker/1.3.1/src/ScoverageReportWorkerImpl.scala
@@ -5,16 +5,33 @@ import mill.eval.PathRef
import _root_.scoverage.Serializer.{ coverageFile, deserialize }
import _root_.scoverage.IOUtils.{ findMeasurementFiles, invoked }
import _root_.scoverage.report.ScoverageHtmlWriter
+import _root_.scoverage.report.ScoverageXmlWriter
+
+private sealed trait ReportType { def folderName: String }
+private case object Html extends ReportType { val folderName: String = "htmlReport" }
+private case object Xml extends ReportType { val folderName: String = "xmlReport" }
class ScoverageReportWorkerImpl extends ScoverageReportWorkerApi {
- def htmlReport(sources: Seq[PathRef], dataDir: String, selfDir: String) = {
+ private def buildReport(sources: Seq[PathRef], dataDir: String, selfDir: String, reportType: ReportType) = {
val coverageFileObj = coverageFile(dataDir)
val coverage = deserialize(coverageFileObj)
coverage(invoked(findMeasurementFiles(dataDir)))
val sourceFolders = sources.map(_.path.toIO)
- val htmlFolder = new java.io.File(s"${selfDir}/htmlReport")
- htmlFolder.mkdir()
- new ScoverageHtmlWriter(sourceFolders, htmlFolder, None)
- .write(coverage)
+ val folder = new java.io.File(s"${selfDir}/${reportType.folderName}")
+ folder.mkdir()
+ reportType match {
+ case Html =>
+ new ScoverageHtmlWriter(sourceFolders, folder, None)
+ .write(coverage)
+ case Xml =>
+ new ScoverageXmlWriter(sourceFolders, folder, false)
+ .write(coverage)
+ }
+ }
+ def htmlReport(sources: Seq[PathRef], dataDir: String, selfDir: String) = {
+ buildReport(sources, dataDir, selfDir, Html)
+ }
+ def xmlReport(sources: Seq[PathRef], dataDir: String, selfDir: String) = {
+ buildReport(sources, dataDir, selfDir, Xml)
}
}
diff --git a/docs/pages/9 - Contrib Modules.md b/docs/pages/9 - Contrib Modules.md
index a4b3b954..61e425d3 100644
--- a/docs/pages/9 - Contrib Modules.md
+++ b/docs/pages/9 - Contrib Modules.md
@@ -622,10 +622,12 @@ mill foo.scoverage.compile # compiles your module with test instrumentation
mill foo.test # tests your project and collects metrics on code coverage
mill foo.scoverage.htmlReport # uses the metrics collected by a previous test run to generate a coverage report in html format
+mill foo.scoverage.xmlReport # uses the metrics collected by a previous test run to generate a coverage report in xml format
```
The measurement data is available at `out/foo/scoverage/data/`,
-and the html report is saved in `out/foo/scoverage/htmlReport/`.
+the html report is saved in `out/foo/scoverage/htmlReport/`,
+and the xml report is saved in `out/foo/scoverage/xmlReport/`.
## TestNG