Introduce tests for transitive aliases with implied attribute names
This commit is contained in:
parent
7a3bc2e473
commit
856da8e395
|
|
@ -887,9 +887,12 @@ public class AnnotatedElementUtilsTests {
|
||||||
@AliasFor(annotation = ContextConfig.class, attribute = "locations")
|
@AliasFor(annotation = ContextConfig.class, attribute = "locations")
|
||||||
String[] xmlFiles() default {};
|
String[] xmlFiles() default {};
|
||||||
|
|
||||||
@AliasFor(annotation = ContextConfig.class, attribute = "locations")
|
// intentionally omitted: attribute = "locations"
|
||||||
|
@AliasFor(annotation = ContextConfig.class)
|
||||||
String[] locations() default {};
|
String[] locations() default {};
|
||||||
|
|
||||||
|
// TODO Determine why transitive implicit alias does not work
|
||||||
|
// hoping to be able to omit: attribute = "locations"
|
||||||
@AliasFor(annotation = ContextConfig.class, attribute = "locations")
|
@AliasFor(annotation = ContextConfig.class, attribute = "locations")
|
||||||
String[] value() default {};
|
String[] value() default {};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -778,6 +778,25 @@ public class AnnotationUtilsTests {
|
||||||
assertThat(getAttributeAliasNames(groovyScript), containsInAnyOrder("xmlFile"));
|
assertThat(getAttributeAliasNames(groovyScript), containsInAnyOrder("xmlFile"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getAttributeAliasNamesFromComposedAnnotationWithImplicitAliasesWithImpliedAliasNamesOmitted()
|
||||||
|
throws Exception {
|
||||||
|
|
||||||
|
Method value = ImplicitAliasesWithImpliedAliasNamesOmittedContextConfig.class.getDeclaredMethod("value");
|
||||||
|
Method location = ImplicitAliasesWithImpliedAliasNamesOmittedContextConfig.class.getDeclaredMethod("location");
|
||||||
|
Method xmlFile = ImplicitAliasesWithImpliedAliasNamesOmittedContextConfig.class.getDeclaredMethod("xmlFile");
|
||||||
|
|
||||||
|
// Meta-annotation attribute overrides
|
||||||
|
assertEquals("value", getAttributeOverrideName(value, ContextConfig.class));
|
||||||
|
assertEquals("location", getAttributeOverrideName(location, ContextConfig.class));
|
||||||
|
assertEquals("location", getAttributeOverrideName(xmlFile, ContextConfig.class));
|
||||||
|
|
||||||
|
// Implicit aliases
|
||||||
|
assertThat(getAttributeAliasNames(value), containsInAnyOrder("location", "xmlFile"));
|
||||||
|
assertThat(getAttributeAliasNames(location), containsInAnyOrder("value", "xmlFile"));
|
||||||
|
assertThat(getAttributeAliasNames(xmlFile), containsInAnyOrder("value", "location"));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getAttributeAliasNamesFromComposedAnnotationWithTransitiveImplicitAliases() throws Exception {
|
public void getAttributeAliasNamesFromComposedAnnotationWithTransitiveImplicitAliases() throws Exception {
|
||||||
Method xml = TransitiveImplicitAliasesContextConfig.class.getDeclaredMethod("xml");
|
Method xml = TransitiveImplicitAliasesContextConfig.class.getDeclaredMethod("xml");
|
||||||
|
|
@ -810,6 +829,26 @@ public class AnnotationUtilsTests {
|
||||||
assertThat(getAttributeAliasNames(groovy), containsInAnyOrder("xml"));
|
assertThat(getAttributeAliasNames(groovy), containsInAnyOrder("xml"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getAttributeAliasNamesFromComposedAnnotationWithTransitiveImplicitAliasesWithImpliedAliasNamesOmitted()
|
||||||
|
throws Exception {
|
||||||
|
|
||||||
|
Method xml = TransitiveImplicitAliasesWithImpliedAliasNamesOmittedContextConfig.class.getDeclaredMethod("xml");
|
||||||
|
Method groovy = TransitiveImplicitAliasesWithImpliedAliasNamesOmittedContextConfig.class.getDeclaredMethod("groovy");
|
||||||
|
|
||||||
|
// Meta-annotation attribute overrides
|
||||||
|
assertEquals("location", getAttributeOverrideName(xml, ContextConfig.class));
|
||||||
|
assertEquals("location", getAttributeOverrideName(groovy, ContextConfig.class));
|
||||||
|
|
||||||
|
// Explicit meta-annotation attribute overrides
|
||||||
|
assertEquals("xmlFile", getAttributeOverrideName(xml, ImplicitAliasesWithImpliedAliasNamesOmittedContextConfig.class));
|
||||||
|
assertEquals("location", getAttributeOverrideName(groovy, ImplicitAliasesWithImpliedAliasNamesOmittedContextConfig.class));
|
||||||
|
|
||||||
|
// Transitive implicit aliases
|
||||||
|
assertThat(getAttributeAliasNames(groovy), containsInAnyOrder("xml"));
|
||||||
|
assertThat(getAttributeAliasNames(xml), containsInAnyOrder("groovy"));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void synthesizeAnnotationWithoutAttributeAliases() throws Exception {
|
public void synthesizeAnnotationWithoutAttributeAliases() throws Exception {
|
||||||
Component component = WebController.class.getAnnotation(Component.class);
|
Component component = WebController.class.getAnnotation(Component.class);
|
||||||
|
|
@ -992,6 +1031,31 @@ public class AnnotationUtilsTests {
|
||||||
assertEquals("groovyScript: ", expected, synthesizedConfig.groovyScript());
|
assertEquals("groovyScript: ", expected, synthesizedConfig.groovyScript());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void synthesizeAnnotationWithImplicitAliasesWithImpliedAliasNamesOmitted() throws Exception {
|
||||||
|
assertAnnotationSynthesisWithImplicitAliasesWithImpliedAliasNamesOmitted(
|
||||||
|
ValueImplicitAliasesWithImpliedAliasNamesOmittedContextConfigClass.class, "value");
|
||||||
|
assertAnnotationSynthesisWithImplicitAliasesWithImpliedAliasNamesOmitted(
|
||||||
|
LocationsImplicitAliasesWithImpliedAliasNamesOmittedContextConfigClass.class, "location");
|
||||||
|
assertAnnotationSynthesisWithImplicitAliasesWithImpliedAliasNamesOmitted(
|
||||||
|
XmlFilesImplicitAliasesWithImpliedAliasNamesOmittedContextConfigClass.class, "xmlFile");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertAnnotationSynthesisWithImplicitAliasesWithImpliedAliasNamesOmitted(Class<?> clazz,
|
||||||
|
String expected) throws Exception {
|
||||||
|
|
||||||
|
ImplicitAliasesWithImpliedAliasNamesOmittedContextConfig config = clazz.getAnnotation(
|
||||||
|
ImplicitAliasesWithImpliedAliasNamesOmittedContextConfig.class);
|
||||||
|
assertNotNull(config);
|
||||||
|
|
||||||
|
ImplicitAliasesWithImpliedAliasNamesOmittedContextConfig synthesizedConfig = synthesizeAnnotation(config);
|
||||||
|
assertThat(synthesizedConfig, instanceOf(SynthesizedAnnotation.class));
|
||||||
|
|
||||||
|
assertEquals("value: ", expected, synthesizedConfig.value());
|
||||||
|
assertEquals("locations: ", expected, synthesizedConfig.location());
|
||||||
|
assertEquals("xmlFiles: ", expected, synthesizedConfig.xmlFile());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void synthesizeAnnotationWithImplicitAliasesForAliasPair() throws Exception {
|
public void synthesizeAnnotationWithImplicitAliasesForAliasPair() throws Exception {
|
||||||
Class<?> clazz = ImplicitAliasesForAliasPairContextConfigClass.class;
|
Class<?> clazz = ImplicitAliasesForAliasPairContextConfigClass.class;
|
||||||
|
|
@ -2113,6 +2177,48 @@ public class AnnotationUtilsTests {
|
||||||
static class Location3ImplicitAliasesContextConfigClass {
|
static class Location3ImplicitAliasesContextConfigClass {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ContextConfig
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@interface ImplicitAliasesWithImpliedAliasNamesOmittedContextConfig {
|
||||||
|
|
||||||
|
// intentionally omitted: attribute = "value"
|
||||||
|
@AliasFor(annotation = ContextConfig.class)
|
||||||
|
String value() default "";
|
||||||
|
|
||||||
|
// intentionally omitted: attribute = "locations"
|
||||||
|
@AliasFor(annotation = ContextConfig.class)
|
||||||
|
String location() default "";
|
||||||
|
|
||||||
|
@AliasFor(annotation = ContextConfig.class, attribute = "location")
|
||||||
|
String xmlFile() default "";
|
||||||
|
}
|
||||||
|
|
||||||
|
@ImplicitAliasesWithImpliedAliasNamesOmittedContextConfig
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@interface TransitiveImplicitAliasesWithImpliedAliasNamesOmittedContextConfig {
|
||||||
|
|
||||||
|
@AliasFor(annotation = ImplicitAliasesWithImpliedAliasNamesOmittedContextConfig.class, attribute = "xmlFile")
|
||||||
|
String xml() default "";
|
||||||
|
|
||||||
|
@AliasFor(annotation = ImplicitAliasesWithImpliedAliasNamesOmittedContextConfig.class, attribute = "location")
|
||||||
|
String groovy() default "";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Attribute value intentionally matches attribute name:
|
||||||
|
@ImplicitAliasesWithImpliedAliasNamesOmittedContextConfig("value")
|
||||||
|
static class ValueImplicitAliasesWithImpliedAliasNamesOmittedContextConfigClass {
|
||||||
|
}
|
||||||
|
|
||||||
|
// Attribute value intentionally matches attribute name:
|
||||||
|
@ImplicitAliasesWithImpliedAliasNamesOmittedContextConfig(location = "location")
|
||||||
|
static class LocationsImplicitAliasesWithImpliedAliasNamesOmittedContextConfigClass {
|
||||||
|
}
|
||||||
|
|
||||||
|
// Attribute value intentionally matches attribute name:
|
||||||
|
@ImplicitAliasesWithImpliedAliasNamesOmittedContextConfig(xmlFile = "xmlFile")
|
||||||
|
static class XmlFilesImplicitAliasesWithImpliedAliasNamesOmittedContextConfigClass {
|
||||||
|
}
|
||||||
|
|
||||||
@ContextConfig
|
@ContextConfig
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
@interface ImplicitAliasesWithMissingDefaultValuesContextConfig {
|
@interface ImplicitAliasesWithMissingDefaultValuesContextConfig {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue