ConfigurationPropertiesBeanFactoryInitializationAotProcessorTests Class — spring-boot Architecture
Architecture documentation for the ConfigurationPropertiesBeanFactoryInitializationAotProcessorTests class in ConfigurationPropertiesBeanFactoryInitializationAotProcessorTests.java from the spring-boot codebase.
Entity Profile
Relationship Graph
Source Code
core/spring-boot/src/test/java/org/springframework/boot/context/properties/ConfigurationPropertiesBeanFactoryInitializationAotProcessorTests.java lines 53–263
class ConfigurationPropertiesBeanFactoryInitializationAotProcessorTests {
private final ConfigurationPropertiesBeanFactoryInitializationAotProcessor processor = new ConfigurationPropertiesBeanFactoryInitializationAotProcessor();
@Test
void configurationPropertiesBeanFactoryInitializationAotProcessorIsRegistered() {
assertThat(AotServices.factories().load(BeanFactoryInitializationAotProcessor.class))
.anyMatch(ConfigurationPropertiesBeanFactoryInitializationAotProcessor.class::isInstance);
}
@Test
void processNoMatchesReturnsNullContribution() {
assertThat(process(String.class)).isNull();
}
@Test
void manuallyRegisteredSingletonBindsAsJavaBean() {
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
beanFactory.registerSingleton("test", new SampleProperties());
ConfigurationPropertiesReflectionHintsContribution contribution = process(beanFactory);
assertThat(contribution).isNotNull();
assertThat(singleBindable(contribution)).hasBindMethod(BindMethod.JAVA_BEAN).hasType(SampleProperties.class);
assertThat(typeHints(contribution).map(TypeHint::getType))
.containsExactly(TypeReference.of(SampleProperties.class));
}
@Test
void javaBeanConfigurationPropertiesBindAsJavaBean() {
ConfigurationPropertiesReflectionHintsContribution contribution = process(EnableJavaBeanProperties.class);
assertThat(contribution).isNotNull();
assertThat(singleBindable(contribution)).hasBindMethod(BindMethod.JAVA_BEAN).hasType(JavaBeanProperties.class);
assertThat(typeHints(contribution).map(TypeHint::getType))
.containsExactly(TypeReference.of(JavaBeanProperties.class));
}
@Test
void constructorBindingConfigurationPropertiesBindAsValueObject() {
ConfigurationPropertiesReflectionHintsContribution contribution = process(
EnableConstructorBindingProperties.class);
assertThat(contribution).isNotNull();
assertThat(singleBindable(contribution)).hasBindMethod(BindMethod.VALUE_OBJECT)
.hasType(ConstructorBindingProperties.class);
assertThat(typeHints(contribution).map(TypeHint::getType))
.containsExactly(TypeReference.of(ConstructorBindingProperties.class));
}
@Test
void possibleConstructorBindingPropertiesDefinedThroughBeanMethodBindAsJavaBean() {
ConfigurationPropertiesReflectionHintsContribution contribution = process(
PossibleConstructorBindingPropertiesBeanMethodConfiguration.class);
assertThat(contribution).isNotNull();
assertThat(singleBindable(contribution)).hasBindMethod(BindMethod.JAVA_BEAN)
.hasType(PossibleConstructorBindingProperties.class);
assertThat(typeHints(contribution).map(TypeHint::getType))
.containsExactly(TypeReference.of(PossibleConstructorBindingProperties.class));
}
@Test
void possibleConstructorBindingPropertiesDefinedThroughEnabledAnnotationBindAsValueObject() {
ConfigurationPropertiesReflectionHintsContribution contribution = process(
EnablePossibleConstructorBindingProperties.class);
assertThat(contribution).isNotNull();
assertThat(singleBindable(contribution)).hasBindMethod(BindMethod.VALUE_OBJECT)
.hasType(PossibleConstructorBindingProperties.class);
assertThat(typeHints(contribution).map(TypeHint::getType))
.containsExactly(TypeReference.of(PossibleConstructorBindingProperties.class));
}
private Stream<TypeHint> typeHints(ConfigurationPropertiesReflectionHintsContribution contribution) {
TestGenerationContext generationContext = new TestGenerationContext();
contribution.applyTo(generationContext, mock(BeanFactoryInitializationCode.class));
return generationContext.getRuntimeHints().reflection().typeHints();
}
private @Nullable ConfigurationPropertiesReflectionHintsContribution process(Class<?> config) {
try (AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(config)) {
return process(context.getBeanFactory());
}
}
private @Nullable ConfigurationPropertiesReflectionHintsContribution process(
ConfigurableListableBeanFactory beanFactory) {
return this.processor.processAheadOfTime(beanFactory);
}
private BindableAssertProvider singleBindable(ConfigurationPropertiesReflectionHintsContribution contribution) {
assertThat(contribution.getBindables()).hasSize(1);
return new BindableAssertProvider(contribution.getBindables().iterator().next());
}
@ConfigurationProperties("test")
static class SampleProperties {
}
@EnableConfigurationProperties(JavaBeanProperties.class)
static class EnableJavaBeanProperties {
}
@ConfigurationProperties("java-bean")
static class JavaBeanProperties {
private @Nullable String value;
@Nullable String getValue() {
return this.value;
}
void setValue(@Nullable String value) {
this.value = value;
}
}
@EnableConfigurationProperties(ConstructorBindingProperties.class)
static class EnableConstructorBindingProperties {
}
@ConfigurationProperties("constructor-binding")
static class ConstructorBindingProperties {
private final String value;
ConstructorBindingProperties(String value) {
this.value = value;
}
String getValue() {
return this.value;
}
}
@Configuration(proxyBeanMethods = false)
static class PossibleConstructorBindingPropertiesBeanMethodConfiguration {
@Bean
@ConfigurationProperties("bean-method")
PossibleConstructorBindingProperties possibleConstructorBindingProperties() {
return new PossibleConstructorBindingProperties("alpha");
}
}
@EnableConfigurationProperties(PossibleConstructorBindingProperties.class)
static class EnablePossibleConstructorBindingProperties {
}
@ConfigurationProperties("possible-constructor-binding")
static class PossibleConstructorBindingProperties {
private @Nullable String value;
PossibleConstructorBindingProperties(String arg) {
}
@Nullable String getValue() {
return this.value;
}
void setValue(@Nullable String value) {
this.value = value;
}
}
static class BindableAssertProvider implements AssertProvider<BindableAssert> {
private final Bindable<?> bindable;
BindableAssertProvider(Bindable<?> bindable) {
this.bindable = bindable;
}
@Override
public BindableAssert assertThat() {
return new BindableAssert(this.bindable);
}
}
static class BindableAssert extends AbstractAssert<BindableAssert, Bindable<?>> {
BindableAssert(Bindable<?> bindable) {
super(bindable, BindableAssert.class);
}
BindableAssert hasBindMethod(BindMethod bindMethod) {
if (this.actual.getBindMethod() != bindMethod) {
throwAssertionError(
new BasicErrorMessageFactory("Expected %s to have bind method %s but bind method was %s",
this.actual, bindMethod, this.actual.getBindMethod()));
}
return this;
}
BindableAssert hasType(Class<?> type) {
if (!type.equals(this.actual.getType().resolve())) {
throwAssertionError(new BasicErrorMessageFactory("Expected %s to have type %s but type was %s",
this.actual, type, this.actual.getType().resolve()));
}
return this;
}
}
}
Domain
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free