Fix SpringProfileDocumentMatcher negation bug

Prior to this commit SpringProfileDocumentMatcher was returning 'found'
anytime a negated profile was not found, even if there were positive
profile matches required and unsatisfied.

Closes gh-5747
See gh-4953
This commit is contained in:
Matt Benson 2016-04-20 10:20:02 -05:00 committed by Phillip Webb
parent 56146f0ea0
commit 15d6662c0d
2 changed files with 11 additions and 4 deletions

View File

@ -68,10 +68,10 @@ public class SpringProfileDocumentMatcher implements DocumentMatcher {
if (StringUtils.hasLength(negative)) {
properties = new Properties(properties);
properties.setProperty(SPRING_PROFILES, negative);
switch (activeProfilesMatcher.matches(properties)) {
case FOUND:
if (activeProfilesMatcher.matches(properties) == MatchStatus.FOUND) {
return MatchStatus.NOT_FOUND;
case NOT_FOUND:
}
if (StringUtils.isEmpty(positive)) {
return MatchStatus.FOUND;
}
properties.setProperty(SPRING_PROFILES, positive);

View File

@ -85,12 +85,19 @@ public class SpringProfileDocumentMatcherTests {
}
@Test
public void negatedAndNonNegated() throws IOException {
public void negatedWithMatch() throws Exception {
DocumentMatcher matcher = new SpringProfileDocumentMatcher("foo", "bar", "blah");
Properties properties = getProperties("spring.profiles: !baz,blah");
assertThat(matcher.matches(properties)).isEqualTo(MatchStatus.FOUND);
}
@Test
public void negatedWithNoMatch() throws IOException {
DocumentMatcher matcher = new SpringProfileDocumentMatcher("foo", "bar", "blah");
Properties properties = getProperties("spring.profiles: !baz,another");
assertThat(matcher.matches(properties)).isEqualTo(MatchStatus.NOT_FOUND);
}
@Test
public void negatedTrumpsMatching() throws IOException {
DocumentMatcher matcher = new SpringProfileDocumentMatcher("foo", "baz", "blah");