From f3d125626dca6db923b8551b7ebac05c681ec0d5 Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Sun, 3 Apr 2011 17:45:20 +0000 Subject: [PATCH] [SPR-6184] Refactored internals of ContextLoaderUtils; @Ignore'd broken test. --- .../test/context/ContextLoaderUtils.java | 77 ++++++++++++------- .../AnnotationConfigSuiteTests.java | 8 +- .../DefaultConfigClassBaseTests.java | 2 - .../DefaultConfigClassInheritedTests.java | 2 + 4 files changed, 54 insertions(+), 35 deletions(-) diff --git a/org.springframework.test/src/main/java/org/springframework/test/context/ContextLoaderUtils.java b/org.springframework.test/src/main/java/org/springframework/test/context/ContextLoaderUtils.java index 32be47057a..51dfbaac63 100644 --- a/org.springframework.test/src/main/java/org/springframework/test/context/ContextLoaderUtils.java +++ b/org.springframework.test/src/main/java/org/springframework/test/context/ContextLoaderUtils.java @@ -162,41 +162,31 @@ public abstract class ContextLoaderUtils { Assert.notNull(contextLoader, "ContextLoader must not be null"); Assert.notNull(clazz, "Class must not be null"); - List locationsList = new ArrayList(); Class annotationType = ContextConfiguration.class; Class declaringClass = AnnotationUtils.findAnnotationDeclaringClass(annotationType, clazz); Assert.notNull(declaringClass, "Could not find an 'annotation declaring class' for annotation type [" + annotationType + "] and class [" + clazz + "]"); - // --- configuration class resources ---------------------------- - - // TODO [SPR-6184] Implement recursive search for configuration classes. - // This needs to integrate seamlessly (i.e., analogous yet mutually - // exclusive) with the existing locations search. - if ((contextLoader instanceof ResourceTypeAwareContextLoader) - && ((ResourceTypeAwareContextLoader) contextLoader).supportsClassResources()) { - - ContextConfiguration cc = declaringClass.getAnnotation(annotationType); - if (logger.isTraceEnabled()) { - logger.trace(String.format("Retrieved @ContextConfiguration [%s] for declaring class [%s].", cc, - declaringClass)); - } - - String[] classNames = null; - - Class[] configClasses = cc.classes(); - if (!ObjectUtils.isEmpty(configClasses)) { - classNames = new String[configClasses.length]; + boolean processConfigurationClasses = (contextLoader instanceof ResourceTypeAwareContextLoader) + && ((ResourceTypeAwareContextLoader) contextLoader).supportsClassResources(); - for (int i = 0; i < configClasses.length; i++) { - classNames[i] = configClasses[i].getName(); - } - } + return processConfigurationClasses ? // + resolveConfigurationClassNames(contextLoader, annotationType, declaringClass) + : resolveStringLocations(contextLoader, annotationType, declaringClass); + } - return contextLoader.processLocations(declaringClass, classNames); - } + /** + * TODO Document resolveStringLocations(). + * + * @param contextLoader + * @param annotationType + * @param declaringClass + * @return + */ + private static String[] resolveStringLocations(ContextLoader contextLoader, + Class annotationType, Class declaringClass) { - // --- location/value resources --------------------------------- + List locationsList = new ArrayList(); while (declaringClass != null) { ContextConfiguration contextConfiguration = declaringClass.getAnnotation(annotationType); @@ -228,4 +218,37 @@ public abstract class ContextLoaderUtils { return locationsList.toArray(new String[locationsList.size()]); } + /** + * TODO Document resolveConfigClassNames(). + * + * @param contextLoader + * @param annotationType + * @param declaringClass + * @return + */ + private static String[] resolveConfigurationClassNames(ContextLoader contextLoader, + Class 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); + } + } diff --git a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/AnnotationConfigSuiteTests.java b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/AnnotationConfigSuiteTests.java index 7c397078b2..740c7888e1 100644 --- a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/AnnotationConfigSuiteTests.java +++ b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/AnnotationConfigSuiteTests.java @@ -32,13 +32,9 @@ import org.junit.runners.Suite.SuiteClasses; AnnotationConfigSpringJUnit4ClassRunnerAppCtxTests.class, -DefaultConfigClassBaseTests.class +DefaultConfigClassBaseTests.class, -// TODO Uncomment once working. Note that JUnit's Suite runner apparently -// does not heed the presence of @Ignore on a suite class, at least not -// when run within STS 2.6.0. -// -// DefaultConfigClassInheritedTests.class +DefaultConfigClassInheritedTests.class }) public class AnnotationConfigSuiteTests { diff --git a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultConfigClassBaseTests.java b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultConfigClassBaseTests.java index 466443fe9c..7da86c1f43 100644 --- a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultConfigClassBaseTests.java +++ b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultConfigClassBaseTests.java @@ -19,7 +19,6 @@ package org.springframework.test.context.junit4.annotation; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.Employee; @@ -34,7 +33,6 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; * @author Sam Brannen * @since 3.1 */ -@Ignore("[SPR-6184] Disabled until ContextLoaderUtils supports recursive search for configuration classes") @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(loader = AnnotationConfigContextLoader.class) public class DefaultConfigClassBaseTests { diff --git a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultConfigClassInheritedTests.java b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultConfigClassInheritedTests.java index 0c0011a5bf..caf769b49b 100644 --- a/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultConfigClassInheritedTests.java +++ b/org.springframework.test/src/test/java/org/springframework/test/context/junit4/annotation/DefaultConfigClassInheritedTests.java @@ -19,6 +19,7 @@ package org.springframework.test.context.junit4.annotation; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import org.junit.Ignore; import org.junit.Test; import org.springframework.beans.Pet; import org.springframework.beans.factory.annotation.Autowired; @@ -30,6 +31,7 @@ import org.springframework.test.context.ContextConfiguration; * @author Sam Brannen * @since 3.1 */ +@Ignore("[SPR-6184] Disabled until ContextLoaderUtils supports recursive search for configuration classes") @ContextConfiguration public class DefaultConfigClassInheritedTests extends DefaultConfigClassBaseTests {