package net.bytebuddy.description.annotation; import net.bytebuddy.test.utility.ObjectPropertyAssertion; import org.junit.Test; import java.lang.annotation.Annotation; public class AnnotationDescriptionBuilderTest { private static final String FOO = "foo", BAR = "bar", QUX = "qux", BAZ = "baz"; @Test(expected = IllegalArgumentException.class) public void testNonMatchingEnumerationValue() throws Exception { AnnotationDescription.Builder.ofType(Foo.class).define(FOO, FooBar.FIRST); } @Test(expected = IllegalArgumentException.class) public void testNonMatchingAnnotationValue() throws Exception { AnnotationDescription.Builder.ofType(Qux.class).define(FOO, new QuxBaz.Instance()); } @Test(expected = IllegalArgumentException.class) @SuppressWarnings("unchecked") public void testNonMatchingEnumerationArrayValue() throws Exception { AnnotationDescription.Builder.ofType(Foo.class).defineEnumerationArray(BAR, (Class) Bar.class, Bar.FIRST, FooBar.SECOND); } @Test(expected = IllegalArgumentException.class) @SuppressWarnings("unchecked") public void testNonMatchingAnnotationArrayValue() throws Exception { AnnotationDescription.Builder.ofType(Foo.class).defineAnnotationArray(BAZ, (Class) Qux.class, new Qux.Instance(), new QuxBaz.Instance()); } @Test(expected = IllegalArgumentException.class) @SuppressWarnings("unchecked") public void testNonAnnotationType() throws Exception { AnnotationDescription.Builder.ofType((Class) Object.class); } @Test(expected = IllegalStateException.class) public void testIncompleteAnnotation() throws Exception { AnnotationDescription.Builder.ofType(Foo.class).build(); } @Test(expected = IllegalArgumentException.class) public void testUnknownProperty() throws Exception { AnnotationDescription.Builder.ofType(Foo.class).define(FOO + BAR, FOO); } @Test(expected = IllegalArgumentException.class) public void testIllegalProperty() throws Exception { AnnotationDescription.Builder.ofType(Foo.class).define(FOO, FOO); } @Test(expected = IllegalArgumentException.class) public void testDuplicateProperty() throws Exception { AnnotationDescription.Builder.ofType(Foo.class).define(BAZ, FOO).define(BAZ, FOO); } @Test public void testObjectProperties() throws Exception { ObjectPropertyAssertion.of(AnnotationDescription.Builder.class).apply(); } public enum Bar { FIRST, SECOND } public enum FooBar { FIRST, SECOND } public @interface Foo { Bar foo(); Bar[] bar(); Qux qux(); String baz(); } public @interface Qux { class Instance implements Qux { @Override public Class<? extends Annotation> annotationType() { return Qux.class; } } } public @interface QuxBaz { class Instance implements QuxBaz { @Override public Class<? extends Annotation> annotationType() { return QuxBaz.class; } } } }