[SPR-7960] resolveActivatedProfiles() now resolves a unique set of activated profiles
This commit is contained in:
parent
13b7f1a31b
commit
f64344b296
|
|
@ -18,8 +18,9 @@ package org.springframework.test.context;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
|
@ -228,7 +229,7 @@ abstract class ContextLoaderUtils {
|
|||
annotationType, clazz));
|
||||
}
|
||||
|
||||
List<String> profilesList = new ArrayList<String>();
|
||||
final Set<String> activeProfiles = new LinkedHashSet<String>();
|
||||
|
||||
while (declaringClass != null) {
|
||||
ActivateProfiles activateProfiles = declaringClass.getAnnotation(annotationType);
|
||||
|
|
@ -253,19 +254,9 @@ abstract class ContextLoaderUtils {
|
|||
profiles = valueProfiles;
|
||||
}
|
||||
|
||||
if (!ObjectUtils.isEmpty(profiles)) {
|
||||
|
||||
// Preserve the order in which the profiles were declared by
|
||||
// reversing the array. This is necessary since we prepend each
|
||||
// non-empty element to the aggregated list as we traverse the
|
||||
// class hierarchy. Note that the following works because
|
||||
// Arrays.asList() "writes through" to the underlying array.
|
||||
Collections.reverse(Arrays.<String> asList(profiles));
|
||||
|
||||
for (String profile : profiles) {
|
||||
if (StringUtils.hasText(profile)) {
|
||||
profilesList.add(0, profile);
|
||||
}
|
||||
for (String profile : profiles) {
|
||||
if (StringUtils.hasText(profile)) {
|
||||
activeProfiles.add(profile);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -273,7 +264,7 @@ abstract class ContextLoaderUtils {
|
|||
annotationType, declaringClass.getSuperclass()) : null;
|
||||
}
|
||||
|
||||
return profilesList.toArray(new String[profilesList.size()]);
|
||||
return StringUtils.toStringArray(activeProfiles);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -18,6 +18,10 @@ package org.springframework.test.context;
|
|||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
|
|
@ -50,6 +54,18 @@ public class ContextLoaderUtilsTests {
|
|||
assertEquals(0, profiles.length);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void resolveActivatedProfilesWithDuplicatedProfiles() {
|
||||
String[] profiles = ContextLoaderUtils.resolveActivatedProfiles(DuplicatedProfiles.class);
|
||||
assertNotNull(profiles);
|
||||
assertEquals(3, profiles.length);
|
||||
|
||||
List<String> list = Arrays.asList(profiles);
|
||||
assertTrue(list.contains("foo"));
|
||||
assertTrue(list.contains("bar"));
|
||||
assertTrue(list.contains("baz"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void resolveActivatedProfilesWithLocalAnnotation() {
|
||||
String[] profiles = ContextLoaderUtils.resolveActivatedProfiles(Foo.class);
|
||||
|
|
@ -71,8 +87,10 @@ public class ContextLoaderUtilsTests {
|
|||
String[] profiles = ContextLoaderUtils.resolveActivatedProfiles(Bar.class);
|
||||
assertNotNull(profiles);
|
||||
assertEquals(2, profiles.length);
|
||||
assertEquals("foo", profiles[0]);
|
||||
assertEquals("bar", profiles[1]);
|
||||
|
||||
List<String> list = Arrays.asList(profiles);
|
||||
assertTrue(list.contains("foo"));
|
||||
assertTrue(list.contains("bar"));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -80,8 +98,10 @@ public class ContextLoaderUtilsTests {
|
|||
String[] profiles = ContextLoaderUtils.resolveActivatedProfiles(Animals.class);
|
||||
assertNotNull(profiles);
|
||||
assertEquals(2, profiles.length);
|
||||
assertEquals("dog", profiles[0]);
|
||||
assertEquals("cat", profiles[1]);
|
||||
|
||||
List<String> list = Arrays.asList(profiles);
|
||||
assertTrue(list.contains("dog"));
|
||||
assertTrue(list.contains("cat"));
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -96,6 +116,10 @@ public class ContextLoaderUtilsTests {
|
|||
private static class EmptyProfiles {
|
||||
}
|
||||
|
||||
@ActivateProfiles({ "foo", "bar", "foo", "bar", "baz" })
|
||||
private static class DuplicatedProfiles {
|
||||
}
|
||||
|
||||
@ActivateProfiles(profiles = "foo")
|
||||
private static class Foo {
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue