You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by ml...@apache.org on 2006/10/18 11:51:17 UTC

svn commit: r465190 - in /incubator/harmony/enhanced/classlib/trunk/modules/beans/src: main/java/java/beans/ main/java/org/apache/harmony/beans/ main/java/org/apache/harmony/beans/internal/nls/ test/java/org/apache/harmony/beans/tests/java/beans/

Author: mloenko
Date: Wed Oct 18 02:51:16 2006
New Revision: 465190

URL: http://svn.apache.org/viewvc?view=rev&rev=465190
Log:
applied patch from HARMONY-1611
[classlib][beans] refactoring of PersistenceDelegateTest

Modified:
    incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/PersistenceDelegate.java
    incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/org/apache/harmony/beans/ObjectNode.java
    incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/org/apache/harmony/beans/internal/nls/messages.properties
    incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/org/apache/harmony/beans/tests/java/beans/PersistenceDelegateTest.java

Modified: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/PersistenceDelegate.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/PersistenceDelegate.java?view=diff&rev=465190&r1=465189&r2=465190
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/PersistenceDelegate.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/PersistenceDelegate.java Wed Oct 18 02:51:16 2006
@@ -17,14 +17,18 @@
 
 package java.beans;
 
-public abstract class PersistenceDelegate {
+import org.apache.harmony.beans.internal.nls.Messages;
 
-    public PersistenceDelegate() {
-    }
+public abstract class PersistenceDelegate {
 
     protected void initialize(Class<?> type, Object oldInstance,
             Object newInstance, Encoder out) {
-        if ((out != null) && (type != null)) {
+
+        if (type == null) {
+            throw new NullPointerException(Messages.getString("beans.4B")); //$NON-NLS-1$
+        }
+
+        if (out != null) {
             PersistenceDelegate pd = out.getPersistenceDelegate(type
                     .getSuperclass());
 
@@ -61,8 +65,6 @@
             }
 
             out.writeExpression(instantiate(oldInstance, out));
-            newInstance = out.get(oldInstance);
-            initialize(oldInstance.getClass(), oldInstance, newInstance, out);
         }
     }
 }

Modified: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/org/apache/harmony/beans/ObjectNode.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/org/apache/harmony/beans/ObjectNode.java?view=diff&rev=465190&r1=465189&r2=465190
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/org/apache/harmony/beans/ObjectNode.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/org/apache/harmony/beans/ObjectNode.java Wed Oct 18 02:51:16 2006
@@ -59,29 +59,30 @@
     }
 
     public Object getObjectValue() throws Exception {
-        if (objectValue != null) {
-            return objectValue;
-        }
-
-        if (nodes != null) {
-            Object[] oldArgs = initializer.getArguments();
-            Object[] newArgs = new Object[oldArgs.length];
-
-            for (int i = 0; i < oldArgs.length; ++i) {
-                if (oldArgs[i] != null) {
-                    ObjectNode node = nodes.get(oldArgs[i]);
-
-                    newArgs[i] = node.getObjectValue();
-                } else {
-                    newArgs[i] = null;
-                }
-            }
-
-            objectValue = (new Expression(initializer.getTarget(), initializer
-                    .getMethodName(), newArgs)).getValue();
-        } else {
+        if (objectValue == null) {
             objectValue = initializer.getValue();
         }
+
+        // XXX We probably don't need this. Investigate.
+//        if (nodes != null) {
+//            Object[] oldArgs = initializer.getArguments();
+//            Object[] newArgs = new Object[oldArgs.length];
+//
+//            for (int i = 0; i < oldArgs.length; ++i) {
+//                if (oldArgs[i] != null) {
+//                    ObjectNode node = nodes.get(oldArgs[i]);
+//
+//                    newArgs[i] = node.getObjectValue();
+//                } else {
+//                    newArgs[i] = null;
+//                }
+//            }
+//
+//            objectValue = (new Expression(initializer.getTarget(), initializer
+//                    .getMethodName(), newArgs)).getValue();
+//        } else {
+//            objectValue = initializer.getValue();
+//        }
 
         return objectValue;
     }

Modified: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/org/apache/harmony/beans/internal/nls/messages.properties
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/org/apache/harmony/beans/internal/nls/messages.properties?view=diff&rev=465190&r1=465189&r2=465190
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/org/apache/harmony/beans/internal/nls/messages.properties (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/org/apache/harmony/beans/internal/nls/messages.properties Wed Oct 18 02:51:16 2006
@@ -89,3 +89,6 @@
 beans.47=Unable to instantiate property editor
 beans.48=Property editor is not assignable from the PropertyEditor interface
 beans.49=Child cannot implement both BeanContextChild and BeanContextProxy
+beans.4A=newInstance is null
+beans.4B=type is null
+

Modified: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/org/apache/harmony/beans/tests/java/beans/PersistenceDelegateTest.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/org/apache/harmony/beans/tests/java/beans/PersistenceDelegateTest.java?view=diff&rev=465190&r1=465189&r2=465190
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/org/apache/harmony/beans/tests/java/beans/PersistenceDelegateTest.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/org/apache/harmony/beans/tests/java/beans/PersistenceDelegateTest.java Wed Oct 18 02:51:16 2006
@@ -23,6 +23,9 @@
 import java.beans.PersistenceDelegate;
 import java.beans.Statement;
 
+import java.util.Stack;
+import java.util.EmptyStackException;
+
 import junit.framework.TestCase;
 
 import org.apache.harmony.beans.tests.support.mock.MockFoo;
@@ -52,42 +55,14 @@
      * Tests writeObject() under normal condition when mutatesTo() returns True.
      */
     public void testWriteObject_NormalMutatesToTrue() {
-        MockPersistenceDelegate pd = new MockPersistenceDelegate(true, true);
-        MockEncoder enc = new MockEncoder();
-        MockFoo oldInstance = new MockFoo();
-        enc.setPersistenceDelegate(MockFooStop.class, pd);
-
-        pd.writeObject(oldInstance, enc);
-
-        // should have called initialize()
-        assertSame(enc, CallVerificationStack.getInstance().pop());
-        assertSame(null, CallVerificationStack.getInstance().pop());
-        assertSame(oldInstance, CallVerificationStack.getInstance().pop());
-        assertEquals(
-                "org.apache.harmony.beans.tests.java.beans.PersistenceDelegateTest$MockPersistenceDelegate",
-                CallVerificationStack.getInstance().getCurrentSourceClass());
-        assertEquals("initialize", CallVerificationStack.getInstance()
-                .getCurrentSourceMethod());
-        assertSame(MockFoo.class, CallVerificationStack.getInstance().pop());
-
-        // should have called mutatesTo()
-        assertSame(null, CallVerificationStack.getInstance().pop());
-        assertEquals(
-                "org.apache.harmony.beans.tests.java.beans.PersistenceDelegateTest$MockPersistenceDelegate",
-                CallVerificationStack.getInstance().getCurrentSourceClass());
-        assertEquals("mutatesTo", CallVerificationStack.getInstance()
-                .getCurrentSourceMethod());
-        assertSame(oldInstance, CallVerificationStack.getInstance().pop());
-
-        // should have called Encoder.get()
-        assertEquals(
-                "org.apache.harmony.beans.tests.java.beans.PersistenceDelegateTest$MockEncoder",
-                CallVerificationStack.getInstance().getCurrentSourceClass());
-        assertEquals("get", CallVerificationStack.getInstance()
-                .getCurrentSourceMethod());
-        assertSame(oldInstance, CallVerificationStack.getInstance().pop());
-
-        assertTrue(CallVerificationStack.getInstance().empty());
+        MockPersistenceDelegate2 pd = new MockPersistenceDelegate2(true);
+        MockEncoder2 enc = new MockEncoder2();
+        MockFoo foo = new MockFoo();
+
+        pd.writeObject(foo, enc);
+        
+        assertEquals("initialize", pd.popMethod());
+        assertEquals("mutatesTo", pd.popMethod());
     }
 
     /*
@@ -95,65 +70,23 @@
      * false.
      */
     public void testWriteObject_NormalMutatesToFalse() {
-        MockPersistenceDelegate pd = new MockPersistenceDelegate(false, true);
-        MockEncoder enc = new MockEncoder();
-        MockFoo oldInstance = new MockFoo();
-        enc.setPersistenceDelegate(MockFooStop.class, pd);
-
-        pd.writeObject(oldInstance, enc);
-
-        // should have called writeExpression()
-        assertEquals(
-                "org.apache.harmony.beans.tests.java.beans.PersistenceDelegateTest$MockEncoder",
-                CallVerificationStack.getInstance().getCurrentSourceClass());
-        assertEquals("writeExpression", CallVerificationStack.getInstance()
-                .getCurrentSourceMethod());
-        assertTrue(CallVerificationStack.getInstance().pop() instanceof Expression);
-
-        // should have called instantiate()
-        assertSame(enc, CallVerificationStack.getInstance().pop());
-        assertEquals(
-                "org.apache.harmony.beans.tests.java.beans.PersistenceDelegateTest$MockPersistenceDelegate",
-                CallVerificationStack.getInstance().getCurrentSourceClass());
-        assertEquals("instantiate", CallVerificationStack.getInstance()
-                .getCurrentSourceMethod());
-        assertSame(oldInstance, CallVerificationStack.getInstance().pop());
-
-        // should have called Encoder.remove()
-        assertEquals(
-                "org.apache.harmony.beans.tests.java.beans.PersistenceDelegateTest$MockEncoder",
-                CallVerificationStack.getInstance().getCurrentSourceClass());
-        assertEquals("remove", CallVerificationStack.getInstance()
-                .getCurrentSourceMethod());
-        assertSame(oldInstance, CallVerificationStack.getInstance().pop());
-
-        // should have called mutatesTo()
-        assertSame(null, CallVerificationStack.getInstance().pop());
-        assertEquals(
-                "org.apache.harmony.beans.tests.java.beans.PersistenceDelegateTest$MockPersistenceDelegate",
-                CallVerificationStack.getInstance().getCurrentSourceClass());
-        assertEquals("mutatesTo", CallVerificationStack.getInstance()
-                .getCurrentSourceMethod());
-        assertSame(oldInstance, CallVerificationStack.getInstance().pop());
-
-        // should have called Encoder.get()
-        assertEquals(
-                "org.apache.harmony.beans.tests.java.beans.PersistenceDelegateTest$MockEncoder",
-                CallVerificationStack.getInstance().getCurrentSourceClass());
-        assertEquals("get", CallVerificationStack.getInstance()
-                .getCurrentSourceMethod());
-        assertSame(oldInstance, CallVerificationStack.getInstance().pop());
-
-        assertTrue(CallVerificationStack.getInstance().empty());
+        MockPersistenceDelegate2 pd = new MockPersistenceDelegate2(false);
+        MockEncoder2 enc = new MockEncoder2();
+        MockFoo foo = new MockFoo();
+
+        pd.writeObject(foo, enc);
+        
+        assertEquals("instantiate", pd.popMethod());
+        assertEquals("mutatesTo", pd.popMethod());
+        assertWasAdded(MockFoo.class.getClass(), "new", null, enc);
     }
 
     /*
      * Tests writeObject() when object is null.
      */
     public void testWriteObject_NullObject() {
-        MockPersistenceDelegate pd = new MockPersistenceDelegate();
-        MockEncoder enc = new MockEncoder();
-        enc.setPersistenceDelegate(MockFooStop.class, pd);
+		MockPersistenceDelegate2 pd = new MockPersistenceDelegate2();
+		Encoder enc = new Encoder();
 
         try {
             pd.writeObject(null, enc);
@@ -167,9 +100,7 @@
      * Tests writeObject() when encoder is null.
      */
     public void testWriteObject_NullEncoder() {
-        MockPersistenceDelegate pd = new MockPersistenceDelegate();
-        MockEncoder enc = new MockEncoder();
-        enc.setPersistenceDelegate(MockFooStop.class, pd);
+		MockPersistenceDelegate2 pd = new MockPersistenceDelegate2();
 
         try {
             pd.writeObject(new MockFoo(), null);
@@ -284,14 +215,73 @@
      */
     public void testMutatesTo_Null() {
         DummyPersistenceDelegate pd = new DummyPersistenceDelegate();
+
         assertFalse(pd.mutatesTo("test", null));
         assertFalse(pd.mutatesTo(null, null));
+        assertFalse(pd.mutatesTo(null, "test"));
+    }
+
+    
+    // <--
+
+    private void assertWasAdded(Class targetClass, String methodName,
+                                 Object[] args, MockEncoder2 enc) {
         try {
-            pd.mutatesTo(null, "test");
-            fail("Should throw NullPointerException!");
-        } catch (NullPointerException ex) {
-            // expected
+            while (true) {
+                Statement stmt = enc.pop();
+
+                if (equals(stmt, targetClass, methodName, args)) {
+                    break;
+                }
+            }
+        } catch (EmptyStackException e) {
+            fail("Required statement was not found");
+        }
+    }
+
+    private boolean equals(Statement stmt, Class targetClass,
+                              String methodName, Object[] args) {
+           
+        if (stmt == null || !methodName.equals(stmt.getMethodName())) {
+            return false;
+        }
+
+        if (targetClass != null) {
+            // check if we have the object of the same class at least
+            if (targetClass != stmt.getTarget().getClass()) {
+                return false;
+            }
+        } else {
+            if (stmt.getTarget() != null) {
+                return false;
+            }
+        }
+        
+        if (args != null) {
+            if (stmt.getArguments() == null ||
+                args.length != stmt.getArguments().length) {
+                return false;
+            }
+
+            for (int i = 0; i < args.length; i++) {
+
+                if (args[i] != null) {
+                    if (!args[i].equals(stmt.getArguments()[i])) {
+                        return false;
+                    }
+                } else {
+                    if (stmt.getArguments()[i] != null) {
+                        return false;
+                    }
+                }
+            }
+        } else {
+            if (stmt.getArguments() != null && stmt.getArguments().length > 0) {
+                return false;
+            }
         }
+        
+        return true;
     }
 
     /*
@@ -329,7 +319,7 @@
         }
 
         @Override
-        public PersistenceDelegate getPersistenceDelegate(Class type) {
+        public PersistenceDelegate getPersistenceDelegate(Class<?> type) {
             return super.getPersistenceDelegate(type);
         }
 
@@ -349,7 +339,7 @@
         }
 
         @Override
-        public void setPersistenceDelegate(Class type,
+        public void setPersistenceDelegate(Class<?> type,
                 PersistenceDelegate persistenceDelegate) {
             super.setPersistenceDelegate(type, persistenceDelegate);
         }
@@ -413,7 +403,7 @@
         }
 
         @Override
-        public void initialize(Class type, Object oldInstance,
+        public void initialize(Class<?> type, Object oldInstance,
                 Object newInstance, Encoder enc) {
             StackTraceElement[] eles = (new Throwable()).getStackTrace();
             if (!this.filter
@@ -445,6 +435,65 @@
 
     }
 
+    static class MockEncoder2 extends Encoder {
+        Stack<Statement> stmts = new Stack<Statement>();
+        
+        public void writeExpression(Expression expr) {
+            stmts.push(expr);
+            super.writeExpression(expr);
+        }
+
+        public void writeStatement(Statement stmt) {
+            stmts.push(stmt);
+            super.writeStatement(stmt);
+        }
+        
+        public void writeObject(Object obj) {
+            super.writeObject(obj);
+        }
+
+        public Statement pop() {
+            return stmts.pop();
+        }
+
+    }
+
+    static class MockPersistenceDelegate2 extends PersistenceDelegate {
+        private Boolean mutatesToFlag = null;
+        Stack<String> methods = new Stack<String>();
+
+        public MockPersistenceDelegate2() {}
+        
+        public MockPersistenceDelegate2(boolean mutatesToFlag) {
+            this.mutatesToFlag = mutatesToFlag;
+        }
+
+        public void initialize(Class<?> type, Object oldInstance,
+                Object newInstance, Encoder enc) {
+            methods.push("initialize");
+            super.initialize(type, oldInstance, newInstance, enc);
+        }
+        
+        public Expression instantiate(Object oldInstance, Encoder out) {
+            methods.push("instantiate");
+            return new Expression(oldInstance.getClass(), "new", null);
+        }
+        
+        public boolean mutatesTo(Object oldInstance, Object newInstance) {
+            methods.push("mutatesTo");
+
+            if (mutatesToFlag != null) {
+                return mutatesToFlag;
+            } else {
+                return super.mutatesTo(oldInstance, newInstance);
+            }
+        }
+        
+        String popMethod() {
+            return methods.pop();
+        }
+    }
+
     /*
      * Dummy PersistenceDelegate subclass.
      */
@@ -455,7 +504,7 @@
         }
 
         @Override
-        public void initialize(Class type, Object oldInstance,
+        public void initialize(Class<?> type, Object oldInstance,
                 Object newInstance, Encoder enc) {
             super.initialize(type, oldInstance, newInstance, enc);
         }