package net.bytebuddy.description.type; import net.bytebuddy.description.annotation.AnnotationDescription; import net.bytebuddy.test.utility.ObjectPropertyAssertion; import org.junit.Before; import org.junit.Test; import java.util.Collection; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; public class TypeDescriptionGenericVisitorAnnotationStripperTest { private static final String FOO = "foo"; private AnnotationDescription annotationDescription; @Before public void setUp() throws Exception { annotationDescription = AnnotationDescription.Builder.ofType(Foo.class).build(); } @Test public void testWildcardLowerBound() throws Exception { TypeDescription.Generic typeDescription = TypeDescription.Generic.Builder.rawType(Object.class) .annotate(annotationDescription) .asWildcardLowerBound(annotationDescription); assertThat(TypeDescription.Generic.Visitor.AnnotationStripper.INSTANCE.onWildcard(typeDescription), is(typeDescription)); assertThat(TypeDescription.Generic.Visitor.AnnotationStripper.INSTANCE.onWildcard(typeDescription).getDeclaredAnnotations().size(), is(0)); assertThat(TypeDescription.Generic.Visitor.AnnotationStripper.INSTANCE.onWildcard(typeDescription).getLowerBounds() .getOnly().getDeclaredAnnotations().size(), is(0)); } @Test public void testWildcardUpperBound() throws Exception { TypeDescription.Generic typeDescription = TypeDescription.Generic.Builder.rawType(Object.class) .annotate(annotationDescription) .asWildcardLowerBound(annotationDescription); assertThat(TypeDescription.Generic.Visitor.AnnotationStripper.INSTANCE.onWildcard(typeDescription), is(typeDescription)); assertThat(TypeDescription.Generic.Visitor.AnnotationStripper.INSTANCE.onWildcard(typeDescription).getDeclaredAnnotations().size(), is(0)); assertThat(TypeDescription.Generic.Visitor.AnnotationStripper.INSTANCE.onWildcard(typeDescription).getUpperBounds() .getOnly().getDeclaredAnnotations().size(), is(0)); } @Test public void testGenericArray() throws Exception { TypeDescription.Generic typeDescription = TypeDescription.Generic.Builder.rawType(Object.class) .annotate(annotationDescription) .asArray() .annotate(annotationDescription) .build(); assertThat(TypeDescription.Generic.Visitor.AnnotationStripper.INSTANCE.onGenericArray(typeDescription), is(typeDescription)); assertThat(TypeDescription.Generic.Visitor.AnnotationStripper.INSTANCE.onGenericArray(typeDescription).getDeclaredAnnotations().size(), is(0)); assertThat(TypeDescription.Generic.Visitor.AnnotationStripper.INSTANCE.onGenericArray(typeDescription).getComponentType() .getDeclaredAnnotations().size(), is(0)); } @Test public void testNonGenericArray() throws Exception { TypeDescription.Generic typeDescription = TypeDescription.Generic.Builder.rawType(Object.class) .annotate(annotationDescription) .asArray() .annotate(annotationDescription) .build(); assertThat(TypeDescription.Generic.Visitor.AnnotationStripper.INSTANCE.onNonGenericType(typeDescription), is(typeDescription)); assertThat(TypeDescription.Generic.Visitor.AnnotationStripper.INSTANCE.onNonGenericType(typeDescription).getDeclaredAnnotations().size(), is(0)); assertThat(TypeDescription.Generic.Visitor.AnnotationStripper.INSTANCE.onNonGenericType(typeDescription).getComponentType() .getDeclaredAnnotations().size(), is(0)); } @Test public void testNonGeneric() throws Exception { TypeDescription.Generic typeDescription = TypeDescription.Generic.Builder.rawType(Object.class) .annotate(annotationDescription) .build(); assertThat(TypeDescription.Generic.Visitor.AnnotationStripper.INSTANCE.onNonGenericType(typeDescription), is(typeDescription)); assertThat(TypeDescription.Generic.Visitor.AnnotationStripper.INSTANCE.onNonGenericType(typeDescription).getDeclaredAnnotations().size(), is(0)); } @Test public void testTypeVariable() throws Exception { TypeDescription.Generic typeDescription = TypeDescription.Generic.Builder.typeVariable(FOO).annotate(annotationDescription).build(); assertThat(TypeDescription.Generic.Visitor.AnnotationStripper.INSTANCE.onTypeVariable(typeDescription).getSymbol(), is(FOO)); assertThat(TypeDescription.Generic.Visitor.AnnotationStripper.INSTANCE.onTypeVariable(typeDescription).getDeclaredAnnotations().size(), is(0)); } @Test public void testParameterized() throws Exception { TypeDescription.Generic typeDescription = TypeDescription.Generic.Builder.parameterizedType(new TypeDescription.ForLoadedType(Collection.class), TypeDescription.Generic.Builder.rawType(Object.class).annotate(annotationDescription).build()).annotate(annotationDescription).build(); assertThat(TypeDescription.Generic.Visitor.AnnotationStripper.INSTANCE.onParameterizedType(typeDescription), is(typeDescription)); assertThat(TypeDescription.Generic.Visitor.AnnotationStripper.INSTANCE.onParameterizedType(typeDescription).getDeclaredAnnotations().size(), is(0)); assertThat(TypeDescription.Generic.Visitor.AnnotationStripper.INSTANCE.onParameterizedType(typeDescription).getTypeArguments() .getOnly().getDeclaredAnnotations().size(), is(0)); } @Test public void testObjectProperties() throws Exception { ObjectPropertyAssertion.of(TypeDescription.Generic.Visitor.AnnotationStripper.class).apply(); } private @interface Foo { /* empty */ } }