Home / Class/ AutoConfigurationImportSelectorIntegrationTests Class — spring-boot Architecture

AutoConfigurationImportSelectorIntegrationTests Class — spring-boot Architecture

Architecture documentation for the AutoConfigurationImportSelectorIntegrationTests class in AutoConfigurationImportSelectorIntegrationTests.java from the spring-boot codebase.

Entity Profile

Source Code

core/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/AutoConfigurationImportSelectorIntegrationTests.java lines 36–122

class AutoConfigurationImportSelectorIntegrationTests {

	private final ApplicationContextRunner contextRunner = new ApplicationContextRunner();

	@Test
	void singleSelectorWithNoImports() {
		this.contextRunner.withUserConfiguration(NoConfig.class)
			.run((context) -> assertThat(getImportedConfigBeans(context)).isEmpty());
	}

	@Test
	void singleSelector() {
		this.contextRunner.withUserConfiguration(SingleConfig.class)
			.run((context) -> assertThat(getImportedConfigBeans(context)).containsExactly("ConfigC"));
	}

	@Test
	void multipleSelectorsShouldMergeAndSortCorrectly() {
		this.contextRunner.withUserConfiguration(MultiConfig.class, AnotherMultiConfig.class)
			.run((context) -> assertThat(getImportedConfigBeans(context)).containsExactly("ConfigA", "ConfigB",
					"ConfigC", "ConfigD"));
	}

	@Test
	void multipleSelectorsWithRedundantImportsShouldMergeAndSortCorrectly() {
		this.contextRunner.withUserConfiguration(SingleConfig.class, MultiConfig.class, AnotherMultiConfig.class)
			.run((context) -> assertThat(getImportedConfigBeans(context)).containsExactly("ConfigA", "ConfigB",
					"ConfigC", "ConfigD"));
	}

	private List<String> getImportedConfigBeans(AssertableApplicationContext context) {
		String shortName = ClassUtils.getShortName(AutoConfigurationImportSelectorIntegrationTests.class);
		int beginIndex = shortName.length() + 1;
		List<String> orderedConfigBeans = new ArrayList<>();
		for (String bean : context.getBeanDefinitionNames()) {
			if (bean.contains("$Config")) {
				String shortBeanName = ClassUtils.getShortName(bean);
				orderedConfigBeans.add(shortBeanName.substring(beginIndex));
			}
		}
		return orderedConfigBeans;
	}

	@ImportAutoConfiguration
	static class NoConfig {

	}

	@ImportAutoConfiguration(ConfigC.class)
	static class SingleConfig {

	}

	@ImportAutoConfiguration({ ConfigD.class, ConfigB.class })
	static class MultiConfig {

	}

	@ImportAutoConfiguration({ ConfigC.class, ConfigA.class })
	static class AnotherMultiConfig {

	}

	@Configuration(proxyBeanMethods = false)
	static class ConfigA {

	}

	@Configuration(proxyBeanMethods = false)
	@AutoConfigureAfter(ConfigA.class)
	@AutoConfigureBefore(ConfigC.class)
	static class ConfigB {

	}

	@Configuration(proxyBeanMethods = false)
	static class ConfigC {

	}

	@Configuration(proxyBeanMethods = false)
	@AutoConfigureAfter(ConfigC.class)
	static class ConfigD {

	}

}

Analyze Your Own Codebase

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

Try Supermodel Free