Skip to content

Commit de988f1

Browse files
committed
Add new functional tests
1 parent 9c2c096 commit de988f1

File tree

10 files changed

+325
-1
lines changed

10 files changed

+325
-1
lines changed

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
language: groovy
22
script:
3-
- "./gradlew --info --stacktrace test"
3+
- "./gradlew --info --stacktrace check"

build.gradle

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,31 @@ dependencies {
5353
testCompile 'org.hamcrest:hamcrest-library:1.3'
5454
}
5555

56+
sourceSets {
57+
functionalTest {
58+
java {
59+
srcDir file('src/functionalTest/java')
60+
}
61+
resources {
62+
srcDir file('src/functionalTest/resources')
63+
}
64+
compileClasspath += sourceSets.main.output + configurations.testRuntime
65+
runtimeClasspath += output + compileClasspath
66+
}
67+
}
68+
69+
task functionalTest(type: Test) {
70+
testClassesDirs = sourceSets.functionalTest.output.classesDirs
71+
classpath = sourceSets.functionalTest.runtimeClasspath
72+
}
73+
74+
functionalTest.mustRunAfter(test)
75+
check.dependsOn functionalTest
76+
77+
gradlePlugin {
78+
testSourceSets sourceSets.test, sourceSets.functionalTest
79+
}
80+
5681
task groovydocJar(type: Jar, dependsOn: groovydoc) {
5782
classifier = 'groovydoc'
5883
from "$buildDir/docs/groovydoc"
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
package org.scoverage;
2+
3+
import org.gradle.testkit.runner.TaskOutcome;
4+
import org.junit.Test;
5+
6+
public class ScalaSingleModuleTest extends ScoverageFunctionalTest {
7+
8+
public ScalaSingleModuleTest() {
9+
super("scala-single-module");
10+
}
11+
12+
@Test
13+
public void test() {
14+
15+
AssertableBuildResult result = dryRun("clean", "test");
16+
17+
result.assertTaskDoesntExist(ScoveragePlugin.getCOMPILE_NAME());
18+
result.assertTaskDoesntExist(ScoveragePlugin.getTEST_NAME());
19+
result.assertTaskDoesntExist(ScoveragePlugin.getREPORT_NAME());
20+
result.assertTaskDoesntExist(ScoveragePlugin.getAGGREGATE_NAME());
21+
result.assertTaskDoesntExist(ScoveragePlugin.getCHECK_NAME());
22+
}
23+
24+
@Test
25+
public void build() {
26+
27+
AssertableBuildResult result = dryRun("clean", "build");
28+
29+
result.assertTaskDoesntExist(ScoveragePlugin.getCOMPILE_NAME());
30+
result.assertTaskDoesntExist(ScoveragePlugin.getTEST_NAME());
31+
result.assertTaskDoesntExist(ScoveragePlugin.getREPORT_NAME());
32+
result.assertTaskDoesntExist(ScoveragePlugin.getAGGREGATE_NAME());
33+
result.assertTaskDoesntExist(ScoveragePlugin.getCHECK_NAME());
34+
}
35+
36+
@Test
37+
public void testScoverage() {
38+
39+
AssertableBuildResult result = dryRun("clean", ScoveragePlugin.getTEST_NAME());
40+
41+
result.assertTaskExists(ScoveragePlugin.getCOMPILE_NAME());
42+
result.assertTaskExists(ScoveragePlugin.getTEST_NAME());
43+
result.assertTaskDoesntExist(ScoveragePlugin.getREPORT_NAME());
44+
result.assertTaskDoesntExist(ScoveragePlugin.getAGGREGATE_NAME());
45+
result.assertTaskDoesntExist(ScoveragePlugin.getCHECK_NAME());
46+
}
47+
48+
@Test
49+
public void reportScoverage() {
50+
51+
AssertableBuildResult result = dryRun("clean", ScoveragePlugin.getREPORT_NAME());
52+
53+
result.assertTaskExists(ScoveragePlugin.getCOMPILE_NAME());
54+
result.assertTaskExists(ScoveragePlugin.getTEST_NAME());
55+
result.assertTaskExists(ScoveragePlugin.getREPORT_NAME());
56+
result.assertTaskDoesntExist(ScoveragePlugin.getAGGREGATE_NAME());
57+
result.assertTaskDoesntExist(ScoveragePlugin.getCHECK_NAME());
58+
}
59+
60+
@Test
61+
public void aggregateScoverage() {
62+
63+
AssertableBuildResult result = runAndFail("clean", ScoveragePlugin.getAGGREGATE_NAME());
64+
65+
result.assertNoTasks();
66+
}
67+
68+
@Test
69+
public void checkScoverage() {
70+
71+
AssertableBuildResult result = run("clean", ScoveragePlugin.getCHECK_NAME());
72+
73+
result.assertTaskOutcome(ScoveragePlugin.getCOMPILE_NAME(), TaskOutcome.SUCCESS);
74+
result.assertTaskOutcome(ScoveragePlugin.getTEST_NAME(), TaskOutcome.SUCCESS);
75+
result.assertTaskOutcome(ScoveragePlugin.getREPORT_NAME(), TaskOutcome.SUCCESS);
76+
result.assertTaskOutcome(ScoveragePlugin.getCHECK_NAME(), TaskOutcome.SUCCESS);
77+
result.assertTaskSkipped(ScoveragePlugin.getAGGREGATE_NAME());
78+
}
79+
80+
@Test
81+
public void checkScoverageFails() {
82+
83+
AssertableBuildResult result = runAndFail("clean", ScoveragePlugin.getCHECK_NAME(),
84+
ScoveragePlugin.getTEST_NAME(), "--tests", "org.hello.TestNothingSuite");
85+
86+
result.assertTaskOutcome(ScoveragePlugin.getCOMPILE_NAME(), TaskOutcome.SUCCESS);
87+
result.assertTaskOutcome(ScoveragePlugin.getTEST_NAME(), TaskOutcome.SUCCESS);
88+
result.assertTaskOutcome(ScoveragePlugin.getREPORT_NAME(), TaskOutcome.SUCCESS);
89+
result.assertTaskOutcome(ScoveragePlugin.getCHECK_NAME(), TaskOutcome.FAILED);
90+
result.assertTaskSkipped(ScoveragePlugin.getAGGREGATE_NAME());
91+
}
92+
}
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
package org.scoverage;
2+
3+
import org.gradle.testkit.runner.BuildResult;
4+
import org.gradle.testkit.runner.BuildTask;
5+
import org.gradle.testkit.runner.GradleRunner;
6+
import org.gradle.testkit.runner.TaskOutcome;
7+
import org.junit.Assert;
8+
9+
import java.io.File;
10+
import java.util.ArrayList;
11+
import java.util.Arrays;
12+
import java.util.List;
13+
14+
public abstract class ScoverageFunctionalTest {
15+
16+
private final String projectName;
17+
private final GradleRunner runner;
18+
19+
protected ScoverageFunctionalTest(String projectName) {
20+
21+
this.projectName = projectName;
22+
this.runner = GradleRunner.create()
23+
.withProjectDir(projectDir())
24+
.withPluginClasspath()
25+
.forwardOutput();
26+
27+
28+
List<File> filteredPluginClassPath = new ArrayList<File>();
29+
30+
for (File file : runner.getPluginClasspath()) {
31+
if (!file.getName().contains("scalac-scoverage-plugin")) {
32+
filteredPluginClassPath.add(file);
33+
}
34+
}
35+
36+
runner.withPluginClasspath(filteredPluginClassPath);
37+
}
38+
39+
protected File projectDir() {
40+
41+
return new File("src/functionalTest/resources/projects/" + projectName);
42+
}
43+
44+
protected AssertableBuildResult run(String... arguments) {
45+
46+
configureArguments(arguments);
47+
return new AssertableBuildResult(runner.build());
48+
}
49+
50+
protected AssertableBuildResult runAndFail(String... arguments) {
51+
52+
configureArguments(arguments);
53+
return new AssertableBuildResult(runner.buildAndFail());
54+
}
55+
56+
protected AssertableBuildResult dryRun(String... arguments) {
57+
58+
List<String> withDryArgument = new ArrayList<String>(Arrays.asList(arguments));
59+
withDryArgument.add("--dry-run");
60+
return run(withDryArgument.toArray(new String[]{}));
61+
}
62+
63+
private void configureArguments(String... arguments) {
64+
65+
List<String> fullArguments = new ArrayList<String>();
66+
67+
fullArguments.add("-PscalaVersionMajor=2");
68+
fullArguments.add("-PscalaVersionMinor=11");
69+
fullArguments.add("-PscalaVersionBuild=5");
70+
fullArguments.add("-PjunitVersion=5.3.2");
71+
fullArguments.add("-PjunitPlatformVersion=1.3.2");
72+
fullArguments.add("-PscalatestVersion=3.0.5");
73+
fullArguments.add("-PscoverageVersion=1.3.1");
74+
fullArguments.addAll(Arrays.asList(arguments));
75+
76+
runner.withArguments(fullArguments);
77+
}
78+
79+
protected static class AssertableBuildResult {
80+
81+
private final BuildResult result;
82+
83+
private AssertableBuildResult(BuildResult result) {
84+
85+
this.result = result;
86+
}
87+
88+
public BuildResult getResult() {
89+
90+
return result;
91+
}
92+
93+
public void assertNoTasks() {
94+
95+
Assert.assertEquals(0, result.getTasks().size());
96+
}
97+
98+
public void assertTaskExists(String taskName) {
99+
100+
Assert.assertTrue(taskExists(taskName));
101+
}
102+
103+
public void assertTaskDoesntExist(String taskName) {
104+
105+
Assert.assertFalse(taskExists(taskName));
106+
}
107+
108+
public void assertTaskSkipped(String taskName) {
109+
110+
BuildTask task = getTask(taskName);
111+
Assert.assertTrue(task == null || task.getOutcome() == TaskOutcome.SKIPPED);
112+
}
113+
114+
public void assertTaskOutcome(String taskName, TaskOutcome outcome) {
115+
116+
BuildTask task = getTask(taskName);
117+
Assert.assertNotNull(task);
118+
Assert.assertEquals(outcome, task.getOutcome());
119+
120+
}
121+
122+
private BuildTask getTask(String taskName) {
123+
124+
return result.task(fullTaskName(taskName));
125+
}
126+
127+
private String fullTaskName(String taskName) {
128+
129+
return ":" + taskName;
130+
}
131+
132+
private boolean taskExists(String taskName) {
133+
134+
return result.getOutput().contains(fullTaskName(taskName) + " ");
135+
}
136+
}
137+
}
138+
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
plugins {
2+
id 'org.scoverage'
3+
}
4+
5+
repositories {
6+
jcenter()
7+
}
8+
9+
description = 'a single-module Scala project that builds successfully with 100% coverage'
10+
11+
apply plugin: 'java'
12+
apply plugin: 'scala'
13+
14+
dependencies {
15+
compile group: 'org.scala-lang', name: 'scala-library', version: "${scalaVersionMajor}.${scalaVersionMinor}.${scalaVersionBuild}"
16+
17+
testRuntime group: 'org.junit.vintage', name: 'junit-vintage-engine', version: junitVersion
18+
testCompile group: 'org.junit.platform', name: 'junit-platform-runner', version: junitPlatformVersion
19+
20+
testCompile group: 'org.scalatest', name: "scalatest_${scalaVersionMajor}.${scalaVersionMinor}", version: scalatestVersion
21+
22+
def fullScoverageVersion = "${scalaVersionMajor}.${scalaVersionMinor}:${scoverageVersion}"
23+
24+
scoverage "org.scoverage:scalac-scoverage-plugin_${fullScoverageVersion}",
25+
"org.scoverage:scalac-scoverage-runtime_${fullScoverageVersion}"
26+
}
27+
28+
test {
29+
useJUnitPlatform()
30+
}
31+
32+
checkScoverage {
33+
minimumRate = 0.5
34+
}

src/functionalTest/resources/projects/scala-single-module/settings.gradle

Whitespace-only changes.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.hello
2+
3+
class World {
4+
5+
def foo(): String = {
6+
val s = "a" + "b"
7+
s
8+
}
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package org.hello
2+
3+
import org.junit.runner.RunWith
4+
import org.scalatest.FunSuite
5+
import org.scalatest.junit.JUnitRunner
6+
7+
@RunWith(classOf[JUnitRunner])
8+
class TestNothingSuite extends FunSuite {
9+
10+
test("nothing") {
11+
}
12+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.hello
2+
3+
import org.junit.runner.RunWith
4+
import org.scalatest.FunSuite
5+
import org.scalatest.junit.JUnitRunner
6+
7+
@RunWith(classOf[JUnitRunner])
8+
class WorldSuite extends FunSuite {
9+
10+
test("foo") {
11+
new World().foo()
12+
}
13+
}

src/main/groovy/org/scoverage/ScoveragePlugin.groovy

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ class ScoveragePlugin implements Plugin<Project> {
1010
static String REPORT_NAME = 'reportScoverage'
1111
static String CHECK_NAME = 'checkScoverage'
1212
static String COMPILE_NAME = 'compileScoverageScala'
13+
static String AGGREGATE_NAME = 'aggregateScoverage'
1314

1415
@Override
1516
void apply(Project t) {

0 commit comments

Comments
 (0)