Add support for testing the Gradle plugin with --configuration-cache
See gh-22922
This commit is contained in:
parent
fa220ace4d
commit
d136324b99
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue