Assert context uniqueness against merged config
Prior to this commit, the uniqueness check for @ContextConfiguration attributes within a @ContextHierarchy was performed at a single test class level instead of against the merged configuration for all test class levels in the test class hierarchy. This commit addresses this issue by moving the uniqueness check algorithm from resolveContextHierarchyAttributes() to buildContextHierarchyMap() within ContextLoaderUtils. Issue: SPR-10997
This commit is contained in:
@@ -21,6 +21,8 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.springframework.context.ApplicationContextInitializer;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.test.context.support.AnnotationConfigContextLoader;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.*;
|
||||
@@ -152,29 +154,6 @@ public class ContextLoaderUtilsContextHierarchyTests extends AbstractContextLoad
|
||||
assertThat(configAttributesListClassLevel3.get(2).getLocations()[0], equalTo("3-C.xml"));
|
||||
}
|
||||
|
||||
private void assertContextConfigEntriesAreNotUnique(Class<?> testClass) {
|
||||
try {
|
||||
resolveContextHierarchyAttributes(testClass);
|
||||
fail("Should throw an IllegalStateException");
|
||||
}
|
||||
catch (IllegalStateException e) {
|
||||
String msg = String.format(
|
||||
"The @ContextConfiguration elements configured via @ContextHierarchy in test class [%s] must define unique contexts to load.",
|
||||
testClass.getName());
|
||||
assertEquals(msg, e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void resolveContextHierarchyAttributesForSingleTestClassWithMultiLevelContextHierarchyWithEmptyContextConfig() {
|
||||
assertContextConfigEntriesAreNotUnique(SingleTestClassWithMultiLevelContextHierarchyWithEmptyContextConfig.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void resolveContextHierarchyAttributesForSingleTestClassWithMultiLevelContextHierarchyWithDuplicatedContextConfig() {
|
||||
assertContextConfigEntriesAreNotUnique(SingleTestClassWithMultiLevelContextHierarchyWithDuplicatedContextConfig.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void buildContextHierarchyMapForTestClassHierarchyWithMultiLevelContextHierarchies() {
|
||||
Map<String, List<ContextConfigurationAttributes>> map = buildContextHierarchyMap(TestClass3WithMultiLevelContextHierarchy.class);
|
||||
@@ -262,6 +241,58 @@ public class ContextLoaderUtilsContextHierarchyTests extends AbstractContextLoad
|
||||
assertThat(level3Config.get(0).getLocations()[0], is("2-C.xml"));
|
||||
}
|
||||
|
||||
private void assertContextConfigEntriesAreNotUnique(Class<?> testClass) {
|
||||
try {
|
||||
buildContextHierarchyMap(testClass);
|
||||
fail("Should throw an IllegalStateException");
|
||||
}
|
||||
catch (IllegalStateException e) {
|
||||
String msg = String.format(
|
||||
"The @ContextConfiguration elements configured via @ContextHierarchy in test class [%s] and its superclasses must define unique contexts per hierarchy level.",
|
||||
testClass.getName());
|
||||
assertEquals(msg, e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void buildContextHierarchyMapForSingleTestClassWithMultiLevelContextHierarchyWithEmptyContextConfig() {
|
||||
assertContextConfigEntriesAreNotUnique(SingleTestClassWithMultiLevelContextHierarchyWithEmptyContextConfig.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void buildContextHierarchyMapForSingleTestClassWithMultiLevelContextHierarchyWithDuplicatedContextConfig() {
|
||||
assertContextConfigEntriesAreNotUnique(SingleTestClassWithMultiLevelContextHierarchyWithDuplicatedContextConfig.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to reproduce bug reported in https://jira.springsource.org/browse/SPR-10997
|
||||
*/
|
||||
@Test
|
||||
public void buildContextHierarchyMapForTestClassHierarchyWithMultiLevelContextHierarchiesAndOverriddenInitializers() {
|
||||
Map<String, List<ContextConfigurationAttributes>> map = buildContextHierarchyMap(TestClass2WithMultiLevelContextHierarchyWithOverriddenInitializers.class);
|
||||
|
||||
assertThat(map.size(), is(2));
|
||||
assertThat(map.keySet(), hasItems("alpha", "beta"));
|
||||
|
||||
List<ContextConfigurationAttributes> alphaConfig = map.get("alpha");
|
||||
assertThat(alphaConfig.size(), is(2));
|
||||
assertThat(alphaConfig.get(0).getLocations().length, is(1));
|
||||
assertThat(alphaConfig.get(0).getLocations()[0], is("1-A.xml"));
|
||||
assertThat(alphaConfig.get(0).getInitializers().length, is(0));
|
||||
assertThat(alphaConfig.get(1).getLocations().length, is(0));
|
||||
assertThat(alphaConfig.get(1).getInitializers().length, is(1));
|
||||
assertEquals(DummyApplicationContextInitializer.class, alphaConfig.get(1).getInitializers()[0]);
|
||||
|
||||
List<ContextConfigurationAttributes> betaConfig = map.get("beta");
|
||||
assertThat(betaConfig.size(), is(2));
|
||||
assertThat(betaConfig.get(0).getLocations().length, is(1));
|
||||
assertThat(betaConfig.get(0).getLocations()[0], is("1-B.xml"));
|
||||
assertThat(betaConfig.get(0).getInitializers().length, is(0));
|
||||
assertThat(betaConfig.get(1).getLocations().length, is(0));
|
||||
assertThat(betaConfig.get(1).getInitializers().length, is(1));
|
||||
assertEquals(DummyApplicationContextInitializer.class, betaConfig.get(1).getInitializers()[0]);
|
||||
}
|
||||
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
@@ -401,4 +432,40 @@ public class ContextLoaderUtilsContextHierarchyTests extends AbstractContextLoad
|
||||
private static class SingleTestClassWithMultiLevelContextHierarchyWithDuplicatedContextConfig {
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to reproduce bug reported in https://jira.springsource.org/browse/SPR-10997
|
||||
*/
|
||||
@ContextHierarchy({//
|
||||
//
|
||||
@ContextConfiguration(name = "alpha", locations = "1-A.xml"),//
|
||||
@ContextConfiguration(name = "beta", locations = "1-B.xml") //
|
||||
})
|
||||
private static class TestClass1WithMultiLevelContextHierarchyWithUniqueContextConfig {
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to reproduce bug reported in https://jira.springsource.org/browse/SPR-10997
|
||||
*/
|
||||
@ContextHierarchy({//
|
||||
//
|
||||
@ContextConfiguration(name = "alpha", initializers = DummyApplicationContextInitializer.class),//
|
||||
@ContextConfiguration(name = "beta", initializers = DummyApplicationContextInitializer.class) //
|
||||
})
|
||||
private static class TestClass2WithMultiLevelContextHierarchyWithOverriddenInitializers extends
|
||||
TestClass1WithMultiLevelContextHierarchyWithUniqueContextConfig {
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to reproduce bug reported in https://jira.springsource.org/browse/SPR-10997
|
||||
*/
|
||||
private static class DummyApplicationContextInitializer implements
|
||||
ApplicationContextInitializer<ConfigurableApplicationContext> {
|
||||
|
||||
@Override
|
||||
public void initialize(ConfigurableApplicationContext applicationContext) {
|
||||
/* no-op */
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user