This commit is contained in:
Phillip Webb
2013-12-16 11:03:06 -08:00
parent 85fb1cba0b
commit 513c6a1de2
12 changed files with 76 additions and 53 deletions

View File

@@ -68,14 +68,13 @@ public class PropertiesConfigurationFactoryTests {
assertEquals("blah", foo.name);
}
@Test
public void testUnderscore() throws Exception {
Foo foo = createFoo("spring_foo_baz: blah\nname: blah");
assertEquals("blah", foo.spring_foo_baz);
assertEquals("blah", foo.name);
}
@Test
public void testUnknownPropertyOkByDefault() throws Exception {
Foo foo = createFoo("hi: hello\nname: foo\nbar: blah");
@@ -137,11 +136,11 @@ public class PropertiesConfigurationFactoryTests {
private String name;
private String bar;
private String spring_foo_baz;
public String getSpringFooBaz() {
return spring_foo_baz;
return this.spring_foo_baz;
}
public void setSpringFooBaz(String spring_foo_baz) {

View File

@@ -28,9 +28,14 @@ import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.test.context.ContextConfiguration;
/**
* Class-level annotation that is used to determine how to load and configure an
* ApplicationContext for integration tests. Similar to the standard
* {@link ContextConfiguration} but uses Spring Boot's
* {@link SpringApplicationContextLoader}.
*
* @author Dave Syer
* @see SpringApplicationContextLoader
*/
@ContextConfiguration(loader = SpringApplicationContextLoader.class)
@Documented
@Inherited

View File

@@ -58,27 +58,15 @@ public class SpringApplicationContextLoader extends AbstractContextLoader {
public ApplicationContext loadContext(MergedContextConfiguration mergedConfig)
throws Exception {
Set<Object> sources = new LinkedHashSet<Object>();
sources.addAll(Arrays.asList(mergedConfig.getClasses()));
sources.addAll(Arrays.asList(mergedConfig.getLocations()));
SpringApplication application = new SpringApplication();
application.setSources(sources);
Map<String, Object> args = new LinkedHashMap<String, Object>();
application.setSources(getSources(mergedConfig));
if (!ObjectUtils.isEmpty(mergedConfig.getActiveProfiles())) {
application.setAdditionalProfiles(Arrays.asList(mergedConfig
.getActiveProfiles()));
}
// Not running an embedded server, just setting up web context
args.put("server.port", "0");
args.put("management.port", "0");
application.setDefaultProperties(args);
List<ApplicationContextInitializer<?>> initializers = new ArrayList<ApplicationContextInitializer<?>>(
application.getInitializers());
for (Class<? extends ApplicationContextInitializer<?>> type : mergedConfig
.getContextInitializerClasses()) {
initializers.add(BeanUtils.instantiate(type));
}
application.setDefaultProperties(getArgs(mergedConfig));
List<ApplicationContextInitializer<?>> initializers = getInitializers(
mergedConfig, application);
if (mergedConfig instanceof WebMergedContextConfiguration) {
new WebConfigurer().setup(mergedConfig, application, initializers);
}
@@ -86,9 +74,36 @@ public class SpringApplicationContextLoader extends AbstractContextLoader {
application.setWebEnvironment(false);
}
application.setInitializers(initializers);
return application.run();
}
private Set<Object> getSources(MergedContextConfiguration mergedConfig) {
Set<Object> sources = new LinkedHashSet<Object>();
sources.addAll(Arrays.asList(mergedConfig.getClasses()));
sources.addAll(Arrays.asList(mergedConfig.getLocations()));
return sources;
}
private Map<String, Object> getArgs(MergedContextConfiguration mergedConfig) {
Map<String, Object> args = new LinkedHashMap<String, Object>();
// Not running an embedded server, just setting up web context
args.put("server.port", "0");
args.put("management.port", "0");
return args;
}
private List<ApplicationContextInitializer<?>> getInitializers(
MergedContextConfiguration mergedConfig, SpringApplication application) {
List<ApplicationContextInitializer<?>> initializers = new ArrayList<ApplicationContextInitializer<?>>();
initializers.addAll(application.getInitializers());
for (Class<? extends ApplicationContextInitializer<?>> initializerClass : mergedConfig
.getContextInitializerClasses()) {
initializers.add(BeanUtils.instantiate(initializerClass));
}
return initializers;
}
@Override
public ApplicationContext loadContext(String... locations) throws Exception {
throw new UnsupportedOperationException(