From bbb0b7a80b3a03b288f49130bb9426014a9bc7a0 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Thu, 18 Jun 2015 11:10:20 +0200 Subject: [PATCH] Allow equal or colon in property value Closes gh-3273 --- .../boot/test/EnvironmentTestUtils.java | 19 +++- .../boot/test/EnvironmentTestUtilsTests.java | 97 +++++++++++++++++++ 2 files changed, 113 insertions(+), 3 deletions(-) create mode 100644 spring-boot/src/test/java/org/springframework/boot/test/EnvironmentTestUtilsTests.java diff --git a/spring-boot/src/main/java/org/springframework/boot/test/EnvironmentTestUtils.java b/spring-boot/src/main/java/org/springframework/boot/test/EnvironmentTestUtils.java index 844e17da9a..0af85d0cb1 100644 --- a/spring-boot/src/main/java/org/springframework/boot/test/EnvironmentTestUtils.java +++ b/spring-boot/src/main/java/org/springframework/boot/test/EnvironmentTestUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2014 the original author or authors. + * Copyright 2012-2015 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. @@ -30,6 +30,7 @@ import org.springframework.core.env.MutablePropertySources; * Test utilities for setting environment values. * * @author Dave Syer + * @author Stephane Nicoll */ public abstract class EnvironmentTestUtils { @@ -79,12 +80,24 @@ public abstract class EnvironmentTestUtils { map = value; } for (String pair : pairs) { - int index = pair.indexOf(":"); - index = index < 0 ? index = pair.indexOf("=") : index; + int index = getSeparatorIndex(pair); String key = pair.substring(0, index > 0 ? index : pair.length()); String value = index > 0 ? pair.substring(index + 1) : ""; map.put(key.trim(), value.trim()); } } + private static int getSeparatorIndex(String pair) { + int colonIndex = pair.indexOf(":"); + int equalIndex = pair.indexOf("="); + if (colonIndex == -1) { + return equalIndex; + } else if (equalIndex == -1) { + return colonIndex; + } + else { + return Math.min(colonIndex, equalIndex); + } + } + } diff --git a/spring-boot/src/test/java/org/springframework/boot/test/EnvironmentTestUtilsTests.java b/spring-boot/src/test/java/org/springframework/boot/test/EnvironmentTestUtilsTests.java new file mode 100644 index 0000000000..c44d0605cd --- /dev/null +++ b/spring-boot/src/test/java/org/springframework/boot/test/EnvironmentTestUtilsTests.java @@ -0,0 +1,97 @@ +/* + * Copyright 2012-2015 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; + +import java.util.HashMap; +import java.util.Map; + +import org.junit.Test; + +import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.core.env.MapPropertySource; +import org.springframework.core.env.StandardEnvironment; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +/** + * Tests for {@link EnvironmentTestUtils}. + * + * @author Stephane Nicoll + */ +public class EnvironmentTestUtilsTests { + + private final ConfigurableEnvironment environment = new StandardEnvironment(); + + @Test + public void addSimplePairEqual() { + testAddSimplePair("my.foo", "bar", "="); + } + + @Test + public void addSimplePairColon() { + testAddSimplePair("my.foo", "bar", ":"); + } + + @Test + public void addSimplePairEqualWithEqualInValue() { + testAddSimplePair("my.foo", "b=ar", "="); + } + + @Test + public void addSimplePairEqualWithColonInValue() { + testAddSimplePair("my.foo", "b:ar", "="); + } + + @Test + public void addSimplePairColonWithColonInValue() { + testAddSimplePair("my.foo", "b:ar", ":"); + } + + @Test + public void addSimplePairColonWithEqualInValue() { + testAddSimplePair("my.foo", "b=ar", ":"); + } + + @Test + public void addPairNoValue() { + String propertyName = "my.foo+bar"; + assertFalse(environment.containsProperty(propertyName)); + EnvironmentTestUtils.addEnvironment(environment, propertyName); + assertTrue(environment.containsProperty(propertyName)); + assertEquals("", environment.getProperty(propertyName)); + } + + private void testAddSimplePair(String key, String value, String delimiter) { + assertFalse("Property '" + key + "' should not exist", environment.containsProperty(key)); + EnvironmentTestUtils.addEnvironment(environment, key + delimiter + value); + assertEquals("Wrong value for property '" + key + "'", value, environment.getProperty(key)); + } + + @Test + public void testConfigHasHigherPrecedence() { + Map map = new HashMap(); + map.put("my.foo", "bar"); + MapPropertySource source = new MapPropertySource("sample", map); + environment.getPropertySources().addFirst(source); + assertEquals("bar", environment.getProperty("my.foo")); + EnvironmentTestUtils.addEnvironment(environment, "my.foo=bar2"); + assertEquals("bar2", environment.getProperty("my.foo")); + } + +}