From d21d7fd6d0d2be6cc8645c2911208ad0f9a6674d Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Fri, 9 Sep 2022 16:08:19 +0200 Subject: [PATCH] Polishing --- .../aot/hint/StandardTestRuntimeHints.java | 16 +++--- .../aot/hint/TestContextRuntimeHints.java | 2 +- .../test/context/aot/AbstractAotTests.java | 35 ------------ .../context/aot/TestAotProcessorTests.java | 53 ++++++++++++++----- 4 files changed, 48 insertions(+), 58 deletions(-) diff --git a/spring-test/src/main/java/org/springframework/test/context/aot/hint/StandardTestRuntimeHints.java b/spring-test/src/main/java/org/springframework/test/context/aot/hint/StandardTestRuntimeHints.java index 6642c5fda64..d245592b81e 100644 --- a/spring-test/src/main/java/org/springframework/test/context/aot/hint/StandardTestRuntimeHints.java +++ b/spring-test/src/main/java/org/springframework/test/context/aot/hint/StandardTestRuntimeHints.java @@ -51,22 +51,22 @@ class StandardTestRuntimeHints implements TestRuntimeHintsRegistrar { public void registerHints(MergedContextConfiguration mergedConfig, List> testClasses, RuntimeHints runtimeHints, ClassLoader classLoader) { - registerHintsForMergedContextConfiguration(runtimeHints, classLoader, mergedConfig); - testClasses.forEach(testClass -> registerHintsForActiveProfilesResolvers(runtimeHints, testClass)); + registerHintsForMergedContextConfiguration(mergedConfig, runtimeHints, classLoader); + testClasses.forEach(testClass -> registerHintsForActiveProfilesResolvers(testClass, runtimeHints)); } private void registerHintsForMergedContextConfiguration( - RuntimeHints runtimeHints, ClassLoader classLoader, MergedContextConfiguration mergedConfig) { + MergedContextConfiguration mergedConfig, RuntimeHints runtimeHints, ClassLoader classLoader) { // @ContextConfiguration(loader = ...) ContextLoader contextLoader = mergedConfig.getContextLoader(); if (contextLoader != null) { - registerDeclaredConstructors(runtimeHints, contextLoader.getClass()); + registerDeclaredConstructors(contextLoader.getClass(), runtimeHints); } // @ContextConfiguration(initializers = ...) mergedConfig.getContextInitializerClasses() - .forEach(clazz -> registerDeclaredConstructors(runtimeHints, clazz)); + .forEach(clazz -> registerDeclaredConstructors(clazz, runtimeHints)); // @ContextConfiguration(locations = ...) registerClasspathResources(mergedConfig.getLocations(), runtimeHints, classLoader); @@ -80,7 +80,7 @@ class StandardTestRuntimeHints implements TestRuntimeHintsRegistrar { } } - private void registerHintsForActiveProfilesResolvers(RuntimeHints runtimeHints, Class testClass) { + private void registerHintsForActiveProfilesResolvers(Class testClass, RuntimeHints runtimeHints) { // @ActiveProfiles(resolver = ...) MergedAnnotations.search(TYPE_HIERARCHY) .withEnclosingClasses(TestContextAnnotationUtils::searchEnclosingClass) @@ -88,10 +88,10 @@ class StandardTestRuntimeHints implements TestRuntimeHintsRegistrar { .stream(ActiveProfiles.class) .map(mergedAnnotation -> mergedAnnotation.getClass("resolver")) .filter(type -> type != ActiveProfilesResolver.class) - .forEach(resolverClass -> registerDeclaredConstructors(runtimeHints, resolverClass)); + .forEach(resolverClass -> registerDeclaredConstructors(resolverClass, runtimeHints)); } - private void registerDeclaredConstructors(RuntimeHints runtimeHints, Class type) { + private void registerDeclaredConstructors(Class type, RuntimeHints runtimeHints) { runtimeHints.reflection().registerType(type, INVOKE_DECLARED_CONSTRUCTORS); } diff --git a/spring-test/src/main/java/org/springframework/test/context/aot/hint/TestContextRuntimeHints.java b/spring-test/src/main/java/org/springframework/test/context/aot/hint/TestContextRuntimeHints.java index a3f2c382ff4..da36ec8d67b 100644 --- a/spring-test/src/main/java/org/springframework/test/context/aot/hint/TestContextRuntimeHints.java +++ b/spring-test/src/main/java/org/springframework/test/context/aot/hint/TestContextRuntimeHints.java @@ -65,7 +65,7 @@ class TestContextRuntimeHints implements RuntimeHintsRegistrar { } // Loaded reflectively in BootstrapUtils - registerAnnotation(runtimeHints.reflection(), + registerAnnotation(reflectionHints, org.springframework.test.context.web.WebAppConfiguration.class ); } diff --git a/spring-test/src/test/java/org/springframework/test/context/aot/AbstractAotTests.java b/spring-test/src/test/java/org/springframework/test/context/aot/AbstractAotTests.java index 15f6eb161f5..e1607ce46ff 100644 --- a/spring-test/src/test/java/org/springframework/test/context/aot/AbstractAotTests.java +++ b/spring-test/src/test/java/org/springframework/test/context/aot/AbstractAotTests.java @@ -29,41 +29,6 @@ import java.util.stream.Stream; */ abstract class AbstractAotTests { - static final String[] expectedSourceFilesForBasicSpringTests = { - // Global - "org/springframework/test/context/aot/TestAotMappings__Generated.java", - // BasicSpringJupiterSharedConfigTests - "org/springframework/context/event/DefaultEventListenerFactory__TestContext001_BeanDefinitions.java", - "org/springframework/context/event/EventListenerMethodProcessor__TestContext001_BeanDefinitions.java", - "org/springframework/test/context/aot/samples/basic/BasicSpringJupiterSharedConfigTests__TestContext001_ApplicationContextInitializer.java", - "org/springframework/test/context/aot/samples/basic/BasicSpringJupiterSharedConfigTests__TestContext001_BeanFactoryRegistrations.java", - "org/springframework/test/context/aot/samples/basic/BasicTestConfiguration__TestContext001_BeanDefinitions.java", - // BasicSpringJupiterTests -- not generated b/c already generated for BasicSpringJupiterSharedConfigTests. - // "org/springframework/context/event/DefaultEventListenerFactory__TestContext00?_BeanDefinitions.java", - // "org/springframework/context/event/EventListenerMethodProcessor__TestContext00?_BeanDefinitions.java", - // "org/springframework/test/context/aot/samples/basic/BasicSpringJupiterTests__TestContext00?_ApplicationContextInitializer.java", - // "org/springframework/test/context/aot/samples/basic/BasicSpringJupiterTests__TestContext00?_BeanFactoryRegistrations.java", - // "org/springframework/test/context/aot/samples/basic/BasicTestConfiguration__TestContext00?_BeanDefinitions.java", - // BasicSpringJupiterTests.NestedTests - "org/springframework/context/event/DefaultEventListenerFactory__TestContext002_BeanDefinitions.java", - "org/springframework/context/event/EventListenerMethodProcessor__TestContext002_BeanDefinitions.java", - "org/springframework/test/context/aot/samples/basic/BasicSpringJupiterTests_NestedTests__TestContext002_ApplicationContextInitializer.java", - "org/springframework/test/context/aot/samples/basic/BasicSpringJupiterTests_NestedTests__TestContext002_BeanFactoryRegistrations.java", - "org/springframework/test/context/aot/samples/basic/BasicTestConfiguration__TestContext002_BeanDefinitions.java", - // BasicSpringTestNGTests - "org/springframework/context/event/DefaultEventListenerFactory__TestContext003_BeanDefinitions.java", - "org/springframework/context/event/EventListenerMethodProcessor__TestContext003_BeanDefinitions.java", - "org/springframework/test/context/aot/samples/basic/BasicSpringTestNGTests__TestContext003_ApplicationContextInitializer.java", - "org/springframework/test/context/aot/samples/basic/BasicSpringTestNGTests__TestContext003_BeanFactoryRegistrations.java", - "org/springframework/test/context/aot/samples/basic/BasicTestConfiguration__TestContext003_BeanDefinitions.java", - // BasicSpringVintageTests - "org/springframework/context/event/DefaultEventListenerFactory__TestContext004_BeanDefinitions.java", - "org/springframework/context/event/EventListenerMethodProcessor__TestContext004_BeanDefinitions.java", - "org/springframework/test/context/aot/samples/basic/BasicSpringVintageTests__TestContext004_ApplicationContextInitializer.java", - "org/springframework/test/context/aot/samples/basic/BasicSpringVintageTests__TestContext004_BeanFactoryRegistrations.java", - "org/springframework/test/context/aot/samples/basic/BasicTestConfiguration__TestContext004_BeanDefinitions.java" - }; - Stream> scan() { return new TestClassScanner(classpathRoots()).scan(); } diff --git a/spring-test/src/test/java/org/springframework/test/context/aot/TestAotProcessorTests.java b/spring-test/src/test/java/org/springframework/test/context/aot/TestAotProcessorTests.java index 33a3d4fd293..634af8817d5 100644 --- a/spring-test/src/test/java/org/springframework/test/context/aot/TestAotProcessorTests.java +++ b/spring-test/src/test/java/org/springframework/test/context/aot/TestAotProcessorTests.java @@ -20,7 +20,6 @@ import java.io.IOException; import java.io.UncheckedIOException; import java.nio.file.Files; import java.nio.file.Path; -import java.util.List; import java.util.stream.Stream; import org.junit.jupiter.api.Test; @@ -65,12 +64,11 @@ class TestAotProcessorTests extends AbstractAotTests { TestAotProcessor processor = new TestAotProcessor(classpathRoots, sourceOutput, resourceOutput, classOutput, groupId, artifactId); processor.process(); - assertThat(findFiles(sourceOutput)).containsExactlyInAnyOrder( - expectedSourceFilesForBasicSpringTests); + assertThat(findFiles(sourceOutput)).containsExactlyInAnyOrder(expectedSourceFiles); - assertThat(findFiles(resourceOutput)).contains( - "META-INF/native-image/org.example/app-tests/reflect-config.json", - "META-INF/native-image/org.example/app-tests/resource-config.json"); + assertThat(findFiles(resourceOutput.resolve("META-INF/native-image"))).contains( + "org.example/app-tests/reflect-config.json", + "org.example/app-tests/resource-config.json"); } private void copy(Class testClass, Path destination) { @@ -86,14 +84,41 @@ class TestAotProcessorTests extends AbstractAotTests { } } - private static List findFiles(Path outputPath) throws IOException { - int prefixLength = outputPath.toFile().getAbsolutePath().length() + 1; - return Files.find(outputPath, Integer.MAX_VALUE, (path, attributes) -> attributes.isRegularFile()) - .map(Path::toAbsolutePath) - .map(Path::toString) - .map(path -> path.substring(prefixLength)) - .map(path -> path.replace('\\', '/')) // convert Windows path - .toList(); + private static Stream findFiles(Path directory) throws IOException { + return Files.walk(directory).filter(Files::isRegularFile) + .map(path -> path.subpath(directory.getNameCount(), path.getNameCount())) + // Convert Windows path to UNIX path since the expectedSourceFiles array is hard coded + .map(path -> path.toString().replace('\\', '/')); } + private static final String[] expectedSourceFiles = { + // Global + "org/springframework/test/context/aot/TestAotMappings__Generated.java", + // BasicSpringJupiterSharedConfigTests + "org/springframework/context/event/DefaultEventListenerFactory__TestContext001_BeanDefinitions.java", + "org/springframework/context/event/EventListenerMethodProcessor__TestContext001_BeanDefinitions.java", + "org/springframework/test/context/aot/samples/basic/BasicSpringJupiterSharedConfigTests__TestContext001_ApplicationContextInitializer.java", + "org/springframework/test/context/aot/samples/basic/BasicSpringJupiterSharedConfigTests__TestContext001_BeanFactoryRegistrations.java", + "org/springframework/test/context/aot/samples/basic/BasicTestConfiguration__TestContext001_BeanDefinitions.java", + // BasicSpringJupiterTests -- not generated b/c already generated for BasicSpringJupiterSharedConfigTests. + // BasicSpringJupiterTests.NestedTests + "org/springframework/context/event/DefaultEventListenerFactory__TestContext002_BeanDefinitions.java", + "org/springframework/context/event/EventListenerMethodProcessor__TestContext002_BeanDefinitions.java", + "org/springframework/test/context/aot/samples/basic/BasicSpringJupiterTests_NestedTests__TestContext002_ApplicationContextInitializer.java", + "org/springframework/test/context/aot/samples/basic/BasicSpringJupiterTests_NestedTests__TestContext002_BeanFactoryRegistrations.java", + "org/springframework/test/context/aot/samples/basic/BasicTestConfiguration__TestContext002_BeanDefinitions.java", + // BasicSpringTestNGTests + "org/springframework/context/event/DefaultEventListenerFactory__TestContext003_BeanDefinitions.java", + "org/springframework/context/event/EventListenerMethodProcessor__TestContext003_BeanDefinitions.java", + "org/springframework/test/context/aot/samples/basic/BasicSpringTestNGTests__TestContext003_ApplicationContextInitializer.java", + "org/springframework/test/context/aot/samples/basic/BasicSpringTestNGTests__TestContext003_BeanFactoryRegistrations.java", + "org/springframework/test/context/aot/samples/basic/BasicTestConfiguration__TestContext003_BeanDefinitions.java", + // BasicSpringVintageTests + "org/springframework/context/event/DefaultEventListenerFactory__TestContext004_BeanDefinitions.java", + "org/springframework/context/event/EventListenerMethodProcessor__TestContext004_BeanDefinitions.java", + "org/springframework/test/context/aot/samples/basic/BasicSpringVintageTests__TestContext004_ApplicationContextInitializer.java", + "org/springframework/test/context/aot/samples/basic/BasicSpringVintageTests__TestContext004_BeanFactoryRegistrations.java", + "org/springframework/test/context/aot/samples/basic/BasicTestConfiguration__TestContext004_BeanDefinitions.java" + }; + }