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

svn commit: r472158 - in /incubator/harmony/enhanced/classlib/trunk/modules/beans/src: main/java/java/beans/ test/java/org/apache/harmony/beans/tests/java/beans/ test/support/java/org/apache/harmony/beans/tests/support/mock/

Author: ayza
Date: Tue Nov  7 08:40:47 2006
New Revision: 472158

URL: http://svn.apache.org/viewvc?view=rev&rev=472158
Log:
Applying patch from HARMONY-1992 ([classlib][beans] new fixes for DefaultPersistenceDelegate failures (3)). MockFoo and MockFooLabel classes were also patched - missed in the original patch.

Modified:
    incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/DefaultPersistenceDelegate.java
    incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/org/apache/harmony/beans/tests/java/beans/DefaultPersistenceDelegateTest.java
    incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/support/java/org/apache/harmony/beans/tests/support/mock/MockFoo.java
    incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/support/java/org/apache/harmony/beans/tests/support/mock/MockFooLabel.java

Modified: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/DefaultPersistenceDelegate.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/DefaultPersistenceDelegate.java?view=diff&rev=472158&r1=472157&r2=472158
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/DefaultPersistenceDelegate.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/DefaultPersistenceDelegate.java Tue Nov  7 08:40:47 2006
@@ -54,12 +54,19 @@
     protected void initialize(Class<?> type, Object oldInstance,
             Object newInstance, Encoder out) {
 
+        // added for compatibility with RI
+        if (out == null) {
+            throw new NullPointerException(
+                    Messages.getString("beans.4C")); //$NON-NLS-1$
+        }
+
+        // added for compatibility with RI
         if (newInstance == null) {
             out.getExceptionListener().exceptionThrown(
                     new NullPointerException(Messages.getString("beans.4A"))); //$NON-NLS-1$
             return;
         }
-
+      
         try {
             PropertyDescriptor[] pds = Introspector.getBeanInfo(type)
                     .getPropertyDescriptors();

Modified: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/org/apache/harmony/beans/tests/java/beans/DefaultPersistenceDelegateTest.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/org/apache/harmony/beans/tests/java/beans/DefaultPersistenceDelegateTest.java?view=diff&rev=472158&r1=472157&r2=472158
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/org/apache/harmony/beans/tests/java/beans/DefaultPersistenceDelegateTest.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/org/apache/harmony/beans/tests/java/beans/DefaultPersistenceDelegateTest.java Tue Nov  7 08:40:47 2006
@@ -31,17 +31,26 @@
 import java.util.Iterator;
 
 import junit.framework.TestCase;
+import junit.framework.TestSuite;
 
 import org.apache.harmony.beans.tests.support.mock.MockFoo;
 import org.apache.harmony.beans.tests.support.mock.MockFoo2;
 import org.apache.harmony.beans.tests.support.mock.MockFooStop;
+import org.apache.harmony.beans.tests.support.mock.MockFooLabel;
 
 import tests.util.CallVerificationStack;
 
 /**
  * Tests the class java.beans.DefaultPersistenceDelegate
+ * TODO refactor the class and remove all references to CallVerificationStack 
  */
 public class DefaultPersistenceDelegateTest extends TestCase {
+    
+    public DefaultPersistenceDelegateTest() {}
+
+    public DefaultPersistenceDelegateTest(String s) {
+        super(s);
+    }
 
     /*
      * @see TestCase#setUp()
@@ -52,6 +61,15 @@
         Introspector.flushCaches();
         CallVerificationStack.getInstance().clear();
     }
+    
+    public static TestSuite suite() {
+//        TestSuite suite = new TestSuite();
+        TestSuite suite = new TestSuite(DefaultPersistenceDelegateTest.class);
+  
+//        suite.addTest(new DefaultPersistenceDelegateTest(
+//              "testInitialize_NotRegularGetter"));
+        return suite;
+    }
 
     /*
      * Test the default constructor.
@@ -359,6 +377,7 @@
         assertEquals(1, e.getArguments().length);
         assertEquals(new Integer(2), e.getArguments()[0]);
     }
+        
 
     /*
      * Tests mutatesTo() under normal conditions without any properties.
@@ -452,38 +471,34 @@
      * bean info class.
      */
     public void testInitialize_Normal() throws Exception {
-        CollectingEncoder enc = new CollectingEncoder();
+        CollectingEncoder enc;
         MockPersistenceDelegate pd = new MockPersistenceDelegate();
-        MockFoo oldBean = new MockFoo();
-        Iterator<Statement> iter;
-        boolean found1 = false;
-        boolean found2 = false;
+        MockFoo oldBean;
+        MockFoo newBean;
+        MockFooLabel complexLabel;
 
+        enc = new CollectingEncoder();
+        oldBean = new MockFoo();
         oldBean.setName("myName");
         oldBean.setLabel("myLabel");
+        pd.writeObject(oldBean, enc);
+        enc.clearCache();
         pd.initialize(MockFoo.class, oldBean, new MockFoo(), enc);
-        iter = enc.statements();
-
-        while (iter.hasNext()) {
-            Statement stmt = iter.next();
-            
-            if (stmt.getMethodName().equals("setName") ||
-                    stmt.getMethodName().equals("setLabel")) {
-                assertSame(oldBean, stmt.getTarget());
-                assertNotNull(stmt.getArguments());
-                assertEquals(1, stmt.getArguments().length);
-                    
-                if (stmt.getMethodName().equals("setName")) {
-                    assertEquals(oldBean.getName(), stmt.getArguments()[0]);
-                    found1 = true;
-                } else {
-                    assertEquals(oldBean.getLabel(), stmt.getArguments()[0]);
-                    found2 = true;
-                }
-            }
-        }
-        assertTrue("Required statement was not found", found1);
-        assertTrue("Required statement was not found", found2);
+        
+        assertNotNull(findStatement(enc.statements(), oldBean, "setName",
+                new Object[] { oldBean.getName() }));
+        assertNotNull(findStatement(enc.statements(), oldBean, "setLabel",
+                new Object[] { oldBean.getLabel() }));
+        
+        enc = new CollectingEncoder();
+        oldBean = new MockFoo();
+        oldBean.setComplexLabel(new MockFooLabel("myComplexLabel"));
+        pd.writeObject(oldBean, enc);
+        newBean = new MockFoo();
+        newBean.setComplexLabel(new MockFooLabel("complexLabel2"));
+        pd.writeObject(newBean, enc);
+        enc.clearCache();
+        pd.initialize(MockFoo.class, oldBean, newBean, enc);
     }
 
     /*
@@ -491,88 +506,66 @@
      * info class.
      */
     public void testInitialize_NormalBeanInfo() throws Exception {
-        MockEncoder enc = new MockEncoder();
+        CollectingEncoder enc = new CollectingEncoder();
         MockPersistenceDelegate pd = new MockPersistenceDelegate();
         MockFoo2 b = new MockFoo2(2);
+        MockFoo2 b2 = new MockFoo2(3);
+        Iterator<Statement> iter;
 
-        enc.writeObject(b);
-        CallVerificationStack.getInstance().clear();
-        MockFoo2 b2 = (MockFoo2) enc.get(b);
-        b2.myset(3);
-
+        pd.writeObject(b, enc);
+        pd.writeObject(b2, enc);
+        enc.clearCache();
         pd.initialize(MockFoo2.class, b, b2, enc);
 
-        // should have called writeStatement()
-        Statement stm = (Statement) CallVerificationStack.getInstance().pop();
-        assertSame(b, stm.getTarget());
-        assertEquals("myset", stm.getMethodName());
-        assertEquals(1, stm.getArguments().length);
-        assertEquals(new Integer(2), stm.getArguments()[0]);
-
-        // should have called get()
-        assertEquals(new Integer(2), CallVerificationStack.getInstance().pop());
-
-        // should have called writeExpression()
-        Expression exp = (Expression) CallVerificationStack.getInstance().pop();
-        assertEquals(new Integer(2), exp.getValue());
-        assertSame(b, exp.getTarget());
-        assertEquals("myget", exp.getMethodName());
-        assertEquals(0, exp.getArguments().length);
-
-        assertTrue(CallVerificationStack.getInstance().empty());
+        // XXX RI stores much more statements to the stream
+        iter = enc.statements();     
+//        assertNotNull("required statement not found",
+//                findStatement(iter, b, "myget", null));
+        assertNotNull("required statement not found",
+                findStatement(iter, null, "myset",
+                        new Object[] {new Integer(2)}));
     }
 
     /*
      * Test initialize() when oldInstance == newInstance.
-     */
-    public void testInitialize_SameInstance() throws Exception {
-        MockEncoder enc = new MockEncoder();
-        MockPersistenceDelegate pd = new MockPersistenceDelegate();
-        MockFoo b = new MockFoo();
-        b.setName("mymyName");
-        // b.setLabel("myLabel");
-
-        pd.initialize(MockFoo.class, b, b, enc);
-
-        // should have called get()
-        assertEquals("mymyName", CallVerificationStack.getInstance().pop());
-
-        // should have called writeExpression()
-        Expression exp = (Expression) CallVerificationStack.getInstance().pop();
-        assertSame(b.getName(), exp.getValue());
-        assertSame(b, exp.getTarget());
-        assertEquals("getName", exp.getMethodName());
-        assertEquals(0, exp.getArguments().length);
-
-        // should have called get()
-        assertNull(CallVerificationStack.getInstance().pop());
-
-        // should have called writeExpression()
-        exp = (Expression) CallVerificationStack.getInstance().pop();
-        assertSame(b.getLabel(), exp.getValue());
-        assertSame(b, exp.getTarget());
-        assertEquals("getLabel", exp.getMethodName());
-        assertEquals(0, exp.getArguments().length);
-
-        assertTrue(CallVerificationStack.getInstance().empty());
-    }
+     * XXX The current implementation outputs nothing to the stream. And this
+     * seems to be correct from the spec point of view since we need not to do
+     * any actions to convert the object to itself. However, RI outputs a lot
+     * of stuff to the stream here. 
+     */
+//    public void testInitialize_SameInstance() throws Exception {
+//        CollectingEncoder enc = new CollectingEncoder();
+//        MockPersistenceDelegate pd = new MockPersistenceDelegate();
+//        MockFoo b = new MockFoo();
+//        Iterator<Statement> iter;
+//        
+//        b.setName("mymyName");
+//        // b.setLabel("myLabel");
+//
+//        pd.initialize(MockFoo.class, b, b, enc);
+//
+//    }
 
     /*
      * Test initialize() with a bean with a transient property.
      */
     public void testInitialize_TransientProperty() throws Exception {
-        MockEncoder enc = new MockEncoder();
+        CollectingEncoder enc = new CollectingEncoder();
         MockPersistenceDelegate pd = new MockPersistenceDelegate();
         MockTransientBean b = new MockTransientBean();
+        
         b.setName("myName");
+        pd.writeObject(b, enc);
+        enc.clearCache();
         pd.initialize(MockTransientBean.class, b, new MockTransientBean(), enc);
-        assertTrue(CallVerificationStack.getInstance().empty());
+        assertFalse("transient fields should not be affected",
+                enc.statements().hasNext());
+        
         // set transient to false
         Introspector.flushCaches();
         MockTransientBeanBeanInfo.setTransient(false);
-        pd.initialize(MockTransientBean.class, new MockTransientBean(),
-                new MockTransientBean(), enc);
-        assertFalse(CallVerificationStack.getInstance().empty());
+        pd.initialize(MockTransientBean.class, b, new MockTransientBean(), enc);
+        assertTrue(enc.statements().hasNext());
     }
 
     /*
@@ -691,37 +684,6 @@
     }
 
     /*
-     * Test initialize() with a property name that has an unregular getter
-     * method, defined by its beaninfo.
-     */
-    public void testInitialize_NotRegularGetter() throws Exception {
-        MockPersistenceDelegate pd = new MockPersistenceDelegate();
-        // new String[] { "prop1" });
-        MockEncoder enc = new MockEncoder();
-
-        MockFoo2 b = new MockFoo2(2);
-        MockFoo2 b2 = new MockFoo2(1);
-        pd.initialize(MockFoo2.class, b, b2, enc);
-
-        // should have called writeStatement()
-        Statement stm = (Statement) CallVerificationStack.getInstance().pop();
-        assertSame(b, stm.getTarget());
-        assertEquals("myset", stm.getMethodName());
-        assertEquals(1, stm.getArguments().length);
-        assertEquals(new Integer(2), stm.getArguments()[0]);
-
-        // should have called get()
-        assertEquals(new Integer(2), CallVerificationStack.getInstance().pop());
-
-        // should have called writeExpression()
-        Expression exp = (Expression) CallVerificationStack.getInstance().pop();
-        assertEquals(new Integer(2), exp.getValue());
-        assertSame(b, exp.getTarget());
-        assertEquals("myget", exp.getMethodName());
-        assertEquals(0, exp.getArguments().length);
-    }
-
-    /*
      * Tests array persistence delegate
      */
     public void testArrayPD_Normal() {
@@ -998,13 +960,59 @@
         }
     }
 
+    /**
+     * Searches for the statement with given parameters.
+     * @param iter iterator to search through, null means ignore this parameter
+     * @param target
+     * @param methodName
+     * @param args
+     * @return found statement or null
+     */
+    static Statement findStatement(Iterator<Statement> iter, Object target,
+            String methodName, Object[] args) {
+
+        while (iter.hasNext()) {
+            Statement stmt = iter.next();
+            
+            if (target != null && stmt.getTarget() != target) {
+                continue;
+            }
+            
+            if (methodName != null && !methodName.equals(stmt.getMethodName()))
+            {
+                continue;
+            }
+
+            if (args != null) {
+                if ((stmt.getArguments() != null &&
+                         args.length != stmt.getArguments().length)
+                         || stmt.getArguments() == null)
+                {
+                    continue;
+                } 
+                
+                for (int i = 0; i < args.length; i++) {
+                    if ((args[i] == null && stmt.getArguments()[i] != null) ||
+                        (args[i] != null && stmt.getArguments()[i] == null) ||
+                        !args[i].equals(stmt.getArguments()[i]))
+                    {
+                        continue;
+                    }
+                }
+            }
+
+            return stmt;
+        }
+        
+        return null;
+    }
+    
     public static class CollectingEncoder extends Encoder {
-        private final Vector<Expression> expressions = new Vector<Expression>();
-        private final Vector<Statement> statements = new Vector<Statement>();
+        private Vector<Statement> statements = new Vector<Statement>();
         
         @Override
         public void writeExpression(Expression exp) {
-            expressions.add(exp);
+            statements.add(exp);
             super.writeExpression(exp);
         }
 
@@ -1014,12 +1022,12 @@
             super.writeStatement(stm);
         }
         
-        public Iterator<Expression> expressions() {
-            return expressions.iterator();
-        }
-
         public Iterator<Statement> statements() {
             return statements.iterator();
+        }
+        
+        public void clearCache() {
+            statements = new Vector<Statement>();
         }
     }
 }

Modified: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/support/java/org/apache/harmony/beans/tests/support/mock/MockFoo.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/support/java/org/apache/harmony/beans/tests/support/mock/MockFoo.java?view=diff&rev=472158&r1=472157&r2=472158
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/support/java/org/apache/harmony/beans/tests/support/mock/MockFoo.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/support/java/org/apache/harmony/beans/tests/support/mock/MockFoo.java Tue Nov  7 08:40:47 2006
@@ -30,6 +30,7 @@
     private static final long serialVersionUID = 1L;
 
     private String name;
+    private MockFooLabel complexLabel;
 
     /**
      * @return Returns the name.
@@ -39,10 +40,17 @@
     }
 
     /**
-     * @param name
-     *            The name to set.
+     * @param name The name to set.
      */
     public void setName(String name) {
         this.name = name;
+    }
+    
+    public MockFooLabel getComplexLabel() {
+        return complexLabel;
+    }
+    
+    public void setComplexLabel(MockFooLabel label) {
+        this.complexLabel = label;
     }
 }

Modified: incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/support/java/org/apache/harmony/beans/tests/support/mock/MockFooLabel.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/support/java/org/apache/harmony/beans/tests/support/mock/MockFooLabel.java?view=diff&rev=472158&r1=472157&r2=472158
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/support/java/org/apache/harmony/beans/tests/support/mock/MockFooLabel.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/beans/src/test/support/java/org/apache/harmony/beans/tests/support/mock/MockFooLabel.java Tue Nov  7 08:40:47 2006
@@ -25,6 +25,12 @@
 public class MockFooLabel implements Serializable {
     private String text;
 
+    public MockFooLabel() {}
+    
+    public MockFooLabel(String text) {
+        this.text = text; 
+    }
+    
     /**
      * @return Returns the text.
      */
@@ -38,5 +44,12 @@
      */
     public void setText(String text) {
         this.text = text;
+    }
+    
+    public boolean equals(Object obj) {
+        if (obj instanceof MockFooLabel) {
+            return false;
+        }
+        return false;
     }
 }