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

See gh-22922
This commit is contained in:
Andy Wilkinson 2020-10-01 14:13:14 +01:00
parent fa220ace4d
commit d136324b99
3 changed files with 44 additions and 8 deletions

View File

@ -41,4 +41,11 @@ import org.springframework.boot.gradle.testkit.GradleBuild;
@ExtendWith(GradleCompatibilityExtension.class) @ExtendWith(GradleCompatibilityExtension.class)
public @interface GradleCompatibility { 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;
} }

View File

@ -16,16 +16,19 @@
package org.springframework.boot.gradle.junit; package org.springframework.boot.gradle.junit;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.stream.Stream; import java.util.stream.Stream;
import org.gradle.api.JavaVersion; import org.gradle.api.JavaVersion;
import org.gradle.util.GradleVersion;
import org.junit.jupiter.api.TestTemplate; import org.junit.jupiter.api.TestTemplate;
import org.junit.jupiter.api.extension.Extension; import org.junit.jupiter.api.extension.Extension;
import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.api.extension.TestTemplateInvocationContext; import org.junit.jupiter.api.extension.TestTemplateInvocationContext;
import org.junit.jupiter.api.extension.TestTemplateInvocationContextProvider; 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.GradleBuild;
import org.springframework.boot.gradle.testkit.GradleBuildExtension; import org.springframework.boot.gradle.testkit.GradleBuildExtension;
@ -45,16 +48,29 @@ final class GradleCompatibilityExtension implements TestTemplateInvocationContex
JavaVersion javaVersion = JavaVersion.current(); JavaVersion javaVersion = JavaVersion.current();
if (javaVersion.isCompatibleWith(JavaVersion.VERSION_14) if (javaVersion.isCompatibleWith(JavaVersion.VERSION_14)
|| javaVersion.isCompatibleWith(JavaVersion.VERSION_13)) { || 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 { 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 @Override
public Stream<TestTemplateInvocationContext> provideTestTemplateInvocationContexts(ExtensionContext context) { 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 @Override
@ -66,20 +82,23 @@ final class GradleCompatibilityExtension implements TestTemplateInvocationContex
private final String gradleVersion; private final String gradleVersion;
GradleVersionTestTemplateInvocationContext(String gradleVersion) { private final boolean configurationCache;
GradleVersionTestTemplateInvocationContext(String gradleVersion, boolean configurationCache) {
this.gradleVersion = gradleVersion; this.gradleVersion = gradleVersion;
this.configurationCache = configurationCache;
} }
@Override @Override
public String getDisplayName(int invocationIndex) { public String getDisplayName(int invocationIndex) {
return "Gradle " + this.gradleVersion; return "Gradle " + this.gradleVersion + ((this.configurationCache) ? " --configuration-cache" : "");
} }
@Override @Override
public List<Extension> getAdditionalExtensions() { public List<Extension> getAdditionalExtensions() {
GradleBuild gradleBuild = new GradleBuild(); GradleBuild gradleBuild = new GradleBuild().gradleVersion(this.gradleVersion);
if (!this.gradleVersion.equals("default")) { if (this.configurationCache) {
gradleBuild.gradleVersion(this.gradleVersion); gradleBuild.configurationCache();
} }
return Arrays.asList(new GradleBuildFieldSetter(gradleBuild), new GradleBuildExtension()); return Arrays.asList(new GradleBuildFieldSetter(gradleBuild), new GradleBuildExtension());
} }

View File

@ -72,6 +72,8 @@ public class GradleBuild {
private GradleVersion expectDeprecationWarnings; private GradleVersion expectDeprecationWarnings;
private boolean configurationCache = false;
public GradleBuild() { public GradleBuild() {
this(Dsl.GROOVY); this(Dsl.GROOVY);
} }
@ -124,6 +126,11 @@ public class GradleBuild {
return this; return this;
} }
public GradleBuild configurationCache() {
this.configurationCache = true;
return this;
}
public BuildResult build(String... arguments) { public BuildResult build(String... arguments) {
try { try {
BuildResult result = prepareRunner(arguments).build(); BuildResult result = prepareRunner(arguments).build();
@ -169,6 +176,9 @@ public class GradleBuild {
allArguments.addAll(Arrays.asList(arguments)); allArguments.addAll(Arrays.asList(arguments));
allArguments.add("--warning-mode"); allArguments.add("--warning-mode");
allArguments.add("all"); allArguments.add("all");
if (this.configurationCache) {
allArguments.add("--configuration-cache");
}
return gradleRunner.withArguments(allArguments); return gradleRunner.withArguments(allArguments);
} }