Skip to content

Commit 6b20c54

Browse files
committed
Rewrote plugin to remove all 0.12.x era idioms
1 parent e0cab9b commit 6b20c54

File tree

1 file changed

+67
-10
lines changed

1 file changed

+67
-10
lines changed

Diff for: src/main/scala/scoverage/ScoverageSbtPlugin.scala

+67-10
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package scoverage
22

33
import sbt.Keys._
44
import sbt._
5+
import scoverage.report.{ScoverageHtmlWriter, ScoverageXmlWriter, CoberturaXmlWriter}
56

67
object ScoverageSbtPlugin extends ScoverageSbtPlugin
78

@@ -51,22 +52,22 @@ class ScoverageSbtPlugin extends sbt.Plugin {
5152
case Some(classpath) =>
5253
Seq(
5354
"-Xplugin:" + classpath.getAbsolutePath,
54-
"-P:scoverage:excludedPackages:" + Option(excludedPackages.value).getOrElse(""),
55+
"-P:scoverage:excludedPackages:" + Option((excludedPackages in Scoverage).value).getOrElse(""),
5556
"-P:scoverage:dataDir:" + target.getAbsolutePath + "/scoverage-data"
5657
)
5758
}
5859
},
5960

6061
scalacOptions in Scoverage ++= (if (highlighting.value) List("-Yrangepos") else Nil),
6162

62-
sources in ScoverageTest <<= (sources in Test),
63-
sourceDirectory in ScoverageTest <<= (sourceDirectory in Test),
64-
resourceDirectory in ScoverageTest <<= (resourceDirectory in Test),
65-
resourceGenerators in ScoverageTest <<= (resourceGenerators in Test),
66-
unmanagedResources in ScoverageTest <<= (unmanagedResources in Test),
67-
javacOptions in ScoverageTest <<= (javacOptions in Test),
68-
javaOptions in ScoverageTest <<= (javaOptions in Test),
69-
fork in ScoverageTest <<= (fork in Test),
63+
sources in ScoverageTest := (sources in Test).value,
64+
sourceDirectory in ScoverageTest := (sourceDirectory in Test).value,
65+
resourceDirectory in ScoverageTest := (resourceDirectory in Test).value,
66+
resourceGenerators in ScoverageTest := (resourceGenerators in Test).value,
67+
unmanagedResources in ScoverageTest := (unmanagedResources in Test).value,
68+
javacOptions in ScoverageTest := (javacOptions in Test).value,
69+
javaOptions in ScoverageTest := (javaOptions in Test).value,
70+
fork in ScoverageTest := (fork in Test).value,
7071

7172
externalDependencyClasspath in Scoverage <<= Classpaths
7273
.concat(externalDependencyClasspath in Scoverage, externalDependencyClasspath in Compile),
@@ -82,7 +83,63 @@ class ScoverageSbtPlugin extends sbt.Plugin {
8283
testOptions in ScoverageTest <<= (testOptions in Test),
8384

8485
// copy the test task into compile so we can do scoverage:test instead of scoverage-test:test
85-
test in Scoverage <<= (test in ScoverageTest)
86+
test in Scoverage <<= (test in ScoverageTest),
87+
88+
test in Scoverage := {
89+
(test in Scoverage).value
90+
91+
streams.value.log.info(s"[scoverage] Waiting for measurement data to sync...")
92+
Thread.sleep(2000) // have noticed some delay in writing, hacky but works
93+
94+
val dataDir = crossTarget.value / "/scoverage-data"
95+
val coberturaDir = crossTarget.value / "coverage-report"
96+
val reportDir = crossTarget.value / "scoverage-report"
97+
coberturaDir.mkdirs()
98+
reportDir.mkdirs()
99+
100+
val coverageFile = IOUtils.coverageFile(dataDir)
101+
val measurementFiles = IOUtils.findMeasurementFiles(dataDir)
102+
103+
streams.value.log.info(s"[scoverage] Reading scoverage instrumentation [$coverageFile]")
104+
streams.value.log.info(s"[scoverage] Reading scoverage measurements...")
105+
106+
val coverage = IOUtils.deserialize(coverageFile)
107+
val measurements = IOUtils.invoked(measurementFiles)
108+
coverage.apply(measurements)
109+
110+
streams.value.log.info(s"[scoverage] Generating Cobertura report [${coberturaDir.getAbsolutePath}/cobertura.xml]")
111+
new CoberturaXmlWriter(baseDirectory in Compile value, coberturaDir).write(coverage)
112+
113+
streams.value.log.info(s"[scoverage] Generating XML report [${reportDir.getAbsolutePath}/scoverage.xml]")
114+
new ScoverageXmlWriter(scalaSource in Compile value, reportDir, false).write(coverage)
115+
new ScoverageXmlWriter(scalaSource in Compile value, reportDir, true).write(coverage)
116+
117+
streams.value.log.info(s"[scoverage] Generating HTML report [${reportDir.getAbsolutePath}/index.html]")
118+
new ScoverageHtmlWriter(scalaSource in Compile value, reportDir).write(coverage)
119+
120+
streams.value.log.info("[scoverage] Reports completed")
121+
122+
val min = minimumCoverage.value
123+
val failOnMin = failOnMinimumCoverage.value
124+
125+
// check for default minimum
126+
if (min > 0) {
127+
def is100(d: Double) = Math.abs(100 - d) <= 0.00001
128+
129+
if (is100(min) && is100(coverage.statementCoveragePercent)) {
130+
streams.value.log.info(s"[scoverage] 100% Coverage !")
131+
} else if (min > coverage.statementCoveragePercent) {
132+
streams.value.log.error(s"[scoverage] Coverage is below minimum [${coverage.statementCoverageFormatted}% < $min%]")
133+
if (failOnMin)
134+
throw new RuntimeException("Coverage minimum was not reached")
135+
} else {
136+
streams.value.log.info(s"[scoverage] Coverage is above minimum [${coverage.statementCoverageFormatted}% > $min%]")
137+
}
138+
}
139+
140+
streams.value.log.info(s"[scoverage] All done. Coverage was [${coverage.statementCoverageFormatted}%]")
141+
()
142+
}
86143
)
87144
}
88145
}

0 commit comments

Comments
 (0)