From 4cbe2ae00aaec2ca4074b06f389f5e50ca235da3 Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Sun, 26 Jun 2011 16:46:18 +0000 Subject: [PATCH] [SPR-8387] Introduced supports(MergedContextConfiguration) method in the SmartContextLoader SPI; updated existing loaders accordingly; and fleshed out implementation of and tests for the new DelegatingSmartContextLoader. --- .../test/context/SmartContextLoader.java | 8 +++ .../support/AbstractContextLoader.java | 8 +++ .../AnnotationConfigContextLoader.java | 8 +++ .../support/DelegatingSmartContextLoader.java | 46 +++++++++---- .../junit4/SpringJUnit4SuiteTests.java | 18 ++++- ...figSpringJUnit4ClassRunnerAppCtxTests.java | 3 +- .../annotation/AnnotationConfigTestSuite.java | 9 ++- ...ingDefaultConfigClassesInheritedTests.java | 4 +- ...ngExplicitConfigClassesInheritedTests.java | 4 +- .../DefaultConfigClassesBaseTests.java | 2 +- .../DefaultConfigClassesInheritedTests.java | 4 +- ...ingDefaultConfigClassesInheritedTests.java | 62 +++++++++++++++++ ...ngExplicitConfigClassesInheritedTests.java | 45 ++++++++++++ ...ltLoaderDefaultConfigClassesBaseTests.java | 68 +++++++++++++++++++ ...derDefaultConfigClassesInheritedTests.java | 61 +++++++++++++++++ ...tLoaderExplicitConfigClassesBaseTests.java | 52 ++++++++++++++ ...erExplicitConfigClassesInheritedTests.java | 52 ++++++++++++++ .../ExplicitConfigClassesBaseTests.java | 2 +- .../ExplicitConfigClassesInheritedTests.java | 4 +- 19 files changed, 432 insertions(+), 28 deletions(-) create mode 100644 org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultLoaderBeanOverridingDefaultConfigClassesInheritedTests.java create mode 100644 org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultLoaderBeanOverridingExplicitConfigClassesInheritedTests.java create mode 100644 org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultLoaderDefaultConfigClassesBaseTests.java create mode 100644 org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultLoaderDefaultConfigClassesInheritedTests.java create mode 100644 org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultLoaderExplicitConfigClassesBaseTests.java create mode 100644 org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultLoaderExplicitConfigClassesInheritedTests.java diff --git a/org.springframework.test/src/main/java/org/springframework/test/context/SmartContextLoader.java b/org.springframework.test/src/main/java/org/springframework/test/context/SmartContextLoader.java index 683a200d54..16f8655e0a 100644 --- a/org.springframework.test/src/main/java/org/springframework/test/context/SmartContextLoader.java +++ b/org.springframework.test/src/main/java/org/springframework/test/context/SmartContextLoader.java @@ -95,6 +95,14 @@ public interface SmartContextLoader extends ContextLoader { */ void processContextConfiguration(ContextConfigurationAttributes configAttributes); + /** + * TODO Document supports(MergedContextConfiguration). + * + * @param mergedConfig + * @return + */ + boolean supports(MergedContextConfiguration mergedConfig); + /** * Loads a new {@link ApplicationContext context} based on the supplied * {@link MergedContextConfiguration merged context configuration}, diff --git a/org.springframework.test/src/main/java/org/springframework/test/context/support/AbstractContextLoader.java b/org.springframework.test/src/main/java/org/springframework/test/context/support/AbstractContextLoader.java index faf88f520e..a8d3261115 100644 --- a/org.springframework.test/src/main/java/org/springframework/test/context/support/AbstractContextLoader.java +++ b/org.springframework.test/src/main/java/org/springframework/test/context/support/AbstractContextLoader.java @@ -23,6 +23,7 @@ import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.support.ResourcePatternUtils; import org.springframework.test.context.ContextConfigurationAttributes; import org.springframework.test.context.ContextLoader; +import org.springframework.test.context.MergedContextConfiguration; import org.springframework.test.context.SmartContextLoader; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; @@ -90,6 +91,13 @@ public abstract class AbstractContextLoader implements SmartContextLoader { configAttributes.setLocations(processedLocations); } + /** + * TODO Document default supports(MergedContextConfiguration) implementation. + */ + public boolean supports(MergedContextConfiguration mergedConfig) { + return !ObjectUtils.isEmpty(mergedConfig.getLocations()); + } + // --- ContextLoader ------------------------------------------------------- /** diff --git a/org.springframework.test/src/main/java/org/springframework/test/context/support/AnnotationConfigContextLoader.java b/org.springframework.test/src/main/java/org/springframework/test/context/support/AnnotationConfigContextLoader.java index bdb8adad6c..87599eb13b 100644 --- a/org.springframework.test/src/main/java/org/springframework/test/context/support/AnnotationConfigContextLoader.java +++ b/org.springframework.test/src/main/java/org/springframework/test/context/support/AnnotationConfigContextLoader.java @@ -81,6 +81,14 @@ public class AnnotationConfigContextLoader extends AbstractGenericContextLoader } } + /** + * TODO Document overridden supports(MergedContextConfiguration) implementation. + */ + @Override + public boolean supports(MergedContextConfiguration mergedConfig) { + return ObjectUtils.isEmpty(mergedConfig.getLocations()) && !ObjectUtils.isEmpty(mergedConfig.getClasses()); + } + // --- AnnotationConfigContextLoader --------------------------------------- private boolean isStaticNonPrivateAndNonFinal(Class clazz) { diff --git a/org.springframework.test/src/main/java/org/springframework/test/context/support/DelegatingSmartContextLoader.java b/org.springframework.test/src/main/java/org/springframework/test/context/support/DelegatingSmartContextLoader.java index 8e4de5d399..6aa828a1c9 100644 --- a/org.springframework.test/src/main/java/org/springframework/test/context/support/DelegatingSmartContextLoader.java +++ b/org.springframework.test/src/main/java/org/springframework/test/context/support/DelegatingSmartContextLoader.java @@ -26,6 +26,7 @@ import org.springframework.test.context.ContextConfigurationAttributes; import org.springframework.test.context.ContextLoader; import org.springframework.test.context.MergedContextConfiguration; import org.springframework.test.context.SmartContextLoader; +import org.springframework.util.ObjectUtils; /** * TODO Document DelegatingSmartContextLoader. @@ -62,6 +63,11 @@ public class DelegatingSmartContextLoader implements SmartContextLoader { * TODO Document processContextConfiguration() implementation. */ public void processContextConfiguration(ContextConfigurationAttributes configAttributes) { + + final String[] originalLocations = configAttributes.getLocations(); + final Class[] originalClasses = configAttributes.getClasses(); + final boolean emptyResources = ObjectUtils.isEmpty(originalLocations) && ObjectUtils.isEmpty(originalClasses); + for (SmartContextLoader loader : candidates) { if (logger.isDebugEnabled()) { logger.debug(String.format("Delegating to loader [%s] to process context configuration [%s].", @@ -73,7 +79,9 @@ public class DelegatingSmartContextLoader implements SmartContextLoader { // If the original locations and classes are not empty, there's no // need to bother with default generation checks; just let each // loader process the configuration. - // + if (!emptyResources) { + loader.processContextConfiguration(configAttributes); + } // Otherwise, if a loader claims to generate defaults, let it // process the configuration, and then verify that it actually did // generate defaults. @@ -83,9 +91,26 @@ public class DelegatingSmartContextLoader implements SmartContextLoader { // 1) stop iterating // 2) mark the current loader as the winning candidate (?) // 3) log an info message. + else { + if (loader.generatesDefaults()) { + loader.processContextConfiguration(configAttributes); + } + } + } + // If any loader claims to generate defaults but none actually did, + // throw an exception. + } - loader.processContextConfiguration(configAttributes); + /** + * TODO Document supports(MergedContextConfiguration) implementation. + */ + public boolean supports(MergedContextConfiguration mergedConfig) { + for (SmartContextLoader loader : candidates) { + if (loader.supports(mergedConfig)) { + return true; + } } + return false; } /** @@ -99,21 +124,16 @@ public class DelegatingSmartContextLoader implements SmartContextLoader { loader.getClass().getName(), mergedConfig)); } - // TODO Implement loadContext(MergedContextConfiguration). - // - // Ask each loader if it _can_ load a context from the mergedConfig. + // Ask each loader if it can load a context from the mergedConfig. // If a loader can, let it; otherwise, continue iterating over all // remaining candidates. - // - // If no candidate can load a context from the mergedConfig, throw - // an exception. + if (loader.supports(mergedConfig)) { + return loader.loadContext(mergedConfig); + } } - // TODO Implement delegation logic. - // - // Proof of concept: ensuring that hard-coded delegation to - // GenericXmlContextLoader works "as is". - return candidates.get(0).loadContext(mergedConfig); + throw new IllegalStateException(String.format("None of the candidate SmartContextLoaders [%s] " + + "was able to load an ApplicationContext from [%s].", candidates, mergedConfig)); } // --- ContextLoader ------------------------------------------------------- diff --git a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/SpringJUnit4SuiteTests.java b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/SpringJUnit4SuiteTests.java index 40a8920573..f9096ab5f0 100644 --- a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/SpringJUnit4SuiteTests.java +++ b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/SpringJUnit4SuiteTests.java @@ -26,6 +26,13 @@ import org.springframework.test.context.junit4.annotation.BeanOverridingDefaultC import org.springframework.test.context.junit4.annotation.BeanOverridingExplicitConfigClassesInheritedTests; import org.springframework.test.context.junit4.annotation.DefaultConfigClassesBaseTests; import org.springframework.test.context.junit4.annotation.DefaultConfigClassesInheritedTests; +import org.springframework.test.context.junit4.annotation.DefaultLoaderBeanOverridingDefaultConfigClassesInheritedTests; +import org.springframework.test.context.junit4.annotation.DefaultLoaderBeanOverridingExplicitConfigClassesInheritedTests; +import org.springframework.test.context.junit4.annotation.DefaultLoaderDefaultConfigClassesBaseTests; +import org.springframework.test.context.junit4.annotation.DefaultLoaderDefaultConfigClassesInheritedTests; +import org.springframework.test.context.junit4.annotation.DefaultLoaderExplicitConfigClassesBaseTests; +import org.springframework.test.context.junit4.annotation.DefaultLoaderExplicitConfigClassesInheritedTests; +import org.springframework.test.context.junit4.annotation.ExplicitConfigClassesBaseTests; import org.springframework.test.context.junit4.annotation.ExplicitConfigClassesInheritedTests; import org.springframework.test.context.junit4.orm.HibernateSessionFlushingTests; import org.springframework.test.context.junit4.profile.annotation.DefaultProfileAnnotationConfigTests; @@ -58,12 +65,19 @@ StandardJUnit4FeaturesTests.class,// DefaultConfigClassesBaseTests.class,// DefaultConfigClassesInheritedTests.class,// BeanOverridingDefaultConfigClassesInheritedTests.class,// + ExplicitConfigClassesBaseTests.class,// ExplicitConfigClassesInheritedTests.class,// BeanOverridingExplicitConfigClassesInheritedTests.class,// + DefaultLoaderDefaultConfigClassesBaseTests.class,// + DefaultLoaderDefaultConfigClassesInheritedTests.class,// + DefaultLoaderBeanOverridingDefaultConfigClassesInheritedTests.class,// + DefaultLoaderExplicitConfigClassesBaseTests.class,// + DefaultLoaderExplicitConfigClassesInheritedTests.class,// + DefaultLoaderBeanOverridingExplicitConfigClassesInheritedTests.class,// DefaultProfileAnnotationConfigTests.class,// - DevProfileAnnotationConfigTests.class, // + DevProfileAnnotationConfigTests.class,// DefaultProfileXmlConfigTests.class,// - DevProfileXmlConfigTests.class, // + DevProfileXmlConfigTests.class,// ExpectedExceptionSpringRunnerTests.class,// TimedSpringRunnerTests.class,// RepeatedSpringRunnerTests.class,// diff --git a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/AnnotationConfigSpringJUnit4ClassRunnerAppCtxTests.java b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/AnnotationConfigSpringJUnit4ClassRunnerAppCtxTests.java index 7c7cef5c54..e83eaddd33 100644 --- a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/AnnotationConfigSpringJUnit4ClassRunnerAppCtxTests.java +++ b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/AnnotationConfigSpringJUnit4ClassRunnerAppCtxTests.java @@ -18,7 +18,6 @@ package org.springframework.test.context.junit4.annotation; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunnerAppCtxTests; -import org.springframework.test.context.support.AnnotationConfigContextLoader; /** * Integration tests that verify support for configuration classes in @@ -34,7 +33,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; * @author Sam Brannen * @since 3.1 */ -@ContextConfiguration(loader = AnnotationConfigContextLoader.class, classes = PojoAndStringConfig.class, inheritLocations = false) +@ContextConfiguration(classes = PojoAndStringConfig.class, inheritLocations = false) public class AnnotationConfigSpringJUnit4ClassRunnerAppCtxTests extends SpringJUnit4ClassRunnerAppCtxTests { /* all tests are in the parent class. */ } diff --git a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/AnnotationConfigTestSuite.java b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/AnnotationConfigTestSuite.java index e2ff34c662..f0dde3f7ea 100644 --- a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/AnnotationConfigTestSuite.java +++ b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/AnnotationConfigTestSuite.java @@ -34,8 +34,15 @@ AnnotationConfigSpringJUnit4ClassRunnerAppCtxTests.class,// DefaultConfigClassesBaseTests.class,// DefaultConfigClassesInheritedTests.class,// BeanOverridingDefaultConfigClassesInheritedTests.class,// + ExplicitConfigClassesBaseTests.class,// + ExplicitConfigClassesInheritedTests.class,// BeanOverridingExplicitConfigClassesInheritedTests.class,// - ExplicitConfigClassesInheritedTests.class // + DefaultLoaderDefaultConfigClassesBaseTests.class,// + DefaultLoaderDefaultConfigClassesInheritedTests.class,// + DefaultLoaderBeanOverridingDefaultConfigClassesInheritedTests.class,// + DefaultLoaderExplicitConfigClassesBaseTests.class,// + DefaultLoaderExplicitConfigClassesInheritedTests.class,// + DefaultLoaderBeanOverridingExplicitConfigClassesInheritedTests.class // }) public class AnnotationConfigTestSuite { } diff --git a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/BeanOverridingDefaultConfigClassesInheritedTests.java b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/BeanOverridingDefaultConfigClassesInheritedTests.java index 3bd2fea8ae..61a033f3cb 100644 --- a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/BeanOverridingDefaultConfigClassesInheritedTests.java +++ b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/BeanOverridingDefaultConfigClassesInheritedTests.java @@ -29,8 +29,8 @@ import org.springframework.test.context.ContextConfiguration; * Integration tests that verify support for configuration classes in * the Spring TestContext Framework. * - *

Configuration will be loaded from {@link DefaultConfigClassesBaseTestsConfig} - * and {@link BeanOverridingDefaultConfigClassesInheritedTestsConfig}. + *

Configuration will be loaded from {@link DefaultConfigClassesBaseTests.ContextConfiguration} + * and {@link BeanOverridingDefaultConfigClassesInheritedTests.ContextConfiguration}. * * @author Sam Brannen * @since 3.1 diff --git a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/BeanOverridingExplicitConfigClassesInheritedTests.java b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/BeanOverridingExplicitConfigClassesInheritedTests.java index c0cc2721d0..537e46ead0 100644 --- a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/BeanOverridingExplicitConfigClassesInheritedTests.java +++ b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/BeanOverridingExplicitConfigClassesInheritedTests.java @@ -26,8 +26,8 @@ import org.springframework.test.context.ContextConfiguration; * Integration tests that verify support for configuration classes in * the Spring TestContext Framework. * - *

Configuration will be loaded from {@link DefaultConfigClassesBaseTestsConfig} - * and {@link BeanOverridingDefaultConfigClassesInheritedTestsConfig}. + *

Configuration will be loaded from {@link DefaultConfigClassesBaseTests.ContextConfiguration} + * and {@link BeanOverridingDefaultConfigClassesInheritedTests.ContextConfiguration}. * * @author Sam Brannen * @since 3.1 diff --git a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultConfigClassesBaseTests.java b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultConfigClassesBaseTests.java index 046d95954b..05c586dcd3 100644 --- a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultConfigClassesBaseTests.java +++ b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultConfigClassesBaseTests.java @@ -33,7 +33,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; * Integration tests that verify support for configuration classes in * the Spring TestContext Framework. * - *

Configuration will be loaded from {@link DefaultConfigClassesBaseTestsConfig}. + *

Configuration will be loaded from {@link DefaultConfigClassesBaseTests.ContextConfiguration}. * * @author Sam Brannen * @since 3.1 diff --git a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultConfigClassesInheritedTests.java b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultConfigClassesInheritedTests.java index 6351e0c71d..281c8f3f26 100644 --- a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultConfigClassesInheritedTests.java +++ b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultConfigClassesInheritedTests.java @@ -30,8 +30,8 @@ import org.springframework.test.context.ContextConfiguration; * Integration tests that verify support for configuration classes in * the Spring TestContext Framework. * - *

Configuration will be loaded from {@link DefaultConfigClassesBaseTestsConfig} - * and {@link DefaultConfigClassesInheritedTestsConfig}. + *

Configuration will be loaded from {@link DefaultConfigClassesBaseTests.ContextConfiguration} + * and {@link DefaultConfigClassesInheritedTests.ContextConfiguration}. * * @author Sam Brannen * @since 3.1 diff --git a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultLoaderBeanOverridingDefaultConfigClassesInheritedTests.java b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultLoaderBeanOverridingDefaultConfigClassesInheritedTests.java new file mode 100644 index 0000000000..c61562127f --- /dev/null +++ b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultLoaderBeanOverridingDefaultConfigClassesInheritedTests.java @@ -0,0 +1,62 @@ +/* + * Copyright 2002-2011 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.test.context.junit4.annotation; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.Test; +import org.springframework.beans.Employee; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.support.DelegatingSmartContextLoader; + +/** + * Integration tests that verify support for configuration classes in + * the Spring TestContext Framework in conjunction with the + * {@link DelegatingSmartContextLoader}. + * + * @author Sam Brannen + * @since 3.1 + */ +@ContextConfiguration +public class DefaultLoaderBeanOverridingDefaultConfigClassesInheritedTests extends + DefaultLoaderDefaultConfigClassesBaseTests { + + @Configuration + static class Config { + + @Bean + public Employee employee() { + Employee employee = new Employee(); + employee.setName("Yoda"); + employee.setAge(900); + employee.setCompany("The Force"); + return employee; + } + } + + + @Test + @Override + public void verifyEmployeeSetFromBaseContextConfig() { + assertNotNull("The employee should have been autowired.", this.employee); + assertEquals("The employee bean should have been overridden.", "Yoda", this.employee.getName()); + } + +} diff --git a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultLoaderBeanOverridingExplicitConfigClassesInheritedTests.java b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultLoaderBeanOverridingExplicitConfigClassesInheritedTests.java new file mode 100644 index 0000000000..cdf4207a01 --- /dev/null +++ b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultLoaderBeanOverridingExplicitConfigClassesInheritedTests.java @@ -0,0 +1,45 @@ +/* + * Copyright 2002-2011 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.test.context.junit4.annotation; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.Test; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.support.DelegatingSmartContextLoader; + +/** + * Integration tests that verify support for configuration classes in + * the Spring TestContext Framework in conjunction with the + * {@link DelegatingSmartContextLoader}. + * + * @author Sam Brannen + * @since 3.1 + */ +@ContextConfiguration(classes = DefaultLoaderBeanOverridingDefaultConfigClassesInheritedTests.Config.class) +public class DefaultLoaderBeanOverridingExplicitConfigClassesInheritedTests extends + DefaultLoaderExplicitConfigClassesBaseTests { + + @Test + @Override + public void verifyEmployeeSetFromBaseContextConfig() { + assertNotNull("The employee should have been autowired.", this.employee); + assertEquals("The employee bean should have been overridden.", "Yoda", this.employee.getName()); + } + +} diff --git a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultLoaderDefaultConfigClassesBaseTests.java b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultLoaderDefaultConfigClassesBaseTests.java new file mode 100644 index 0000000000..dcc5249163 --- /dev/null +++ b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultLoaderDefaultConfigClassesBaseTests.java @@ -0,0 +1,68 @@ +/* + * Copyright 2002-2011 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.test.context.junit4.annotation; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.Employee; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.DelegatingSmartContextLoader; + +/** + * Integration tests that verify support for configuration classes in + * the Spring TestContext Framework in conjunction with the + * {@link DelegatingSmartContextLoader}. + * + * @author Sam Brannen + * @since 3.1 + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration +public class DefaultLoaderDefaultConfigClassesBaseTests { + + @Configuration + static class Config { + + @Bean + public Employee employee() { + Employee employee = new Employee(); + employee.setName("John Smith"); + employee.setAge(42); + employee.setCompany("Acme Widgets, Inc."); + return employee; + } + } + + + @Autowired + protected Employee employee; + + + @Test + public void verifyEmployeeSetFromBaseContextConfig() { + assertNotNull("The employee field should have been autowired.", this.employee); + assertEquals("John Smith", this.employee.getName()); + } + +} diff --git a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultLoaderDefaultConfigClassesInheritedTests.java b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultLoaderDefaultConfigClassesInheritedTests.java new file mode 100644 index 0000000000..a5706a1517 --- /dev/null +++ b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultLoaderDefaultConfigClassesInheritedTests.java @@ -0,0 +1,61 @@ +/* + * Copyright 2002-2011 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.test.context.junit4.annotation; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.Test; +import org.springframework.beans.Pet; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.support.DelegatingSmartContextLoader; + +/** + * Integration tests that verify support for configuration classes in + * the Spring TestContext Framework in conjunction with the + * {@link DelegatingSmartContextLoader}. + * + * @author Sam Brannen + * @since 3.1 + */ +@ContextConfiguration +public class DefaultLoaderDefaultConfigClassesInheritedTests extends DefaultLoaderDefaultConfigClassesBaseTests { + + @Configuration + static class Config { + + @Bean + public Pet pet() { + return new Pet("Fido"); + } + } + + + @Autowired + private Pet pet; + + + @Test + public void verifyPetSetFromExtendedContextConfig() { + assertNotNull("The pet should have been autowired.", this.pet); + assertEquals("Fido", this.pet.getName()); + } + +} diff --git a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultLoaderExplicitConfigClassesBaseTests.java b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultLoaderExplicitConfigClassesBaseTests.java new file mode 100644 index 0000000000..46b7259581 --- /dev/null +++ b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultLoaderExplicitConfigClassesBaseTests.java @@ -0,0 +1,52 @@ +/* + * Copyright 2002-2011 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.test.context.junit4.annotation; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.Employee; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.DelegatingSmartContextLoader; + +/** + * Integration tests that verify support for configuration classes in + * the Spring TestContext Framework in conjunction with the + * {@link DelegatingSmartContextLoader}. + * + * @author Sam Brannen + * @since 3.1 + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = DefaultLoaderDefaultConfigClassesBaseTests.Config.class) +public class DefaultLoaderExplicitConfigClassesBaseTests { + + @Autowired + protected Employee employee; + + + @Test + public void verifyEmployeeSetFromBaseContextConfig() { + assertNotNull("The employee should have been autowired.", this.employee); + assertEquals("John Smith", this.employee.getName()); + } + +} diff --git a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultLoaderExplicitConfigClassesInheritedTests.java b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultLoaderExplicitConfigClassesInheritedTests.java new file mode 100644 index 0000000000..69a2c846b5 --- /dev/null +++ b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultLoaderExplicitConfigClassesInheritedTests.java @@ -0,0 +1,52 @@ +/* + * Copyright 2002-2011 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.test.context.junit4.annotation; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.Pet; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.DelegatingSmartContextLoader; + +/** + * Integration tests that verify support for configuration classes in + * the Spring TestContext Framework in conjunction with the + * {@link DelegatingSmartContextLoader}. + * + * @author Sam Brannen + * @since 3.1 + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = DefaultLoaderDefaultConfigClassesInheritedTests.Config.class) +public class DefaultLoaderExplicitConfigClassesInheritedTests extends DefaultLoaderExplicitConfigClassesBaseTests { + + @Autowired + private Pet pet; + + + @Test + public void verifyPetSetFromExtendedContextConfig() { + assertNotNull("The pet should have been autowired.", this.pet); + assertEquals("Fido", this.pet.getName()); + } + +} diff --git a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/ExplicitConfigClassesBaseTests.java b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/ExplicitConfigClassesBaseTests.java index e45bc3d033..cd351bdfc0 100644 --- a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/ExplicitConfigClassesBaseTests.java +++ b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/ExplicitConfigClassesBaseTests.java @@ -31,7 +31,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; * Integration tests that verify support for configuration classes in * the Spring TestContext Framework. * - *

Configuration will be loaded from {@link DefaultConfigClassesBaseTestsConfig}. + *

Configuration will be loaded from {@link DefaultConfigClassesBaseTests.ContextConfiguration}. * * @author Sam Brannen * @since 3.1 diff --git a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/ExplicitConfigClassesInheritedTests.java b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/ExplicitConfigClassesInheritedTests.java index 21b19c31b2..642d2d67e7 100644 --- a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/ExplicitConfigClassesInheritedTests.java +++ b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/ExplicitConfigClassesInheritedTests.java @@ -31,8 +31,8 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; * Integration tests that verify support for configuration classes in * the Spring TestContext Framework. * - *

Configuration will be loaded from {@link DefaultConfigClassesBaseTestsConfig} - * and {@link DefaultConfigClassesInheritedTestsConfig} + *

Configuration will be loaded from {@link DefaultConfigClassesInheritedTests.ContextConfiguration} + * and {@link DefaultConfigClassesBaseTests.ContextConfiguration}. * * @author Sam Brannen * @since 3.1