package com.brightgenerous.cglib; import static org.junit.Assert.*; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.lang.reflect.Method; import org.junit.Test; public class CglibUtilsTest { @Test public void createInterface() throws Exception { Class<?> subClass = CglibUtils.defineInterface(Foo.class.getName().replace("Foo", "Gen"), Foo.class, Bar.class, Hoge.class); assertTrue(Foo.class.isAssignableFrom(subClass)); assertTrue(Bar.class.isAssignableFrom(subClass)); assertEquals(Foo.class.getName(), subClass.getName().replace("Gen", "Foo")); { Method method = If.class.getMethod("function"); assertNull(method.getAnnotation(Ant1.class)); assertNull(method.getAnnotation(Ant2.class)); assertNotNull(method.getAnnotation(Ant3.class)); } { Method method = subClass.getMethod("function"); assertNotNull(method.getAnnotation(Ant1.class)); assertNull(method.getAnnotation(Ant2.class)); assertNull(method.getAnnotation(Ant3.class)); } } public interface Foo { @Ant1 void function(); } public interface Bar { @Ant2 void function(); } public interface Hoge { @Ant3 void function(); } public interface If extends Hoge, Foo, Bar { } @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) protected static @interface Ant1 { } @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) protected static @interface Ant2 { } @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) protected static @interface Ant3 { } }