##// END OF EJS Templates
Add minimum Gradle compatibility functional test
cin -
r63:79fd940a7856 tip default
parent child
Show More
@@ -1,2 +1,3
1 group=org.implab.gradle
1 group=org.implab.gradle
2 version=0.1.0
2 version=0.1.0
3 testMinGradleVersion=8.10.2
@@ -36,6 +36,18 test {
36 useJUnitPlatform()
36 useJUnitPlatform()
37 }
37 }
38
38
39 tasks.register("minGradleCompatibilityTest", Test) {
40 description = "Runs functional TestKit tests against the minimum supported Gradle version."
41 group = "verification"
42 useJUnitPlatform()
43 testClassesDirs = sourceSets.test.output.classesDirs
44 classpath = sourceSets.test.runtimeClasspath
45 include "**/*FunctionalTest.class"
46 systemProperty "org.implab.gradle.test.gradleVersion", providers.gradleProperty("testMinGradleVersion").get()
47 inputs.property("testMinGradleVersion", providers.gradleProperty("testMinGradleVersion"))
48 shouldRunAfter test
49 }
50
39 javadoc {
51 javadoc {
40 exclude "**/internal/**"
52 exclude "**/internal/**"
41 }
53 }
@@ -13,6 +13,7 import java.util.regex.Pattern;
13
13
14 import org.gradle.testkit.runner.GradleRunner;
14 import org.gradle.testkit.runner.GradleRunner;
15 import org.gradle.testkit.runner.UnexpectedBuildFailure;
15 import org.gradle.testkit.runner.UnexpectedBuildFailure;
16 import org.gradle.util.GradleVersion;
16 import org.implab.gradle.common.core.lang.Deferred;
17 import org.implab.gradle.common.core.lang.Deferred;
17 import org.implab.gradle.variants.sources.GenericSourceSet;
18 import org.implab.gradle.variants.sources.GenericSourceSet;
18 import org.junit.jupiter.api.io.TempDir;
19 import org.junit.jupiter.api.io.TempDir;
@@ -20,6 +21,7 import org.junit.jupiter.api.io.TempDir;
20 abstract class AbstractFunctionalTest {
21 abstract class AbstractFunctionalTest {
21 private static final String SETTINGS_FILE = "settings.gradle";
22 private static final String SETTINGS_FILE = "settings.gradle";
22 private static final String BUILD_FILE = "build.gradle";
23 private static final String BUILD_FILE = "build.gradle";
24 private static final String TEST_GRADLE_VERSION_PROPERTY = "org.implab.gradle.test.gradleVersion";
23 private static final Pattern INCLUDE_DECLARATION = Pattern.compile("^include(?:\\s|\\().*");
25 private static final Pattern INCLUDE_DECLARATION = Pattern.compile("^include(?:\\s|\\().*");
24 private static final Pattern QUOTED_LITERAL = Pattern.compile("['\"]([^'\"]+)['\"]");
26 private static final Pattern QUOTED_LITERAL = Pattern.compile("['\"]([^'\"]+)['\"]");
25
27
@@ -35,10 +37,23 abstract class AbstractFunctionalTest {
35 }
37 }
36
38
37 protected GradleRunner runner(String... arguments) {
39 protected GradleRunner runner(String... arguments) {
38 return GradleRunner.create()
40 var runner = GradleRunner.create()
39 .withProjectDir(testProjectDir.toFile())
41 .withProjectDir(testProjectDir.toFile())
40 .withArguments(arguments)
42 .withArguments(arguments)
41 .forwardOutput();
43 .forwardOutput();
44
45 var gradleVersion = System.getProperty(TEST_GRADLE_VERSION_PROPERTY);
46 if (gradleVersion != null && !gradleVersion.isBlank())
47 runner = runner.withGradleVersion(gradleVersion);
48
49 return runner;
50 }
51
52 protected GradleVersion targetGradleVersion() {
53 var gradleVersion = System.getProperty(TEST_GRADLE_VERSION_PROPERTY);
54 if (gradleVersion == null || gradleVersion.isBlank())
55 return GradleVersion.current();
56 return GradleVersion.version(gradleVersion);
42 }
57 }
43
58
44 protected void assertBuildFails(String expectedError, String... arguments) {
59 protected void assertBuildFails(String expectedError, String... arguments) {
@@ -103,7 +103,7 class VariantArtifactsPluginFunctionalTe
103 }
103 }
104
104
105 @Test
105 @Test
106 void gradleReferenceRegisteredSecondaryArtifactVariantAllowsSecondaryArtifactSelection() throws Exception {
106 void gradleReferenceRegisteredSecondaryArtifactVariantMatchesGradleBehavior() throws Exception {
107 writeFile("settings.gradle", """
107 writeFile("settings.gradle", """
108 rootProject.name = 'gradle-reference-registered-secondary-variant'
108 rootProject.name = 'gradle-reference-registered-secondary-variant'
109 include 'producer', 'consumer'
109 include 'producer', 'consumer'
@@ -164,10 +164,15 class VariantArtifactsPluginFunctionalTe
164 }
164 }
165 """);
165 """);
166
166
167 BuildResult result = runner(":consumer:probe").build();
167 if (targetGradleVersion().compareTo(org.gradle.util.GradleVersion.version("9.4.1")) < 0) {
168 assertBuildFails("Cannot create variant 'js' after dependency configuration ':producer:browserElements' has been resolved",
169 ":consumer:probe");
170 } else {
171 BuildResult result = runner(":consumer:probe").build();
168
172
169 assertTrue(result.getOutput().contains("compileFiles=typesPackage"));
173 assertTrue(result.getOutput().contains("compileFiles=typesPackage"));
170 assertTrue(result.getOutput().contains("jsFiles=js"));
174 assertTrue(result.getOutput().contains("jsFiles=js"));
175 }
171 }
176 }
172
177
173 @Test
178 @Test
General Comments 0
You need to be logged in to leave comments. Login now