Skip to content

Commit 1586054

Browse files
committed
Issue #27 Added integration test config. Refactored old post test cleanup into 0.13 style taskkey
1 parent 813ae34 commit 1586054

File tree

2 files changed

+91
-82
lines changed

2 files changed

+91
-82
lines changed

Diff for: project/build.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@
1212
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1313
# See the License for the specific language governing permissions and
1414
# limitations under the License.
15-
sbt.version=0.13.1
15+
sbt.version=0.13.2

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

+90-81
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,23 @@ class ScoverageSbtPlugin extends sbt.Plugin {
1313
val ScoverageVersion = "0.99.5"
1414

1515
object ScoverageKeys {
16-
val excludedPackages = SettingKey[String]("scoverage-excluded-packages")
17-
val minimumCoverage = SettingKey[Double]("scoverage-minimum-coverage")
18-
val failOnMinimumCoverage = SettingKey[Boolean]("scoverage-fail-on-minimum-coverage")
19-
val highlighting = SettingKey[Boolean]("scoverage-highlighting", "enables range positioning for highlighting")
16+
lazy val excludedPackages = SettingKey[String]("scoverage-excluded-packages")
17+
lazy val minimumCoverage = SettingKey[Double]("scoverage-minimum-coverage")
18+
lazy val failOnMinimumCoverage = SettingKey[Boolean]("scoverage-fail-on-minimum-coverage")
19+
lazy val highlighting = SettingKey[Boolean]("scoverage-highlighting", "enables range positioning for highlighting")
20+
lazy val postTestTask = taskKey[Unit]("scoverage-posttestcleanup")
2021
}
2122

2223
import ScoverageKeys._
2324

2425
lazy val ScoverageCompile: Configuration = config("scoverage")
2526
lazy val ScoverageTest: Configuration = config("scoverage-test") extend ScoverageCompile
27+
lazy val ScoverageITest: Configuration = config("scoverage-itest") extend ScoverageTest
2628

2729
lazy val instrumentSettings: Seq[Setting[_]] = {
2830
inConfig(ScoverageCompile)(Defaults.compileSettings) ++
2931
inConfig(ScoverageTest)(Defaults.testSettings) ++
32+
inConfig(ScoverageITest)(Defaults.itSettings) ++
3033
Seq(
3134
ivyConfigurations ++= Seq(ScoverageCompile.hide, ScoverageTest.hide),
3235
libraryDependencies += {
@@ -58,6 +61,61 @@ class ScoverageSbtPlugin extends sbt.Plugin {
5861
}
5962
},
6063

64+
postTestTask := {
65+
val cross = crossTarget.value
66+
val compileSourceDirectory = (scalaSource in Compile).value
67+
val baseDir = (baseDirectory in Compile).value
68+
val log = sbt.Keys.streams.value.log
69+
70+
log.info(s"[scoverage] Waiting for measurement data to sync...")
71+
Thread.sleep(3000) // have noticed some delay in writing, hacky but works
72+
73+
val dataDir = cross / "/scoverage-data"
74+
val coberturaDir = cross / "coverage-report"
75+
val reportDir = cross / "scoverage-report"
76+
coberturaDir.mkdirs()
77+
reportDir.mkdirs()
78+
79+
val coverageFile = IOUtils.coverageFile(dataDir)
80+
val measurementFiles = IOUtils.findMeasurementFiles(dataDir)
81+
82+
log.info(s"[scoverage] Reading scoverage instrumentation [$coverageFile]")
83+
log.info(s"[scoverage] Reading scoverage measurements...")
84+
85+
val coverage = IOUtils.deserialize(coverageFile)
86+
val measurements = IOUtils.invoked(measurementFiles)
87+
coverage.apply(measurements)
88+
89+
log.info(s"[scoverage] Generating Cobertura report [${coberturaDir.getAbsolutePath}/cobertura.xml]")
90+
new CoberturaXmlWriter(baseDir, coberturaDir).write(coverage)
91+
92+
log.info(s"[scoverage] Generating XML report [${reportDir.getAbsolutePath}/scoverage.xml]")
93+
new ScoverageXmlWriter(compileSourceDirectory, reportDir, false).write(coverage)
94+
new ScoverageXmlWriter(compileSourceDirectory, reportDir, true).write(coverage)
95+
96+
log.info(s"[scoverage] Generating HTML report [${reportDir.getAbsolutePath}/index.html]")
97+
new ScoverageHtmlWriter(compileSourceDirectory, reportDir).write(coverage)
98+
99+
log.info("[scoverage] Reports completed")
100+
val min = minimumCoverage.value
101+
val failOnMin = failOnMinimumCoverage.value
102+
103+
// check for default minimum
104+
if (min > 0) {
105+
if (min > coverage.statementCoveragePercent) {
106+
log
107+
.error(s"[scoverage] Coverage is below minimum [${coverage.statementCoverageFormatted}% < $min%]")
108+
if (failOnMin)
109+
throw new RuntimeException("Coverage minimum was not reached")
110+
} else {
111+
log
112+
.info(s"[scoverage] Coverage is above minimum [${coverage.statementCoverageFormatted}% > $min%]")
113+
}
114+
}
115+
116+
log.info(s"[scoverage] All done. Coverage was [${coverage.statementCoverageFormatted}%]")
117+
},
118+
61119
scalacOptions in ScoverageCompile ++= (if (highlighting.value) List("-Yrangepos") else Nil),
62120

63121
sources in ScoverageTest <<= (sources in Test),
@@ -68,96 +126,47 @@ class ScoverageSbtPlugin extends sbt.Plugin {
68126
javacOptions in ScoverageTest <<= (javacOptions in Test),
69127
javaOptions in ScoverageTest <<= (javaOptions in Test),
70128
fork in ScoverageTest <<= (fork in Test),
129+
testOptions in ScoverageTest <<= (testOptions in Test),
130+
sources in ScoverageITest <<= (sources in Test),
131+
132+
sourceDirectory in ScoverageITest <<= (sourceDirectory in Test),
133+
resourceDirectory in ScoverageITest <<= (resourceDirectory in Test),
134+
resourceGenerators in ScoverageITest <<= (resourceGenerators in Test),
135+
unmanagedResources in ScoverageITest <<= (unmanagedResources in Test),
136+
javacOptions in ScoverageITest <<= (javacOptions in Test),
137+
javaOptions in ScoverageITest <<= (javaOptions in Test),
138+
fork in ScoverageITest <<= (fork in Test),
139+
testOptions in ScoverageITest <<= (testOptions in Test),
71140

72141
externalDependencyClasspath in ScoverageCompile <<= Classpaths
73142
.concat(externalDependencyClasspath in ScoverageCompile, externalDependencyClasspath in Compile),
74143
externalDependencyClasspath in ScoverageTest <<= Classpaths
75144
.concat(externalDependencyClasspath in ScoverageTest, externalDependencyClasspath in Test),
145+
externalDependencyClasspath in ScoverageITest <<= Classpaths
146+
.concat(externalDependencyClasspath in ScoverageTest, externalDependencyClasspath in Test),
76147

77148
internalDependencyClasspath in ScoverageCompile <<= (internalDependencyClasspath in Compile),
78149
internalDependencyClasspath in ScoverageTest <<= (internalDependencyClasspath in Test, internalDependencyClasspath in ScoverageTest, classDirectory in Compile) map {
79150
(testDeps, scoverageDeps, oldClassDir) =>
80151
scoverageDeps ++ testDeps.filter(_.data != oldClassDir)
81152
},
153+
internalDependencyClasspath in ScoverageITest <<= (internalDependencyClasspath in Test, internalDependencyClasspath in ScoverageITest, classDirectory in Compile) map {
154+
(testDeps, scoverageDeps, oldClassDir) =>
155+
scoverageDeps ++ testDeps.filter(_.data != oldClassDir)
156+
},
82157

83-
testOptions in ScoverageTest <<= (testOptions in Test),
84-
testOptions in ScoverageTest <+= testsCleanup,
158+
test in ScoverageTest := {
159+
(test in Test).value
160+
postTestTask.value
161+
},
162+
test in ScoverageITest := {
163+
(test in Test).value
164+
postTestTask.value
165+
},
85166

86-
// copy the test task into compile so we can do scoverage:test instead of scoverage-test:test
87-
test in ScoverageCompile <<= (test in ScoverageTest)
167+
// copy the test task into compile so we can do scoverage:test instead of scoverage-test:test etc
168+
test in ScoverageCompile <<= (test in ScoverageTest),
169+
test in ScoverageCompile <<= (test in ScoverageITest)
88170
)
89171
}
90-
91-
/** Generate hook that is invoked after the tests have executed. */
92-
def testsCleanup = {
93-
(crossTarget in ScoverageTest,
94-
baseDirectory in Compile,
95-
scalaSource in Compile,
96-
definedTests in ScoverageTest,
97-
minimumCoverage in ScoverageTest,
98-
failOnMinimumCoverage in ScoverageTest,
99-
streams in Global) map {
100-
(crossTarget,
101-
baseDirectory,
102-
compileSourceDirectory,
103-
definedTests,
104-
min,
105-
failOnMin,
106-
s) =>
107-
if (definedTests.isEmpty) {
108-
Tests.Cleanup {
109-
() => {}
110-
}
111-
} else {
112-
Tests.Cleanup {
113-
() =>
114-
115-
s.log.info(s"[scoverage] Waiting for measurement data to sync...")
116-
Thread.sleep(2000) // have noticed some delay in writing, hacky but works
117-
118-
val dataDir = crossTarget / "/scoverage-data"
119-
val coberturaDir = crossTarget / "coverage-report"
120-
val reportDir = crossTarget / "scoverage-report"
121-
coberturaDir.mkdirs()
122-
reportDir.mkdirs()
123-
124-
val coverageFile = IOUtils.coverageFile(dataDir)
125-
val measurementFiles = IOUtils.findMeasurementFiles(dataDir)
126-
127-
s.log.info(s"[scoverage] Reading scoverage instrumentation [$coverageFile]")
128-
s.log.info(s"[scoverage] Reading scoverage measurements...")
129-
130-
val coverage = IOUtils.deserialize(coverageFile)
131-
val measurements = IOUtils.invoked(measurementFiles)
132-
coverage.apply(measurements)
133-
134-
s.log.info(s"[scoverage] Generating Cobertura report [${coberturaDir.getAbsolutePath}/cobertura.xml]")
135-
new CoberturaXmlWriter(baseDirectory, coberturaDir).write(coverage)
136-
137-
s.log.info(s"[scoverage] Generating XML report [${reportDir.getAbsolutePath}/scoverage.xml]")
138-
new ScoverageXmlWriter(compileSourceDirectory, reportDir, false).write(coverage)
139-
new ScoverageXmlWriter(compileSourceDirectory, reportDir, true).write(coverage)
140-
141-
s.log.info(s"[scoverage] Generating HTML report [${reportDir.getAbsolutePath}/index.html]")
142-
new ScoverageHtmlWriter(compileSourceDirectory, reportDir).write(coverage)
143-
144-
s.log.info("[scoverage] Reports completed")
145-
146-
// check for default minimum
147-
if (min > 0) {
148-
if (min > coverage.statementCoveragePercent) {
149-
s.log.error(s"[scoverage] Coverage is below minimum [${coverage.statementCoverageFormatted}% < $min%]")
150-
if (failOnMin)
151-
throw new RuntimeException("Coverage minimum was not reached")
152-
} else {
153-
s.log.info(s"[scoverage] Coverage is above minimum [${coverage.statementCoverageFormatted}% > $min%]")
154-
}
155-
}
156-
157-
s.log.info(s"[scoverage] All done. Coverage was [${coverage.statementCoverageFormatted}%]")
158-
()
159-
}
160-
}
161-
}
162-
}
163172
}

0 commit comments

Comments
 (0)