You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by jk...@apache.org on 2007/03/03 22:22:24 UTC
svn commit: r514244 - in /tapestry/tapestry4/trunk:
tapestry-annotations/src/test/org/apache/tapestry/annotations/
tapestry-framework/src/java/org/apache/tapestry/internal/event/
tapestry-framework/src/java/org/apache/tapestry/services/impl/ tapestry-f...
Author: jkuhnert
Date: Sat Mar 3 13:22:24 2007
New Revision: 514244
URL: http://svn.apache.org/viewvc?view=rev&rev=514244
Log:
Event connection worker wasn't properly connecting events up because one stupid loop did a return instead of continue.
Modified:
tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/AnnotatedPage.java
tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestEventListenerAnnotationWorker.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/ComponentEventProperty.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/internal/event/ComponentEventPropertyTest.java
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/ComponentEventConnectionWorkerTest.java
Modified: tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/AnnotatedPage.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/AnnotatedPage.java?view=diff&rev=514244&r1=514243&r2=514244
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/AnnotatedPage.java (original)
+++ tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/AnnotatedPage.java Sat Mar 3 13:22:24 2007
@@ -160,6 +160,12 @@
@EventListener(events = { "onClick" }, targets = { "email" }, submitForm = "testForm", focus=true)
public void formListener() { }
+ @EventListener(events = { "onClick" }, targets = { "phone" }, submitForm = "testForm")
+ public void anotherFormListener() { }
+
+ @EventListener(events = { "onClick" }, targets = { "phone" }, submitForm = "form")
+ public void yetAnotherFormListener() { }
+
@EventListener(events = { "onClick" }, targets = { "email" }, submitForm = "notExisting")
public void brokenFormListener() { }
Modified: tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestEventListenerAnnotationWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestEventListenerAnnotationWorker.java?view=diff&rev=514244&r1=514243&r2=514244
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestEventListenerAnnotationWorker.java (original)
+++ tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestEventListenerAnnotationWorker.java Sat Mar 3 13:22:24 2007
@@ -147,4 +147,5 @@
verify();
}
+
}
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/ComponentEventProperty.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/ComponentEventProperty.java?view=diff&rev=514244&r1=514243&r2=514244
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/ComponentEventProperty.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/ComponentEventProperty.java Sat Mar 3 13:22:24 2007
@@ -26,8 +26,6 @@
* Represents a configured listener/event(s) binding for a
* a component and the events that may be optionally listened
* for on the client browser.
- *
- * @author jkuhnert
*/
public class ComponentEventProperty
{
@@ -74,8 +72,7 @@
public void addFormEventListener(String event, String methodName,
String formId, boolean validateForm, boolean async, boolean focus)
{
- EventBoundListener listener =
- new EventBoundListener(methodName, formId, validateForm, _componentId, async, focus);
+ EventBoundListener listener = new EventBoundListener(methodName, formId, validateForm, _componentId, async, focus);
List listeners = getFormEventListeners(event);
if (!listeners.contains(listener))
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=514244&r1=514243&r2=514244
==============================================================================
--- 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 Sat Mar 3 13:22:24 2007
@@ -123,7 +123,7 @@
Object[][] formEvents = filterFormEvents(props[i], parms, cycle);
if (events.length < 1 && formEvents.length < 1)
- return;
+ continue;
DirectEventServiceParameter dsp =
new DirectEventServiceParameter((IDirectEvent)component, new Object[] {}, new String[] {}, false);
@@ -288,8 +288,8 @@
return (Object[][])ret.toArray(new Object[ret.size()][2]);
}
- Object[][] buildFormEvents(IRequestCycle cycle, String formId,
- Set events, Boolean async, Boolean validate, Object uniqueHash)
+ Object[][] buildFormEvents(IRequestCycle cycle, String formId, Set events, Boolean async,
+ Boolean validate, Object uniqueHash)
{
List formNames = (List)cycle.getAttribute(FORM_NAME_LIST + formId);
List retval = new ArrayList();
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/ComponentEventPropertyTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/ComponentEventPropertyTest.java?view=diff&rev=514244&r1=514243&r2=514244
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/ComponentEventPropertyTest.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/ComponentEventPropertyTest.java Sat Mar 3 13:22:24 2007
@@ -14,6 +14,7 @@
package org.apache.tapestry.internal.event;
import java.util.List;
+import java.util.Set;
import org.apache.tapestry.event.BrowserEvent;
import org.testng.annotations.Test;
@@ -30,7 +31,7 @@
public class ComponentEventPropertyTest extends TestBase
{
- public void testAddEventListener()
+ public void test_Add_Event_Listener()
{
String[] events = {"onClick", "onFoo"};
ComponentEventProperty prop = new ComponentEventProperty("compid");
@@ -52,7 +53,7 @@
assertEquals("doFoo", listener.getMethodName());
}
- public void testAddFormEventListener()
+ public void test_Add_Form_Event_Listener()
{
String[] events = {"onFoo"};
ComponentEventProperty prop = new ComponentEventProperty("compid");
@@ -79,7 +80,39 @@
assertEquals("doFoo", listener.getMethodName());
}
- public void testGetFormEvents()
+ public void test_Add_Multiple_Event_Listener()
+ {
+ String[] events = {"onClick", "onFoo"};
+ ComponentEventProperty prop = new ComponentEventProperty("compid");
+
+ prop.addListener(events, "doFoo", "form1", false, false, false);
+ prop.addListener(new String[]{"onchange"}, "doBar", "form2", false, false, false);
+ prop.addListener(new String[]{"onchange"}, "secondForm", "form1", false, false, false);
+
+ assertEquals("compid", prop.getComponentId());
+ assertEquals(prop.getEvents().size(), 0);
+ assertEquals(prop.getFormEvents().size(), 3);
+
+ Set s = prop.getFormEvents();
+ String[] fevents = (String[])s.toArray(new String[s.size()]);
+
+ assertEquals(fevents.length, 3);
+
+ List listeners = prop.getFormEventListeners("onchange");
+ assertEquals(listeners.size(), 2);
+
+ /*
+ List listeners = prop.getFormEventListeners("onClick");
+ assertEquals(listeners.size(), 2);
+
+ EventBoundListener listener = (EventBoundListener)listeners.get(0);
+ assertEquals("compid", listener.getComponentId());
+ assertNull(listener.getFormId());
+ assertEquals("doFoo", listener.getMethodName());
+ */
+ }
+
+ public void test_Get_Form_Events()
{
String[] events = {"onFoo"};
ComponentEventProperty prop = new ComponentEventProperty("compid");
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java?view=diff&rev=514244&r1=514243&r2=514244
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java Sat Mar 3 13:22:24 2007
@@ -50,8 +50,7 @@
public void test_Event_Properties()
{
IComponentSpecification spec = new ComponentSpecification();
- spec.addEventListener("comp1", new String[] {"onClick"}, "testFoo",
- null, false, false, false);
+ spec.addEventListener("comp1", new String[] {"onClick"}, "testFoo", null, false, false, false);
assert spec.getComponentEvents("comp1") != null;
assert spec.getComponentEvents("comp1").getEvents().size() == 1;
@@ -62,6 +61,25 @@
prop = spec.getComponentEvents("comp2");
assert prop == null;
+ }
+
+ public void test_Form_Event_Properties()
+ {
+ IComponentSpecification spec = new ComponentSpecification();
+ spec.addEventListener("comp1", new String[] {"onClick"}, "testFoo", "form", false, true, false);
+ spec.addEventListener("comp1", new String[] {"onClick"}, "testBar", "form", false, true, false);
+
+ assert spec.getComponentEvents("comp1") != null;
+
+ ComponentEventProperty p = spec.getComponentEvents("comp1");
+
+ // should be only form events bound
+ assertEquals(p.getEvents().size(), 0);
+ assertEquals(p.getEventListeners("onClick").size(), 0);
+
+ assertEquals(p.getComponentId(), "comp1");
+ assertEquals(p.getFormEventListeners("onClick").size(), 2);
+ assertEquals(p.getFormEvents().size(), 1);
}
public void test_Invoke_Component_Listener()
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=514244&r1=514243&r2=514244
==============================================================================
--- 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 Sat Mar 3 13:22:24 2007
@@ -28,6 +28,7 @@
import org.apache.hivemind.impl.DefaultClassResolver;
import org.apache.hivemind.util.ClasspathResource;
import org.apache.tapestry.BaseComponentTestCase;
+import org.apache.tapestry.IComponent;
import org.apache.tapestry.IDirectEvent;
import org.apache.tapestry.IForm;
import org.apache.tapestry.IRequestCycle;
@@ -41,6 +42,7 @@
import org.apache.tapestry.html.Body;
import org.apache.tapestry.internal.event.ComponentEventProperty;
import org.apache.tapestry.internal.event.IComponentEventInvoker;
+import org.apache.tapestry.internal.event.impl.ComponentEventInvoker;
import org.apache.tapestry.spec.ComponentSpecification;
import org.apache.tapestry.spec.IComponentSpecification;
import org.easymock.MockControl;
@@ -60,7 +62,7 @@
{
ClassResolver resolver = new DefaultClassResolver();
- IComponentEventInvoker invoker = new org.apache.tapestry.internal.event.impl.ComponentEventInvoker();
+ IComponentEventInvoker invoker = new ComponentEventInvoker();
IEngineService engine = newMock(IEngineService.class);
IRequestCycle cycle = newCycle();
checkOrder(cycle, false);
@@ -248,9 +250,22 @@
IDirectEvent component = newMock(IDirectEvent.class);
IComponentSpecification spec = new ComponentSpecification();
+ IDirectEvent comp1 = newMock(IDirectEvent.class);
+ IComponentSpecification comp1Spec = new ComponentSpecification();
+
+ IDirectEvent comp2 = newMock(IDirectEvent.class);
+ IComponentSpecification comp2Spec = new ComponentSpecification();
+
// now test render
+ spec.addEventListener("comp1", new String[] {"onclick"}, "testMethod", "form1", true, true, false);
invoker.addEventListener("comp1", spec);
- spec.addEventListener("comp1", new String[] {"onclick"}, "testMethod", "form1", true, false, false);
+ invoker.addFormEventListener("form1", spec);
+
+ spec.addEventListener("comp2", new String[] {"onclick"}, "testAnotherMethod", "form1", true, true, false);
+ invoker.addEventListener("comp2", spec);
+ invoker.addFormEventListener("form1", spec);
+
+ // render of comp1
expect(cycle.isRewinding()).andReturn(false);
@@ -258,31 +273,60 @@
expect(cycle.getAttribute(TapestryUtils.FIELD_PRERENDER)).andReturn(null);
- expect(component.getId()).andReturn("comp1").anyTimes();
- expect(component.getClientId()).andReturn("comp1").anyTimes();
+ expect(comp1.getId()).andReturn("comp1").anyTimes();
+ expect(comp1.getClientId()).andReturn("comp1").anyTimes();
+
+ expect(cycle.getAttribute(ComponentEventConnectionWorker.FORM_NAME_LIST + "form1")).andReturn(null);
+
+ expect(comp1.getSpecification()).andReturn(comp1Spec);
+
+ // render of comp2
+
+ expect(cycle.isRewinding()).andReturn(false);
+
+ expect(cycle.getAttribute(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE)).andReturn(prs);
+
+ expect(cycle.getAttribute(TapestryUtils.FIELD_PRERENDER)).andReturn(null);
+
+ expect(comp2.getId()).andReturn("comp2").anyTimes();
+ expect(comp2.getClientId()).andReturn("comp2").anyTimes();
expect(cycle.getAttribute(ComponentEventConnectionWorker.FORM_NAME_LIST + "form1")).andReturn(null);
+ expect(comp2.getSpecification()).andReturn(comp2Spec);
+
+ // render of component
+
+ expect(cycle.isRewinding()).andReturn(false);
+
+ expect(cycle.getAttribute(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE)).andReturn(prs);
+
+ expect(cycle.getAttribute(TapestryUtils.FIELD_PRERENDER)).andReturn(null);
+
+ expect(component.getId()).andReturn("comp").anyTimes();
+
expect(component.getSpecification()).andReturn(spec);
replay();
+ worker.renderComponent(cycle, comp1);
+ worker.renderComponent(cycle, comp2);
worker.renderComponent(cycle, component);
verify();
- assertEquals(1, worker.getDefferedFormConnections().size());
+ assertEquals(worker.getDefferedFormConnections().size(), 1);
List deferred = (List)worker.getDefferedFormConnections().get("form1");
assert deferred != null;
- assertEquals(1, deferred.size());
+ assertEquals(deferred.size(), 2);
Object[] parms = (Object[])deferred.get(0);
assertEquals(4, parms.length);
// assert async is false
- assert (Boolean)parms[1] == false;
+ assert (Boolean)parms[1] == true;
// assert validate form is true
assert (Boolean)parms[2] == true;
@@ -296,7 +340,29 @@
assert parm.get("target") == null;
assertEquals("comp1", parm.get("clientId"));
- assertEquals(component, parm.get("component"));
+ assertEquals(comp1, parm.get("component"));
+
+ // test comp2 connections
+
+ parms = (Object[])deferred.get(1);
+ assertEquals(4, parms.length);
+
+ // assert async is false
+ assert (Boolean)parms[1] == true;
+
+ // assert validate form is true
+ assert (Boolean)parms[2] == true;
+
+ parm = (Map)parms[0];
+
+ assert parm.get("clientId") != null;
+ assert parm.get("component") != null;
+ assert parm.get("url") == null;
+ assert parm.get("formEvents") == null;
+ assert parm.get("target") == null;
+
+ assertEquals("comp2", parm.get("clientId"));
+ assertEquals(comp2, parm.get("component"));
}
@@ -304,7 +370,7 @@
{
ClassResolver resolver = new DefaultClassResolver();
- IComponentEventInvoker invoker = new org.apache.tapestry.internal.event.impl.ComponentEventInvoker();
+ IComponentEventInvoker invoker = new ComponentEventInvoker();
IEngineService engine = newMock(IEngineService.class);
IRequestCycle cycle = newCycle();
IScriptSource scriptSource = newMock(IScriptSource.class);
@@ -325,12 +391,23 @@
IDirectEvent component = newMock(IDirectEvent.class);
IComponentSpecification spec = new ComponentSpecification();
+ IComponent comp1 = newMock(IComponent.class);
+ IComponentSpecification comp1Spec = new ComponentSpecification();
+
+ IComponent comp2 = newMock(IComponent.class);
+ IComponentSpecification comp2Spec = new ComponentSpecification();
+
IForm form = newMock(IForm.class);
IComponentSpecification formSpec = new ComponentSpecification();
// now test render
+ spec.addEventListener("comp1", new String[] {"onclick"}, "testMethod", "form1", false, true, false);
invoker.addEventListener("comp1", spec);
- spec.addEventListener("comp1", new String[] {"onclick"}, "testMethod", "form1", false, false, false);
+ invoker.addFormEventListener("form1", spec);
+
+ spec.addEventListener("comp2", new String[] {"ondoubleclick"}, "clickMethod", "form1", false, true, false);
+ invoker.addEventListener("comp2", spec);
+ invoker.addFormEventListener("form1", spec);
expect(cycle.isRewinding()).andReturn(false);
@@ -338,23 +415,56 @@
expect(cycle.getAttribute(TapestryUtils.FIELD_PRERENDER)).andReturn(null);
- expect(component.getId()).andReturn("comp1").anyTimes();
- expect(component.getClientId()).andReturn("comp1").anyTimes();
+ expect(component.getId()).andReturn("compListener").anyTimes();
+ expect(component.getClientId()).andReturn("compListener").anyTimes();
+
+ expect(component.getSpecification()).andReturn(spec);
+
+ // comp1 render
+
+ expect(cycle.isRewinding()).andReturn(false);
+
+ expect(cycle.getAttribute(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE)).andReturn(prs);
+
+ expect(cycle.getAttribute(TapestryUtils.FIELD_PRERENDER)).andReturn(null);
+
+ expect(comp1.getId()).andReturn("comp1").anyTimes();
+ expect(comp1.getClientId()).andReturn("comp1").anyTimes();
expect(cycle.getAttribute(ComponentEventConnectionWorker.FORM_NAME_LIST + "form1")).andReturn(null);
- expect(component.getSpecification()).andReturn(spec);
+ expect(comp1.getSpecification()).andReturn(comp1Spec).anyTimes();
+
+ // comp2 render
+
+ expect(cycle.isRewinding()).andReturn(false);
+
+ expect(cycle.getAttribute(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE)).andReturn(prs);
+
+ expect(cycle.getAttribute(TapestryUtils.FIELD_PRERENDER)).andReturn(null);
+
+ expect(comp2.getId()).andReturn("comp2").anyTimes();
+ expect(comp2.getClientId()).andReturn("comp2").anyTimes();
+
+ expect(cycle.getAttribute(ComponentEventConnectionWorker.FORM_NAME_LIST + "form1")).andReturn(null);
+
+ expect(comp2.getSpecification()).andReturn(comp2Spec).anyTimes();
replay();
worker.renderComponent(cycle, component);
+ worker.renderComponent(cycle, comp1);
+ worker.renderComponent(cycle, comp2);
verify();
- assertEquals(1, worker.getDefferedFormConnections().size());
+ assertEquals(worker.getDefferedFormConnections().size(), 1);
+ assertEquals(((List)worker.getDefferedFormConnections().get("form1")).size(), 2);
checkOrder(form, false);
checkOrder(component, false);
+ checkOrder(comp1, false);
+ checkOrder(comp2, false);
expect(cycle.isRewinding()).andReturn(false);
@@ -368,23 +478,28 @@
expect(cycle.getAttribute(ComponentEventConnectionWorker.FORM_NAME_LIST + "form1")).andReturn(null);
- cycle.setAttribute(eq(ComponentEventConnectionWorker.FORM_NAME_LIST + "form1"),
- isA(List.class));
+ cycle.setAttribute(eq(ComponentEventConnectionWorker.FORM_NAME_LIST + "form1"), isA(List.class));
expect(form.getName()).andReturn("form1_0").anyTimes();
- expect(component.getSpecification()).andReturn(spec);
+ expect(comp1.getSpecification()).andReturn(comp1Spec);
- expect(component.getId()).andReturn("comp1").anyTimes();
+ expect(comp1.getId()).andReturn("comp1").anyTimes();
+
+ expect(comp2.getSpecification()).andReturn(comp2Spec);
+
+ expect(comp2.getId()).andReturn("comp2").anyTimes();
List formNames = new ArrayList();
formNames.add("form1_0");
- expect(cycle.getAttribute(ComponentEventConnectionWorker.FORM_NAME_LIST + "form1"))
- .andReturn(formNames);
+ expect(cycle.getAttribute(ComponentEventConnectionWorker.FORM_NAME_LIST + "form1")).andReturn(formNames).anyTimes();
- expect(cycle.getAttribute(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE))
- .andReturn(prs);
+ expect(cycle.getAttribute(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE)).andReturn(prs).anyTimes();
+
+ expect(scriptSource.getScript(compScriptResource)).andReturn(script);
+
+ script.execute(eq(form), eq(cycle), eq(prs), isA(Map.class));
expect(scriptSource.getScript(compScriptResource)).andReturn(script);