From 8781c2ce6f7813257e8574bd3e85ae9166654d04 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Sep 2025 21:29:49 +0000 Subject: [PATCH] Improve dynamic test handling and context management - Enhance test framework by introducing dynamic test interception with context class loader management in JUnit 5 extension. - Implement support for dynamic test invocation contexts to streamline extended testing functionality. --- bom/application/pom.xml | 2 +- devtools/gradle/gradle/libs.versions.toml | 2 +- independent-projects/arc/pom.xml | 2 +- independent-projects/bootstrap/pom.xml | 2 +- .../extension-maven-plugin/pom.xml | 2 +- .../junit5-virtual-threads/pom.xml | 2 +- .../internal/VirtualThreadExtensionTest.java | 71 +++++++++++++++++-- independent-projects/qute/pom.xml | 2 +- .../resteasy-reactive/pom.xml | 2 +- independent-projects/tools/pom.xml | 2 +- .../test/junit/QuarkusTestExtension.java | 4 +- 11 files changed, 76 insertions(+), 17 deletions(-) diff --git a/bom/application/pom.xml b/bom/application/pom.xml index d6b8b03c5d9ce..10a309e6bed7c 100644 --- a/bom/application/pom.xml +++ b/bom/application/pom.xml @@ -130,7 +130,7 @@ 12.1.0.0 1.2.6 2.2 - 5.13.4 + 6.0.0 15.0.19.Final 5.0.13.Final 3.2.2 diff --git a/devtools/gradle/gradle/libs.versions.toml b/devtools/gradle/gradle/libs.versions.toml index 0e0c6fefc2548..e17f4fba023ab 100644 --- a/devtools/gradle/gradle/libs.versions.toml +++ b/devtools/gradle/gradle/libs.versions.toml @@ -4,7 +4,7 @@ plugin-publish = "2.0.0" kotlin = "2.2.20" smallrye-config = "3.14.0" -junit5 = "5.13.4" +junit5 = "6.0.0" assertj = "3.27.6" [plugins] diff --git a/independent-projects/arc/pom.xml b/independent-projects/arc/pom.xml index 335b477425dfd..00c7ffeaa54b5 100644 --- a/independent-projects/arc/pom.xml +++ b/independent-projects/arc/pom.xml @@ -52,7 +52,7 @@ 2.13.9 3.27.6 - 5.13.4 + 6.0.0 2.2.20 1.10.2 5.20.0 diff --git a/independent-projects/bootstrap/pom.xml b/independent-projects/bootstrap/pom.xml index da07f3e5f1cc0..fcb87bfe3952d 100644 --- a/independent-projects/bootstrap/pom.xml +++ b/independent-projects/bootstrap/pom.xml @@ -40,7 +40,7 @@ 3.27.6 0.9.5 3.6.1.Final - 5.13.4 + 6.0.0 3.9.11 0.9.0.M4 3.15.1 diff --git a/independent-projects/extension-maven-plugin/pom.xml b/independent-projects/extension-maven-plugin/pom.xml index 46ade88c5ecd0..842e662d21e5b 100644 --- a/independent-projects/extension-maven-plugin/pom.xml +++ b/independent-projects/extension-maven-plugin/pom.xml @@ -39,7 +39,7 @@ 3.9.11 2.20.0 1.5.3 - 5.13.4 + 6.0.0 5.20.0 diff --git a/independent-projects/junit5-virtual-threads/pom.xml b/independent-projects/junit5-virtual-threads/pom.xml index d3f2db32af2cd..e8821a48a0294 100644 --- a/independent-projects/junit5-virtual-threads/pom.xml +++ b/independent-projects/junit5-virtual-threads/pom.xml @@ -44,7 +44,7 @@ 3.5.0 2.13.9 - 5.13.4 + 6.0.0 3.27.6 diff --git a/independent-projects/junit5-virtual-threads/src/test/java/io/quarkus/test/junit5/virtual/internal/VirtualThreadExtensionTest.java b/independent-projects/junit5-virtual-threads/src/test/java/io/quarkus/test/junit5/virtual/internal/VirtualThreadExtensionTest.java index 265b88b097c83..cb3d26902ca00 100644 --- a/independent-projects/junit5-virtual-threads/src/test/java/io/quarkus/test/junit5/virtual/internal/VirtualThreadExtensionTest.java +++ b/independent-projects/junit5-virtual-threads/src/test/java/io/quarkus/test/junit5/virtual/internal/VirtualThreadExtensionTest.java @@ -13,6 +13,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; @@ -158,6 +159,11 @@ public Optional> getTestClass() { return Optional.of(TestClass.class); } + @Override + public Class getRequiredTestClass() { + return ExtensionContext.super.getRequiredTestClass(); + } + @Override public Optional getTestInstanceLifecycle() { return Optional.empty(); @@ -168,11 +174,21 @@ public Optional getTestInstance() { return Optional.empty(); } + @Override + public Object getRequiredTestInstance() { + return ExtensionContext.super.getRequiredTestInstance(); + } + @Override public Optional getTestInstances() { return Optional.empty(); } + @Override + public TestInstances getRequiredTestInstances() { + return ExtensionContext.super.getRequiredTestInstances(); + } + public void setMethod(Method method) { this.method = method; } @@ -182,6 +198,11 @@ public Optional getTestMethod() { return Optional.ofNullable(method); } + @Override + public Method getRequiredTestMethod() { + return ExtensionContext.super.getRequiredTestMethod(); + } + @Override public Optional getExecutionException() { return Optional.empty(); @@ -193,7 +214,8 @@ public Optional getConfigurationParameter(String s) { } @Override - public Optional getConfigurationParameter(String s, Function function) { + public Optional getConfigurationParameter(String key, + Function transformer) { return Optional.empty(); } @@ -202,6 +224,21 @@ public void publishReportEntry(Map map) { } + @Override + public void publishReportEntry(String key, String value) { + ExtensionContext.super.publishReportEntry(key, value); + } + + @Override + public void publishReportEntry(String value) { + ExtensionContext.super.publishReportEntry(value); + } + + @Override + public void publishFile(String name, org.junit.jupiter.api.MediaType mediaType, ThrowingConsumer action) { + + } + @Override public TestStore getStore(Namespace namespace) { return store; @@ -250,6 +287,7 @@ public List stop() { } } + @SuppressWarnings("unchecked") private static class TestStore implements ExtensionContext.Store { private final Map store = new ConcurrentHashMap<>(); @@ -274,15 +312,34 @@ public V get(Object o, Class aClass) { } @Override - @SuppressWarnings("unchecked") - public Object getOrComputeIfAbsent(K key, Function function) { - return store.computeIfAbsent(key, o -> function.apply((K) o)); + public V getOrDefault(Object key, Class requiredType, V defaultValue) { + return ExtensionContext.Store.super.getOrDefault(key, requiredType, defaultValue); } @Override - @SuppressWarnings("unchecked") - public V getOrComputeIfAbsent(K key, Function function, Class aClass) { - return aClass.cast(store.computeIfAbsent(key, o -> function.apply((K) o))); + public V computeIfAbsent(Class type) { + return ExtensionContext.Store.super.computeIfAbsent(type); + } + + @Override + public @Nullable Object getOrComputeIfAbsent(K key, Function defaultCreator) { + return store.computeIfAbsent(key, (Function) defaultCreator); + } + + @Override + public Object computeIfAbsent(K key, Function defaultCreator) { + return store.computeIfAbsent(key, (Function) defaultCreator); + } + + @Override + public @Nullable V getOrComputeIfAbsent(K key, Function defaultCreator, + Class requiredType) { + return requiredType.cast(store.computeIfAbsent(key, (Function) defaultCreator)); + } + + @Override + public V computeIfAbsent(K key, Function defaultCreator, Class requiredType) { + return requiredType.cast(store.computeIfAbsent(key, (Function) defaultCreator)); } @Override diff --git a/independent-projects/qute/pom.xml b/independent-projects/qute/pom.xml index 0209511759c29..1da3aaadfed6d 100644 --- a/independent-projects/qute/pom.xml +++ b/independent-projects/qute/pom.xml @@ -38,7 +38,7 @@ UTF-8 - 5.13.4 + 6.0.0 3.27.6 3.5.0 2.0.0.Beta6 diff --git a/independent-projects/resteasy-reactive/pom.xml b/independent-projects/resteasy-reactive/pom.xml index 65842f7096abe..d92b966d25ff4 100644 --- a/independent-projects/resteasy-reactive/pom.xml +++ b/independent-projects/resteasy-reactive/pom.xml @@ -46,7 +46,7 @@ 4.1.0 3.5.0 1.15.11 - 5.13.4 + 6.0.0 3.9.11 3.27.6 3.6.1.Final diff --git a/independent-projects/tools/pom.xml b/independent-projects/tools/pom.xml index 53ea524d9f0f8..3ae1b90faeecb 100644 --- a/independent-projects/tools/pom.xml +++ b/independent-projects/tools/pom.xml @@ -53,7 +53,7 @@ 3.27.6 2.20.0 4.1.0 - 5.13.4 + 6.0.0 1.28.0 3.6.1.Final 5.20.0 diff --git a/test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusTestExtension.java b/test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusTestExtension.java index 6912253090149..9cb8e6414609c 100644 --- a/test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusTestExtension.java +++ b/test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusTestExtension.java @@ -47,6 +47,7 @@ import org.junit.jupiter.api.extension.BeforeAllCallback; import org.junit.jupiter.api.extension.BeforeEachCallback; import org.junit.jupiter.api.extension.BeforeTestExecutionCallback; +import org.junit.jupiter.api.extension.DynamicTestInvocationContext; import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.api.extension.InvocationInterceptor; import org.junit.jupiter.api.extension.ParameterContext; @@ -862,7 +863,8 @@ public void interceptTestMethod(Invocation invocation, ReflectiveInvocatio } @Override - public void interceptDynamicTest(Invocation invocation, ExtensionContext extensionContext) throws Throwable { + public void interceptDynamicTest(Invocation invocation, + DynamicTestInvocationContext invocationContext, ExtensionContext extensionContext) throws Throwable { // TODO check if this is needed; the earlier interceptor may already have done it if (runningQuarkusApplication == null) { invocation.proceed();