Home / Class/ ConversionServiceDeducerTests Class — spring-boot Architecture

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

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free