From f05db1eb98f3cb5323f7d97c8e2b416bd2e319bf Mon Sep 17 00:00:00 2001 From: Stu Date: Sat, 13 Jul 2019 21:28:58 +0100 Subject: [PATCH 1/8] build with scala 2.12 and scoverage 1.4.0 --- build.gradle | 2 +- .../java/org.scoverage/ScoverageFunctionalTest.java | 2 +- src/main/groovy/org/scoverage/ScoverageExtension.groovy | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) 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/ScoverageFunctionalTest.java b/src/functionalTest/java/org.scoverage/ScoverageFunctionalTest.java index af14ce5..7535319 100644 --- a/src/functionalTest/java/org.scoverage/ScoverageFunctionalTest.java +++ b/src/functionalTest/java/org.scoverage/ScoverageFunctionalTest.java @@ -122,7 +122,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/main/groovy/org/scoverage/ScoverageExtension.groovy b/src/main/groovy/org/scoverage/ScoverageExtension.groovy index 8ee680b..8e45a7e 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.0') scoverageScalaVersion = project.objects.property(String) scoverageScalaVersion.set('2.12') From 4e49a1bf76306f628d64613c6e81f76a89901553 Mon Sep 17 00:00:00 2001 From: Stu Date: Mon, 22 Jul 2019 22:08:26 +0100 Subject: [PATCH 2/8] scoverage 1.4 aggregates from the data directories --- .../org/scoverage/ScoverageAggregate.groovy | 20 +++++------------- .../org/scoverage/ScoveragePlugin.groovy | 9 +++++--- .../org/scoverage/ScoverageReport.groovy | 21 +++++-------------- 3 files changed, 16 insertions(+), 34 deletions(-) diff --git a/src/main/groovy/org/scoverage/ScoverageAggregate.groovy b/src/main/groovy/org/scoverage/ScoverageAggregate.groovy index e41d16b..9505a4d 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 { @@ -35,29 +34,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(JavaConversions.asScalaBuffer(dirsToAggregateFrom.get())) if (coverage.nonEmpty()) { new ScoverageWriter(project.logger).write( - rootDir, + project.projectDir, reportDir.get(), coverage.get(), coverageOutputCobertura.get(), diff --git a/src/main/groovy/org/scoverage/ScoveragePlugin.groovy b/src/main/groovy/org/scoverage/ScoveragePlugin.groovy index af6dc80..b2388bf 100644 --- a/src/main/groovy/org/scoverage/ScoveragePlugin.groovy +++ b/src/main/groovy/org/scoverage/ScoveragePlugin.groovy @@ -150,15 +150,15 @@ 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 = reportDirs + dirsToAggregateFrom = dataDirs deleteReportsOnAggregation = false coverageOutputCobertura = extension.coverageOutputCobertura coverageOutputXML = extension.coverageOutputXML @@ -186,10 +186,13 @@ 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 + 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 d5c5691..5dc395b 100644 --- a/src/main/groovy/org/scoverage/ScoverageReport.groovy +++ b/src/main/groovy/org/scoverage/ScoverageReport.groovy @@ -8,11 +8,7 @@ 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 { @@ -40,25 +36,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(JavaConversions.asScalaBuffer(Arrays.asList(dataDir.get()))) - 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(), coverageOutputCobertura.get(), coverageOutputXML.get(), coverageOutputHTML.get(), From cc1c43fb85874f70976eff43df48ed1f44d4c4e9 Mon Sep 17 00:00:00 2001 From: Stu Date: Sun, 28 Jul 2019 13:39:18 +0100 Subject: [PATCH 3/8] statement count appears to fixed in 1.4 --- .../ScalaMultiModuleWithMultipleTestTasksTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From 3f8e297051a9fee069cee10909af600f1dfb7bbc Mon Sep 17 00:00:00 2001 From: Stu Date: Wed, 7 Aug 2019 09:40:15 +0100 Subject: [PATCH 4/8] use the new aggregation function which supports arrays --- src/main/groovy/org/scoverage/ScoverageAggregate.groovy | 2 +- src/main/groovy/org/scoverage/ScoverageReport.groovy | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/groovy/org/scoverage/ScoverageAggregate.groovy b/src/main/groovy/org/scoverage/ScoverageAggregate.groovy index 9505a4d..1ba9b85 100644 --- a/src/main/groovy/org/scoverage/ScoverageAggregate.groovy +++ b/src/main/groovy/org/scoverage/ScoverageAggregate.groovy @@ -43,7 +43,7 @@ class ScoverageAggregate extends DefaultTask { reportDir.get().deleteDir() reportDir.get().mkdirs() - def coverage = CoverageAggregator.aggregate(JavaConversions.asScalaBuffer(dirsToAggregateFrom.get())) + def coverage = CoverageAggregator.aggregate(dirsToAggregateFrom.get() as File[]) if (coverage.nonEmpty()) { new ScoverageWriter(project.logger).write( diff --git a/src/main/groovy/org/scoverage/ScoverageReport.groovy b/src/main/groovy/org/scoverage/ScoverageReport.groovy index 5dc395b..6f5e3ee 100644 --- a/src/main/groovy/org/scoverage/ScoverageReport.groovy +++ b/src/main/groovy/org/scoverage/ScoverageReport.groovy @@ -39,7 +39,7 @@ class ScoverageReport extends DefaultTask { reportDir.get().delete() reportDir.get().mkdirs() - def coverage = CoverageAggregator.aggregate(JavaConversions.asScalaBuffer(Arrays.asList(dataDir.get()))) + def coverage = CoverageAggregator.aggregate([dataDir.get()] as File[]) if (coverage.isEmpty()) { project.logger.info("[scoverage] Could not find coverage file, skipping...") From 89e09f087b42747cb2b789fe66067a86294feee1 Mon Sep 17 00:00:00 2001 From: Stu Date: Thu, 8 Aug 2019 21:32:18 +0100 Subject: [PATCH 5/8] add a test for 2.13 --- .../java/org.scoverage/ScalaSingleModuleTest.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/functionalTest/java/org.scoverage/ScalaSingleModuleTest.java b/src/functionalTest/java/org.scoverage/ScalaSingleModuleTest.java index d53881b..b06278d 100644 --- a/src/functionalTest/java/org.scoverage/ScalaSingleModuleTest.java +++ b/src/functionalTest/java/org.scoverage/ScalaSingleModuleTest.java @@ -142,6 +142,15 @@ public void reportScoverageUnder2_11() throws Exception { assertReportFilesExist(); } + @Test + public void reportScoverageUnder2_13() throws Exception { + run("clean", ScoveragePlugin.getREPORT_NAME(), + "-PscalaVersionMinor=13", + "-PscalaVersionBuild=0", + "-Pscoverage.scoverageScalaVersion=2_13"); + assertReportFilesExist(); + } + private void assertReportFilesExist() { Assert.assertTrue(resolve(reportDir(), "index.html").exists()); From 308fdddf7b18220b82b0f8681cc0f63b658b66d5 Mon Sep 17 00:00:00 2001 From: Stu Date: Wed, 18 Sep 2019 20:22:21 +0100 Subject: [PATCH 6/8] move 2.13 to the multi-module test --- .../ScalaMultiModuleCrossVersionTest.java | 8 ++++++++ .../java/org.scoverage/ScalaSingleModuleTest.java | 9 --------- .../2_13/build.gradle | 4 ++++ .../2_13/src/main/scala/org/hello/World213.scala | 9 +++++++++ .../src/test/scala/org/hello/World213Suite.scala | 13 +++++++++++++ .../scala-multi-module-cross-version/build.gradle | 4 +++- .../settings.gradle | 2 +- 7 files changed, 38 insertions(+), 11 deletions(-) create mode 100644 src/functionalTest/resources/projects/scala-multi-module-cross-version/2_13/build.gradle create mode 100644 src/functionalTest/resources/projects/scala-multi-module-cross-version/2_13/src/main/scala/org/hello/World213.scala create mode 100644 src/functionalTest/resources/projects/scala-multi-module-cross-version/2_13/src/test/scala/org/hello/World213Suite.scala 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/ScalaSingleModuleTest.java b/src/functionalTest/java/org.scoverage/ScalaSingleModuleTest.java index d9fb4e0..f93e184 100644 --- a/src/functionalTest/java/org.scoverage/ScalaSingleModuleTest.java +++ b/src/functionalTest/java/org.scoverage/ScalaSingleModuleTest.java @@ -133,15 +133,6 @@ public void reportScoverageWithoutNormalCompilationAndWithExcludedClasses() thro Assert.assertFalse(resolve(buildDir(), "classes/scala/scoverage/org/hello/World.class").exists()); } - @Test - public void reportScoverageUnder2_13() throws Exception { - run("clean", ScoveragePlugin.getREPORT_NAME(), - "-PscalaVersionMinor=13", - "-PscalaVersionBuild=0", - "-Pscoverage.scoverageScalaVersion=2_13"); - assertReportFilesExist(); - } - private void assertReportFilesExist() { Assert.assertTrue(resolve(reportDir(), "index.html").exists()); 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..6db22d2 --- /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.0" + 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 From f45a5d0deeb9118019ec9f7031728f047a43d9c7 Mon Sep 17 00:00:00 2001 From: Stu Date: Tue, 19 Nov 2019 19:55:21 +0000 Subject: [PATCH 7/8] bump scoverage to 1.4.1 --- src/main/groovy/org/scoverage/ScoverageExtension.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/groovy/org/scoverage/ScoverageExtension.groovy b/src/main/groovy/org/scoverage/ScoverageExtension.groovy index 8e45a7e..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.4.0') + scoverageVersion.set('1.4.1') scoverageScalaVersion = project.objects.property(String) scoverageScalaVersion.set('2.12') From a67eabdafe0feb876a67df6f48a227607edd8a15 Mon Sep 17 00:00:00 2001 From: Stu Date: Tue, 19 Nov 2019 20:16:05 +0000 Subject: [PATCH 8/8] scoverage 1.4.1 requires scala 2.13.1 --- .../projects/scala-multi-module-cross-version/2_13/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 index 6db22d2..8be20a7 100644 --- 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 @@ -1,4 +1,4 @@ dependencies { - compile group: 'org.scala-lang', name: 'scala-library', version: "2.13.0" + compile group: 'org.scala-lang', name: 'scala-library', version: "2.13.1" testCompile group: 'org.scalatest', name: "scalatest_2.13", version: scalatestVersion }