ConfigurationPropertySourcesPropertyResolverTests Class — spring-boot Architecture
Architecture documentation for the ConfigurationPropertySourcesPropertyResolverTests class in ConfigurationPropertySourcesPropertyResolverTests.java from the spring-boot codebase.
Entity Profile
Source Code
core/spring-boot/src/test/java/org/springframework/boot/context/properties/source/ConfigurationPropertySourcesPropertyResolverTests.java lines 41–191
class ConfigurationPropertySourcesPropertyResolverTests {
@Test
void standardPropertyResolverResolvesMultipleTimes() {
StandardEnvironment environment = new StandardEnvironment();
CountingMockPropertySource propertySource = createMockPropertySource(environment, true);
environment.getProperty("missing");
assertThat(propertySource.getCount("missing")).isEqualTo(2);
}
@Test
void configurationPropertySourcesPropertyResolverResolvesSingleTime() {
ResolverEnvironment environment = new ResolverEnvironment();
CountingMockPropertySource propertySource = createMockPropertySource(environment, true);
environment.getProperty("missing");
assertThat(propertySource.getCount("missing")).isOne();
}
@Test
void containsPropertyWhenValidConfigurationPropertyName() {
ResolverEnvironment environment = new ResolverEnvironment();
CountingMockPropertySource propertySource = createMockPropertySource(environment, true);
assertThat(environment.containsProperty("spring")).isTrue();
assertThat(environment.containsProperty("sprong")).isFalse();
assertThat(propertySource.getCount("spring")).isOne();
assertThat(propertySource.getCount("sprong")).isOne();
}
@Test
void containsPropertyWhenNotValidConfigurationPropertyName() {
ResolverEnvironment environment = new ResolverEnvironment();
CountingMockPropertySource propertySource = createMockPropertySource(environment, true);
assertThat(environment.containsProperty("spr!ng")).isTrue();
assertThat(environment.containsProperty("spr*ng")).isFalse();
assertThat(propertySource.getCount("spr!ng")).isOne();
assertThat(propertySource.getCount("spr*ng")).isOne();
}
@Test
void getPropertyWhenValidConfigurationPropertyName() {
ResolverEnvironment environment = new ResolverEnvironment();
CountingMockPropertySource propertySource = createMockPropertySource(environment, true);
assertThat(environment.getProperty("spring")).isEqualTo("boot");
assertThat(environment.getProperty("sprong")).isNull();
assertThat(propertySource.getCount("spring")).isOne();
assertThat(propertySource.getCount("sprong")).isOne();
}
@Test
void getPropertyWhenNotValidConfigurationPropertyName() {
ResolverEnvironment environment = new ResolverEnvironment();
CountingMockPropertySource propertySource = createMockPropertySource(environment, true);
assertThat(environment.getProperty("spr!ng")).isEqualTo("boot");
assertThat(environment.getProperty("spr*ng")).isNull();
assertThat(propertySource.getCount("spr!ng")).isOne();
assertThat(propertySource.getCount("spr*ng")).isOne();
}
@Test
void getPropertyWhenNotAttached() {
ResolverEnvironment environment = new ResolverEnvironment();
CountingMockPropertySource propertySource = createMockPropertySource(environment, false);
assertThat(environment.getProperty("spring")).isEqualTo("boot");
assertThat(environment.getProperty("sprong")).isNull();
assertThat(propertySource.getCount("spring")).isOne();
assertThat(propertySource.getCount("sprong")).isOne();
}
@Test // gh-26732
void getPropertyAsTypeWhenHasPlaceholder() {
ResolverEnvironment environment = new ResolverEnvironment();
MockPropertySource propertySource = new MockPropertySource();
propertySource.withProperty("v1", "1");
propertySource.withProperty("v2", "${v1}");
environment.getPropertySources().addFirst(propertySource);
assertThat(environment.getProperty("v2")).isEqualTo("1");
assertThat(environment.getProperty("v2", Integer.class)).isOne();
}
@Test
void throwsInvalidConfigurationPropertyValueExceptionWhenGetPropertyAsTypeFailsToConvert() {
ResolverEnvironment environment = new ResolverEnvironment();
MockPropertySource propertySource = new MockPropertySource();
propertySource.withProperty("v1", "one");
propertySource.withProperty("v2", "${v1}");
environment.getPropertySources().addFirst(propertySource);
assertThat(environment.getProperty("v2")).isEqualTo("one");
assertThatExceptionOfType(ConversionFailedException.class)
.isThrownBy(() -> environment.getProperty("v2", Integer.class))
.satisfies((ex) -> {
assertThat(ex.getValue()).isEqualTo("one");
assertThat(ex.getSourceType()).isEqualTo(TypeDescriptor.valueOf(String.class));
assertThat(ex.getTargetType()).isEqualTo(TypeDescriptor.valueOf(Integer.class));
})
.havingCause()
.satisfies((ex) -> {
InvalidConfigurationPropertyValueException invalidValueEx = (InvalidConfigurationPropertyValueException) ex;
assertThat(invalidValueEx.getName()).isEqualTo("v2");
assertThat(invalidValueEx.getValue()).isEqualTo("one");
assertThat(ex).cause().isInstanceOf(NumberFormatException.class);
});
}
private CountingMockPropertySource createMockPropertySource(StandardEnvironment environment, boolean attach) {
CountingMockPropertySource propertySource = new CountingMockPropertySource();
propertySource.withProperty("spring", "boot");
propertySource.withProperty("spr!ng", "boot");
environment.getPropertySources().addFirst(propertySource);
if (attach) {
ConfigurationPropertySources.attach(environment);
}
return propertySource;
}
static class ResolverEnvironment extends StandardEnvironment {
@Override
protected ConfigurablePropertyResolver createPropertyResolver(MutablePropertySources propertySources) {
return new ConfigurationPropertySourcesPropertyResolver(propertySources);
}
}
static class CountingMockPropertySource extends MockPropertySource {
private final Map<String, AtomicInteger> counts = new HashMap<>();
@Override
public @Nullable Object getProperty(String name) {
incrementCount(name);
return super.getProperty(name);
}
@Override
public boolean containsProperty(String name) {
incrementCount(name);
return super.containsProperty(name);
}
private void incrementCount(String name) {
this.counts.computeIfAbsent(name, (k) -> new AtomicInteger()).incrementAndGet();
}
int getCount(String name) {
AtomicInteger count = this.counts.get(name);
return (count != null) ? count.get() : 0;
}
}
}
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free