From 80358f7fbf71765764e7a4520e937704cbecdf56 Mon Sep 17 00:00:00 2001 From: Eneias Cordeiro da Silva Date: Sun, 2 Sep 2018 22:57:02 -0300 Subject: [PATCH 1/2] Fix WSDL locations condition to work with a list See gh-14285 --- .../condition/AbstractListCondition.java | 57 +++++++++++++ .../couchbase/OnBootstrapHostsCondition.java | 37 +++------ .../webservices/OnWsdlLocationsCondition.java | 38 +++++++++ .../WebServicesAutoConfiguration.java | 5 +- .../OnWsdlLocationsConditionTests.java | 82 +++++++++++++++++++ .../WebServicesAutoConfigurationTests.java | 14 ++++ 6 files changed, 204 insertions(+), 29 deletions(-) create mode 100644 spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/AbstractListCondition.java create mode 100644 spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/webservices/OnWsdlLocationsCondition.java create mode 100644 spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/webservices/OnWsdlLocationsConditionTests.java diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/AbstractListCondition.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/AbstractListCondition.java new file mode 100644 index 0000000000..39e429f39a --- /dev/null +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/AbstractListCondition.java @@ -0,0 +1,57 @@ +/* + * Copyright 2012-2018 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.autoconfigure.condition; + +import java.util.List; + +import org.springframework.boot.context.properties.bind.BindResult; +import org.springframework.boot.context.properties.bind.Bindable; +import org.springframework.boot.context.properties.bind.Binder; +import org.springframework.context.annotation.ConditionContext; +import org.springframework.core.type.AnnotatedTypeMetadata; + +/** + * Abstract base class for list conditions. + * + * @author Eneias Silva + * + */ +public abstract class AbstractListCondition extends SpringBootCondition { + + private static final Bindable> STRING_LIST = Bindable + .listOf(String.class); + + @Override + public ConditionOutcome getMatchOutcome(ConditionContext context, + AnnotatedTypeMetadata metadata) { + BindResult property = Binder.get(context.getEnvironment()) + .bind(getPropertyName(), STRING_LIST); + if (property.isBound()) { + return ConditionOutcome.match(ConditionMessage.forCondition(getClassName()) + .found("property").items(getPropertyName())); + } + return ConditionOutcome.noMatch(ConditionMessage.forCondition(getClassName()) + .didNotFind("property").items(getPropertyName())); + } + + + protected abstract String getPropertyName(); + + + protected abstract String getClassName(); + +} diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/couchbase/OnBootstrapHostsCondition.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/couchbase/OnBootstrapHostsCondition.java index 2473ec6aa5..0faf148aee 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/couchbase/OnBootstrapHostsCondition.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/couchbase/OnBootstrapHostsCondition.java @@ -16,42 +16,25 @@ package org.springframework.boot.autoconfigure.couchbase; -import java.util.List; - -import org.springframework.boot.autoconfigure.condition.ConditionMessage; -import org.springframework.boot.autoconfigure.condition.ConditionOutcome; -import org.springframework.boot.autoconfigure.condition.SpringBootCondition; -import org.springframework.boot.context.properties.bind.BindResult; -import org.springframework.boot.context.properties.bind.Bindable; -import org.springframework.boot.context.properties.bind.Binder; -import org.springframework.context.annotation.ConditionContext; -import org.springframework.core.type.AnnotatedTypeMetadata; +import org.springframework.boot.autoconfigure.condition.AbstractListCondition; /** * Condition to determine if {@code spring.couchbase.bootstrap-hosts} is specified. * * @author Stephane Nicoll * @author Madhura Bhave + * @author Eneias Silva */ -class OnBootstrapHostsCondition extends SpringBootCondition { - - private static final Bindable> STRING_LIST = Bindable - .listOf(String.class); +class OnBootstrapHostsCondition extends AbstractListCondition { @Override - public ConditionOutcome getMatchOutcome(ConditionContext context, - AnnotatedTypeMetadata metadata) { - String name = "spring.couchbase.bootstrap-hosts"; - BindResult property = Binder.get(context.getEnvironment()).bind(name, - STRING_LIST); - if (property.isBound()) { - return ConditionOutcome.match(ConditionMessage - .forCondition(OnBootstrapHostsCondition.class.getName()) - .found("property").items(name)); - } - return ConditionOutcome.noMatch( - ConditionMessage.forCondition(OnBootstrapHostsCondition.class.getName()) - .didNotFind("property").items(name)); + protected String getPropertyName() { + return "spring.couchbase.bootstrap-hosts"; + } + + @Override + protected String getClassName() { + return OnBootstrapHostsCondition.class.getName(); } } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/webservices/OnWsdlLocationsCondition.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/webservices/OnWsdlLocationsCondition.java new file mode 100644 index 0000000000..99fe730ddb --- /dev/null +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/webservices/OnWsdlLocationsCondition.java @@ -0,0 +1,38 @@ +/* + * 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.autoconfigure.webservices; + +import org.springframework.boot.autoconfigure.condition.AbstractListCondition; + +/** + * Condition to determine if {@code spring.webservices.wsdl-locations} is specified. + * + * @author Eneias Silva + */ +class OnWsdlLocationsCondition extends AbstractListCondition { + + @Override + protected String getPropertyName() { + return "spring.webservices.wsdl-locations"; + } + + @Override + protected String getClassName() { + return OnWsdlLocationsCondition.class.getName(); + } + +} diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/webservices/WebServicesAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/webservices/WebServicesAutoConfiguration.java index 5d20b2d097..103e5d78ad 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/webservices/WebServicesAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/webservices/WebServicesAutoConfiguration.java @@ -30,7 +30,6 @@ import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type; import org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration; @@ -41,6 +40,7 @@ import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.Resource; import org.springframework.util.StringUtils; @@ -55,6 +55,7 @@ import org.springframework.xml.xsd.SimpleXsdSchema; * * @author Vedran Pavic * @author Stephane Nicoll + * @author Eneias Silva * @since 1.4.0 */ @Configuration @@ -87,7 +88,7 @@ public class WebServicesAutoConfiguration { } @Bean - @ConditionalOnProperty(prefix = "spring.webservices", name = "wsdl-locations") + @Conditional(OnWsdlLocationsCondition.class) public static WsdlDefinitionBeanFactoryPostProcessor wsdlDefinitionBeanFactoryPostProcessor() { return new WsdlDefinitionBeanFactoryPostProcessor(); } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/webservices/OnWsdlLocationsConditionTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/webservices/OnWsdlLocationsConditionTests.java new file mode 100644 index 0000000000..19fb4b7c5a --- /dev/null +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/webservices/OnWsdlLocationsConditionTests.java @@ -0,0 +1,82 @@ +/* + * 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.autoconfigure.webservices; + +import org.junit.After; +import org.junit.Test; + +import org.springframework.boot.test.util.TestPropertyValues; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Conditional; +import org.springframework.context.annotation.Configuration; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link OnWsdlLocationsCondition}. + * + * @author Eneias Silva + */ +public class OnWsdlLocationsConditionTests { + + private AnnotationConfigApplicationContext context; + + @After + public void tearDown() { + if (this.context != null) { + this.context.close(); + } + } + + @Test + public void wsdlLocationsNotDefined() { + load(TestConfig.class); + assertThat(this.context.containsBean("foo")).isFalse(); + } + + @Test + public void wsdlLocationsDefinedAsCommaSeparated() { + load(TestConfig.class, "spring.webservices.wsdl-locations=value1"); + assertThat(this.context.containsBean("foo")).isTrue(); + } + + @Test + public void wsdlLocationsDefinedAsList() { + load(TestConfig.class, "spring.webservices.wsdl-locations[0]=value1"); + assertThat(this.context.containsBean("foo")).isTrue(); + } + + private void load(Class config, String... environment) { + this.context = new AnnotationConfigApplicationContext(); + TestPropertyValues.of(environment).applyTo(this.context); + this.context.register(config); + this.context.refresh(); + } + + @Configuration + @Conditional(OnWsdlLocationsCondition.class) + protected static class TestConfig { + + @Bean + public String foo() { + return "foo"; + } + + } + +} diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/webservices/WebServicesAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/webservices/WebServicesAutoConfigurationTests.java index eb94a156d4..5a87e055c7 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/webservices/WebServicesAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/webservices/WebServicesAutoConfigurationTests.java @@ -37,6 +37,7 @@ import static org.assertj.core.api.Assertions.assertThat; * @author Vedran Pavic * @author Stephane Nicoll * @author Andy Wilkinson + * @author Eneias Silva */ public class WebServicesAutoConfigurationTests { @@ -104,6 +105,19 @@ public class WebServicesAutoConfigurationTests { }); } + @Test + public void withWsdlBeansAsList() { + this.contextRunner + .withPropertyValues( + "spring.webservices.wsdl-locations[0]=classpath:/wsdl") + .run((context) -> { + assertThat(context.getBeansOfType(SimpleWsdl11Definition.class)) + .hasSize(1).containsKey("service"); + assertThat(context.getBeansOfType(SimpleXsdSchema.class)).hasSize(1) + .containsKey("types"); + }); + } + private Collection getUrlMappings(ApplicationContext context) { return getServletRegistrationBean(context).getUrlMappings(); } From ddeae9b58e777f32784bd6fb9c048c451d18dc64 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Mon, 3 Sep 2018 11:09:44 +0200 Subject: [PATCH 2/2] Polish "Fix WSDL locations condition to work with a list" Closes gh-14285 --- ...istCondition.java => OnListCondition.java} | 45 ++++++---- .../couchbase/OnBootstrapHostsCondition.java | 18 ++-- .../webservices/OnWsdlLocationsCondition.java | 19 ++-- .../WebServicesAutoConfiguration.java | 1 - .../condition/OnListConditionTests.java | 86 +++++++++++++++++++ .../OnBootstrapHostsConditionTests.java | 45 ++-------- .../OnWsdlLocationsConditionTests.java | 44 ++++------ .../WebServicesAutoConfigurationTests.java | 2 +- 8 files changed, 156 insertions(+), 104 deletions(-) rename spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/{AbstractListCondition.java => OnListCondition.java} (51%) create mode 100644 spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/condition/OnListConditionTests.java diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/AbstractListCondition.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/OnListCondition.java similarity index 51% rename from spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/AbstractListCondition.java rename to spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/OnListCondition.java index 39e429f39a..78eae1aa0b 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/AbstractListCondition.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/OnListCondition.java @@ -17,41 +17,56 @@ package org.springframework.boot.autoconfigure.condition; import java.util.List; +import java.util.function.Supplier; import org.springframework.boot.context.properties.bind.BindResult; import org.springframework.boot.context.properties.bind.Bindable; import org.springframework.boot.context.properties.bind.Binder; +import org.springframework.context.annotation.Condition; import org.springframework.context.annotation.ConditionContext; import org.springframework.core.type.AnnotatedTypeMetadata; /** - * Abstract base class for list conditions. + * {@link Condition} that checks if a property whose value is a list is defined in the + * environment. * * @author Eneias Silva - * + * @author Stephane Nicoll + * @since 2.0.5 */ -public abstract class AbstractListCondition extends SpringBootCondition { +public class OnListCondition extends SpringBootCondition { - private static final Bindable> STRING_LIST = Bindable + private static final Bindable> SIMPLE_LIST = Bindable .listOf(String.class); + private final String propertyName; + + private final Supplier messageBuilder; + + /** + * Create a new instance with the property to check and the message builder to use. + * @param propertyName the name of the property + * @param messageBuilder a message builder supplier that should provide a fresh + * instance on each call + */ + protected OnListCondition(String propertyName, + Supplier messageBuilder) { + this.propertyName = propertyName; + this.messageBuilder = messageBuilder; + } + @Override public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata) { BindResult property = Binder.get(context.getEnvironment()) - .bind(getPropertyName(), STRING_LIST); + .bind(this.propertyName, SIMPLE_LIST); + ConditionMessage.Builder messageBuilder = this.messageBuilder.get(); if (property.isBound()) { - return ConditionOutcome.match(ConditionMessage.forCondition(getClassName()) - .found("property").items(getPropertyName())); + return ConditionOutcome + .match(messageBuilder.found("property").items(this.propertyName)); } - return ConditionOutcome.noMatch(ConditionMessage.forCondition(getClassName()) - .didNotFind("property").items(getPropertyName())); + return ConditionOutcome + .noMatch(messageBuilder.didNotFind("property").items(this.propertyName)); } - - protected abstract String getPropertyName(); - - - protected abstract String getClassName(); - } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/couchbase/OnBootstrapHostsCondition.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/couchbase/OnBootstrapHostsCondition.java index 0faf148aee..b4a9724092 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/couchbase/OnBootstrapHostsCondition.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/couchbase/OnBootstrapHostsCondition.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2017 the original author or authors. + * Copyright 2012-2018 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,7 +16,8 @@ package org.springframework.boot.autoconfigure.couchbase; -import org.springframework.boot.autoconfigure.condition.AbstractListCondition; +import org.springframework.boot.autoconfigure.condition.ConditionMessage; +import org.springframework.boot.autoconfigure.condition.OnListCondition; /** * Condition to determine if {@code spring.couchbase.bootstrap-hosts} is specified. @@ -25,16 +26,11 @@ import org.springframework.boot.autoconfigure.condition.AbstractListCondition; * @author Madhura Bhave * @author Eneias Silva */ -class OnBootstrapHostsCondition extends AbstractListCondition { +class OnBootstrapHostsCondition extends OnListCondition { - @Override - protected String getPropertyName() { - return "spring.couchbase.bootstrap-hosts"; - } - - @Override - protected String getClassName() { - return OnBootstrapHostsCondition.class.getName(); + OnBootstrapHostsCondition() { + super("spring.couchbase.bootstrap-hosts", + () -> ConditionMessage.forCondition("Couchbase Bootstrap Hosts")); } } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/webservices/OnWsdlLocationsCondition.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/webservices/OnWsdlLocationsCondition.java index 99fe730ddb..8ebcaba16d 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/webservices/OnWsdlLocationsCondition.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/webservices/OnWsdlLocationsCondition.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2017 the original author or authors. + * Copyright 2012-2018 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,23 +16,20 @@ package org.springframework.boot.autoconfigure.webservices; -import org.springframework.boot.autoconfigure.condition.AbstractListCondition; +import org.springframework.boot.autoconfigure.condition.ConditionMessage; +import org.springframework.boot.autoconfigure.condition.OnListCondition; /** * Condition to determine if {@code spring.webservices.wsdl-locations} is specified. * * @author Eneias Silva + * @author Stephane Nicoll */ -class OnWsdlLocationsCondition extends AbstractListCondition { +class OnWsdlLocationsCondition extends OnListCondition { - @Override - protected String getPropertyName() { - return "spring.webservices.wsdl-locations"; - } - - @Override - protected String getClassName() { - return OnWsdlLocationsCondition.class.getName(); + OnWsdlLocationsCondition() { + super("spring.webservices.wsdl-locations", + () -> ConditionMessage.forCondition("WSDL locations")); } } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/webservices/WebServicesAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/webservices/WebServicesAutoConfiguration.java index 103e5d78ad..63fc12670d 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/webservices/WebServicesAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/webservices/WebServicesAutoConfiguration.java @@ -55,7 +55,6 @@ import org.springframework.xml.xsd.SimpleXsdSchema; * * @author Vedran Pavic * @author Stephane Nicoll - * @author Eneias Silva * @since 1.4.0 */ @Configuration diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/condition/OnListConditionTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/condition/OnListConditionTests.java new file mode 100644 index 0000000000..27d4ac66b6 --- /dev/null +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/condition/OnListConditionTests.java @@ -0,0 +1,86 @@ +/* + * Copyright 2012-2018 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.autoconfigure.condition; + +import org.junit.Test; + +import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Conditional; +import org.springframework.context.annotation.Configuration; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link OnListCondition}. + * + * @author Stephane Nicoll + */ +public class OnListConditionTests { + + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withUserConfiguration(TestConfig.class); + + @Test + public void propertyNotDefined() { + this.contextRunner.run((context) -> assertThat(context).doesNotHaveBean("foo")); + } + + @Test + public void propertyDefinedAsCommaSeparated() { + this.contextRunner.withPropertyValues("spring.test.my-list=value1") + .run((context) -> assertThat(context).hasBean("foo")); + } + + @Test + public void propertyDefinedAsList() { + this.contextRunner.withPropertyValues("spring.test.my-list[0]=value1") + .run((context) -> assertThat(context).hasBean("foo")); + } + + @Test + public void propertyDefinedAsCommaSeparatedRelaxed() { + this.contextRunner.withPropertyValues("spring.test.my-list=value1") + .run((context) -> assertThat(context).hasBean("foo")); + } + + @Test + public void propertyDefinedAsListRelaxed() { + this.contextRunner.withPropertyValues("spring.test.myList[0]=value1") + .run((context) -> assertThat(context).hasBean("foo")); + } + + @Configuration + @Conditional(TestListCondition.class) + protected static class TestConfig { + + @Bean + public String foo() { + return "foo"; + } + + } + + static class TestListCondition extends OnListCondition { + + TestListCondition() { + super("spring.test.my-list", () -> ConditionMessage.forCondition("test")); + } + + } + +} diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/couchbase/OnBootstrapHostsConditionTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/couchbase/OnBootstrapHostsConditionTests.java index 9ac74bc70a..84682a097c 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/couchbase/OnBootstrapHostsConditionTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/couchbase/OnBootstrapHostsConditionTests.java @@ -16,11 +16,9 @@ package org.springframework.boot.autoconfigure.couchbase; -import org.junit.After; import org.junit.Test; -import org.springframework.boot.test.util.TestPropertyValues; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Configuration; @@ -34,50 +32,25 @@ import static org.assertj.core.api.Assertions.assertThat; */ public class OnBootstrapHostsConditionTests { - private AnnotationConfigApplicationContext context; - - @After - public void tearDown() { - if (this.context != null) { - this.context.close(); - } - } + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withUserConfiguration(TestConfig.class); @Test public void bootstrapHostsNotDefined() { - load(TestConfig.class); - assertThat(this.context.containsBean("foo")).isFalse(); + this.contextRunner.run((context) -> assertThat(context).doesNotHaveBean("foo")); } @Test public void bootstrapHostsDefinedAsCommaSeparated() { - load(TestConfig.class, "spring.couchbase.bootstrap-hosts=value1"); - assertThat(this.context.containsBean("foo")).isTrue(); + this.contextRunner.withPropertyValues("spring.couchbase.bootstrap-hosts=value1") + .run((context) -> assertThat(context).hasBean("foo")); } @Test public void bootstrapHostsDefinedAsList() { - load(TestConfig.class, "spring.couchbase.bootstrap-hosts[0]=value1"); - assertThat(this.context.containsBean("foo")).isTrue(); - } - - @Test - public void bootstrapHostsDefinedAsCommaSeparatedRelaxed() { - load(TestConfig.class, "spring.couchbase.bootstrapHosts=value1"); - assertThat(this.context.containsBean("foo")).isTrue(); - } - - @Test - public void bootstrapHostsDefinedAsListRelaxed() { - load(TestConfig.class, "spring.couchbase.bootstrapHosts[0]=value1"); - assertThat(this.context.containsBean("foo")).isTrue(); - } - - private void load(Class config, String... environment) { - this.context = new AnnotationConfigApplicationContext(); - TestPropertyValues.of(environment).applyTo(this.context); - this.context.register(config); - this.context.refresh(); + this.contextRunner + .withPropertyValues("spring.couchbase.bootstrap-hosts[0]=value1") + .run((context) -> assertThat(context).hasBean("foo")); } @Configuration diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/webservices/OnWsdlLocationsConditionTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/webservices/OnWsdlLocationsConditionTests.java index 19fb4b7c5a..69605a9e03 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/webservices/OnWsdlLocationsConditionTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/webservices/OnWsdlLocationsConditionTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2017 the original author or authors. + * Copyright 2012-2018 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,11 +16,9 @@ package org.springframework.boot.autoconfigure.webservices; -import org.junit.After; import org.junit.Test; -import org.springframework.boot.test.util.TestPropertyValues; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Configuration; @@ -31,41 +29,29 @@ import static org.assertj.core.api.Assertions.assertThat; * Tests for {@link OnWsdlLocationsCondition}. * * @author Eneias Silva + * @author Stephane Nicoll */ public class OnWsdlLocationsConditionTests { - private AnnotationConfigApplicationContext context; + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withUserConfiguration(TestConfig.class); - @After - public void tearDown() { - if (this.context != null) { - this.context.close(); - } + @Test + public void bootstrapHostsNotDefined() { + this.contextRunner.run((context) -> assertThat(context).doesNotHaveBean("foo")); } @Test - public void wsdlLocationsNotDefined() { - load(TestConfig.class); - assertThat(this.context.containsBean("foo")).isFalse(); + public void bootstrapHostsDefinedAsCommaSeparated() { + this.contextRunner.withPropertyValues("spring.webservices.wsdl-locations=value1") + .run((context) -> assertThat(context).hasBean("foo")); } @Test - public void wsdlLocationsDefinedAsCommaSeparated() { - load(TestConfig.class, "spring.webservices.wsdl-locations=value1"); - assertThat(this.context.containsBean("foo")).isTrue(); - } - - @Test - public void wsdlLocationsDefinedAsList() { - load(TestConfig.class, "spring.webservices.wsdl-locations[0]=value1"); - assertThat(this.context.containsBean("foo")).isTrue(); - } - - private void load(Class config, String... environment) { - this.context = new AnnotationConfigApplicationContext(); - TestPropertyValues.of(environment).applyTo(this.context); - this.context.register(config); - this.context.refresh(); + public void bootstrapHostsDefinedAsList() { + this.contextRunner + .withPropertyValues("spring.webservices.wsdl-locations[0]=value1") + .run((context) -> assertThat(context).hasBean("foo")); } @Configuration diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/webservices/WebServicesAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/webservices/WebServicesAutoConfigurationTests.java index 5a87e055c7..1bfc1c7deb 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/webservices/WebServicesAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/webservices/WebServicesAutoConfigurationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2017 the original author or authors. + * Copyright 2012-2018 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.