You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by jk...@apache.org on 2007/05/17 04:50:27 UTC

svn commit: r538791 - in /tapestry/tapestry4/trunk/tapestry-framework/src: java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java test/org/apache/tapestry/services/impl/ComponentEventConnectionWorkerTest.java

Author: jkuhnert
Date: Wed May 16 19:50:24 2007
New Revision: 538791

URL: http://svn.apache.org/viewvc?view=rev&rev=538791
Log:
Fixes bug where component event connection worker would wire up the same event listener twice if it had specified multiple events for the same component.

Modified:
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/ComponentEventConnectionWorkerTest.java

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java?view=diff&rev=538791&r1=538790&r2=538791
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java Wed May 16 19:50:24 2007
@@ -355,7 +355,11 @@
                             listener.isAsync(), 
                             listener.isValidateForm(), 
                             ScriptUtils.functionHash(listener));
-                    continue;
+
+                    // re-looping over the same property -> event listener list would
+                    // result in duplicate bindings so break out 
+
+                    break;
                 }
                 
                 // form has been rendered so go ahead

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/ComponentEventConnectionWorkerTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/ComponentEventConnectionWorkerTest.java?view=diff&rev=538791&r1=538790&r2=538791
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/ComponentEventConnectionWorkerTest.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/ComponentEventConnectionWorkerTest.java Wed May 16 19:50:24 2007
@@ -239,7 +239,7 @@
         IComponentSpecification comp2Spec = new ComponentSpecification();
         
         // now test render
-        spec.addEventListener("comp1", new String[] {"onclick"}, "testMethod", "form1", true, true, false, false);
+        spec.addEventListener("comp1", new String[] {"onclick", "onchange"}, "testMethod", "form1", true, true, false, false);
         invoker.addEventListener("comp1", spec);
         invoker.addFormEventListener("form1", spec);
         
@@ -256,7 +256,7 @@
         expect(comp1.getExtendedId()).andReturn("comp1").anyTimes();
         expect(comp1.getClientId()).andReturn("comp1").anyTimes();
         
-        expect(cycle.getAttribute(ComponentEventConnectionWorker.FORM_NAME_LIST + "form1")).andReturn(null);
+        expect(cycle.getAttribute(ComponentEventConnectionWorker.FORM_NAME_LIST + "form1")).andReturn(null).times(2);
         
         expect(comp1.getSpecification()).andReturn(comp1Spec);
         
@@ -295,7 +295,7 @@
         List deferred = (List)worker.getDefferedFormConnections().get("form1");
         
         assert deferred != null;
-        assertEquals(deferred.size(), 2);
+        assertEquals(deferred.size(), 3);
         
         Object[] parms = (Object[])deferred.get(0);
         assertEquals(4, parms.length);
@@ -316,10 +316,18 @@
         
         assertEquals("comp1", parm.get("clientId"));
         assertEquals(comp1, parm.get("component"));
-        
+
+        // just make sure second element is targeted at comp1 to handle the two events we gave it
+
+        parms = (Object[])deferred.get(1);
+        assertEquals(parms.length, 4);
+
+        parm = (Map)parms[0];
+        assertEquals(parm.get("clientId"), "comp1");
+
         // test comp2 connections
         
-        parms = (Object[])deferred.get(1);
+        parms = (Object[])deferred.get(2);
         assertEquals(4, parms.length);
         
         // assert async is false
@@ -336,8 +344,8 @@
         assert parm.get("formEvents") == null;
         assert parm.get("target") == null;
         
-        assertEquals("comp2", parm.get("clientId"));
-        assertEquals(comp2, parm.get("component"));
+        assertEquals(parm.get("clientId"), "comp2");
+        assertEquals(parm.get("component"), comp2);
     }