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