package tc.oc.commons.reflect;
import java.lang.annotation.Annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import org.junit.Test;
import tc.oc.commons.core.reflect.AnnotationBase;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class AnnotationsTest {
@Retention(RetentionPolicy.RUNTIME)
@interface Woot {
int number() default 123;
String string() default "Hi!";
}
class WootImpl extends AnnotationBase implements Woot {
final int number;
final String string;
WootImpl(int number, String string) {
this.number = number;
this.string = string;
}
@Override
public Class<? extends Annotation> annotationType() {
return Woot.class;
}
@Override
public int number() {
return number;
}
@Override
public String string() {
return string;
}
}
@Test
public void equality() throws Throwable {
@Woot(number=456, string="Bye!") class C {}
final Woot a = C.class.getAnnotation(Woot.class);
final Woot b = new WootImpl(456, "Bye!");
assertTrue(a.equals(b));
assertTrue(b.equals(a));
assertEquals(a.hashCode(), b.hashCode());
}
}