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 683a200d54b8f9a9fbaea82eaf46f20548fdfe64..16f8655e0a8697f15895ed01706aeac94f796651 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 faf88f520e1232ac377499d05de8cd4610e3dda0..a8d3261115f7cc629ba86b0e63b6ca7256405ce9 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 bdb8adad6cdfb49210407f3294853521500cd06d..87599eb13b1394591b8784602c6fbe4d915e7d3b 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 8e4de5d39957c5ce43c6560b67b8706b6c728af3..6aa828a1c968b5d1a74af6baae31340ecfe1caaf 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 40a89205730ea4c412a506fd734845e8d0da4fe7..f9096ab5f0674aa6a7e387909a44325740aa3900 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 7c7cef5c5440c9add8a405476e4408560fc95fa7..e83eaddd33d06695322677d454bcda01940ab92a 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 e2ff34c6625ed2942bf9ef77be0b7393b9c6c5ec..f0dde3f7ea2555d57668fc89b6ef58ccd49f96f1 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 3bd2fea8ae18887c16dd0dcf038cfd60d7da9485..61a033f3cb94b5509c996f73bed08c4141ab834b 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 c0cc2721d03f80b0a7696d45bdd749a878c189fc..537e46ead0e069a0b5c843f4b83ec6592bcd661a 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 046d95954b56206bdd752278cd7359decc23dd2c..05c586dcd3a0bcaec49570990d8c7da1e49b8a07 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 6351e0c71d0e6c84f340880df28037d0b6d029cb..281c8f3f266b78c0dc331e065bcbd320270bde87 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 0000000000000000000000000000000000000000..c61562127f505078cb1c8d4b663ef20f04644159 --- /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 0000000000000000000000000000000000000000..cdf4207a0161b26b4ecbadda7d067d7038806a1a --- /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 0000000000000000000000000000000000000000..dcc5249163c642122d09098e8568156ff37e0c6e --- /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 0000000000000000000000000000000000000000..a5706a1517d65caa593f2bd80b1fa48d55042873 --- /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 0000000000000000000000000000000000000000..46b72595814b7671dad246c0eae088ec8873a5d8 --- /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 0000000000000000000000000000000000000000..69a2c846b53d1747de08dee95a078c94a47b633c --- /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 e45bc3d033106a9ab0636b008766e23c2c06f732..cd351bdfc01b891ef42aaa71129fee8dd1a39a06 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 21b19c31b2665c5900a15f76644ecbba211b12b2..642d2d67e75da8a1848684419875043db56c6b73 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