Commit 26ebc98b authored by Dave Syer's avatar Dave Syer

Update SpringApplicationContextLoader for Spring 4.0.3

Spring 4.0.3 is not released yet, but we can anticipate the
change. With this commit SpringApplicationContextLoader can discover
default config (nested) classes if none are provided. It should
just work when Spring is upgraded.

Fixes gh-395
parent cfba5e83
...@@ -29,7 +29,9 @@ import org.springframework.boot.SpringApplication; ...@@ -29,7 +29,9 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.context.web.ServletContextApplicationContextInitializer; import org.springframework.boot.context.web.ServletContextApplicationContextInitializer;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextInitializer; import org.springframework.context.ApplicationContextInitializer;
import org.springframework.core.SpringVersion;
import org.springframework.mock.web.MockServletContext; import org.springframework.mock.web.MockServletContext;
import org.springframework.test.context.ContextConfigurationAttributes;
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;
...@@ -77,6 +79,16 @@ public class SpringApplicationContextLoader extends AbstractContextLoader { ...@@ -77,6 +79,16 @@ public class SpringApplicationContextLoader extends AbstractContextLoader {
return application.run(); return application.run();
} }
@Override
public void processContextConfiguration(
ContextConfigurationAttributes configAttributes) {
if (!configAttributes.hasLocations() && !configAttributes.hasClasses()) {
Class<?>[] defaultConfigClasses = detectDefaultConfigurationClasses(configAttributes
.getDeclaringClass());
configAttributes.setClasses(defaultConfigClasses);
}
}
/** /**
* Builds new {@link org.springframework.boot.SpringApplication} instance. You can * Builds new {@link org.springframework.boot.SpringApplication} instance. You can
* override this method to add custom behaviour * override this method to add custom behaviour
...@@ -92,8 +104,9 @@ public class SpringApplicationContextLoader extends AbstractContextLoader { ...@@ -92,8 +104,9 @@ public class SpringApplicationContextLoader extends AbstractContextLoader {
sources.addAll(Arrays.asList(mergedConfig.getLocations())); sources.addAll(Arrays.asList(mergedConfig.getLocations()));
if (sources.isEmpty()) { if (sources.isEmpty()) {
throw new IllegalStateException( throw new IllegalStateException(
"No configuration resources found (use classes= or locations= in @SpringApplicationConfiguration). " "No configuration classes or locations found in @SpringApplicationConfiguration. "
+ "Default configuration detection is not supported with this loader (see SPR-11455 for details)"); + "For default configuration detection to work you need Spring 4.0.3 or better (found "
+ SpringVersion.getVersion() + ").");
} }
return sources; return sources;
} }
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
package org.springframework.boot; package org.springframework.boot;
import org.junit.Ignore;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.junit.runners.Suite; import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses; import org.junit.runners.Suite.SuiteClasses;
...@@ -29,9 +28,9 @@ import org.springframework.boot.test.SpringApplicationConfigurationJmxTests; ...@@ -29,9 +28,9 @@ import org.springframework.boot.test.SpringApplicationConfigurationJmxTests;
* @author Dave Syer * @author Dave Syer
*/ */
@RunWith(Suite.class) @RunWith(Suite.class)
@SuiteClasses({ SpringApplicationConfigurationDefaultConfigurationTests.class, @SuiteClasses({ SpringApplicationConfigurationJmxTests.class,
SpringApplicationConfigurationJmxTests.class }) SpringApplicationConfigurationDefaultConfigurationTests.class })
@Ignore // @Ignore
public class AdhocTestSuite { public class AdhocTestSuite {
} }
...@@ -33,7 +33,7 @@ import static org.junit.Assert.assertNotNull; ...@@ -33,7 +33,7 @@ import static org.junit.Assert.assertNotNull;
*/ */
@RunWith(SpringJUnit4ClassRunner.class) @RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration @SpringApplicationConfiguration
@Ignore("Ignore until gh-380, SPR-11455 can be resolved") @Ignore("Ignore until SPR-11455 is resolved (Spring 4.0.3)")
public class SpringApplicationConfigurationDefaultConfigurationTests { public class SpringApplicationConfigurationDefaultConfigurationTests {
@Autowired @Autowired
......
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