From ddf39845694192c0d9fe9f095fb0872300a5882d Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 24 Jun 2025 20:09:19 +0100 Subject: [PATCH] Upgrade to JUnit Jupiter 5.13.1 Closes gh-46058 --- gradle.properties | 2 +- ...verterCustomizationsArgumentsProvider.java | 4 +++- .../resources/ResourcesExtension.java | 23 +++++++++++++++++-- .../junit/BooleanArgumentsProvider.java | 4 +++- 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/gradle.properties b/gradle.properties index 9f6e5608c63..20dd09242fe 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ graalVersion=22.3 hamcrestVersion=3.0 jacksonVersion=2.19.1 javaFormatVersion=0.0.47 -junitJupiterVersion=5.12.2 +junitJupiterVersion=5.13.1 kotlinVersion=2.1.0 mavenVersion=3.9.10 mockitoVersion=5.17.0 diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/oauth2/resource/JwtConverterCustomizationsArgumentsProvider.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/oauth2/resource/JwtConverterCustomizationsArgumentsProvider.java index 6566a10242b..a4ea5639908 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/oauth2/resource/JwtConverterCustomizationsArgumentsProvider.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/oauth2/resource/JwtConverterCustomizationsArgumentsProvider.java @@ -24,6 +24,7 @@ import org.junit.jupiter.api.Named; import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.ArgumentsProvider; +import org.junit.jupiter.params.support.ParameterDeclarations; import org.springframework.security.oauth2.jwt.Jwt; @@ -37,7 +38,8 @@ import org.springframework.security.oauth2.jwt.Jwt; public final class JwtConverterCustomizationsArgumentsProvider implements ArgumentsProvider { @Override - public Stream provideArguments(ExtensionContext extensionContext) { + public Stream provideArguments(ParameterDeclarations parameterDeclarations, + ExtensionContext extensionContext) { String customPrefix = "CUSTOM_AUTHORITY_PREFIX_"; String customDelimiter = "[~,#:]"; String customAuthoritiesClaim = "custom_authorities"; diff --git a/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/classpath/resources/ResourcesExtension.java b/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/classpath/resources/ResourcesExtension.java index 97522c923c9..c6c70ff26a1 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/classpath/resources/ResourcesExtension.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/classpath/resources/ResourcesExtension.java @@ -69,7 +69,7 @@ class ResourcesExtension implements BeforeEachCallback, AfterEachCallback, Param .addPackage(testMethod.getDeclaringClass().getPackage(), withPackageResources.value())); ResourcesClassLoader classLoader = new ResourcesClassLoader(context.getRequiredTestClass().getClassLoader(), resources); - store.put(TCCL_KEY, Thread.currentThread().getContextClassLoader()); + store.put(TCCL_KEY, new Tccl()); Thread.currentThread().setContextClassLoader(classLoader); } @@ -105,7 +105,7 @@ class ResourcesExtension implements BeforeEachCallback, AfterEachCallback, Param public void afterEach(ExtensionContext context) throws Exception { Store store = context.getStore(Namespace.create(ResourcesExtension.class)); store.get(RESOURCES_KEY, Resources.class).delete(); - Thread.currentThread().setContextClassLoader(store.get(TCCL_KEY, ClassLoader.class)); + Thread.currentThread().setContextClassLoader(store.get(TCCL_KEY, Tccl.class).get()); } @Override @@ -183,4 +183,23 @@ class ResourcesExtension implements BeforeEachCallback, AfterEachCallback, Param return resources; } + /** + * Holder for the thread context class loader that can be safely + * {@link Store#put(Object, Object) stored} without it causing unwanted + * {@link ClassLoader#close closure} of the class loader. + */ + private static class Tccl { + + private final ClassLoader classLoader; + + Tccl() { + this.classLoader = Thread.currentThread().getContextClassLoader(); + } + + ClassLoader get() { + return this.classLoader; + } + + } + } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/junit/BooleanArgumentsProvider.java b/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/junit/BooleanArgumentsProvider.java index 875d59b4416..20f12eaeb7c 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/junit/BooleanArgumentsProvider.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/junit/BooleanArgumentsProvider.java @@ -22,6 +22,7 @@ import java.util.stream.Stream; import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.ArgumentsProvider; +import org.junit.jupiter.params.support.ParameterDeclarations; import org.junit.platform.commons.util.Preconditions; /** @@ -32,7 +33,8 @@ import org.junit.platform.commons.util.Preconditions; class BooleanArgumentsProvider implements ArgumentsProvider { @Override - public Stream provideArguments(ExtensionContext context) { + public Stream provideArguments(ParameterDeclarations parameterDeclarations, + ExtensionContext context) { Method testMethod = context.getRequiredTestMethod(); Preconditions.condition(testMethod.getParameterCount() > 0, () -> String.format( "@BooleanValueSource cannot provide arguments to method [%s]: the method does not declare any formal parameters.",