Commit d136324b authored by Andy Wilkinson's avatar Andy Wilkinson

Add support for testing the Gradle plugin with --configuration-cache

See gh-22922
parent fa220ace
......@@ -41,4 +41,11 @@ import org.springframework.boot.gradle.testkit.GradleBuild;
@ExtendWith(GradleCompatibilityExtension.class)
public @interface GradleCompatibility {
/**
* Whether to include running Gradle with {@code --cache-configuration} cache in the
* compatibility matrix.
* @return {@code true} to enable the configuration cache, {@code false} otherwise
*/
boolean configurationCache() default false;
}
......@@ -16,16 +16,19 @@
package org.springframework.boot.gradle.junit;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
import org.gradle.api.JavaVersion;
import org.gradle.util.GradleVersion;
import org.junit.jupiter.api.TestTemplate;
import org.junit.jupiter.api.extension.Extension;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.api.extension.TestTemplateInvocationContext;
import org.junit.jupiter.api.extension.TestTemplateInvocationContextProvider;
import org.junit.platform.commons.util.AnnotationUtils;
import org.springframework.boot.gradle.testkit.GradleBuild;
import org.springframework.boot.gradle.testkit.GradleBuildExtension;
......@@ -45,16 +48,29 @@ final class GradleCompatibilityExtension implements TestTemplateInvocationContex
JavaVersion javaVersion = JavaVersion.current();
if (javaVersion.isCompatibleWith(JavaVersion.VERSION_14)
|| javaVersion.isCompatibleWith(JavaVersion.VERSION_13)) {
GRADLE_VERSIONS = Arrays.asList("6.3", "6.4.1", "6.5.1", "6.6.1", "default");
GRADLE_VERSIONS = Arrays.asList("6.3", "6.4.1", "6.5.1", "6.6.1", "current");
}
else {
GRADLE_VERSIONS = Arrays.asList("5.6.4", "6.3", "6.4.1", "6.5.1", "6.6.1", "default");
GRADLE_VERSIONS = Arrays.asList("5.6.4", "6.3", "6.4.1", "6.5.1", "6.6.1", "current");
}
}
@Override
public Stream<TestTemplateInvocationContext> provideTestTemplateInvocationContexts(ExtensionContext context) {
return GRADLE_VERSIONS.stream().map(GradleVersionTestTemplateInvocationContext::new);
return GRADLE_VERSIONS.stream().flatMap((version) -> {
if (version.equals("current")) {
version = GradleVersion.current().getVersion();
}
List<TestTemplateInvocationContext> invocationContexts = new ArrayList<>();
invocationContexts.add(new GradleVersionTestTemplateInvocationContext(version, false));
boolean configurationCache = AnnotationUtils
.findAnnotation(context.getRequiredTestClass(), GradleCompatibility.class).get()
.configurationCache();
if (configurationCache && GradleVersion.version(version).compareTo(GradleVersion.version("6.6")) >= 0) {
invocationContexts.add(new GradleVersionTestTemplateInvocationContext(version, true));
}
return invocationContexts.stream();
});
}
@Override
......@@ -66,20 +82,23 @@ final class GradleCompatibilityExtension implements TestTemplateInvocationContex
private final String gradleVersion;
GradleVersionTestTemplateInvocationContext(String gradleVersion) {
private final boolean configurationCache;
GradleVersionTestTemplateInvocationContext(String gradleVersion, boolean configurationCache) {
this.gradleVersion = gradleVersion;
this.configurationCache = configurationCache;
}
@Override
public String getDisplayName(int invocationIndex) {
return "Gradle " + this.gradleVersion;
return "Gradle " + this.gradleVersion + ((this.configurationCache) ? " --configuration-cache" : "");
}
@Override
public List<Extension> getAdditionalExtensions() {
GradleBuild gradleBuild = new GradleBuild();
if (!this.gradleVersion.equals("default")) {
gradleBuild.gradleVersion(this.gradleVersion);
GradleBuild gradleBuild = new GradleBuild().gradleVersion(this.gradleVersion);
if (this.configurationCache) {
gradleBuild.configurationCache();
}
return Arrays.asList(new GradleBuildFieldSetter(gradleBuild), new GradleBuildExtension());
}
......
......@@ -72,6 +72,8 @@ public class GradleBuild {
private GradleVersion expectDeprecationWarnings;
private boolean configurationCache = false;
public GradleBuild() {
this(Dsl.GROOVY);
}
......@@ -124,6 +126,11 @@ public class GradleBuild {
return this;
}
public GradleBuild configurationCache() {
this.configurationCache = true;
return this;
}
public BuildResult build(String... arguments) {
try {
BuildResult result = prepareRunner(arguments).build();
......@@ -169,6 +176,9 @@ public class GradleBuild {
allArguments.addAll(Arrays.asList(arguments));
allArguments.add("--warning-mode");
allArguments.add("all");
if (this.configurationCache) {
allArguments.add("--configuration-cache");
}
return gradleRunner.withArguments(allArguments);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment