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();