package javassist.proxyfactory;
import junit.framework.*;
import javassist.util.proxy.*;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.lang.reflect.Method;
class Hand implements java.io.Serializable {
public int setHandler(int i) { return i; }
int getHandler() { return 3; }
}
public class Tester extends TestCase {
static class MHandler implements MethodHandler, java.io.Serializable {
public Object invoke(Object self, Method m, Method proceed,
Object[] args) throws Throwable {
System.out.println("Name: " + m.getName());
return proceed.invoke(self, args);
}
}
static MethodHandler mi = new MHandler();
public void test() throws Exception {
ProxyFactory f = new ProxyFactory();
f.setSuperclass(Hand.class);
Class c = f.createClass();
Hand foo = (Hand)c.getConstructor().newInstance();
((Proxy)foo).setHandler(mi);
assertTrue(ProxyFactory.isProxyClass(c));
assertEquals(3, foo.getHandler());
}
public void test2() throws Exception {
ProxyFactory f = new ProxyFactory();
f.setSuperclass(Hand.class);
Hand h = (Hand)f.create(new Class[0], new Object[0], mi);
assertEquals(3, h.getHandler());
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ProxyObjectOutputStream out = new ProxyObjectOutputStream(bos);
out.writeObject(h);
out.close();
byte[] bytes = bos.toByteArray();
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ProxyObjectInputStream in = new ProxyObjectInputStream(bis);
Hand h2 = (Hand)in.readObject();
assertEquals(3, h2.getHandler());
}
}