diff --git a/build.gradle b/build.gradle index 1c7fb4d..2346e1b 100644 --- a/build.gradle +++ b/build.gradle @@ -45,7 +45,7 @@ sourceCompatibility = '1.8' targetCompatibility = '1.8' dependencies { - compileOnly "org.scoverage:scalac-scoverage-plugin_2.12:1.3.1" + compileOnly "org.scoverage:scalac-scoverage-plugin_2.12:1.4.0" compile group: 'commons-io', name: 'commons-io', version: '2.6' testCompile 'junit:junit:4.12' testCompile 'org.hamcrest:hamcrest-library:1.3' diff --git a/src/functionalTest/java/org.scoverage/ScalaMultiModuleCrossVersionTest.java b/src/functionalTest/java/org.scoverage/ScalaMultiModuleCrossVersionTest.java index 224ef34..401149a 100644 --- a/src/functionalTest/java/org.scoverage/ScalaMultiModuleCrossVersionTest.java +++ b/src/functionalTest/java/org.scoverage/ScalaMultiModuleCrossVersionTest.java @@ -33,6 +33,7 @@ private void assertAllReportFilesExist() { assert211ReportFilesExist(); assert212ReportFilesExist(); + assert213ReportFilesExist(); assertAggregationFilesExist(); } @@ -56,4 +57,11 @@ private void assert212ReportFilesExist() { Assert.assertTrue(resolve(reportDir, "index.html").exists()); Assert.assertTrue(resolve(reportDir, "src/main/scala/org/hello/World212.scala.html").exists()); } + + private void assert213ReportFilesExist() { + + File reportDir = reportDir(projectDir().toPath().resolve("2_13").toFile()); + Assert.assertTrue(resolve(reportDir, "index.html").exists()); + Assert.assertTrue(resolve(reportDir, "src/main/scala/org/hello/World213.scala.html").exists()); + } } diff --git a/src/functionalTest/java/org.scoverage/ScalaMultiModuleWithMultipleTestTasksTest.java b/src/functionalTest/java/org.scoverage/ScalaMultiModuleWithMultipleTestTasksTest.java index 1905a1c..66863c4 100644 --- a/src/functionalTest/java/org.scoverage/ScalaMultiModuleWithMultipleTestTasksTest.java +++ b/src/functionalTest/java/org.scoverage/ScalaMultiModuleWithMultipleTestTasksTest.java @@ -225,7 +225,7 @@ public void checkAndAggregateScoverageWithoutCoverageInRoot() throws Exception { result.assertTaskSucceeded(ScoveragePlugin.getAGGREGATE_NAME()); assertAllReportFilesExist(); - assertCoverage(93.33); + assertCoverage(88.24); } @Test diff --git a/src/functionalTest/java/org.scoverage/ScoverageFunctionalTest.java b/src/functionalTest/java/org.scoverage/ScoverageFunctionalTest.java index c60f8d2..0341cc2 100644 --- a/src/functionalTest/java/org.scoverage/ScoverageFunctionalTest.java +++ b/src/functionalTest/java/org.scoverage/ScoverageFunctionalTest.java @@ -126,7 +126,7 @@ private void configureArguments(String... arguments) { fullArguments.add("-PscalaVersionBuild=8"); fullArguments.add("-PjunitVersion=5.3.2"); fullArguments.add("-PjunitPlatformVersion=1.3.2"); - fullArguments.add("-PscalatestVersion=3.0.5"); + fullArguments.add("-PscalatestVersion=3.0.8"); fullArguments.addAll(Arrays.asList(arguments)); runner.withArguments(fullArguments); diff --git a/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_13/build.gradle b/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_13/build.gradle new file mode 100644 index 0000000..8be20a7 --- /dev/null +++ b/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_13/build.gradle @@ -0,0 +1,4 @@ +dependencies { + compile group: 'org.scala-lang', name: 'scala-library', version: "2.13.1" + testCompile group: 'org.scalatest', name: "scalatest_2.13", version: scalatestVersion +} diff --git a/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_13/src/main/scala/org/hello/World213.scala b/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_13/src/main/scala/org/hello/World213.scala new file mode 100644 index 0000000..b5fc8fb --- /dev/null +++ b/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_13/src/main/scala/org/hello/World213.scala @@ -0,0 +1,9 @@ +package org.hello + +class World213 { + + def foo(): String = { + val s = "2" + "12" + s + } +} \ No newline at end of file diff --git a/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_13/src/test/scala/org/hello/World213Suite.scala b/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_13/src/test/scala/org/hello/World213Suite.scala new file mode 100644 index 0000000..ad43f08 --- /dev/null +++ b/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_13/src/test/scala/org/hello/World213Suite.scala @@ -0,0 +1,13 @@ +package org.hello + +import org.junit.runner.RunWith +import org.scalatest.FunSuite +import org.scalatest.junit.JUnitRunner + +@RunWith(classOf[JUnitRunner]) +class World212Suite extends FunSuite { + + test("foo") { + new World213().foo() + } +} \ No newline at end of file diff --git a/src/functionalTest/resources/projects/scala-multi-module-cross-version/build.gradle b/src/functionalTest/resources/projects/scala-multi-module-cross-version/build.gradle index 4a024a0..279410b 100644 --- a/src/functionalTest/resources/projects/scala-multi-module-cross-version/build.gradle +++ b/src/functionalTest/resources/projects/scala-multi-module-cross-version/build.gradle @@ -33,4 +33,6 @@ scoverage { minimumRate = 0.5 } -project(":2_11").tasks.reportScoverage.mustRunAfter(project(":2_12").tasks.reportScoverage) \ No newline at end of file +project(":2_11").tasks.reportScoverage + .mustRunAfter(project(":2_12").tasks.reportScoverage) + .mustRunAfter(project(":2_13").tasks.reportScoverage) \ No newline at end of file diff --git a/src/functionalTest/resources/projects/scala-multi-module-cross-version/settings.gradle b/src/functionalTest/resources/projects/scala-multi-module-cross-version/settings.gradle index 6d138e6..174d3b1 100644 --- a/src/functionalTest/resources/projects/scala-multi-module-cross-version/settings.gradle +++ b/src/functionalTest/resources/projects/scala-multi-module-cross-version/settings.gradle @@ -1 +1 @@ -include '2_11', '2_12' \ No newline at end of file +include '2_11', '2_12', '2_13' \ No newline at end of file diff --git a/src/main/groovy/org/scoverage/ScoverageAggregate.groovy b/src/main/groovy/org/scoverage/ScoverageAggregate.groovy index 08d5eac..8a7fa3b 100644 --- a/src/main/groovy/org/scoverage/ScoverageAggregate.groovy +++ b/src/main/groovy/org/scoverage/ScoverageAggregate.groovy @@ -8,7 +8,6 @@ import org.gradle.api.tasks.OutputDirectory import org.gradle.api.tasks.TaskAction // don't use scala.collection.JavaConverters as it breaks backward compatibility with scala 2.11 import scala.collection.JavaConversions -import scoverage.IOUtils import scoverage.report.CoverageAggregator class ScoverageAggregate extends DefaultTask { @@ -38,29 +37,20 @@ class ScoverageAggregate extends DefaultTask { final Property coverageDebug = project.objects.property(Boolean) ScoverageAggregate() { - dirsToAggregateFrom.set([]) + dirsToAggregateFrom.set([project.extensions.scoverage.dataDir.get()]) } @TaskAction def aggregate() { runner.run { - def rootDir = project.projectDir - - def coverage - if (dirsToAggregateFrom.get().isEmpty()) { - coverage = CoverageAggregator.aggregate(rootDir, deleteReportsOnAggregation.get()) - } else { - def reportFiles = dirsToAggregateFrom.get().collectMany { - JavaConversions.seqAsJavaList(IOUtils.reportFileSearch(it, IOUtils.isReportFile())) - } - coverage = CoverageAggregator.aggregate(JavaConversions.asScalaBuffer(reportFiles), deleteReportsOnAggregation.get()) - } - reportDir.get().deleteDir() + reportDir.get().mkdirs() + + def coverage = CoverageAggregator.aggregate(dirsToAggregateFrom.get() as File[]) if (coverage.nonEmpty()) { new ScoverageWriter(project.logger).write( - rootDir, + project.projectDir, reportDir.get(), coverage.get(), sourceEncoding.get(), diff --git a/src/main/groovy/org/scoverage/ScoverageExtension.groovy b/src/main/groovy/org/scoverage/ScoverageExtension.groovy index 8ee680b..f7b87ec 100644 --- a/src/main/groovy/org/scoverage/ScoverageExtension.groovy +++ b/src/main/groovy/org/scoverage/ScoverageExtension.groovy @@ -49,7 +49,7 @@ class ScoverageExtension { project.plugins.apply(ScalaPlugin.class) scoverageVersion = project.objects.property(String) - scoverageVersion.set('1.3.1') + scoverageVersion.set('1.4.1') scoverageScalaVersion = project.objects.property(String) scoverageScalaVersion.set('2.12') diff --git a/src/main/groovy/org/scoverage/ScoveragePlugin.groovy b/src/main/groovy/org/scoverage/ScoveragePlugin.groovy index 4666a6c..67a3f0c 100644 --- a/src/main/groovy/org/scoverage/ScoveragePlugin.groovy +++ b/src/main/groovy/org/scoverage/ScoveragePlugin.groovy @@ -138,16 +138,16 @@ class ScoveragePlugin implements Plugin { } globalReportTask.configure { - def reportDirs = reportTasks.findResults { it.reportDir.get() } + def dataDirs = reportTasks.findResults { it.dataDir.get() } dependsOn reportTasks - onlyIf { reportDirs.any { it.list() } } + onlyIf { dataDirs.any { it.list() } } group = 'verification' runner = scoverageRunner reportDir = extension.reportDir + dirsToAggregateFrom = dataDirs sourceEncoding.set(detectedSourceEncoding) - dirsToAggregateFrom = reportDirs deleteReportsOnAggregation = false coverageOutputCobertura = extension.coverageOutputCobertura coverageOutputXML = extension.coverageOutputXML @@ -175,11 +175,14 @@ class ScoveragePlugin implements Plugin { } def aggregationTask = project.tasks.create(AGGREGATE_NAME, ScoverageAggregate) { + def dataDirs = allReportTasks.findResults { it.dirsToAggregateFrom.get() }.flatten() + dependsOn(allReportTasks) group = 'verification' runner = scoverageRunner reportDir = extension.reportDir sourceEncoding.set(detectedSourceEncoding) + dirsToAggregateFrom = dataDirs deleteReportsOnAggregation = extension.deleteReportsOnAggregation coverageOutputCobertura = extension.coverageOutputCobertura coverageOutputXML = extension.coverageOutputXML diff --git a/src/main/groovy/org/scoverage/ScoverageReport.groovy b/src/main/groovy/org/scoverage/ScoverageReport.groovy index 784213d..55cd701 100644 --- a/src/main/groovy/org/scoverage/ScoverageReport.groovy +++ b/src/main/groovy/org/scoverage/ScoverageReport.groovy @@ -6,13 +6,7 @@ import org.gradle.api.tasks.CacheableTask import org.gradle.api.tasks.Input import org.gradle.api.tasks.OutputDirectory import org.gradle.api.tasks.TaskAction -// don't use scala.collection.JavaConverters as it breaks backward compatibility with scala 2.11 -import scala.collection.JavaConversions -import scala.collection.Seq -import scala.collection.Set -import scoverage.Coverage -import scoverage.IOUtils -import scoverage.Serializer +import scoverage.report.CoverageAggregator @CacheableTask class ScoverageReport extends DefaultTask { @@ -43,25 +37,18 @@ class ScoverageReport extends DefaultTask { @TaskAction def report() { runner.run { + reportDir.get().delete() reportDir.get().mkdirs() - File coverageFile = Serializer.coverageFile(dataDir.get()) + def coverage = CoverageAggregator.aggregate([dataDir.get()] as File[]) - if (!coverageFile.exists()) { + if (coverage.isEmpty()) { project.logger.info("[scoverage] Could not find coverage file, skipping...") } else { - File[] array = IOUtils.findMeasurementFiles(dataDir.get()) - Seq measurementFiles = JavaConversions.asScalaBuffer(Arrays.asList(array)) - - Coverage coverage = Serializer.deserialize(coverageFile) - - Set measurements = IOUtils.invoked(measurementFiles) - coverage.apply(measurements) - new ScoverageWriter(project.logger).write( sources.get(), reportDir.get(), - coverage, + coverage.get(), sourceEncoding.get(), coverageOutputCobertura.get(), coverageOutputXML.get(),