package com.sun.jna;
import java.lang.annotation.Annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import junit.framework.TestCase;
public class LibraryTest extends TestCase {
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotation {
}
public interface Library { }
public interface AnnotatedLibrary extends Library {
@TestAnnotation boolean isAnnotated();
}
public class TestInvocationHandler implements InvocationHandler {
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
return Boolean.valueOf(method.getAnnotations().length == 1);
}
}
// There's a rumor that some VMs don't copy annotation information to
// dynamically generated proxies. Detect it here.
public void testProxyMethodHasAnnotations() throws Exception {
AnnotatedLibrary a = (AnnotatedLibrary)
Proxy.newProxyInstance(getClass().getClassLoader(),
new Class[] { AnnotatedLibrary.class },
new TestInvocationHandler());
assertTrue("Proxy method not annotated", a.isAnnotated());
}
public static void main(String[] args) {
junit.textui.TestRunner.run(LibraryTest.class);
}
}