From 4e08a800ded85e084266df0d5ef23fcce87efd90 Mon Sep 17 00:00:00 2001 From: Eyal Roth Date: Sun, 22 Dec 2019 13:36:10 +0200 Subject: [PATCH] Fix the cross (scala) version test (again) by making sure to run each test in a separate JVM process --- build.gradle | 7 +- .../ScalaMultiModuleCrossVersionTest.java | 98 ------------------- .../scoverage/crossversion/Scala211Test.java | 7 ++ .../scoverage/crossversion/Scala212Test.java | 7 ++ .../scoverage/crossversion/Scala213Test.java | 7 ++ .../ScalaCrossVersionAggregationTest.java | 46 +++++++++ .../crossversion/ScalaVersionTest.java | 35 +++++++ .../hello/{World211.scala => World2_11.scala} | 2 +- .../scala/org/hello/World2_11Suite.scala} | 4 +- .../src/main/scala/org/hello/World2_12.scala} | 2 +- .../scala/org/hello/World2_12Suite.scala} | 4 +- .../src/main/scala/org/hello/World2_13.scala} | 2 +- .../scala/org/hello/World2_13Suite.scala} | 2 +- 13 files changed, 113 insertions(+), 110 deletions(-) delete mode 100644 src/functionalTest/java/org.scoverage/ScalaMultiModuleCrossVersionTest.java create mode 100644 src/functionalTest/java/org/scoverage/crossversion/Scala211Test.java create mode 100644 src/functionalTest/java/org/scoverage/crossversion/Scala212Test.java create mode 100644 src/functionalTest/java/org/scoverage/crossversion/Scala213Test.java create mode 100644 src/functionalTest/java/org/scoverage/crossversion/ScalaCrossVersionAggregationTest.java create mode 100644 src/functionalTest/java/org/scoverage/crossversion/ScalaVersionTest.java rename src/functionalTest/resources/projects/scala-multi-module-cross-version/2_11/src/main/scala/org/hello/{World211.scala => World2_11.scala} (81%) rename src/functionalTest/resources/projects/scala-multi-module-cross-version/{2_13/src/test/scala/org/hello/World213Suite.scala => 2_11/src/test/scala/org/hello/World2_11Suite.scala} (72%) rename src/functionalTest/resources/projects/scala-multi-module-cross-version/{2_13/src/main/scala/org/hello/World213.scala => 2_12/src/main/scala/org/hello/World2_12.scala} (81%) rename src/functionalTest/resources/projects/scala-multi-module-cross-version/{2_11/src/test/scala/org/hello/World211Suite.scala => 2_12/src/test/scala/org/hello/World2_12Suite.scala} (72%) rename src/functionalTest/resources/projects/scala-multi-module-cross-version/{2_12/src/main/scala/org/hello/World212.scala => 2_13/src/main/scala/org/hello/World2_13.scala} (81%) rename src/functionalTest/resources/projects/scala-multi-module-cross-version/{2_12/src/test/scala/org/hello/World212Suite.scala => 2_13/src/test/scala/org/hello/World2_13Suite.scala} (89%) diff --git a/build.gradle b/build.gradle index bafe5e9..c6f706d 100644 --- a/build.gradle +++ b/build.gradle @@ -69,7 +69,8 @@ task crossScalaVersionFunctionalTest(type: Test) { group = 'verification' testClassesDirs = sourceSets.functionalTest.output.classesDirs classpath = sourceSets.functionalTest.runtimeClasspath - include "**/ScalaMultiModuleCrossVersionTest.*" + include '**/crossversion/*' + forkEvery = 1 // crucial to run every test in its own JVM testLogging.showStandardStreams = true @@ -81,9 +82,7 @@ task functionalTest(type: Test) { group = 'verification' testClassesDirs = sourceSets.functionalTest.output.classesDirs classpath = sourceSets.functionalTest.runtimeClasspath - exclude "**/ScalaMultiModuleCrossVersionTest.*" - - testLogging.showStandardStreams = true + exclude '**/crossversion/*' dependsOn crossScalaVersionFunctionalTest } diff --git a/src/functionalTest/java/org.scoverage/ScalaMultiModuleCrossVersionTest.java b/src/functionalTest/java/org.scoverage/ScalaMultiModuleCrossVersionTest.java deleted file mode 100644 index 22ef656..0000000 --- a/src/functionalTest/java/org.scoverage/ScalaMultiModuleCrossVersionTest.java +++ /dev/null @@ -1,98 +0,0 @@ -package org.scoverage; - -import org.junit.Assert; -import org.junit.Test; - -import java.io.File; - -/** - * Note that it is important to test the case of all of the modules together, - * along with the cases of each module individually, as they behave differently. - */ -public class ScalaMultiModuleCrossVersionTest extends ScoverageFunctionalTest { - - public ScalaMultiModuleCrossVersionTest() { - super("scala-multi-module-cross-version"); - } - - @Test - public void checkAndAggregateAll() throws Exception { - - AssertableBuildResult result = run("clean", ScoveragePlugin.getCHECK_NAME(), - ScoveragePlugin.getAGGREGATE_NAME()); - - result.assertTaskSkipped(ScoveragePlugin.getREPORT_NAME()); - result.assertTaskSucceeded("2_11:" + ScoveragePlugin.getREPORT_NAME()); - result.assertTaskSucceeded("2_12:" + ScoveragePlugin.getREPORT_NAME()); - result.assertTaskSucceeded("2_13:" + ScoveragePlugin.getREPORT_NAME()); - result.assertTaskSucceeded(ScoveragePlugin.getCHECK_NAME()); - result.assertTaskSucceeded("2_11:" + ScoveragePlugin.getCHECK_NAME()); - result.assertTaskSucceeded("2_12:" + ScoveragePlugin.getCHECK_NAME()); - result.assertTaskSucceeded("2_13:" + ScoveragePlugin.getCHECK_NAME()); - result.assertTaskSucceeded(ScoveragePlugin.getAGGREGATE_NAME()); - - assertAllReportFilesExist(); - assertCoverage(100.0); - } - - @Test - public void report211() throws Exception { - - AssertableBuildResult result = run("clean", ":2_11:" + ScoveragePlugin.getREPORT_NAME()); - result.assertTaskSucceeded("2_11:" + ScoveragePlugin.getREPORT_NAME()); - assert211ReportFilesExist(); - } - - @Test - public void report212() throws Exception { - - AssertableBuildResult result = run("clean", ":2_12:" + ScoveragePlugin.getREPORT_NAME()); - result.assertTaskSucceeded("2_12:" + ScoveragePlugin.getREPORT_NAME()); - assert212ReportFilesExist(); - } - - @Test - public void report213() throws Exception { - - AssertableBuildResult result = run("clean", ":2_13:" + ScoveragePlugin.getREPORT_NAME()); - result.assertTaskSucceeded("2_13:" + ScoveragePlugin.getREPORT_NAME()); - assert213ReportFilesExist(); - } - - private void assertAllReportFilesExist() { - - assert211ReportFilesExist(); - assert212ReportFilesExist(); - assert213ReportFilesExist(); - assertAggregationFilesExist(); - } - - private void assertAggregationFilesExist() { - - Assert.assertTrue(resolve(reportDir(), "index.html").exists()); - Assert.assertTrue(resolve(reportDir(), "2_11/src/main/scala/org/hello/World211.scala.html").exists()); - Assert.assertTrue(resolve(reportDir(), "2_12/src/main/scala/org/hello/World212.scala.html").exists()); - Assert.assertTrue(resolve(reportDir(), "2_13/src/main/scala/org/hello/World213.scala.html").exists()); - } - - private void assert211ReportFilesExist() { - - File reportDir = reportDir(projectDir().toPath().resolve("2_11").toFile()); - Assert.assertTrue(resolve(reportDir, "index.html").exists()); - Assert.assertTrue(resolve(reportDir, "src/main/scala/org/hello/World211.scala.html").exists()); - } - - private void assert212ReportFilesExist() { - - File reportDir = reportDir(projectDir().toPath().resolve("2_12").toFile()); - 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/crossversion/Scala211Test.java b/src/functionalTest/java/org/scoverage/crossversion/Scala211Test.java new file mode 100644 index 0000000..e8dfcaa --- /dev/null +++ b/src/functionalTest/java/org/scoverage/crossversion/Scala211Test.java @@ -0,0 +1,7 @@ +package org.scoverage.crossversion; + +public class Scala211Test extends ScalaVersionTest { + public Scala211Test() { + super("2_11"); + } +} \ No newline at end of file diff --git a/src/functionalTest/java/org/scoverage/crossversion/Scala212Test.java b/src/functionalTest/java/org/scoverage/crossversion/Scala212Test.java new file mode 100644 index 0000000..ee34a21 --- /dev/null +++ b/src/functionalTest/java/org/scoverage/crossversion/Scala212Test.java @@ -0,0 +1,7 @@ +package org.scoverage.crossversion; + +public class Scala212Test extends ScalaVersionTest { + public Scala212Test() { + super("2_12"); + } +} \ No newline at end of file diff --git a/src/functionalTest/java/org/scoverage/crossversion/Scala213Test.java b/src/functionalTest/java/org/scoverage/crossversion/Scala213Test.java new file mode 100644 index 0000000..f6a6043 --- /dev/null +++ b/src/functionalTest/java/org/scoverage/crossversion/Scala213Test.java @@ -0,0 +1,7 @@ +package org.scoverage.crossversion; + +public class Scala213Test extends ScalaVersionTest { + public Scala213Test() { + super("2_13"); + } +} \ No newline at end of file diff --git a/src/functionalTest/java/org/scoverage/crossversion/ScalaCrossVersionAggregationTest.java b/src/functionalTest/java/org/scoverage/crossversion/ScalaCrossVersionAggregationTest.java new file mode 100644 index 0000000..a086188 --- /dev/null +++ b/src/functionalTest/java/org/scoverage/crossversion/ScalaCrossVersionAggregationTest.java @@ -0,0 +1,46 @@ +package org.scoverage.crossversion; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.jupiter.api.Tag; +import org.junit.runner.RunWith; +import org.junit.runners.Suite; +import org.scoverage.ScoverageFunctionalTest; +import org.scoverage.ScoveragePlugin; + +import java.io.File; + +public class ScalaCrossVersionAggregationTest extends ScoverageFunctionalTest { + + public ScalaCrossVersionAggregationTest() { + super("scala-multi-module-cross-version"); + } + + @Test + public void checkAndAggregateAll() throws Exception { + + AssertableBuildResult result = run("clean", ScoveragePlugin.getCHECK_NAME(), + ScoveragePlugin.getAGGREGATE_NAME()); + + result.assertTaskSkipped(ScoveragePlugin.getREPORT_NAME()); + result.assertTaskSucceeded("2_11:" + ScoveragePlugin.getREPORT_NAME()); + result.assertTaskSucceeded("2_12:" + ScoveragePlugin.getREPORT_NAME()); + result.assertTaskSucceeded("2_13:" + ScoveragePlugin.getREPORT_NAME()); + result.assertTaskSucceeded(ScoveragePlugin.getCHECK_NAME()); + result.assertTaskSucceeded("2_11:" + ScoveragePlugin.getCHECK_NAME()); + result.assertTaskSucceeded("2_12:" + ScoveragePlugin.getCHECK_NAME()); + result.assertTaskSucceeded("2_13:" + ScoveragePlugin.getCHECK_NAME()); + result.assertTaskSucceeded(ScoveragePlugin.getAGGREGATE_NAME()); + + assertAggregationFilesExist(); + assertCoverage(100.0); + } + + private void assertAggregationFilesExist() { + + Assert.assertTrue(resolve(reportDir(), "index.html").exists()); + Assert.assertTrue(resolve(reportDir(), "2_11/src/main/scala/org/hello/World2_11.scala.html").exists()); + Assert.assertTrue(resolve(reportDir(), "2_12/src/main/scala/org/hello/World2_12.scala.html").exists()); + Assert.assertTrue(resolve(reportDir(), "2_13/src/main/scala/org/hello/World2_13.scala.html").exists()); + } +} diff --git a/src/functionalTest/java/org/scoverage/crossversion/ScalaVersionTest.java b/src/functionalTest/java/org/scoverage/crossversion/ScalaVersionTest.java new file mode 100644 index 0000000..e5ac15f --- /dev/null +++ b/src/functionalTest/java/org/scoverage/crossversion/ScalaVersionTest.java @@ -0,0 +1,35 @@ +package org.scoverage.crossversion; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.jupiter.api.Tag; +import org.scoverage.ScoverageFunctionalTest; +import org.scoverage.ScoveragePlugin; + +import java.io.File; + +/** + * This abstract class is used to test each scala version in an individual class. + * It is crucial that each test will be separated into its own class, + * as this is the only way to run these tests in separate JVM processes (via `forkEvery` gradle configuration). + */ +public abstract class ScalaVersionTest extends ScoverageFunctionalTest { + + private final String scalaVersion; + + public ScalaVersionTest(String scalaVersion) { + super("scala-multi-module-cross-version"); + this.scalaVersion = scalaVersion; + } + + @Test + public void report() throws Exception { + + AssertableBuildResult result = run("clean", ":" + scalaVersion + ":" + ScoveragePlugin.getREPORT_NAME()); + result.assertTaskSucceeded(scalaVersion + ":" + ScoveragePlugin.getREPORT_NAME()); + + File reportDir = reportDir(projectDir().toPath().resolve(scalaVersion).toFile()); + Assert.assertTrue(resolve(reportDir, "index.html").exists()); + Assert.assertTrue(resolve(reportDir, "src/main/scala/org/hello/World" + scalaVersion + ".scala.html").exists()); + } +} \ No newline at end of file diff --git a/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_11/src/main/scala/org/hello/World211.scala b/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_11/src/main/scala/org/hello/World2_11.scala similarity index 81% rename from src/functionalTest/resources/projects/scala-multi-module-cross-version/2_11/src/main/scala/org/hello/World211.scala rename to src/functionalTest/resources/projects/scala-multi-module-cross-version/2_11/src/main/scala/org/hello/World2_11.scala index 7c7f57b..cab6958 100644 --- a/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_11/src/main/scala/org/hello/World211.scala +++ b/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_11/src/main/scala/org/hello/World2_11.scala @@ -1,6 +1,6 @@ package org.hello -class World211 { +class World2_11 { def foo(): String = { val s = "2" + "11" 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_11/src/test/scala/org/hello/World2_11Suite.scala similarity index 72% rename from src/functionalTest/resources/projects/scala-multi-module-cross-version/2_13/src/test/scala/org/hello/World213Suite.scala rename to src/functionalTest/resources/projects/scala-multi-module-cross-version/2_11/src/test/scala/org/hello/World2_11Suite.scala index ad43f08..2d99209 100644 --- 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_11/src/test/scala/org/hello/World2_11Suite.scala @@ -5,9 +5,9 @@ import org.scalatest.FunSuite import org.scalatest.junit.JUnitRunner @RunWith(classOf[JUnitRunner]) -class World212Suite extends FunSuite { +class World2_11Suite extends FunSuite { test("foo") { - new World213().foo() + new World2_11().foo() } } \ No newline at end of file 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_12/src/main/scala/org/hello/World2_12.scala similarity index 81% rename from src/functionalTest/resources/projects/scala-multi-module-cross-version/2_13/src/main/scala/org/hello/World213.scala rename to src/functionalTest/resources/projects/scala-multi-module-cross-version/2_12/src/main/scala/org/hello/World2_12.scala index b5fc8fb..c0cc10b 100644 --- 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_12/src/main/scala/org/hello/World2_12.scala @@ -1,6 +1,6 @@ package org.hello -class World213 { +class World2_12 { def foo(): String = { val s = "2" + "12" diff --git a/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_11/src/test/scala/org/hello/World211Suite.scala b/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_12/src/test/scala/org/hello/World2_12Suite.scala similarity index 72% rename from src/functionalTest/resources/projects/scala-multi-module-cross-version/2_11/src/test/scala/org/hello/World211Suite.scala rename to src/functionalTest/resources/projects/scala-multi-module-cross-version/2_12/src/test/scala/org/hello/World2_12Suite.scala index f872840..23e5b04 100644 --- a/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_11/src/test/scala/org/hello/World211Suite.scala +++ b/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_12/src/test/scala/org/hello/World2_12Suite.scala @@ -5,9 +5,9 @@ import org.scalatest.FunSuite import org.scalatest.junit.JUnitRunner @RunWith(classOf[JUnitRunner]) -class World211Suite extends FunSuite { +class World2_12Suite extends FunSuite { test("foo") { - new World211().foo() + new World2_12().foo() } } \ No newline at end of file diff --git a/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_12/src/main/scala/org/hello/World212.scala b/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_13/src/main/scala/org/hello/World2_13.scala similarity index 81% rename from src/functionalTest/resources/projects/scala-multi-module-cross-version/2_12/src/main/scala/org/hello/World212.scala rename to src/functionalTest/resources/projects/scala-multi-module-cross-version/2_13/src/main/scala/org/hello/World2_13.scala index 0968efa..d18034b 100644 --- a/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_12/src/main/scala/org/hello/World212.scala +++ b/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_13/src/main/scala/org/hello/World2_13.scala @@ -1,6 +1,6 @@ package org.hello -class World212 { +class World2_13 { def foo(): String = { val s = "2" + "12" diff --git a/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_12/src/test/scala/org/hello/World212Suite.scala b/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_13/src/test/scala/org/hello/World2_13Suite.scala similarity index 89% rename from src/functionalTest/resources/projects/scala-multi-module-cross-version/2_12/src/test/scala/org/hello/World212Suite.scala rename to src/functionalTest/resources/projects/scala-multi-module-cross-version/2_13/src/test/scala/org/hello/World2_13Suite.scala index cd26ad3..0628dc4 100644 --- a/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_12/src/test/scala/org/hello/World212Suite.scala +++ b/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_13/src/test/scala/org/hello/World2_13Suite.scala @@ -8,6 +8,6 @@ import org.scalatest.junit.JUnitRunner class World212Suite extends FunSuite { test("foo") { - new World212().foo() + new World2_13().foo() } } \ No newline at end of file