ConversionServiceDeducerTests Class — spring-boot Architecture
Architecture documentation for the ConversionServiceDeducerTests class in ConversionServiceDeducerTests.java from the spring-boot codebase.
Entity Profile
Relationship Graph
Source Code
core/spring-boot/src/test/java/org/springframework/boot/context/properties/ConversionServiceDeducerTests.java lines 47–198
class ConversionServiceDeducerTests {
@Test
void getConversionServicesWhenHasConversionServiceBeanContainsOnlyBean() {
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(
CustomConverterServiceConfiguration.class);
ConversionServiceDeducer deducer = new ConversionServiceDeducer(applicationContext);
TestApplicationConversionService expected = applicationContext.getBean(TestApplicationConversionService.class);
assertThat(deducer.getConversionServices()).containsExactly(expected);
}
@Test
void getConversionServiceWhenHasNoConversionServiceBeanAndNoQualifiedBeansAndNoBeanFactoryConversionServiceReturnsEmptyList() {
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(EmptyConfiguration.class);
ConversionServiceDeducer deducer = new ConversionServiceDeducer(applicationContext);
assertThat(deducer.getConversionServices()).isEmpty();
}
@Test
void getConversionServiceWhenHasNoConversionServiceBeanAndNoQualifiedBeansAndBeanFactoryConversionServiceContainsOnlyBeanFactoryInstance() {
ConfigurableApplicationContext applicationContext = new AnnotationConfigApplicationContext(
EmptyConfiguration.class);
ConversionService conversionService = new ApplicationConversionService();
applicationContext.getBeanFactory().setConversionService(conversionService);
ConversionServiceDeducer deducer = new ConversionServiceDeducer(applicationContext);
List<ConversionService> conversionServices = deducer.getConversionServices();
assertThat(conversionServices).isNotNull();
assertThat(conversionServices).containsOnly(conversionService);
assertThat(conversionServices.get(0)).isSameAs(conversionService);
}
@Test
void getConversionServiceWhenHasQualifiedConverterBeansContainsCustomizedFormattingService() {
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(
CustomConverterConfiguration.class);
ConversionServiceDeducer deducer = new ConversionServiceDeducer(applicationContext);
List<ConversionService> conversionServices = deducer.getConversionServices();
assertThat(conversionServices).hasSize(2);
assertThat(conversionServices.get(0)).isExactlyInstanceOf(FormattingConversionService.class);
assertThat(conversionServices.get(0).canConvert(InputStream.class, OutputStream.class)).isTrue();
assertThat(conversionServices.get(0).canConvert(CharSequence.class, InputStream.class)).isTrue();
assertThat(conversionServices.get(1)).isSameAs(ApplicationConversionService.getSharedInstance());
}
@Test
void getConversionServiceWhenHasQualifiedConverterLambdaBeansContainsCustomizedFormattingService() {
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(
CustomLambdaConverterConfiguration.class);
ConversionServiceDeducer deducer = new ConversionServiceDeducer(applicationContext);
List<ConversionService> conversionServices = deducer.getConversionServices();
assertThat(conversionServices).hasSize(2);
assertThat(conversionServices.get(0)).isExactlyInstanceOf(FormattingConversionService.class);
assertThat(conversionServices.get(0).canConvert(InputStream.class, OutputStream.class)).isTrue();
assertThat(conversionServices.get(0).canConvert(CharSequence.class, InputStream.class)).isTrue();
assertThat(conversionServices.get(1)).isSameAs(ApplicationConversionService.getSharedInstance());
}
@Test
void getConversionServiceWhenHasPrinterBean() {
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(PrinterConfiguration.class);
ConversionServiceDeducer deducer = new ConversionServiceDeducer(applicationContext);
List<ConversionService> conversionServices = deducer.getConversionServices();
InputStream inputStream = new ByteArrayInputStream("test".getBytes(StandardCharsets.UTF_8));
assertThat(conversionServices).isNotNull();
assertThat(conversionServices.get(0).convert(inputStream, String.class)).isEqualTo("test");
}
@Configuration(proxyBeanMethods = false)
static class CustomConverterServiceConfiguration {
@Bean(ConfigurableApplicationContext.CONVERSION_SERVICE_BEAN_NAME)
TestApplicationConversionService conversionService() {
return new TestApplicationConversionService();
}
}
@Configuration(proxyBeanMethods = false)
static class EmptyConfiguration {
}
@Configuration(proxyBeanMethods = false)
static class CustomConverterConfiguration {
@Bean
@ConfigurationPropertiesBinding
static TestConverter testConverter() {
return new TestConverter();
}
@Bean
@ConfigurationPropertiesBinding
static StringConverter stringConverter() {
return new StringConverter();
}
}
@Configuration(proxyBeanMethods = false)
static class CustomLambdaConverterConfiguration {
@Bean
@ConfigurationPropertiesBinding
static Converter<InputStream, OutputStream> testConverter() {
return (source) -> new TestConverter().convert(source);
}
@Bean
@ConfigurationPropertiesBinding
static Converter<String, InputStream> stringConverter() {
return (source) -> new StringConverter().convert(source);
}
}
@Configuration(proxyBeanMethods = false)
static class PrinterConfiguration {
@Bean
@ConfigurationPropertiesBinding
static Printer<InputStream> inputStreamPrinter() {
return (source, locale) -> ThrowingSupplier
.of(() -> StreamUtils.copyToString(source, StandardCharsets.UTF_8))
.get();
}
}
private static final class TestApplicationConversionService extends ApplicationConversionService {
}
private static final class TestConverter implements Converter<InputStream, OutputStream> {
@Override
public OutputStream convert(InputStream source) {
throw new UnsupportedOperationException();
}
}
private static final class StringConverter implements Converter<String, InputStream> {
@Override
public InputStream convert(String source) {
throw new UnsupportedOperationException();
}
}
}
Domain
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free