Skip to content

Commit 1bf8756

Browse files
committed
Add integration tests for validateMultiReleaseJar task
This commit also renames the "validateJar" task to "validateMultiReleaseJar". Closes gh-35768
1 parent 06ae7fb commit 1bf8756

File tree

3 files changed

+33
-1
lines changed

3 files changed

+33
-1
lines changed

buildSrc/src/main/java/org/springframework/build/multirelease/MultiReleaseJarPlugin.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141
*/
4242
public class MultiReleaseJarPlugin implements Plugin<Project> {
4343

44+
public static String VALIDATE_JAR_TASK_NAME = "validateMultiReleaseJar";
45+
4446
@Inject
4547
protected JavaToolchainService getToolchains() {
4648
throw new UnsupportedOperationException();
@@ -60,7 +62,7 @@ public void apply(Project project) {
6062
tasks,
6163
dependencies,
6264
objects);
63-
TaskProvider<MultiReleaseJarValidateTask> validateJarTask = tasks.register("validateJar", MultiReleaseJarValidateTask.class, (task) -> {
65+
TaskProvider<MultiReleaseJarValidateTask> validateJarTask = tasks.register(VALIDATE_JAR_TASK_NAME, MultiReleaseJarValidateTask.class, (task) -> {
6466
task.getJar().set(tasks.named("jar", Jar.class).flatMap(AbstractArchiveTask::getArchiveFile));
6567
});
6668
tasks.named("check", task -> task.dependsOn(validateJarTask));

buildSrc/src/main/java/org/springframework/build/multirelease/MultiReleaseJarValidateTask.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,14 @@
2727

2828
@CacheableTask
2929
public abstract class MultiReleaseJarValidateTask extends JavaExec {
30+
3031
@InputFile
3132
@PathSensitive(PathSensitivity.RELATIVE)
3233
public abstract RegularFileProperty getJar();
34+
3335
public MultiReleaseJarValidateTask() {
3436
getMainModule().set("jdk.jartool");
3537
getArgumentProviders().add(() -> List.of("--validate", "--file", getJar().get().getAsFile().getAbsolutePath()));
3638
}
39+
3740
}

buildSrc/src/test/java/org/springframework/build/multirelease/MultiReleaseJarPluginTests.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,13 @@
2626
import java.util.jar.JarFile;
2727
import org.gradle.testkit.runner.BuildResult;
2828
import org.gradle.testkit.runner.GradleRunner;
29+
import org.gradle.testkit.runner.UnexpectedBuildFailure;
2930
import org.junit.jupiter.api.BeforeEach;
3031
import org.junit.jupiter.api.Test;
3132
import org.junit.jupiter.api.io.TempDir;
3233

3334
import static org.assertj.core.api.Assertions.assertThat;
35+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
3436

3537
/**
3638
* Tests for {@link MultiReleaseJarPlugin}
@@ -116,6 +118,31 @@ public class Main {}
116118
}
117119
}
118120

121+
@Test
122+
void validateJar() throws IOException {
123+
writeBuildFile("""
124+
plugins {
125+
id 'java'
126+
id 'org.springframework.build.multiReleaseJar'
127+
}
128+
version = '1.2.3'
129+
multiRelease { releaseVersions 17 }
130+
""");
131+
writeClass("src/main/java17", "Main.java", """
132+
public class Main {
133+
134+
public void method() {}
135+
136+
}
137+
""");
138+
writeClass("src/main/java", "Main.java", """
139+
public class Main {}
140+
""");
141+
assertThatThrownBy(() ->runGradle("validateMultiReleaseJar"))
142+
.isInstanceOf(UnexpectedBuildFailure.class)
143+
.hasMessageContaining("entry: META-INF/versions/17/Main.class, has a class version incompatible with an earlier version");
144+
}
145+
119146
private void writeBuildFile(String buildContent) throws IOException {
120147
try (PrintWriter out = new PrintWriter(new FileWriter(this.buildFile))) {
121148
out.print(buildContent);

0 commit comments

Comments
 (0)