package com.opensymphony.xwork2.util;
import junit.framework.TestCase;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.AnnotatedElement;
import java.util.Collection;
/**
* @author Dan Oxlade, dan d0t oxlade at gmail d0t c0m
*/
public class AnnotationUtilsTest extends TestCase {
public void testIsAnnotatedByWithoutAnnotationArgsReturnsFalse() throws Exception {
assertFalse(AnnotationUtils.isAnnotatedBy(DummyClass.class));
assertFalse(AnnotationUtils.isAnnotatedBy(DummyClass.class.getMethod("methodWithAnnotation")));
}
@SuppressWarnings("unchecked")
public void testIsAnnotatedByWithSingleAnnotationArgMatchingReturnsTrue() throws Exception {
assertTrue(AnnotationUtils.isAnnotatedBy(DummyClass.class.getMethod("methodWithAnnotation"), MyAnnotation.class));
}
@SuppressWarnings("unchecked")
public void testIsAnnotatedByWithMultiAnnotationArgMatchingReturnsTrue() throws Exception {
assertFalse(AnnotationUtils.isAnnotatedBy(DummyClass.class.getMethod("methodWithAnnotation"), Deprecated.class));
assertTrue(AnnotationUtils.isAnnotatedBy(DummyClass.class.getMethod("methodWithAnnotation"), MyAnnotation.class, Deprecated.class));
assertTrue(AnnotationUtils.isAnnotatedBy(DummyClass.class.getMethod("methodWithAnnotation"), Deprecated.class, MyAnnotation.class));
}
public void testGetAnnotedMethodsWithoutAnnotationArgs() throws Exception {
Collection<? extends AnnotatedElement> ans = AnnotationUtils.getAnnotatedMethods(DummyClass.class);
assertTrue(ans.size() == 1);
assertEquals(ans.iterator().next(), DummyClass.class.getMethod("methodWithAnnotation"));
}
@SuppressWarnings("unchecked")
public void testGetAnnotatedMethodsWithAnnotationArgs() throws Exception {
Collection<? extends AnnotatedElement> ans = AnnotationUtils.getAnnotatedMethods(DummyClass.class, Deprecated.class);
assertTrue(ans.isEmpty());
ans = AnnotationUtils.getAnnotatedMethods(DummyClass.class, Deprecated.class, MyAnnotation.class);
assertEquals(1, ans.size());
ans = AnnotationUtils.getAnnotatedMethods(DummyClass.class, MyAnnotation.class);
assertEquals(1, ans.size());
ans = AnnotationUtils.getAnnotatedMethods(DummyClass.class, MyAnnotation.class, MyAnnotation2.class);
assertEquals(1, ans.size());
ans = AnnotationUtils.getAnnotatedMethods(DummyClassExt.class, MyAnnotation.class, MyAnnotation2.class);
assertEquals(2, ans.size());
}
/**
* *****************************************************************
* <p/>
* TEST CLASSES
*/
private static class DummyClass {
public DummyClass() {
}
@MyAnnotation
public void methodWithAnnotation() {
}
}
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
}
private static final class DummyClassExt extends DummyClass {
@MyAnnotation2
public void anotherAnnotatedMethod() {
}
}
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation2 {
}
}