Skip to content

Commit ca7abc8

Browse files
maiflaiKwestor
authored andcommitted
Fix tests in separate projects
Provide an instrumented jar for dependent projects. Use closeTo to verify coverage. Let 'a-test' address the published scoverage artifacts directly. checkScoverage should also only be run on the a-test project.
1 parent 03efcb0 commit ca7abc8

File tree

4 files changed

+21
-7
lines changed

4 files changed

+21
-7
lines changed

build.gradle

+1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ dependencies {
4343
compile gradleApi()
4444
compile localGroovy()
4545
scoverage 'org.scoverage:scalac-scoverage-plugin_2.11:1.0.2'
46+
testCompile 'org.hamcrest:hamcrest-library:1.3'
4647
}
4748

4849
task groovydocJar(type: Jar, dependsOn: groovydoc) {

src/main/groovy/org/scoverage/ScoverageExtension.groovy

+10
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import org.gradle.api.plugins.JavaPlugin
99
import org.gradle.api.plugins.scala.ScalaPlugin
1010
import org.gradle.api.tasks.JavaExec
1111
import org.gradle.api.tasks.SourceSet
12+
import org.gradle.api.tasks.bundling.Jar
1213
import org.gradle.api.tasks.testing.Test
1314
import org.gradle.util.GFileUtils
1415

@@ -88,6 +89,15 @@ class ScoverageExtension {
8889
runtimeClasspath = it.output + mainSourceSet.output + project.configurations.scoverage + project.configurations.testRuntime
8990
}
9091

92+
def scoverageJar = project.tasks.create('jarScoverage', Jar.class) {
93+
dependsOn('scoverageClasses')
94+
classifier = ScoveragePlugin.CONFIGURATION_NAME
95+
from mainSourceSet.output
96+
}
97+
project.artifacts {
98+
scoverage project.tasks.jarScoverage
99+
}
100+
91101
project.tasks.create(ScoveragePlugin.TEST_NAME, Test.class) {
92102
conventionMapping.map("testClassesDir", new Callable<Object>() {
93103
public Object call() throws Exception {

src/test/groovy/org/scoverage/SeparateTestsAcceptanceTest.groovy

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package org.scoverage
22

3-
import org.hamcrest.core.Is
4-
import org.junit.Assert
3+
import static org.hamcrest.number.IsCloseTo.closeTo
54
import org.junit.Test
65

6+
import static org.junit.Assert.assertThat
7+
78
class SeparateTestsAcceptanceTest extends AcceptanceTestUtils {
89

910
private void testSeparate(boolean useAnt) throws Exception {
@@ -25,8 +26,8 @@ class SeparateTestsAcceptanceTest extends AcceptanceTestUtils {
2526
// ... and both statement and branch coverage is 100%
2627
def branchCoverage = coverage(reportDir(subprojectDir), CoverageType.Branch)
2728
def statementCoverage = coverage(reportDir(subprojectDir), CoverageType.Statement)
28-
Assert.assertThat('Branch coverage should be 100%, was ' + branchCoverage, branchCoverage, Is.is(100.0))
29-
Assert.assertThat('Statement coverage should be 100%, was ' + statementCoverage, statementCoverage, Is.is(100.0))
29+
assertThat('Branch coverage should be 100%, was ' + branchCoverage, branchCoverage, closeTo(100.0, 1.0))
30+
assertThat('Statement coverage should be 100%, was ' + statementCoverage, statementCoverage, closeTo(100.0, 1.0))
3031
}
3132

3233
@Test

src/test/separate-tests/build.gradle

+5-3
Original file line numberDiff line numberDiff line change
@@ -35,19 +35,21 @@ subprojects {
3535
onlyIf { project.name.endsWith('-tests') }
3636
}
3737

38+
checkScoverage {
39+
onlyIf { project.name.endsWith('-tests') }
40+
}
41+
3842
}
3943

4044
configure(subprojects.findAll { it.name.endsWith('-tests') }) {
4145
def mainProject = project(":${project.name.minus('-tests')}")
4246
dependencies {
4347
testCompile mainProject
48+
scoverage mainProject.configurations.scoverage.artifacts.files
4449
}
4550
scoverage {
4651
sources = mainProject.extensions.scoverage.sources
4752
dataDir = mainProject.extensions.scoverage.dataDir
4853
reportDir = mainProject.extensions.scoverage.reportDir
4954
}
50-
testScoverage {
51-
classpath = mainProject.sourceSets.scoverage.runtimeClasspath + sourceSets.test.runtimeClasspath
52-
}
5355
}

0 commit comments

Comments
 (0)