[SPR-6184] Refactored internals of ContextLoaderUtils; @Ignore'd broken test.

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4166 50f2f4bb-b051-0410-bef5-90022cba6387
This commit is contained in:
Sam Brannen 2011-04-03 17:45:20 +00:00
parent d63dba327d
commit 29c33bcd7d
4 changed files with 54 additions and 35 deletions

View File

@ -162,41 +162,31 @@ public abstract class ContextLoaderUtils {
Assert.notNull(contextLoader, "ContextLoader must not be null"); Assert.notNull(contextLoader, "ContextLoader must not be null");
Assert.notNull(clazz, "Class must not be null"); Assert.notNull(clazz, "Class must not be null");
List<String> locationsList = new ArrayList<String>();
Class<ContextConfiguration> annotationType = ContextConfiguration.class; Class<ContextConfiguration> annotationType = ContextConfiguration.class;
Class<?> declaringClass = AnnotationUtils.findAnnotationDeclaringClass(annotationType, clazz); Class<?> declaringClass = AnnotationUtils.findAnnotationDeclaringClass(annotationType, clazz);
Assert.notNull(declaringClass, "Could not find an 'annotation declaring class' for annotation type [" Assert.notNull(declaringClass, "Could not find an 'annotation declaring class' for annotation type ["
+ annotationType + "] and class [" + clazz + "]"); + annotationType + "] and class [" + clazz + "]");
// --- configuration class resources ---------------------------- boolean processConfigurationClasses = (contextLoader instanceof ResourceTypeAwareContextLoader)
&& ((ResourceTypeAwareContextLoader) contextLoader).supportsClassResources();
// TODO [SPR-6184] Implement recursive search for configuration classes. return processConfigurationClasses ? //
// This needs to integrate seamlessly (i.e., analogous yet mutually resolveConfigurationClassNames(contextLoader, annotationType, declaringClass)
// exclusive) with the existing locations search. : resolveStringLocations(contextLoader, annotationType, declaringClass);
if ((contextLoader instanceof ResourceTypeAwareContextLoader) }
&& ((ResourceTypeAwareContextLoader) contextLoader).supportsClassResources()) {
ContextConfiguration cc = declaringClass.getAnnotation(annotationType); /**
if (logger.isTraceEnabled()) { * TODO Document resolveStringLocations().
logger.trace(String.format("Retrieved @ContextConfiguration [%s] for declaring class [%s].", cc, *
declaringClass)); * @param contextLoader
} * @param annotationType
* @param declaringClass
* @return
*/
private static String[] resolveStringLocations(ContextLoader contextLoader,
Class<ContextConfiguration> annotationType, Class<?> declaringClass) {
String[] classNames = null; List<String> locationsList = new ArrayList<String>();
Class<?>[] configClasses = cc.classes();
if (!ObjectUtils.isEmpty(configClasses)) {
classNames = new String[configClasses.length];
for (int i = 0; i < configClasses.length; i++) {
classNames[i] = configClasses[i].getName();
}
}
return contextLoader.processLocations(declaringClass, classNames);
}
// --- location/value resources ---------------------------------
while (declaringClass != null) { while (declaringClass != null) {
ContextConfiguration contextConfiguration = declaringClass.getAnnotation(annotationType); ContextConfiguration contextConfiguration = declaringClass.getAnnotation(annotationType);
@ -228,4 +218,37 @@ public abstract class ContextLoaderUtils {
return locationsList.toArray(new String[locationsList.size()]); return locationsList.toArray(new String[locationsList.size()]);
} }
/**
* TODO Document resolveConfigClassNames().
*
* @param contextLoader
* @param annotationType
* @param declaringClass
* @return
*/
private static String[] resolveConfigurationClassNames(ContextLoader contextLoader,
Class<ContextConfiguration> annotationType, Class<?> declaringClass) {
// TODO [SPR-6184] Implement recursive search for configuration classes.
ContextConfiguration contextConfiguration = declaringClass.getAnnotation(annotationType);
if (logger.isTraceEnabled()) {
logger.trace(String.format("Retrieved @ContextConfiguration [%s] for declaring class [%s].",
contextConfiguration, declaringClass));
}
String[] classNames = null;
Class<?>[] configClasses = contextConfiguration.classes();
if (!ObjectUtils.isEmpty(configClasses)) {
classNames = new String[configClasses.length];
for (int i = 0; i < configClasses.length; i++) {
classNames[i] = configClasses[i].getName();
}
}
return contextLoader.processLocations(declaringClass, classNames);
}
} }

View File

@ -32,13 +32,9 @@ import org.junit.runners.Suite.SuiteClasses;
AnnotationConfigSpringJUnit4ClassRunnerAppCtxTests.class, AnnotationConfigSpringJUnit4ClassRunnerAppCtxTests.class,
DefaultConfigClassBaseTests.class DefaultConfigClassBaseTests.class,
// TODO Uncomment once working. Note that JUnit's Suite runner apparently DefaultConfigClassInheritedTests.class
// does not heed the presence of @Ignore on a suite class, at least not
// when run within STS 2.6.0.
//
// DefaultConfigClassInheritedTests.class
}) })
public class AnnotationConfigSuiteTests { public class AnnotationConfigSuiteTests {

View File

@ -19,7 +19,6 @@ package org.springframework.test.context.junit4.annotation;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotNull;
import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.beans.Employee; import org.springframework.beans.Employee;
@ -34,7 +33,6 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader;
* @author Sam Brannen * @author Sam Brannen
* @since 3.1 * @since 3.1
*/ */
@Ignore("[SPR-6184] Disabled until ContextLoaderUtils supports recursive search for configuration classes")
@RunWith(SpringJUnit4ClassRunner.class) @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = AnnotationConfigContextLoader.class) @ContextConfiguration(loader = AnnotationConfigContextLoader.class)
public class DefaultConfigClassBaseTests { public class DefaultConfigClassBaseTests {

View File

@ -19,6 +19,7 @@ package org.springframework.test.context.junit4.annotation;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotNull;
import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
import org.springframework.beans.Pet; import org.springframework.beans.Pet;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -30,6 +31,7 @@ import org.springframework.test.context.ContextConfiguration;
* @author Sam Brannen * @author Sam Brannen
* @since 3.1 * @since 3.1
*/ */
@Ignore("[SPR-6184] Disabled until ContextLoaderUtils supports recursive search for configuration classes")
@ContextConfiguration @ContextConfiguration
public class DefaultConfigClassInheritedTests extends DefaultConfigClassBaseTests { public class DefaultConfigClassInheritedTests extends DefaultConfigClassBaseTests {