verify that a user-generated annotation which does not directly implement equals() nevertheless compares equivalently to a 'real' annotation
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/lang/trunk@996705 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
5615bbb7ad
commit
973b9b2e5b
|
@ -26,6 +26,9 @@ import java.lang.annotation.Retention;
|
||||||
import java.lang.annotation.Target;
|
import java.lang.annotation.Target;
|
||||||
import java.lang.reflect.Array;
|
import java.lang.reflect.Array;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
import java.lang.reflect.InvocationHandler;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.lang.reflect.Proxy;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
@ -427,4 +430,42 @@ public class AnnotationUtilsTest {
|
||||||
.getClass()));
|
.getClass()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(timeout = 666)
|
||||||
|
public void testGeneratedAnnotationEquivalentToRealAnnotation() throws Exception {
|
||||||
|
final Test real = getClass().getDeclaredMethod(
|
||||||
|
"testGeneratedAnnotationEquivalentToRealAnnotation").getAnnotation(Test.class);
|
||||||
|
|
||||||
|
InvocationHandler generatedTestInvocationHandler = new InvocationHandler() {
|
||||||
|
|
||||||
|
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
|
||||||
|
if ("equals".equals(method.getName()) && method.getParameterTypes().length == 1) {
|
||||||
|
return proxy == args[0];
|
||||||
|
}
|
||||||
|
if ("hashCode".equals(method.getName()) && method.getParameterTypes().length == 0) {
|
||||||
|
return System.identityHashCode(proxy);
|
||||||
|
}
|
||||||
|
if ("toString".equals(method.getName()) && method.getParameterTypes().length == 0) {
|
||||||
|
return "Test proxy";
|
||||||
|
}
|
||||||
|
return method.invoke(real, args);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Test generated = (Test) Proxy.newProxyInstance(Thread.currentThread()
|
||||||
|
.getContextClassLoader(), new Class[] { Test.class },
|
||||||
|
generatedTestInvocationHandler);
|
||||||
|
assertTrue(real.equals(generated));
|
||||||
|
assertFalse(generated.equals(real));
|
||||||
|
assertTrue(AnnotationUtils.equals(generated, real));
|
||||||
|
assertTrue(AnnotationUtils.equals(real, generated));
|
||||||
|
|
||||||
|
Test generated2 = (Test) Proxy.newProxyInstance(Thread.currentThread()
|
||||||
|
.getContextClassLoader(), new Class[] { Test.class },
|
||||||
|
generatedTestInvocationHandler);
|
||||||
|
assertFalse(generated.equals(generated2));
|
||||||
|
assertFalse(generated2.equals(generated));
|
||||||
|
assertTrue(AnnotationUtils.equals(generated, generated2));
|
||||||
|
assertTrue(AnnotationUtils.equals(generated2, generated));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue