{
public void test_Event_Render_Chain()
{
ClassResolver resolver = new DefaultClassResolver();
IComponentEventInvoker invoker = new ComponentEventInvoker();
IEngineService engine = newMock(IEngineService.class);
IRequestCycle cycle = newCycle();
checkOrder(cycle, false);
IComponentSpecification spec = new ComponentSpecification();
IComponentSpecification widgetSpec = new ComponentSpecification();
IScriptSource scriptSource = newMock(IScriptSource.class);
IScript script = newMock(IScript.class);
PageRenderSupport prs = newPageRenderSupport();
ILink link = newMock(ILink.class);
String elemScript = "/org/apache/tapestry/html/ElementEvent.script";
String compScript = "/org/apache/tapestry/ComponentEvent.script";
String widScript = "/org/apache/tapestry/dojo/html/WidgetEvent.script";
Resource compScriptResource = new ClasspathResource(resolver, compScript);
Resource widScriptResource = new ClasspathResource(resolver, widScript);
Resource elemScriptResource = new ClasspathResource(resolver, elemScript);
ComponentEventConnectionWorker worker = new ComponentEventConnectionWorker();
worker.setClassResolver(resolver);
worker.setEventInvoker(invoker);
worker.setComponentScript(compScript);
worker.setWidgetScript(widScript);
worker.setElementScript(elemScript);
worker.setEventEngine(engine);
worker.setScriptSource(scriptSource);
IDirectEvent component = newMock(IDirectEvent.class);
IWidget widget = newMock(IWidget.class);
assertNotNull(worker.getScript(component));
assertEquals(compScript, worker.getScript(component).getPath());
assertNotNull(worker.getScript(widget));
assertEquals(widScript, worker.getScript(widget).getPath());
assertNotNull(worker.getElementScript());
assertEquals(elemScript, worker.getElementScript().getPath());
// now test render
invoker.addEventListener("comp1", spec);
spec.addEventListener("comp1", new String[] {"onclick"}, "testMethod", null, false, true, false, false);
spec.addElementEventListener("elementId", new String[] {"onclick"}, "testMethod", null, false, true, false);
/////////////////////////////////
Map elmEvents = spec.getElementEvents();
Iterator keyIt = elmEvents.keySet().iterator();
while (keyIt.hasNext())
{
String elem = (String)keyIt.next();
assertEquals(elem, "elementId");
ComponentEventProperty prop = (ComponentEventProperty)elmEvents.get(elem);
assertNotNull(prop);
Object[][] events = worker.getEvents(prop, elem);
assertNotNull(events);
assertEquals(events.length, 1);
assertEquals(events[0].length, 2);
}
////////////////////////////////////////////
expect(cycle.isRewinding()).andReturn(false);
expect(cycle.getAttribute(TapestryUtils.FIELD_PRERENDER)).andReturn(null);
expect(component.getExtendedId()).andReturn("comp1").anyTimes();
expect(component.getClientId()).andReturn("comp1").anyTimes();
expect(cycle.getAttribute(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE)).andReturn(prs).anyTimes();
expect(component.getSpecification()).andReturn(spec);
trainGetLinkCheckIgnoreParameter(engine, cycle, false, new Object(), link);
trainGetURL(link, "/some/url");
expect(scriptSource.getScript(compScriptResource)).andReturn(script);
script.execute(eq(component), eq(cycle), eq(prs), isA(Map.class));
expect(component.getSpecification()).andReturn(spec);
trainGetLinkCheckIgnoreParameter(engine, cycle, false, new Object(), link);
trainGetURL(link, "/some/url");
expect(scriptSource.getScript(elemScriptResource)).andReturn(script);
script.execute(eq(component), eq(cycle), eq(prs), isA(Map.class));
replay();
worker.renderComponent(cycle, component);
verify();
assertEquals(0, worker.getDefferedFormConnections().size());
// test widget render
invoker.addEventListener("wid1", widgetSpec);
widgetSpec.addEventListener("wid1", new String[] {"onclick"}, "testMethod", null, false, true, false, false);
checkOrder(cycle, false);
expect(cycle.isRewinding()).andReturn(false);
expect(cycle.getAttribute(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE)).andReturn(prs).anyTimes();