You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by sm...@apache.org on 2006/05/16 11:56:55 UTC

svn commit: r406887 - in /incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common: java/security/serialization/PermissionTest.java org/apache/harmony/security/support/SerializationTest.java

Author: smishura
Date: Tue May 16 02:56:52 2006
New Revision: 406887

URL: http://svn.apache.org/viewcvs?rev=406887&view=rev
Log:
Introducing SerializableAssert interface to compare (de)serialized objects + comparator for Throwable objects

Modified:
    incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/java/security/serialization/PermissionTest.java   (contents, props changed)
    incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/org/apache/harmony/security/support/SerializationTest.java   (contents, props changed)

Modified: incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/java/security/serialization/PermissionTest.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/java/security/serialization/PermissionTest.java?rev=406887&r1=406886&r2=406887&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/java/security/serialization/PermissionTest.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/java/security/serialization/PermissionTest.java Tue May 16 02:56:52 2006
@@ -21,6 +21,7 @@
 
 package java.security.serialization;
 
+import java.io.Serializable;
 import java.security.Permission;
 
 import org.apache.harmony.security.support.SerializationTest;
@@ -31,7 +32,8 @@
  * 
  */
 
-public class PermissionTest extends SerializationTest {
+public class PermissionTest extends SerializationTest implements
+        SerializationTest.SerializableAssert {
 
     /**
      * @see com.intel.drl.test.SerializationTest#getData()
@@ -41,7 +43,7 @@
                 new RealPermission("IYF&*%^sd 43") };
     }
 
-    protected void assertDeserialized(Object golden, Object test) {
+    public void assertDeserialized(Serializable golden, Serializable test) {
         assertSame(golden.getClass(), test.getClass());
         assertEquals(((Permission) golden).getName(), ((Permission) test)
                 .getName());

Propchange: incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/java/security/serialization/PermissionTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/org/apache/harmony/security/support/SerializationTest.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/org/apache/harmony/security/support/SerializationTest.java?rev=406887&r1=406886&r2=406887&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/org/apache/harmony/security/support/SerializationTest.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/org/apache/harmony/security/support/SerializationTest.java Tue May 16 02:56:52 2006
@@ -31,6 +31,8 @@
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.io.OutputStream;
+import java.io.Serializable;
+import java.lang.reflect.Method;
 
 import junit.framework.TestCase;
 
@@ -136,13 +138,18 @@
      * objects.
      */
     public void testSelf() throws Throwable {
+
+        SerializableAssert comparator = defineComparator();
+
         Object[] data = getData();
         for (int i = 0; i < data.length; i++) {
             ByteArrayOutputStream bos = new ByteArrayOutputStream();
             putObjectToStream(data[i], bos);
             ByteArrayInputStream bis = new ByteArrayInputStream(bos
                 .toByteArray());
-            assertDeserialized(data[i], getObjectFromStream(bis));
+
+            comparator.assertDeserialized((Serializable) data[i],
+                    (Serializable) getObjectFromStream(bis));
         }
     }
 
@@ -151,11 +158,14 @@
      * compartibility with Reference Implementation.
      */
     public void testGolden() throws Throwable {
+        
+        SerializableAssert comparator = defineComparator();
+        
         Object[] data = getData();
         for (int i = 0; i < data.length; i++) {
-            assertDeserialized(data[i],
-                               getObjectFromStream(new FileInputStream(
-                                   getDataFile(i))));
+            comparator.assertDeserialized((Serializable) data[i],
+                    (Serializable) getObjectFromStream(new FileInputStream(
+                            getDataFile(i))));
         }
     }
 
@@ -214,5 +224,82 @@
         Object result = ois.readObject();
         ois.close();
         return result;
+    }
+    
+    /**
+     * Interface to compare (de)serialized objects
+     */
+    public interface SerializableAssert {
+        void assertDeserialized(Serializable reference, Serializable test);
+    }
+
+    // default comparator for a class that has equals(Object) method
+    private final static SerializableAssert DEFAULT_COMPARATOR = new SerializableAssert() {
+        public void assertDeserialized(Serializable reference, Serializable test) {
+            TestCase.assertEquals(reference, test);
+        }
+    };
+
+    // for comparing java.lang.Throwable objects
+    private final static SerializableAssert THROWABLE_COMPARATOR = new SerializableAssert() {
+        public void assertDeserialized(Serializable reference, Serializable test) {
+
+            Throwable refThr = (Throwable) reference;
+            Throwable tstThr = (Throwable) test;
+
+            // verify message
+            TestCase.assertEquals(refThr.getMessage(), tstThr.getMessage());
+
+            // verify cause
+            if (refThr.getCause() == null) {
+                TestCase.assertNull(tstThr.getCause());
+            } else {
+                TestCase.assertNotNull(tstThr.getCause());
+
+                refThr = refThr.getCause();
+                tstThr = tstThr.getCause();
+
+                TestCase.assertEquals(refThr.getClass(), tstThr.getClass());
+                TestCase.assertEquals(refThr.getMessage(), tstThr.getMessage());
+            }
+        }
+    };
+
+    private SerializableAssert defineComparator() throws Exception {
+
+        if (this instanceof SerializableAssert) {
+            return (SerializableAssert) this;
+        }
+
+        Object s[] = getData();
+        if (s == null || s.length == 0) {
+            // nothing to compare - OK with default comparator
+            return DEFAULT_COMPARATOR;
+
+        }
+
+        Method m = s[0].getClass().getMethod("equals", Object.class);
+
+        if (m.getDeclaringClass() != Object.class) {
+            // one of classes overrides Object.equals(Object) method
+            // use default comparator
+            return DEFAULT_COMPARATOR;
+        }
+
+        // TODO use generics to detect comparator
+        // instead of 'instanceof' for the first element
+        if(s[0] instanceof java.lang.Throwable){
+            return THROWABLE_COMPARATOR;
+        }
+
+        // TODO - throw new RuntimeException() if failed to detect comparator
+        // return stub comparator for a while
+        final SerializationTest thisTest = this;
+        return new SerializableAssert() {
+            public void assertDeserialized(Serializable reference,
+                    Serializable test) {
+                thisTest.assertDeserialized(reference, test);
+            }
+        };
     }
 }

Propchange: incubator/harmony/enhanced/classlib/trunk/modules/security/src/test/java/common/org/apache/harmony/security/support/SerializationTest.java
------------------------------------------------------------------------------
    svn:eol-style = native