blob: 0c273a446388746b629512b51ce71baecc2ed527 [file] [log] [blame]
// Copyright Jun 3, 2006 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package org.apache.tapestry.internal.event;
import org.apache.tapestry.TestBase;
import org.apache.tapestry.event.BrowserEvent;
import org.testng.annotations.Test;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
/**
* Tests for {@link ComponentEventProperty} and {@link EventBoundListener}.
*
* @author jkuhnert
*/
@Test
public class ComponentEventPropertyTest extends TestBase {
public void test_Add_Event_Listener()
{
String[] events = {"onClick", "onFoo"};
ComponentEventProperty prop = new ComponentEventProperty("compid");
prop.addListener(events, "doFoo", null, false, false, false);
assertEquals("compid", prop.getComponentId());
assertEquals(2, prop.getEvents().size());
assertEquals(0, prop.getFormEvents().size());
assertNotNull(prop.getEventListeners("onClick"));
List listeners = prop.getEventListeners("onClick");
assertEquals(1, listeners.size());
EventBoundListener listener = (EventBoundListener)listeners.get(0);
assertEquals("compid", listener.getComponentId());
assertNull(listener.getFormId());
assertEquals("doFoo", listener.getMethodName());
assert listener.isAutoSubmit();
}
public void test_Add_Form_Event_Listener()
{
String[] events = {"onFoo"};
ComponentEventProperty prop = new ComponentEventProperty("compid");
prop.addListener(events, "doFoo", "formid", false, true, false);
assertEquals("compid", prop.getComponentId());
assertEquals(0, prop.getEvents().size());
assertEquals(1, prop.getFormEvents().size());
assertNotNull(prop.getFormEventListeners("onFoo"));
List listeners = prop.getFormEventListeners("onFoo");
assertEquals(1, listeners.size());
EventBoundListener listener = (EventBoundListener)listeners.get(0);
assertEquals("compid", listener.getComponentId());
assertEquals("formid", listener.getFormId());
assertFalse(listener.isValidateForm());
assertTrue(listener.isAsync());
assertEquals(1, prop.getFormEvents().size());
assertEquals("doFoo", listener.getMethodName());
assert listener.isAutoSubmit();
}
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);
listeners = prop.getFormEventListeners("onClick");
assertEquals(listeners.size(), 1);
EventBoundListener listener = (EventBoundListener)listeners.get(0);
assertEquals("compid", listener.getComponentId());
assertEquals("form1", listener.getFormId());
assertEquals("doFoo", listener.getMethodName());
}
public void test_Get_Form_Events()
{
String[] events = {"onFoo"};
ComponentEventProperty prop = new ComponentEventProperty("compid");
BrowserEvent event = new BrowserEvent("onFoo", null);
prop.addListener(events, "doFoo", "formid", false, false, true);
List listeners = prop.getFormEventListeners("formid", event, null);
assertEquals(1, listeners.size());
EventBoundListener listener = (EventBoundListener)listeners.get(0);
assertEquals("compid", listener.getComponentId());
assertEquals("formid", listener.getFormId());
assertFalse(listener.isValidateForm());
assertEquals("doFoo", listener.getMethodName());
assertTrue(listener.shouldFocusForm());
}
public void test_Connect_Auto_Submit_Events()
{
String[] events = {"onClick"};
ComponentEventProperty prop = new ComponentEventProperty("compid");
prop.addListener(events, "doFoo", null, false, false, false, true);
assertEquals("compid", prop.getComponentId());
assertEquals(prop.getEvents().size(), 1);
assertEquals(prop.getFormEvents().size(), 0);
assertNotNull(prop.getEventListeners("onClick"));
List listeners = prop.getEventListeners("onClick");
assertEquals(listeners.size(), 1);
EventBoundListener listener = (EventBoundListener)listeners.get(0);
assertEquals(listener.getComponentId(), "compid");
assertNull(listener.getFormId());
assertEquals(listener.getMethodName(), "doFoo");
assert listener.isAutoSubmit();
prop.connectAutoSubmitEvents("form");
assertEquals(prop.getEvents().size(), 0);
assertEquals(prop.getFormEvents().size(), 1);
listeners = prop.getFormEventListeners("onClick");
assertEquals(listeners.size(), 1);
listener = (EventBoundListener)listeners.get(0);
assertEquals(listener.getComponentId(), "compid");
assertEquals(listener.getFormId(), "form");
assertEquals(listener.getMethodName(), "doFoo");
}
public void test_ReWire_Component_Id()
{
String[] events = {"onClick", "onFoo"};
ComponentEventProperty prop = new ComponentEventProperty("compid");
prop.addListener(events, "doFoo", null, 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(), 2);
assertEquals(prop.getFormEvents().size(), 1);
String path = "new/Path/Id";
prop.rewireComponentId(path);
assertEquals(prop.getComponentId(), path);
Iterator it = prop.getEvents().iterator();
while (it.hasNext())
{
String key = (String) it.next();
List listeners = prop.getEventListeners(key);
for (int i=0; i < listeners.size(); i++) {
EventBoundListener listener = (EventBoundListener) listeners.get(i);
assertEquals(listener.getComponentId(), path);
}
}
it = prop.getFormEvents().iterator();
while (it.hasNext())
{
String key = (String) it.next();
List listeners = prop.getFormEventListeners(key);
for (int i=0; i < listeners.size(); i++) {
EventBoundListener listener = (EventBoundListener) listeners.get(i);
assertEquals(listener.getComponentId(), path);
}
}
}
}