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 63aca620643..6f677a610f5 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 @@ -254,6 +254,12 @@ abstract class ContextLoaderUtils { } 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. asList(profiles)); for (String profile : profiles) { diff --git a/org.springframework.test/src/test/java/org/springframework/test/context/ContextLoaderUtilsTests.java b/org.springframework.test/src/test/java/org/springframework/test/context/ContextLoaderUtilsTests.java index 0ed8ccb4927..333422fe67a 100644 --- a/org.springframework.test/src/test/java/org/springframework/test/context/ContextLoaderUtilsTests.java +++ b/org.springframework.test/src/test/java/org/springframework/test/context/ContextLoaderUtilsTests.java @@ -36,6 +36,20 @@ public class ContextLoaderUtilsTests { assertEquals(0, profiles.length); } + @Test + public void resolveActivatedProfilesWithNoProfilesDeclared() { + String[] profiles = ContextLoaderUtils.resolveActivatedProfiles(NoProfilesDeclared.class); + assertNotNull(profiles); + assertEquals(0, profiles.length); + } + + @Test + public void resolveActivatedProfilesWithEmptyProfiles() { + String[] profiles = ContextLoaderUtils.resolveActivatedProfiles(EmptyProfiles.class); + assertNotNull(profiles); + assertEquals(0, profiles.length); + } + @Test public void resolveActivatedProfilesWithLocalAnnotation() { String[] profiles = ContextLoaderUtils.resolveActivatedProfiles(Foo.class); @@ -74,6 +88,14 @@ public class ContextLoaderUtilsTests { private static class Enigma { } + @ActivateProfiles + private static class NoProfilesDeclared { + } + + @ActivateProfiles({ " ", "\t" }) + private static class EmptyProfiles { + } + @ActivateProfiles(profiles = "foo") private static class Foo { }