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 2006/11/02 23:50:02 UTC

svn commit: r470577 - in /tapestry/tapestry4/trunk/tapestry-framework/src: java/org/apache/tapestry/ java/org/apache/tapestry/internal/event/ java/org/apache/tapestry/services/impl/ test/org/apache/tapestry/form/

Author: jkuhnert
Date: Thu Nov  2 14:50:02 2006
New Revision: 470577

URL: http://svn.apache.org/viewvc?view=rev&rev=470577
Log:
Fixed rather large function hashing bug on client side bound events.

Modified:
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/AbstractComponent.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/EventBoundListener.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/TestSubmit.java

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/AbstractComponent.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/AbstractComponent.java?view=diff&rev=470577&r1=470576&r2=470577
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/AbstractComponent.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/AbstractComponent.java Thu Nov  2 14:50:02 2006
@@ -890,4 +890,36 @@
     {
         return false;
     }
+    
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public int hashCode()
+    {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((_clientId == null) ? 0 : _clientId.hashCode());
+        result = prime * result + ((_id == null) ? 0 : _id.hashCode());
+        return result;
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public boolean equals(Object obj)
+    {
+        if (this == obj) return true;
+        if (obj == null) return false;
+        if (getClass() != obj.getClass()) return false;
+        final AbstractComponent other = (AbstractComponent) obj;
+        if (_clientId == null) {
+            if (other._clientId != null) return false;
+        } else if (!_clientId.equals(other._clientId)) return false;
+        if (_id == null) {
+            if (other._id != null) return false;
+        } else if (!_id.equals(other._id)) return false;
+        return true;
+    }
 }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/EventBoundListener.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/EventBoundListener.java?view=diff&rev=470577&r1=470576&r2=470577
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/EventBoundListener.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/EventBoundListener.java Thu Nov  2 14:50:02 2006
@@ -112,12 +112,13 @@
     public int hashCode()
     {
         final int prime = 31;
-        int result = super.hashCode();
+        int result = 1;
         result = prime * result + ((_componentId == null) ? 0 : _componentId.hashCode());
         result = prime * result + ((_methodName == null) ? 0 : _methodName.hashCode());
+        result = prime * result + ((_formId == null) ? 0 : _formId.hashCode());
         return result;
     }
-
+    
     /** 
      * {@inheritDoc}
      */

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=470577&r1=470576&r2=470577
==============================================================================
--- 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 Thu Nov  2 14:50:02 2006
@@ -112,7 +112,6 @@
         parms.put("clientId", clientId);
         parms.put("component", component);
         
-        // Set events = prop.getEvents();
         Object[][] events = getEvents(prop);
         Object[][] formEvents = filterFormEvents(prop, parms, cycle);
         
@@ -231,7 +230,13 @@
             
             String event = (String)it.next();
             
-            ret.add(new Object[]{ event, ScriptUtils.functionHash(prop.getEventListeners(event)) });
+            int hash = 0;
+            List listeners = prop.getEventListeners(event);
+            for (int i=0; i < listeners.size(); i++){
+                hash += listeners.get(i).hashCode();
+            }
+            
+            ret.add(new Object[]{ event, ScriptUtils.functionHash(event + hash) });
         }
         
         return (Object[][])ret.toArray(new Object[ret.size()][2]);

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/TestSubmit.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/TestSubmit.java?view=diff&rev=470577&r1=470576&r2=470577
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/TestSubmit.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/TestSubmit.java Thu Nov  2 14:50:02 2006
@@ -38,6 +38,7 @@
 import org.apache.tapestry.engine.ILink;
 import org.apache.tapestry.listener.ListenerInvokerTerminator;
 import org.apache.tapestry.test.Creator;
+import org.apache.tapestry.util.ScriptUtils;
 import org.apache.tapestry.valid.IValidationDelegate;
 import org.apache.tapestry.valid.ValidationConstants;
 import org.testng.annotations.Test;
@@ -114,6 +115,53 @@
         verify();
     }
 
+    public void test_Render_Function_Hash()
+    {
+        Creator creator = new Creator();
+        Submit submit = (Submit) creator.newInstance(Submit.class, new Object[] {"submitType", "submit"});
+        
+        IValidationDelegate delegate = newDelegate();
+        IForm form = newForm();
+        IRequestCycle cycle = newCycle();
+        IMarkupWriter writer = newWriter();
+
+        trainGetForm(cycle, form);
+
+        trainWasPrerendered(form, writer, submit, false);
+
+        trainGetDelegate(form, delegate);
+        
+        delegate.setFormComponent(submit);
+
+        trainGetElementId(form, submit, "fred");
+
+        trainIsRewinding(form, false);
+
+        trainIsRewinding(cycle, false);
+        
+        form.setFormFieldUpdating(true);
+        
+        writer.beginEmpty("input");
+        writer.attribute("type", "submit");
+        writer.attribute("name", "fred");
+        writer.attribute("id", "fred");
+        writer.closeTag();
+
+        trainIsInError(delegate, false);
+
+        delegate.registerForFocus(submit, ValidationConstants.NORMAL_FIELD);
+
+        replay();
+
+        submit.renderComponent(writer, cycle);
+        
+        String hash = ScriptUtils.functionHash("onchange" + submit.hashCode());
+        
+        assertEquals(ScriptUtils.functionHash("onchange" + submit.hashCode()), hash);
+        
+        verify();
+    }
+    
     public void test_Render_Disabled()
     {
         Creator creator = new Creator();