Home | History | Annotate | Download | only in proxy
      1 package test.javassist.proxy;
      2 
      3 import junit.framework.TestCase;
      4 
      5 import java.io.FileInputStream;
      6 import java.io.FileOutputStream;
      7 import java.io.ObjectInputStream;
      8 import java.io.ObjectOutputStream;
      9 import java.io.Serializable;
     10 import java.lang.reflect.Method;
     11 
     12 import javassist.util.proxy.ProxyFactory;
     13 
     14 public class ProxySimpleTest extends TestCase {
     15     public void testReadWrite() throws Exception {
     16         final String fileName = "read-write.bin";
     17         ProxyFactory.ClassLoaderProvider cp = ProxyFactory.classLoaderProvider;
     18         ProxyFactory.classLoaderProvider = new ProxyFactory.ClassLoaderProvider() {
     19             public ClassLoader get(ProxyFactory pf) {
     20                 return new javassist.Loader();
     21             }
     22         };
     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