Deprecate EnvironmentTestUtils in favor of TestPropertyValues
Fixes gh-9253
This commit is contained in:
parent
2009da6169
commit
05254fe322
|
@ -32,7 +32,9 @@ import org.springframework.core.env.MutablePropertySources;
|
||||||
* @author Dave Syer
|
* @author Dave Syer
|
||||||
* @author Stephane Nicoll
|
* @author Stephane Nicoll
|
||||||
* @since 1.4.0
|
* @since 1.4.0
|
||||||
|
* @deprecated since 2.0.0 in favor of {@link TestPropertyValues}
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public abstract class EnvironmentTestUtils {
|
public abstract class EnvironmentTestUtils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -0,0 +1,172 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2012-2017 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.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.springframework.boot.test.util;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.springframework.boot.context.properties.source.ConfigurationPropertySources;
|
||||||
|
import org.springframework.context.ApplicationContext;
|
||||||
|
import org.springframework.context.ConfigurableApplicationContext;
|
||||||
|
import org.springframework.core.env.ConfigurableEnvironment;
|
||||||
|
import org.springframework.core.env.MapPropertySource;
|
||||||
|
import org.springframework.core.env.MutablePropertySources;
|
||||||
|
import org.springframework.core.env.PropertySource;
|
||||||
|
import org.springframework.core.env.SystemEnvironmentPropertySource;
|
||||||
|
import org.springframework.util.Assert;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test utilities for adding properties to the environment. The type of {@link PropertySource}
|
||||||
|
* to be added can be specified by {@link Type}.
|
||||||
|
*
|
||||||
|
* @author Madhura Bhave
|
||||||
|
* @since 2.0.0
|
||||||
|
*/
|
||||||
|
public final class TestPropertyValues {
|
||||||
|
|
||||||
|
private final Map<String, Object> properties = new HashMap<>();
|
||||||
|
|
||||||
|
private TestPropertyValues(String[] pairs) {
|
||||||
|
addProperties(pairs);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return a new {@link TestPropertyValues} with the underlying map populated with the given property pairs.
|
||||||
|
* Name-value pairs can be specified with colon (":") or equals ("=") separators.
|
||||||
|
* @param pairs The key value pairs for properties that need to be added to the environment
|
||||||
|
* @return the new instance
|
||||||
|
*/
|
||||||
|
public static TestPropertyValues of(String... pairs) {
|
||||||
|
return new TestPropertyValues(pairs);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builder method to append another property to the underlying map of properties.
|
||||||
|
* @param key The property key
|
||||||
|
* @param value The property value
|
||||||
|
* @return the existing instance of {@link TestPropertyValues}
|
||||||
|
*/
|
||||||
|
public TestPropertyValues and(String key, String value) {
|
||||||
|
this.properties.put(key, value);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addProperties(String[] pairs) {
|
||||||
|
for (String pair : pairs) {
|
||||||
|
int index = getSeparatorIndex(pair);
|
||||||
|
String key = pair.substring(0, index > 0 ? index : pair.length());
|
||||||
|
String value = index > 0 ? pair.substring(index + 1) : "";
|
||||||
|
this.properties.put(key.trim(), value.trim());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add the properties from the underlying map to the environment owned by an {@link ApplicationContext}.
|
||||||
|
* @param context the context with an environment to modify
|
||||||
|
*/
|
||||||
|
public void applyTo(ConfigurableApplicationContext context) {
|
||||||
|
applyTo(context.getEnvironment());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add the properties from the underlying map to the environment. The default property source used is
|
||||||
|
* {@link MapPropertySource}.
|
||||||
|
* @param environment the environment that needs to be modified
|
||||||
|
*/
|
||||||
|
public void applyTo(ConfigurableEnvironment environment) {
|
||||||
|
applyTo(environment, Type.MAP);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add the properties from the underlying map to the environment using the specified property source type.
|
||||||
|
* @param environment the environment that needs to be modified
|
||||||
|
* @param type the type of {@link PropertySource} to be added. See {@link Type}
|
||||||
|
*/
|
||||||
|
public void applyTo(ConfigurableEnvironment environment, Type type) {
|
||||||
|
applyTo(environment, type, "test");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add the properties from the underlying map to the environment using the specified property source type and name.
|
||||||
|
* @param environment the environment that needs to be modified
|
||||||
|
* @param type the type of {@link PropertySource} to be added. See {@link Type}
|
||||||
|
* @param name the name for the property source
|
||||||
|
*/
|
||||||
|
public void applyTo(ConfigurableEnvironment environment, Type type, String name) {
|
||||||
|
Assert.notNull(environment, "Environment must not be null");
|
||||||
|
Assert.notNull(type, "Property source type must not be null");
|
||||||
|
Assert.notNull(name, "Property source name must not be null");
|
||||||
|
MutablePropertySources sources = environment.getPropertySources();
|
||||||
|
addToSources(sources, type, name);
|
||||||
|
ConfigurationPropertySources.attach(environment);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
private void addToSources(MutablePropertySources sources, Type type, String name) {
|
||||||
|
if (sources.contains(name)) {
|
||||||
|
PropertySource<?> propertySource = sources.get(name);
|
||||||
|
if (propertySource.getClass().equals(type.getSourceClass())) {
|
||||||
|
Map<String, Object> source = (Map<String, Object>) propertySource.getSource();
|
||||||
|
source.putAll(this.properties);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
MapPropertySource source = (type.equals(Type.MAP) ? new MapPropertySource(name, this.properties) :
|
||||||
|
new SystemEnvironmentPropertySource(name, this.properties));
|
||||||
|
sources.addFirst(source);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int getSeparatorIndex(String pair) {
|
||||||
|
int colonIndex = pair.indexOf(":");
|
||||||
|
int equalIndex = pair.indexOf("=");
|
||||||
|
if (colonIndex == -1) {
|
||||||
|
return equalIndex;
|
||||||
|
}
|
||||||
|
if (equalIndex == -1) {
|
||||||
|
return colonIndex;
|
||||||
|
}
|
||||||
|
return Math.min(colonIndex, equalIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The type of property source.
|
||||||
|
*/
|
||||||
|
public enum Type {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used for {@link SystemEnvironmentPropertySource}.
|
||||||
|
*/
|
||||||
|
SYSTEM(SystemEnvironmentPropertySource.class),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used for {@link MapPropertySource}.
|
||||||
|
*/
|
||||||
|
MAP(MapPropertySource.class);
|
||||||
|
|
||||||
|
private Class<? extends MapPropertySource> sourceClass;
|
||||||
|
|
||||||
|
Type(Class<? extends MapPropertySource> sourceClass) {
|
||||||
|
this.sourceClass = sourceClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Class<? extends MapPropertySource> getSourceClass() {
|
||||||
|
return this.sourceClass;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,90 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2012-2017 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.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.springframework.boot.test.util;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import org.springframework.boot.test.util.TestPropertyValues.Type;
|
||||||
|
import org.springframework.core.env.ConfigurableEnvironment;
|
||||||
|
import org.springframework.core.env.PropertySource;
|
||||||
|
import org.springframework.core.env.StandardEnvironment;
|
||||||
|
import org.springframework.core.env.SystemEnvironmentPropertySource;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests for {@link TestPropertyValues}.
|
||||||
|
*
|
||||||
|
* @author Madhura Bhave
|
||||||
|
*/
|
||||||
|
public class TestPropertyValuesTests {
|
||||||
|
|
||||||
|
private final ConfigurableEnvironment environment = new StandardEnvironment();
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void applyToEnvironmentShouldAttachConfigurationPropertySource() throws Exception {
|
||||||
|
TestPropertyValues.of("foo.bar=baz").applyTo(this.environment);
|
||||||
|
PropertySource<?> source = this.environment.getPropertySources().get("configurationProperties");
|
||||||
|
assertThat(source).isNotNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void applyToDefaultPropertySource() throws Exception {
|
||||||
|
TestPropertyValues.of("foo.bar=baz", "hello.world=hi").applyTo(this.environment);
|
||||||
|
assertThat(this.environment.getProperty("foo.bar")).isEqualTo("baz");
|
||||||
|
assertThat(this.environment.getProperty("hello.world")).isEqualTo("hi");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void applyToSystemPropertySource() throws Exception {
|
||||||
|
TestPropertyValues.of("FOO_BAR=BAZ").applyTo(this.environment, Type.SYSTEM);
|
||||||
|
assertThat(this.environment.getProperty("foo.bar")).isEqualTo("BAZ");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void applyToWithSpecificName() throws Exception {
|
||||||
|
TestPropertyValues.of("foo.bar=baz").applyTo(this.environment, Type.MAP, "other");
|
||||||
|
assertThat(this.environment.getPropertySources().get("other")).isNotNull();
|
||||||
|
assertThat(this.environment.getProperty("foo.bar")).isEqualTo("baz");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void applyToExistingNameAndDifferentTypeShouldOverrideExistingOne() throws Exception {
|
||||||
|
TestPropertyValues.of("foo.bar=baz", "hello.world=hi").applyTo(this.environment, Type.MAP, "other");
|
||||||
|
TestPropertyValues.of("FOO_BAR=BAZ").applyTo(this.environment, Type.SYSTEM, "other");
|
||||||
|
assertThat(this.environment.getPropertySources().get("other")).isInstanceOf(SystemEnvironmentPropertySource.class);
|
||||||
|
assertThat(this.environment.getProperty("foo.bar")).isEqualTo("BAZ");
|
||||||
|
assertThat(this.environment.getProperty("hello.world")).isNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void applyToExistingNameAndSameTypeShouldMerge() throws Exception {
|
||||||
|
TestPropertyValues.of("foo.bar=baz", "hello.world=hi").applyTo(this.environment, Type.MAP);
|
||||||
|
TestPropertyValues.of("foo.bar=new").applyTo(this.environment, Type.MAP);
|
||||||
|
assertThat(this.environment.getProperty("foo.bar")).isEqualTo("new");
|
||||||
|
assertThat(this.environment.getProperty("hello.world")).isEqualTo("hi");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void andShouldChainAndAddSingleKeyValue() throws Exception {
|
||||||
|
TestPropertyValues.of("foo.bar=baz").and("hello.world", "hi").and("bling.blah", "bing")
|
||||||
|
.applyTo(this.environment, Type.MAP);
|
||||||
|
assertThat(this.environment.getProperty("foo.bar")).isEqualTo("baz");
|
||||||
|
assertThat(this.environment.getProperty("hello.world")).isEqualTo("hi");
|
||||||
|
assertThat(this.environment.getProperty("bling.blah")).isEqualTo("bing");
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue