Commit 40c2e24a authored by Phillip Webb's avatar Phillip Webb

Fix SpringApplicationContextLoader customizers

Update SpringApplicationContextLoader to call ContextCustomizers in the
same way as other classes in `spring-test`.

Fixes gh-5294
parent c28f5528
...@@ -38,11 +38,13 @@ import org.springframework.context.ApplicationContextInitializer; ...@@ -38,11 +38,13 @@ import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.SpringVersion; import org.springframework.core.SpringVersion;
import org.springframework.core.annotation.AnnotatedElementUtils; import org.springframework.core.annotation.AnnotatedElementUtils;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MapPropertySource; import org.springframework.core.env.MapPropertySource;
import org.springframework.core.env.StandardEnvironment; import org.springframework.core.env.StandardEnvironment;
import org.springframework.mock.web.MockServletContext; import org.springframework.mock.web.MockServletContext;
import org.springframework.test.context.ContextConfigurationAttributes; import org.springframework.test.context.ContextConfigurationAttributes;
import org.springframework.test.context.ContextCustomizer;
import org.springframework.test.context.ContextLoader; import org.springframework.test.context.ContextLoader;
import org.springframework.test.context.MergedContextConfiguration; import org.springframework.test.context.MergedContextConfiguration;
import org.springframework.test.context.support.AbstractContextLoader; import org.springframework.test.context.support.AbstractContextLoader;
...@@ -99,8 +101,8 @@ public class SpringApplicationContextLoader extends AbstractContextLoader { ...@@ -99,8 +101,8 @@ public class SpringApplicationContextLoader extends AbstractContextLoader {
application.setWebEnvironment(false); application.setWebEnvironment(false);
} }
application.setInitializers(initializers); application.setInitializers(initializers);
ConfigurableApplicationContext applicationContext = application.run(); ConfigurableApplicationContext context = application.run();
return applicationContext; return context;
} }
private void assertValidAnnotations(Class<?> testClass) { private void assertValidAnnotations(Class<?> testClass) {
...@@ -168,12 +170,15 @@ public class SpringApplicationContextLoader extends AbstractContextLoader { ...@@ -168,12 +170,15 @@ public class SpringApplicationContextLoader extends AbstractContextLoader {
} }
private List<ApplicationContextInitializer<?>> getInitializers( private List<ApplicationContextInitializer<?>> getInitializers(
MergedContextConfiguration mergedConfig, SpringApplication application) { MergedContextConfiguration config, SpringApplication application) {
List<ApplicationContextInitializer<?>> initializers = new ArrayList<ApplicationContextInitializer<?>>(); List<ApplicationContextInitializer<?>> initializers = new ArrayList<ApplicationContextInitializer<?>>();
for (ContextCustomizer contextCustomizer : config.getContextCustomizers()) {
initializers.add(new ContextCustomizerAdapter(contextCustomizer, config));
}
initializers.add(new PropertySourceLocationsInitializer( initializers.add(new PropertySourceLocationsInitializer(
mergedConfig.getPropertySourceLocations())); config.getPropertySourceLocations()));
initializers.addAll(application.getInitializers()); initializers.addAll(application.getInitializers());
for (Class<? extends ApplicationContextInitializer<?>> initializerClass : mergedConfig for (Class<? extends ApplicationContextInitializer<?>> initializerClass : config
.getContextInitializerClasses()) { .getContextInitializerClasses()) {
initializers.add(BeanUtils.instantiate(initializerClass)); initializers.add(BeanUtils.instantiate(initializerClass));
} }
...@@ -279,8 +284,32 @@ public class SpringApplicationContextLoader extends AbstractContextLoader { ...@@ -279,8 +284,32 @@ public class SpringApplicationContextLoader extends AbstractContextLoader {
private static boolean hasAnnotation(MergedContextConfiguration configuration, private static boolean hasAnnotation(MergedContextConfiguration configuration,
Class<? extends Annotation> annotation) { Class<? extends Annotation> annotation) {
return AnnotatedElementUtils.isAnnotated(configuration.getTestClass(), return (AnnotationUtils.findAnnotation(configuration.getTestClass(),
annotation); annotation) != null);
}
}
/**
* Adapts a {@link ContextCustomizer} to a {@link ApplicationContextInitializer} so
* that it can be triggered via {@link SpringApplication}.
*/
private static class ContextCustomizerAdapter
implements ApplicationContextInitializer<ConfigurableApplicationContext> {
private final ContextCustomizer contextCustomizer;
private final MergedContextConfiguration config;
ContextCustomizerAdapter(ContextCustomizer contextCustomizer,
MergedContextConfiguration config) {
this.contextCustomizer = contextCustomizer;
this.config = config;
}
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
this.contextCustomizer.customizeContext(applicationContext, this.config);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment