From 9baf23ccd5dd44c339538a5dc900c1d418542de5 Mon Sep 17 00:00:00 2001 From: Laurent Martelli Date: Tue, 4 Jul 2023 11:47:06 +0100 Subject: [PATCH] Test that ImportsContextCustomizer can support @AliasFor Add test to ensure that `ImportsContextCustomizer` can support `@AliasFor` annotations. See gh-34917 --- .../ImportsContextCustomizerTests.java | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/context/ImportsContextCustomizerTests.java b/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/context/ImportsContextCustomizerTests.java index f047bf98406d..fb475ad81a5f 100644 --- a/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/context/ImportsContextCustomizerTests.java +++ b/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/context/ImportsContextCustomizerTests.java @@ -33,6 +33,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.ImportSelector; +import org.springframework.core.annotation.AliasFor; import org.springframework.core.type.AnnotationMetadata; import static org.assertj.core.api.Assertions.assertThat; @@ -41,6 +42,7 @@ * Tests for {@link ImportsContextCustomizer}. * * @author Andy Wilkinson + * @author Laurent Martelli */ class ImportsContextCustomizerTests { @@ -80,6 +82,30 @@ void customizersForTestClassesWithDifferentJUnitAnnotationsAreEqual() { .isEqualTo(new ImportsContextCustomizer(SecondJUnitAnnotatedTestClass.class)); } + @Test + void customizersForClassesWithDifferentImportsAreNotEqual() { + assertThat(new ImportsContextCustomizer(FirstAnnotatedTestClass.class)) + .isNotEqualTo(new ImportsContextCustomizer(SecondAnnotatedTestClass.class)); + } + + @Test + void customizersForClassesWithDifferentMetaImportsAreNotEqual() { + assertThat(new ImportsContextCustomizer(FirstMetaAnnotatedTestClass.class)) + .isNotEqualTo(new ImportsContextCustomizer(SecondMetaAnnotatedTestClass.class)); + } + + @Test + void customizersForClassesWithDifferentAliasedImportsAreNotEqual() { + assertThat(new ImportsContextCustomizer(FirstAliasAnnotatedTestClass.class)) + .isNotEqualTo(new ImportsContextCustomizer(SecondAliasAnnotatedTestClass.class)); + } + + @Test + void importsCanBeScatteredOnMultipleAnnotations() { + assertThat(new ImportsContextCustomizer(SingleImportAnnotationTestClass.class)) + .isEqualTo(new ImportsContextCustomizer(MultipleImportAnnotationTestClass.class)); + } + @Import(TestImportSelector.class) @Indicator1 static class FirstImportSelectorAnnotatedClass { @@ -152,6 +178,17 @@ static class SecondJUnitAnnotatedTestClass { } + @Import({ FirstImportedClass.class, SecondImportedClass.class }) + static class SingleImportAnnotationTestClass { + + } + + @FirstMetaImport + @Import(SecondImportedClass.class) + static class MultipleImportAnnotationTestClass { + + } + @Retention(RetentionPolicy.RUNTIME) @interface Indicator1 { @@ -162,6 +199,65 @@ static class SecondJUnitAnnotatedTestClass { } + @Retention(RetentionPolicy.RUNTIME) + @Import(AliasFor.class) + public @interface AliasedImport { + + @AliasFor(annotation = Import.class) + Class[] value(); + + } + + @Retention(RetentionPolicy.RUNTIME) + @Import(FirstImportedClass.class) + public @interface FirstMetaImport { + + } + + @Retention(RetentionPolicy.RUNTIME) + @Import(SecondImportedClass.class) + public @interface SecondMetaImport { + + } + + static class FirstImportedClass { + + } + + static class SecondImportedClass { + + } + + @AliasedImport(FirstImportedClass.class) + static class FirstAliasAnnotatedTestClass { + + } + + @AliasedImport(SecondImportedClass.class) + static class SecondAliasAnnotatedTestClass { + + } + + @FirstMetaImport + static class FirstMetaAnnotatedTestClass { + + } + + @SecondMetaImport + static class SecondMetaAnnotatedTestClass { + + } + + @Import(FirstImportedClass.class) + static class FirstAnnotatedTestClass { + + } + + @Import(SecondImportedClass.class) + static class SecondAnnotatedTestClass { + + } + static class TestImportSelector implements ImportSelector { @Override