Skip to content

Commit 78dc56f

Browse files
committed
Make the plugin configure the scalac-plugin classpath and the aggregation task automatically
1 parent de988f1 commit 78dc56f

File tree

18 files changed

+376
-342
lines changed

18 files changed

+376
-342
lines changed

README.md

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,12 @@ This creates an additional task `testScoverage` which will run tests against ins
1212

1313
A further task `reportScoverage` produces XML and HTML reports for analysing test code coverage.
1414

15-
You need to configure the version of Scoverage that will be used. This plugin should be compatible with all 1+ versions.
15+
You can configure the version of Scoverage that will be used. This plugin should be compatible with all 1+ versions.
1616

1717
```groovy
18-
dependencies {
19-
scoverage 'org.scoverage:scalac-scoverage-plugin_2.11:1.1.0', 'org.scoverage:scalac-scoverage-runtime_2.11:1.1.0'
18+
scoverage {
19+
scoverageVersion = "1.3.1"
20+
scoverageScalaVersion = "2.12" // will be overridden by the 'scala-library' version (if configured)
2021
}
2122
```
2223

@@ -49,14 +50,7 @@ Aggregating Reports
4950

5051
There is now experimental support for aggregating coverage statistics across sub-projects.
5152

52-
The project hosting the aggregation task **must** be configured as the sub-projects are;
53-
i.e. with the scoverage plugin applied and the scoverage dependencies configured.
54-
55-
You also have to declare this task:
56-
57-
```groovy
58-
task aggregateScoverage(type: org.scoverage.ScoverageAggregate)
59-
```
53+
When applied on a project with sub-projects, the plugin will create the aggregation task `aggregateScoverage`.
6054

6155
This will produce a report into `build/scoverage-aggregate` directory.
6256

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ sourceCompatibility = '1.6'
4848
targetCompatibility = '1.6'
4949

5050
dependencies {
51-
compile "org.scoverage:scalac-scoverage-plugin_2.12:1.3.1"
51+
compileOnly "org.scoverage:scalac-scoverage-plugin_2.12:1.3.1"
5252
testCompile 'junit:junit:4.12'
5353
testCompile 'org.hamcrest:hamcrest-library:1.3'
5454
}

src/functionalTest/java/org.scoverage/ScalaSingleModuleTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public void checkScoverage() {
7474
result.assertTaskOutcome(ScoveragePlugin.getTEST_NAME(), TaskOutcome.SUCCESS);
7575
result.assertTaskOutcome(ScoveragePlugin.getREPORT_NAME(), TaskOutcome.SUCCESS);
7676
result.assertTaskOutcome(ScoveragePlugin.getCHECK_NAME(), TaskOutcome.SUCCESS);
77-
result.assertTaskSkipped(ScoveragePlugin.getAGGREGATE_NAME());
77+
result.assertTaskDoesntExist(ScoveragePlugin.getAGGREGATE_NAME());
7878
}
7979

8080
@Test
@@ -87,6 +87,6 @@ public void checkScoverageFails() {
8787
result.assertTaskOutcome(ScoveragePlugin.getTEST_NAME(), TaskOutcome.SUCCESS);
8888
result.assertTaskOutcome(ScoveragePlugin.getREPORT_NAME(), TaskOutcome.SUCCESS);
8989
result.assertTaskOutcome(ScoveragePlugin.getCHECK_NAME(), TaskOutcome.FAILED);
90-
result.assertTaskSkipped(ScoveragePlugin.getAGGREGATE_NAME());
90+
result.assertTaskDoesntExist(ScoveragePlugin.getAGGREGATE_NAME());
9191
}
9292
}

src/functionalTest/java/org.scoverage/ScoverageFunctionalTest.java

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,6 @@ protected ScoverageFunctionalTest(String projectName) {
2323
.withProjectDir(projectDir())
2424
.withPluginClasspath()
2525
.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);
3726
}
3827

3928
protected File projectDir() {
@@ -65,12 +54,11 @@ private void configureArguments(String... arguments) {
6554
List<String> fullArguments = new ArrayList<String>();
6655

6756
fullArguments.add("-PscalaVersionMajor=2");
68-
fullArguments.add("-PscalaVersionMinor=11");
69-
fullArguments.add("-PscalaVersionBuild=5");
57+
fullArguments.add("-PscalaVersionMinor=12");
58+
fullArguments.add("-PscalaVersionBuild=8");
7059
fullArguments.add("-PjunitVersion=5.3.2");
7160
fullArguments.add("-PjunitPlatformVersion=1.3.2");
7261
fullArguments.add("-PscalatestVersion=3.0.5");
73-
fullArguments.add("-PscoverageVersion=1.3.1");
7462
fullArguments.addAll(Arrays.asList(arguments));
7563

7664
runner.withArguments(fullArguments);

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

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,6 @@ dependencies {
1818
testCompile group: 'org.junit.platform', name: 'junit-platform-runner', version: junitPlatformVersion
1919

2020
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}"
2621
}
2722

2823
test {

src/main/groovy/org/scoverage/AggregateReportApp.java

Lines changed: 0 additions & 33 deletions
This file was deleted.

src/main/groovy/org/scoverage/OverallCheckTask.groovy

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package org.scoverage
22

33
import org.gradle.api.DefaultTask
44
import org.gradle.api.GradleException
5+
import org.gradle.api.provider.Property
56
import org.gradle.api.tasks.CacheableTask
67
import org.gradle.api.tasks.TaskAction
78
import org.gradle.internal.impldep.com.google.common.annotations.VisibleForTesting
@@ -46,19 +47,16 @@ class OverallCheckTask extends DefaultTask {
4647
CoverageType coverageType = CoverageType.Statement
4748
double minimumRate = 0.75
4849

49-
/** Set if want to change default from 'reportDir' in scoverage extension. */
50-
File reportDir
50+
final Property<File> reportDir = project.objects.property(File)
5151

5252
/** Overwrite to test for a specific locale. */
5353
Locale locale
5454

5555
@TaskAction
5656
void requireLineCoverage() {
57-
def extension = ScoveragePlugin.extensionIn(project)
58-
5957
NumberFormat nf = NumberFormat.getInstance(locale == null ? Locale.getDefault() : locale)
6058

61-
Exception failure = checkLineCoverage(nf, reportDir == null ? extension.reportDir : reportDir, coverageType, minimumRate)
59+
Exception failure = checkLineCoverage(nf, reportDir.get(), coverageType, minimumRate)
6260

6361
if (failure) throw failure
6462
}
Lines changed: 33 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,43 @@
11
package org.scoverage
22

3-
import org.gradle.api.tasks.JavaExec
3+
import org.gradle.api.DefaultTask
4+
import org.gradle.api.provider.Property
5+
import org.gradle.api.tasks.TaskAction
6+
import scoverage.report.CoverageAggregator
47

5-
class ScoverageAggregate extends JavaExec {
8+
class ScoverageAggregate extends DefaultTask {
69

10+
ScoverageRunner runner
11+
12+
// TODO - consider separate options for `report` and `aggregate` tasks
13+
final Property<Boolean> coverageOutputCobertura = project.objects.property(Boolean)
14+
final Property<Boolean> coverageOutputXML = project.objects.property(Boolean)
15+
final Property<Boolean> coverageOutputHTML = project.objects.property(Boolean)
16+
final Property<Boolean> coverageDebug = project.objects.property(Boolean)
17+
18+
// TODO get these from extension
719
boolean clean = false
820
File reportDir
921

10-
@Override
11-
void exec() {
12-
def extension = ScoveragePlugin.extensionIn(project)
13-
setClasspath(ScoveragePlugin.extensionIn(project).pluginClasspath)
14-
setMain('org.scoverage.AggregateReportApp')
15-
def reportPath = reportDirOrDefault()
16-
setArgs([
17-
project.projectDir,
18-
reportPath.absolutePath,
19-
clean,
20-
// TODO - consider separate options for `report` and `aggregate` tasks
21-
extension.coverageOutputCobertura,
22-
extension.coverageOutputXML,
23-
extension.coverageOutputHTML,
24-
extension.coverageDebug
25-
])
26-
super.exec()
27-
}
22+
@TaskAction
23+
def aggregate() {
24+
runner.run {
25+
def rootDir = project.projectDir
26+
def reportPath = reportDir ? reportDir : new File(project.buildDir, 'scoverage-aggregate')
27+
28+
def coverage = CoverageAggregator.aggregate(rootDir, clean)
2829

29-
def reportDirOrDefault() {
30-
return reportDir ? reportDir : new File(project.buildDir, 'scoverage-aggregate')
30+
if (coverage.nonEmpty()) {
31+
ScoverageWriter.write(
32+
rootDir,
33+
reportPath,
34+
coverage.get(),
35+
coverageOutputCobertura.get(),
36+
coverageOutputXML.get(),
37+
coverageOutputHTML.get(),
38+
coverageDebug.get()
39+
)
40+
}
41+
}
3142
}
3243
}

0 commit comments

Comments
 (0)