diff --git a/src/test/java/org/javamodularity/moduleplugin/ModulePluginSmokeTest.java b/src/test/java/org/javamodularity/moduleplugin/ModulePluginSmokeTest.java index 1307a49..9efde06 100644 --- a/src/test/java/org/javamodularity/moduleplugin/ModulePluginSmokeTest.java +++ b/src/test/java/org/javamodularity/moduleplugin/ModulePluginSmokeTest.java @@ -6,8 +6,9 @@ import org.gradle.api.logging.Logging; import org.gradle.testkit.runner.BuildResult; import org.gradle.testkit.runner.GradleRunner; -import org.gradle.util.GradleVersion; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junitpioneer.jupiter.CartesianEnumSource; import org.junitpioneer.jupiter.CartesianProductTest; import org.junitpioneer.jupiter.CartesianValueSource; @@ -22,12 +23,35 @@ import static org.junit.jupiter.api.Assertions.*; +/** + * If you're locally seeing the error: + * {@code Could not create an instance of type org.gradle.initialization.DefaultSettings_Decorated.} + * when running these test it will because you're using a recent version of Java and running into: + * https://github.com/gradle/gradle/issues/10248. + * + *

Either switch to pre JDK-14 or locally comment out v5_1 and v5_2 in the {@link GradleVersion} enum. + */ @SuppressWarnings("ConstantConditions") class ModulePluginSmokeTest { private static final Logger LOGGER = Logging.getLogger(ModulePluginSmokeTest.class); private List pluginClasspath; + @SuppressWarnings("unused") + private enum GradleVersion { + // Locally comment out the 5.x versions if running JDK-14+ + v5_1, v5_6, + v6_3, v6_4_1, v6_5_1, v6_8_3, + v7_0, v7_2 + ; + + @Override + public String toString() { + return name().substring(1).replaceAll("_", "."); + } + } + + @SuppressWarnings("UnstableApiUsage") @BeforeEach void before() throws IOException { pluginClasspath = Resources.readLines(Resources.getResource("plugin-classpath.txt"), Charsets.UTF_8) @@ -38,14 +62,14 @@ void before() throws IOException { @CartesianProductTest(name = "smokeTest({arguments})") @CartesianValueSource(strings = {"test-project", "test-project-kotlin", "test-project-groovy"}) - @CartesianValueSource(strings = {"5.1", "5.6", "6.3", "6.4.1", "6.5.1", "6.8.3", "7.0", "7.2"}) - void smokeTest(String projectName, String gradleVersion) { + @CartesianEnumSource(GradleVersion.class) + void smokeTest(String projectName, GradleVersion gradleVersion) { LOGGER.lifecycle("Executing smokeTest of {} with Gradle {}", projectName, gradleVersion); if(!checkCombination(projectName, gradleVersion)) return; var result = GradleRunner.create() .withProjectDir(new File(projectName + "/")) .withPluginClasspath(pluginClasspath) - .withGradleVersion(gradleVersion) + .withGradleVersion(gradleVersion.toString()) .withArguments("-c", "smoke_test_settings.gradle", "clean", "build", "run", "--stacktrace") .forwardOutput() .build(); @@ -53,7 +77,7 @@ void smokeTest(String projectName, String gradleVersion) { assertTasksSuccessful(result, "greeter.api", "build"); assertTasksSuccessful(result, "greeter.provider", "build"); assertTasksSuccessful(result, "greeter.provider.test", "build"); - if(GradleVersion.version(gradleVersion).compareTo(GradleVersion.version("5.6")) >= 0) { + if(org.gradle.util.GradleVersion.version(gradleVersion.toString()).compareTo(org.gradle.util.GradleVersion.version("5.6")) >= 0) { assertTasksSuccessful(result, "greeter.provider.testfixture", "build"); } assertTasksSuccessful(result, "greeter.runner", "build", "run"); @@ -61,15 +85,15 @@ void smokeTest(String projectName, String gradleVersion) { @CartesianProductTest(name = "smokeTestRun({arguments})") @CartesianValueSource(strings = {"test-project", "test-project-kotlin", "test-project-groovy"}) - @CartesianValueSource(strings = {"5.1", "5.6", "6.3", "6.4.1", "6.5.1", "6.8.3", "7.0", "7.2"}) - void smokeTestRun(String projectName, String gradleVersion) { + @CartesianEnumSource(GradleVersion.class) + void smokeTestRun(String projectName, GradleVersion gradleVersion) { LOGGER.lifecycle("Executing smokeTestRun of {} with Gradle {}", projectName, gradleVersion); if(!checkCombination(projectName, gradleVersion)) return; var writer = new StringWriter(256); var result = GradleRunner.create() .withProjectDir(new File(projectName + "/")) .withPluginClasspath(pluginClasspath) - .withGradleVersion(gradleVersion) + .withGradleVersion(gradleVersion.toString()) .withArguments("-q", "-c", "smoke_test_settings.gradle", "clean", ":greeter.runner:run", "--args", "aaa bbb") .forwardStdOutput(writer) .forwardStdError(writer) @@ -83,11 +107,10 @@ void smokeTestRun(String projectName, String gradleVersion) { assertEquals("welcome", lines.get(2)); } - @CartesianProductTest(name = "smokeTestJunit5({arguments})") @CartesianValueSource(strings = {"5.4.2/1.4.2", "5.5.2/1.5.2", "5.7.1/1.7.1"}) - @CartesianValueSource(strings = {"5.1", "5.6", "6.3", "6.4.1", "6.5.1", "6.8.3", "7.0", "7.2"}) - void smokeTestJunit5(String junitVersionPair, String gradleVersion) { + @CartesianEnumSource(GradleVersion.class) + void smokeTestJunit5(String junitVersionPair, GradleVersion gradleVersion) { LOGGER.lifecycle("Executing smokeTestJunit5 with junitVersionPair {} and Gradle {}", junitVersionPair, gradleVersion); var junitVersionParts = junitVersionPair.split("/"); var junitVersionProperty = String.format("-PjUnitVersion=%s", junitVersionParts[0]); @@ -95,7 +118,7 @@ void smokeTestJunit5(String junitVersionPair, String gradleVersion) { var result = GradleRunner.create() .withProjectDir(new File("test-project/")) .withPluginClasspath(pluginClasspath) - .withGradleVersion(gradleVersion) + .withGradleVersion(gradleVersion.toString()) .withArguments("-c", "smoke_test_settings.gradle", junitVersionProperty, junitPlatformVersionProperty, "clean", "build", "run", "--stacktrace") .forwardOutput() .build(); @@ -107,13 +130,13 @@ void smokeTestJunit5(String junitVersionPair, String gradleVersion) { } @CartesianProductTest(name = "smokeTestMixed({arguments})") - @CartesianValueSource(strings = {"5.1", "5.6", "6.3", "6.4.1", "6.5.1", "6.8.3", "7.0", "7.2"}) - void smokeTestMixed(String gradleVersion) { + @CartesianEnumSource(GradleVersion.class) + void smokeTestMixed(GradleVersion gradleVersion) { LOGGER.lifecycle("Executing smokeTestMixed with Gradle {}", gradleVersion); var result = GradleRunner.create() .withProjectDir(new File("test-project-mixed")) .withPluginClasspath(pluginClasspath) - .withGradleVersion(gradleVersion) + .withGradleVersion(gradleVersion.toString()) .withArguments("-c", "smoke_test_settings.gradle", "clean", "build", "--stacktrace") .forwardOutput() .build(); @@ -159,14 +182,14 @@ private static void assertExpectedClassFileFormats( @CartesianProductTest(name = "smokeTestDist({arguments})") @CartesianValueSource(strings = {"test-project", "test-project-kotlin", "test-project-groovy"}) - @CartesianValueSource(strings = {"5.1", "5.6", "6.3", "6.4.1", "6.5.1", "6.8.3", "7.0", "7.2"}) - void smokeTestDist(String projectName, String gradleVersion) { + @CartesianEnumSource(GradleVersion.class) + void smokeTestDist(String projectName, GradleVersion gradleVersion) { LOGGER.lifecycle("Executing smokeTestDist of {} with Gradle {}", projectName, gradleVersion); if(!checkCombination(projectName, gradleVersion)) return; var result = GradleRunner.create() .withProjectDir(new File(projectName + "/")) .withPluginClasspath(pluginClasspath) - .withGradleVersion(gradleVersion) + .withGradleVersion(gradleVersion.toString()) .withArguments("-c", "smoke_test_settings.gradle", "clean", "build", ":greeter.runner:installDist", "--stacktrace") .forwardOutput() .build(); @@ -200,14 +223,14 @@ void smokeTestDist(String projectName, String gradleVersion) { @CartesianProductTest(name = "smokeTestRunDemo({arguments})") @CartesianValueSource(strings = {"test-project", "test-project-kotlin", "test-project-groovy"}) - @CartesianValueSource(strings = {"5.1", "5.6", "6.3", "6.4.1", "6.5.1", "6.8.3", "7.0", "7.2"}) - void smokeTestRunDemo(String projectName, String gradleVersion) { + @CartesianEnumSource(GradleVersion.class) + void smokeTestRunDemo(String projectName, GradleVersion gradleVersion) { LOGGER.lifecycle("Executing smokeTestRunDemo of {} with Gradle {}", projectName, gradleVersion); if(!checkCombination(projectName, gradleVersion)) return; var result = GradleRunner.create() .withProjectDir(new File(projectName + "/")) .withPluginClasspath(pluginClasspath) - .withGradleVersion(gradleVersion) + .withGradleVersion(gradleVersion.toString()) .withArguments("-c", "smoke_test_settings.gradle", "clean", "build", ":greeter.javaexec:runDemo1", ":greeter.javaexec:runDemo2", "--info", "--stacktrace") .forwardOutput() @@ -219,14 +242,14 @@ void smokeTestRunDemo(String projectName, String gradleVersion) { @CartesianProductTest(name = "smokeTestRunStartScripts({arguments})") @CartesianValueSource(strings = {"test-project", "test-project-kotlin", "test-project-groovy"}) - @CartesianValueSource(strings = {"5.1", "5.6", "6.3", "6.4.1", "6.5.1", "6.8.3", "7.0", "7.2"}) - void smokeTestRunStartScripts(String projectName, String gradleVersion) { + @CartesianEnumSource(GradleVersion.class) + void smokeTestRunStartScripts(String projectName, GradleVersion gradleVersion) { LOGGER.lifecycle("Executing smokeTestRunScripts of {} with Gradle {}", projectName, gradleVersion); if(!checkCombination(projectName, gradleVersion)) return; var result = GradleRunner.create() .withProjectDir(new File(projectName + "/")) .withPluginClasspath(pluginClasspath) - .withGradleVersion(gradleVersion) + .withGradleVersion(gradleVersion.toString()) .withArguments("-c", "smoke_test_settings.gradle", "clean", ":greeter.startscripts:installDist", "--info", "--stacktrace") .forwardOutput() .build(); @@ -241,14 +264,19 @@ void smokeTestRunStartScripts(String projectName, String gradleVersion) { assertEquals("Demo2: welcome home, Alice and Bob!", ctx.getAppOutput("demo2")); } + @Test + void shouldNotCheckInWithCommentedOutVersions() { + assertEquals(8, GradleVersion.values().length); + } + private static void assertTasksSuccessful(BuildResult result, String subprojectName, String... taskNames) { for (String taskName : taskNames) { SmokeTestHelper.assertTaskSuccessful(result, subprojectName, taskName); } } - private static boolean checkCombination(String projectName, String gradleVersion) { - if(projectName.equals("test-project-kotlin") && gradleVersion.compareTo("6.4") < 0) { + private static boolean checkCombination(String projectName, GradleVersion gradleVersion) { + if(projectName.equals("test-project-kotlin") && gradleVersion.toString().compareTo("6.4") < 0) { LOGGER.lifecycle("Unsupported combination: {} / Gradle {}. Test skipped", projectName, gradleVersion); return false; }