diff --git a/org.springframework.core/src/main/java/org/springframework/core/env/MutablePropertySources.java b/org.springframework.core/src/main/java/org/springframework/core/env/MutablePropertySources.java index 9483c645775..418d7572b19 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/env/MutablePropertySources.java +++ b/org.springframework.core/src/main/java/org/springframework/core/env/MutablePropertySources.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,44 +16,80 @@ package org.springframework.core.env; -import java.util.Collections; +import java.util.Iterator; import java.util.LinkedList; -import java.util.List; import org.springframework.util.Assert; - +/** + * Default implementation of the {@link PropertySources} interface. + * Allows manipulation of contained property sources and provides constructor + * to copying an existing {@code PropertySources} instance. + * + *

Where precedence is mentioned in methods such as {@link #addFirst} + * and {@link #addLast}, this is with regard to the order in which property sources + * will be searched when resolving a given property with a {@link PropertyResolver}. + * + * @author Chris Beams + * @since 3.1 + * @see PropertySourcesPropertyResolver + */ public class MutablePropertySources implements PropertySources { - private final LinkedList> propertySourceList = new LinkedList>(); - static final String NON_EXISTENT_PROPERTY_SOURCE_MESSAGE = "PropertySource named [%s] does not exist"; static final String ILLEGAL_RELATIVE_ADDITION_MESSAGE = "PropertySource named [%s] cannot be added relative to itself"; + private final LinkedList> propertySourceList = new LinkedList>(); + + /** + * Create a new {@link MutablePropertySources} object. + */ public MutablePropertySources() { } + /** + * Create a new {@code MutablePropertySources} from the given propertySources + * object, preserving the original order of contained {@code PropertySource} objects. + */ public MutablePropertySources(PropertySources propertySources) { - this.addAll(propertySources); - } - - public void addAll(PropertySources propertySources) { - for (PropertySource propertySource : propertySources.asList()) { + for (PropertySource propertySource : propertySources) { this.addLast(propertySource); } } + public boolean contains(String name) { + return this.propertySourceList.contains(PropertySource.named(name)); + } + + public PropertySource get(String name) { + return this.propertySourceList.get(this.propertySourceList.indexOf(PropertySource.named(name))); + } + + public Iterator> iterator() { + return this.propertySourceList.iterator(); + } + + /** + * Add the given property source object with highest precedence. + */ public void addFirst(PropertySource propertySource) { removeIfPresent(propertySource); this.propertySourceList.addFirst(propertySource); } + /** + * Add the given property source object with lowest precedence. + */ public void addLast(PropertySource propertySource) { removeIfPresent(propertySource); this.propertySourceList.addLast(propertySource); } + /** + * Add the given property source object with precedence immediately greater + * than the named relative property source. + */ public void addBefore(String relativePropertySourceName, PropertySource propertySource) { assertLegalRelativeAddition(relativePropertySourceName, propertySource); removeIfPresent(propertySource); @@ -61,6 +97,10 @@ public class MutablePropertySources implements PropertySources { addAtIndex(index, propertySource); } + /** + * Add the given property source object with precedence immediately less than + * than the named relative property source. + */ public void addAfter(String relativePropertySourceName, PropertySource propertySource) { assertLegalRelativeAddition(relativePropertySourceName, propertySource); removeIfPresent(propertySource); @@ -68,56 +108,79 @@ public class MutablePropertySources implements PropertySources { addAtIndex(index+1, propertySource); } + /** + * Return the precedence of the given property source, {@code -1} if not found. + */ + public int precedenceOf(PropertySource propertySource) { + return this.propertySourceList.indexOf(propertySource); + } + + /** + * Remove and return the property source with the given name, {@code null} if not found. + * @param name the name of the property source to find and remove + */ + public PropertySource remove(String name) { + int index = this.propertySourceList.indexOf(PropertySource.named(name)); + if (index >= 0) { + return this.propertySourceList.remove(index); + } + return null; + } + + /** + * Replace the property source with the given name with the given property source object. + * @param name the name of the property source to find and replace + * @param propertySource the replacement property source + * @throws IllegalArgumentException if no property source with the given name is present + * @see #contains + */ + public void replace(String name, PropertySource propertySource) { + int index = assertPresentAndGetIndex(name); + this.propertySourceList.set(index, propertySource); + } + + /** + * Return the number of {@link PropertySource} objects contained. + */ + public int size() { + return this.propertySourceList.size(); + } + + /** + * Ensure that the given property source is not being added relative to itself. + */ protected void assertLegalRelativeAddition(String relativePropertySourceName, PropertySource propertySource) { String newPropertySourceName = propertySource.getName(); Assert.isTrue(!relativePropertySourceName.equals(newPropertySourceName), String.format(ILLEGAL_RELATIVE_ADDITION_MESSAGE, newPropertySourceName)); } - protected void addAtIndex(int index, PropertySource propertySource) { - removeIfPresent(propertySource); - this.propertySourceList.add(index, propertySource); - } - + /** + * Log the removal of the given propertySource if it is present. + */ protected void removeIfPresent(PropertySource propertySource) { if (this.propertySourceList.contains(propertySource)) { + // TODO SPR-7508: add logging this.propertySourceList.remove(propertySource); } } - public boolean contains(String propertySourceName) { - return propertySourceList.contains(PropertySource.named(propertySourceName)); - } - - public PropertySource remove(String propertySourceName) { - int index = propertySourceList.indexOf(PropertySource.named(propertySourceName)); - if (index >= 0) { - return propertySourceList.remove(index); - } - return null; - } - - public void replace(String propertySourceName, PropertySource propertySource) { - int index = assertPresentAndGetIndex(propertySourceName); - this.propertySourceList.set(index, propertySource); + /** + * Add the given property source at a particular index in the list. + */ + private void addAtIndex(int index, PropertySource propertySource) { + removeIfPresent(propertySource); + this.propertySourceList.add(index, propertySource); } - protected int assertPresentAndGetIndex(String propertySourceName) { + /** + * Assert that the named property source is present and return its index. + * @throws IllegalArgumentException if the named property source is not present + */ + private int assertPresentAndGetIndex(String propertySourceName) { int index = this.propertySourceList.indexOf(PropertySource.named(propertySourceName)); Assert.isTrue(index >= 0, String.format(NON_EXISTENT_PROPERTY_SOURCE_MESSAGE, propertySourceName)); return index; } - public int size() { - return propertySourceList.size(); - } - - public List> asList() { - return Collections.unmodifiableList(this.propertySourceList); - } - - public PropertySource get(String propertySourceName) { - return propertySourceList.get(propertySourceList.indexOf(PropertySource.named(propertySourceName))); - } - } diff --git a/org.springframework.core/src/main/java/org/springframework/core/env/PropertySources.java b/org.springframework.core/src/main/java/org/springframework/core/env/PropertySources.java index 9f930253b9a..90f99594a6f 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/env/PropertySources.java +++ b/org.springframework.core/src/main/java/org/springframework/core/env/PropertySources.java @@ -16,23 +16,24 @@ package org.springframework.core.env; -import java.util.List; - /** - * TODO SPR-7508: document + * Holder containing one or more {@link PropertySource} objects. * * @author Chris Beams * @since 3.1 */ -public interface PropertySources { - - PropertySource get(String propertySourceName); - - // TODO make iterable - List> asList(); - - int size(); - - boolean contains(String propertySourceName); +public interface PropertySources extends Iterable> { + + /** + * Return whether a property source with the given name is contained. + * @param name the {@linkplain PropertySource#getName() name of the property source} to find + */ + boolean contains(String name); + + /** + * Return the property source with the given name, {@code null} if not found. + * @param name the {@linkplain PropertySource#getName() name of the property source} to find + */ + PropertySource get(String name); } diff --git a/org.springframework.core/src/main/java/org/springframework/core/env/PropertySourcesPropertyResolver.java b/org.springframework.core/src/main/java/org/springframework/core/env/PropertySourcesPropertyResolver.java index 8f6ba1bb945..5443e340094 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/env/PropertySourcesPropertyResolver.java +++ b/org.springframework.core/src/main/java/org/springframework/core/env/PropertySourcesPropertyResolver.java @@ -38,7 +38,7 @@ public class PropertySourcesPropertyResolver extends AbstractPropertyResolver { } public boolean containsProperty(String key) { - for (PropertySource propertySource : this.propertySources.asList()) { + for (PropertySource propertySource : this.propertySources) { if (propertySource.getProperty(key) != null) { return true; } @@ -59,7 +59,7 @@ public class PropertySourcesPropertyResolver extends AbstractPropertyResolver { logger.trace(format("getProperty(\"%s\", %s)", key, targetValueType.getSimpleName())); } - for (PropertySource propertySource : this.propertySources.asList()) { + for (PropertySource propertySource : this.propertySources) { if (debugEnabled) { logger.debug(format("Searching for key '%s' in [%s]", key, propertySource.getName())); } diff --git a/org.springframework.core/src/test/java/org/springframework/core/env/DefaultEnvironmentTests.java b/org.springframework.core/src/test/java/org/springframework/core/env/DefaultEnvironmentTests.java index 998e7da83e2..4e185a35c86 100644 --- a/org.springframework.core/src/test/java/org/springframework/core/env/DefaultEnvironmentTests.java +++ b/org.springframework.core/src/test/java/org/springframework/core/env/DefaultEnvironmentTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,8 +20,6 @@ import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; -import java.util.List; - import org.junit.Test; public class DefaultEnvironmentTests { @@ -29,9 +27,9 @@ public class DefaultEnvironmentTests { @Test public void propertySourceOrder() { ConfigurableEnvironment env = new DefaultEnvironment(); - List> sources = env.getPropertySources().asList(); + MutablePropertySources sources = env.getPropertySources(); + assertThat(sources.precedenceOf(PropertySource.named(DefaultEnvironment.SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME)), equalTo(0)); + assertThat(sources.precedenceOf(PropertySource.named(DefaultEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME)), equalTo(1)); assertThat(sources.size(), is(2)); - assertThat(sources.get(0).getName(), equalTo(DefaultEnvironment.SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME)); - assertThat(sources.get(1).getName(), equalTo(DefaultEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME)); } } diff --git a/org.springframework.core/src/test/java/org/springframework/core/env/PropertySourcesTests.java b/org.springframework.core/src/test/java/org/springframework/core/env/PropertySourcesTests.java index 7153169d0de..a404445639e 100644 --- a/org.springframework.core/src/test/java/org/springframework/core/env/PropertySourcesTests.java +++ b/org.springframework.core/src/test/java/org/springframework/core/env/PropertySourcesTests.java @@ -53,43 +53,43 @@ public class PropertySourcesTests { sources.addAfter("b", new MockPropertySource("c")); assertThat(sources.size(), equalTo(5)); - assertThat(sources.asList().indexOf(PropertySource.named("a")), is(0)); - assertThat(sources.asList().indexOf(PropertySource.named("b")), is(1)); - assertThat(sources.asList().indexOf(PropertySource.named("c")), is(2)); - assertThat(sources.asList().indexOf(PropertySource.named("d")), is(3)); - assertThat(sources.asList().indexOf(PropertySource.named("f")), is(4)); + assertThat(sources.precedenceOf(PropertySource.named("a")), is(0)); + assertThat(sources.precedenceOf(PropertySource.named("b")), is(1)); + assertThat(sources.precedenceOf(PropertySource.named("c")), is(2)); + assertThat(sources.precedenceOf(PropertySource.named("d")), is(3)); + assertThat(sources.precedenceOf(PropertySource.named("f")), is(4)); sources.addBefore("f", new MockPropertySource("e")); sources.addAfter("f", new MockPropertySource("g")); assertThat(sources.size(), equalTo(7)); - assertThat(sources.asList().indexOf(PropertySource.named("a")), is(0)); - assertThat(sources.asList().indexOf(PropertySource.named("b")), is(1)); - assertThat(sources.asList().indexOf(PropertySource.named("c")), is(2)); - assertThat(sources.asList().indexOf(PropertySource.named("d")), is(3)); - assertThat(sources.asList().indexOf(PropertySource.named("e")), is(4)); - assertThat(sources.asList().indexOf(PropertySource.named("f")), is(5)); - assertThat(sources.asList().indexOf(PropertySource.named("g")), is(6)); + assertThat(sources.precedenceOf(PropertySource.named("a")), is(0)); + assertThat(sources.precedenceOf(PropertySource.named("b")), is(1)); + assertThat(sources.precedenceOf(PropertySource.named("c")), is(2)); + assertThat(sources.precedenceOf(PropertySource.named("d")), is(3)); + assertThat(sources.precedenceOf(PropertySource.named("e")), is(4)); + assertThat(sources.precedenceOf(PropertySource.named("f")), is(5)); + assertThat(sources.precedenceOf(PropertySource.named("g")), is(6)); sources.addLast(new MockPropertySource("a")); assertThat(sources.size(), equalTo(7)); - assertThat(sources.asList().indexOf(PropertySource.named("b")), is(0)); - assertThat(sources.asList().indexOf(PropertySource.named("c")), is(1)); - assertThat(sources.asList().indexOf(PropertySource.named("d")), is(2)); - assertThat(sources.asList().indexOf(PropertySource.named("e")), is(3)); - assertThat(sources.asList().indexOf(PropertySource.named("f")), is(4)); - assertThat(sources.asList().indexOf(PropertySource.named("g")), is(5)); - assertThat(sources.asList().indexOf(PropertySource.named("a")), is(6)); + assertThat(sources.precedenceOf(PropertySource.named("b")), is(0)); + assertThat(sources.precedenceOf(PropertySource.named("c")), is(1)); + assertThat(sources.precedenceOf(PropertySource.named("d")), is(2)); + assertThat(sources.precedenceOf(PropertySource.named("e")), is(3)); + assertThat(sources.precedenceOf(PropertySource.named("f")), is(4)); + assertThat(sources.precedenceOf(PropertySource.named("g")), is(5)); + assertThat(sources.precedenceOf(PropertySource.named("a")), is(6)); sources.addFirst(new MockPropertySource("a")); assertThat(sources.size(), equalTo(7)); - assertThat(sources.asList().indexOf(PropertySource.named("a")), is(0)); - assertThat(sources.asList().indexOf(PropertySource.named("b")), is(1)); - assertThat(sources.asList().indexOf(PropertySource.named("c")), is(2)); - assertThat(sources.asList().indexOf(PropertySource.named("d")), is(3)); - assertThat(sources.asList().indexOf(PropertySource.named("e")), is(4)); - assertThat(sources.asList().indexOf(PropertySource.named("f")), is(5)); - assertThat(sources.asList().indexOf(PropertySource.named("g")), is(6)); + assertThat(sources.precedenceOf(PropertySource.named("a")), is(0)); + assertThat(sources.precedenceOf(PropertySource.named("b")), is(1)); + assertThat(sources.precedenceOf(PropertySource.named("c")), is(2)); + assertThat(sources.precedenceOf(PropertySource.named("d")), is(3)); + assertThat(sources.precedenceOf(PropertySource.named("e")), is(4)); + assertThat(sources.precedenceOf(PropertySource.named("f")), is(5)); + assertThat(sources.precedenceOf(PropertySource.named("g")), is(6)); assertEquals(sources.remove("a"), PropertySource.named("a")); assertThat(sources.size(), equalTo(6)); @@ -109,15 +109,15 @@ public class PropertySourcesTests { sources.addFirst(new MockPropertySource("a")); assertThat(sources.size(), equalTo(7)); - assertThat(sources.asList().indexOf(PropertySource.named("a")), is(0)); - assertThat(sources.asList().indexOf(PropertySource.named("b")), is(1)); - assertThat(sources.asList().indexOf(PropertySource.named("c")), is(2)); + assertThat(sources.precedenceOf(PropertySource.named("a")), is(0)); + assertThat(sources.precedenceOf(PropertySource.named("b")), is(1)); + assertThat(sources.precedenceOf(PropertySource.named("c")), is(2)); sources.replace("a", new MockPropertySource("a-replaced")); assertThat(sources.size(), equalTo(7)); - assertThat(sources.asList().indexOf(PropertySource.named("a-replaced")), is(0)); - assertThat(sources.asList().indexOf(PropertySource.named("b")), is(1)); - assertThat(sources.asList().indexOf(PropertySource.named("c")), is(2)); + assertThat(sources.precedenceOf(PropertySource.named("a-replaced")), is(0)); + assertThat(sources.precedenceOf(PropertySource.named("b")), is(1)); + assertThat(sources.precedenceOf(PropertySource.named("c")), is(2)); sources.replace("a-replaced", new MockPropertySource("a")); diff --git a/org.springframework.integration-tests/src/test/java/org/springframework/core/env/EnvironmentIntegrationTests.java b/org.springframework.integration-tests/src/test/java/org/springframework/core/env/EnvironmentIntegrationTests.java index 55dffd0bc24..16ef3328806 100644 --- a/org.springframework.integration-tests/src/test/java/org/springframework/core/env/EnvironmentIntegrationTests.java +++ b/org.springframework.integration-tests/src/test/java/org/springframework/core/env/EnvironmentIntegrationTests.java @@ -438,16 +438,16 @@ public class EnvironmentIntegrationTests { // ServletConfig gets precedence assertThat(environment.getProperty("pCommon"), is("pCommonConfigValue")); - assertThat(propertySources.asList().indexOf(PropertySource.named(DefaultWebEnvironment.SERVLET_CONFIG_PROPERTY_SOURCE_NAME)), - lessThan(propertySources.asList().indexOf(PropertySource.named(DefaultWebEnvironment.SERVLET_CONTEXT_PROPERTY_SOURCE_NAME)))); + assertThat(propertySources.precedenceOf(PropertySource.named(DefaultWebEnvironment.SERVLET_CONFIG_PROPERTY_SOURCE_NAME)), + lessThan(propertySources.precedenceOf(PropertySource.named(DefaultWebEnvironment.SERVLET_CONTEXT_PROPERTY_SOURCE_NAME)))); // but all params are available assertThat(environment.getProperty("pContext1"), is("pContext1Value")); assertThat(environment.getProperty("pConfig1"), is("pConfig1Value")); // Servlet* PropertySources have precedence over System* PropertySources - assertThat(propertySources.asList().indexOf(PropertySource.named(DefaultWebEnvironment.SERVLET_CONFIG_PROPERTY_SOURCE_NAME)), - lessThan(propertySources.asList().indexOf(PropertySource.named(DefaultEnvironment.SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME)))); + assertThat(propertySources.precedenceOf(PropertySource.named(DefaultWebEnvironment.SERVLET_CONFIG_PROPERTY_SOURCE_NAME)), + lessThan(propertySources.precedenceOf(PropertySource.named(DefaultEnvironment.SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME)))); // Replace system properties with a mock property source for convenience MockPropertySource mockSystemProperties = new MockPropertySource(DefaultEnvironment.SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME); @@ -480,8 +480,8 @@ public class EnvironmentIntegrationTests { assertThat(environment.getProperty("pContext1"), is("pContext1Value")); // Servlet* PropertySources have precedence over System* PropertySources - assertThat(propertySources.asList().indexOf(PropertySource.named(DefaultWebEnvironment.SERVLET_CONTEXT_PROPERTY_SOURCE_NAME)), - lessThan(propertySources.asList().indexOf(PropertySource.named(DefaultEnvironment.SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME)))); + assertThat(propertySources.precedenceOf(PropertySource.named(DefaultWebEnvironment.SERVLET_CONTEXT_PROPERTY_SOURCE_NAME)), + lessThan(propertySources.precedenceOf(PropertySource.named(DefaultEnvironment.SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME)))); // Replace system properties with a mock property source for convenience MockPropertySource mockSystemProperties = new MockPropertySource(DefaultEnvironment.SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME); @@ -515,16 +515,16 @@ public class EnvironmentIntegrationTests { // ServletConfig gets precedence assertThat(environment.getProperty("pCommon"), is("pCommonConfigValue")); - assertThat(propertySources.asList().indexOf(PropertySource.named(DefaultWebEnvironment.SERVLET_CONFIG_PROPERTY_SOURCE_NAME)), - lessThan(propertySources.asList().indexOf(PropertySource.named(DefaultWebEnvironment.SERVLET_CONTEXT_PROPERTY_SOURCE_NAME)))); + assertThat(propertySources.precedenceOf(PropertySource.named(DefaultWebEnvironment.SERVLET_CONFIG_PROPERTY_SOURCE_NAME)), + lessThan(propertySources.precedenceOf(PropertySource.named(DefaultWebEnvironment.SERVLET_CONTEXT_PROPERTY_SOURCE_NAME)))); // but all params are available assertThat(environment.getProperty("pContext1"), is("pContext1Value")); assertThat(environment.getProperty("pConfig1"), is("pConfig1Value")); // Servlet* PropertySources have precedence over System* PropertySources - assertThat(propertySources.asList().indexOf(PropertySource.named(DefaultWebEnvironment.SERVLET_CONFIG_PROPERTY_SOURCE_NAME)), - lessThan(propertySources.asList().indexOf(PropertySource.named(DefaultEnvironment.SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME)))); + assertThat(propertySources.precedenceOf(PropertySource.named(DefaultWebEnvironment.SERVLET_CONFIG_PROPERTY_SOURCE_NAME)), + lessThan(propertySources.precedenceOf(PropertySource.named(DefaultEnvironment.SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME)))); // Replace system properties with a mock property source for convenience MockPropertySource mockSystemProperties = new MockPropertySource(DefaultEnvironment.SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME); diff --git a/org.springframework.web/src/test/java/org/springframework/web/context/support/DefaultWebEnvironmentTests.java b/org.springframework.web/src/test/java/org/springframework/web/context/support/DefaultWebEnvironmentTests.java index fdfb9ac9fba..50732a0b5fe 100644 --- a/org.springframework.web/src/test/java/org/springframework/web/context/support/DefaultWebEnvironmentTests.java +++ b/org.springframework.web/src/test/java/org/springframework/web/context/support/DefaultWebEnvironmentTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,24 +20,22 @@ import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; -import java.util.List; - import org.junit.Test; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.DefaultEnvironment; +import org.springframework.core.env.MutablePropertySources; import org.springframework.core.env.PropertySource; - public class DefaultWebEnvironmentTests { @Test public void propertySourceOrder() { ConfigurableEnvironment env = new DefaultWebEnvironment(); - List> sources = env.getPropertySources().asList(); + MutablePropertySources sources = env.getPropertySources(); + assertThat(sources.precedenceOf(PropertySource.named(DefaultWebEnvironment.SERVLET_CONFIG_PROPERTY_SOURCE_NAME)), equalTo(0)); + assertThat(sources.precedenceOf(PropertySource.named(DefaultWebEnvironment.SERVLET_CONTEXT_PROPERTY_SOURCE_NAME)), equalTo(1)); + assertThat(sources.precedenceOf(PropertySource.named(DefaultEnvironment.SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME)), equalTo(2)); + assertThat(sources.precedenceOf(PropertySource.named(DefaultEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME)), equalTo(3)); assertThat(sources.size(), is(4)); - assertThat(sources.get(0).getName(), equalTo(DefaultWebEnvironment.SERVLET_CONFIG_PROPERTY_SOURCE_NAME)); - assertThat(sources.get(1).getName(), equalTo(DefaultWebEnvironment.SERVLET_CONTEXT_PROPERTY_SOURCE_NAME)); - assertThat(sources.get(2).getName(), equalTo(DefaultEnvironment.SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME)); - assertThat(sources.get(3).getName(), equalTo(DefaultEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME)); } }