1ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochpackage test.javassist.proxy;
2ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
3ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochimport junit.framework.TestCase;
4bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
5bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochimport java.io.FileInputStream;
6bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochimport java.io.FileOutputStream;
7c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochimport java.io.ObjectInputStream;
8bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochimport java.io.ObjectOutputStream;
9bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochimport java.io.Serializable;
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)import java.lang.reflect.Method;
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
12bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochimport javassist.util.proxy.ProxyFactory;
13bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
14bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochpublic class ProxySimpleTest extends TestCase {
15bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch    public void testReadWrite() throws Exception {
16bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch        final String fileName = "read-write.bin";
17bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch        ProxyFactory.ClassLoaderProvider cp = ProxyFactory.classLoaderProvider;
18bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch        ProxyFactory.classLoaderProvider = new ProxyFactory.ClassLoaderProvider() {
19bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch            public ClassLoader get(ProxyFactory pf) {
20bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch                return new javassist.Loader();
21bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch            }
22c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        };
23        ProxyFactory pf = new ProxyFactory();
24        pf.setSuperclass(ReadWriteData.class);
25        Object data = pf.createClass().newInstance();
26        // Object data = new ReadWriteData();
27        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(fileName));
28        oos.writeObject(data);
29        oos.close();
30        ProxyFactory.classLoaderProvider = cp;
31
32        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(fileName));
33        Object data2 = ois.readObject();
34        ois.close();
35        int i = ((ReadWriteData)data2).foo();
36        assertEquals(4, i);
37    }
38
39    public static class ReadWriteData implements Serializable {
40        public int foo() { return 4; }
41    }
42
43    public void testWriteReplace() throws Exception {
44        ProxyFactory pf = new ProxyFactory();
45        pf.setSuperclass(WriteReplace.class);
46        Object data = pf.createClass().newInstance();
47        assertEquals(data, ((WriteReplace)data).writeReplace());
48
49        ProxyFactory pf2 = new ProxyFactory();
50        pf2.setSuperclass(WriteReplace2.class);
51        Object data2 = pf2.createClass().newInstance();
52        Method meth = data2.getClass().getDeclaredMethod("writeReplace", new Class[0]);
53        assertEquals("javassist.util.proxy.SerializedProxy",
54                    meth.invoke(data2, new Object[0]).getClass().getName());
55    }
56
57    public static class WriteReplace implements Serializable {
58        public Object writeReplace() { return this; }
59    }
60
61    public static class WriteReplace2 implements Serializable {
62        public Object writeReplace(int i) { return new Integer(i); }
63    }
64}
65