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)
|
@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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue