001 // Copyright Jun 3, 2006 The Apache Software Foundation 002 // 003 // Licensed under the Apache License, Version 2.0 (the "License"); 004 // you may not use this file except in compliance with the License. 005 // You may obtain a copy of the License at 006 // 007 // http://www.apache.org/licenses/LICENSE-2.0 008 // 009 // Unless required by applicable law or agreed to in writing, software 010 // distributed under the License is distributed on an "AS IS" BASIS, 011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 012 // See the License for the specific language governing permissions and 013 // limitations under the License. 014 package org.apache.tapestry.internal.event; 015 016 import org.apache.tapestry.TestBase; 017 import org.apache.tapestry.event.BrowserEvent; 018 import org.testng.annotations.Test; 019 020 import java.util.Iterator; 021 import java.util.List; 022 import java.util.Set; 023 024 025 /** 026 * Tests for {@link ComponentEventProperty} and {@link EventBoundListener}. 027 * 028 * @author jkuhnert 029 */ 030 @Test 031 public class ComponentEventPropertyTest extends TestBase { 032 033 public void test_Add_Event_Listener() 034 { 035 String[] events = {"onClick", "onFoo"}; 036 ComponentEventProperty prop = new ComponentEventProperty("compid"); 037 038 prop.addListener(events, "doFoo", null, false, false, false); 039 040 assertEquals("compid", prop.getComponentId()); 041 assertEquals(2, prop.getEvents().size()); 042 assertEquals(0, prop.getFormEvents().size()); 043 044 assertNotNull(prop.getEventListeners("onClick")); 045 046 List listeners = prop.getEventListeners("onClick"); 047 assertEquals(1, listeners.size()); 048 049 EventBoundListener listener = (EventBoundListener)listeners.get(0); 050 assertEquals("compid", listener.getComponentId()); 051 assertNull(listener.getFormId()); 052 assertEquals("doFoo", listener.getMethodName()); 053 assert listener.isAutoSubmit(); 054 } 055 056 public void test_Disabled_Async_Property() 057 { 058 String[] events = { "onchange" }; 059 ComponentEventProperty p = new ComponentEventProperty("compid"); 060 061 p.addListener(events, "submitForm", null, false, false, false, true); 062 063 List listeners = p.getEventListeners("onchange"); 064 assertEquals(1, listeners.size()); 065 066 EventBoundListener l = (EventBoundListener) listeners.get(0); 067 assert !l.isAsync(); 068 } 069 070 public void test_Add_Form_Event_Listener() 071 { 072 String[] events = {"onFoo"}; 073 ComponentEventProperty prop = new ComponentEventProperty("compid"); 074 075 prop.addListener(events, "doFoo", "formid", false, true, false); 076 077 assertEquals("compid", prop.getComponentId()); 078 assertEquals(0, prop.getEvents().size()); 079 assertEquals(1, prop.getFormEvents().size()); 080 081 assertNotNull(prop.getFormEventListeners("onFoo")); 082 083 List listeners = prop.getFormEventListeners("onFoo"); 084 assertEquals(1, listeners.size()); 085 086 EventBoundListener listener = (EventBoundListener)listeners.get(0); 087 assertEquals("compid", listener.getComponentId()); 088 assertEquals("formid", listener.getFormId()); 089 assertFalse(listener.isValidateForm()); 090 assertTrue(listener.isAsync()); 091 092 assertEquals(1, prop.getFormEvents().size()); 093 094 assertEquals("doFoo", listener.getMethodName()); 095 assert listener.isAutoSubmit(); 096 } 097 098 public void test_Add_Multiple_Event_Listener() 099 { 100 String[] events = {"onClick", "onFoo"}; 101 ComponentEventProperty prop = new ComponentEventProperty("compid"); 102 103 prop.addListener(events, "doFoo", "form1", false, false, false); 104 prop.addListener(new String[]{"onchange"}, "doBar", "form2", false, false, false); 105 prop.addListener(new String[]{"onchange"}, "secondForm", "form1", false, false, false); 106 107 assertEquals("compid", prop.getComponentId()); 108 assertEquals(prop.getEvents().size(), 0); 109 assertEquals(prop.getFormEvents().size(), 3); 110 111 Set s = prop.getFormEvents(); 112 String[] fevents = (String[])s.toArray(new String[s.size()]); 113 114 assertEquals(fevents.length, 3); 115 116 List listeners = prop.getFormEventListeners("onchange"); 117 assertEquals(listeners.size(), 2); 118 119 listeners = prop.getFormEventListeners("onClick"); 120 assertEquals(listeners.size(), 1); 121 122 EventBoundListener listener = (EventBoundListener)listeners.get(0); 123 assertEquals("compid", listener.getComponentId()); 124 assertEquals("form1", listener.getFormId()); 125 assertEquals("doFoo", listener.getMethodName()); 126 127 } 128 129 public void test_Get_Form_Events() 130 { 131 String[] events = {"onFoo"}; 132 ComponentEventProperty prop = new ComponentEventProperty("compid"); 133 BrowserEvent event = new BrowserEvent("onFoo", null); 134 135 prop.addListener(events, "doFoo", "formid", false, false, true); 136 137 List listeners = prop.getFormEventListeners("formid", event, null); 138 assertEquals(1, listeners.size()); 139 140 EventBoundListener listener = (EventBoundListener)listeners.get(0); 141 assertEquals("compid", listener.getComponentId()); 142 assertEquals("formid", listener.getFormId()); 143 assertFalse(listener.isValidateForm()); 144 145 assertEquals("doFoo", listener.getMethodName()); 146 assertTrue(listener.shouldFocusForm()); 147 } 148 149 public void test_Connect_Auto_Submit_Events() 150 { 151 String[] events = {"onClick"}; 152 ComponentEventProperty prop = new ComponentEventProperty("compid"); 153 154 prop.addListener(events, "doFoo", null, false, false, false, true); 155 156 assertEquals("compid", prop.getComponentId()); 157 assertEquals(prop.getEvents().size(), 1); 158 assertEquals(prop.getFormEvents().size(), 0); 159 160 assertNotNull(prop.getEventListeners("onClick")); 161 162 List listeners = prop.getEventListeners("onClick"); 163 assertEquals(listeners.size(), 1); 164 165 EventBoundListener listener = (EventBoundListener)listeners.get(0); 166 assertEquals(listener.getComponentId(), "compid"); 167 assertNull(listener.getFormId()); 168 assertEquals(listener.getMethodName(), "doFoo"); 169 assert listener.isAutoSubmit(); 170 171 prop.connectAutoSubmitEvents("form"); 172 173 assertEquals(prop.getEvents().size(), 0); 174 assertEquals(prop.getFormEvents().size(), 1); 175 176 listeners = prop.getFormEventListeners("onClick"); 177 assertEquals(listeners.size(), 1); 178 179 listener = (EventBoundListener)listeners.get(0); 180 assertEquals(listener.getComponentId(), "compid"); 181 assertEquals(listener.getFormId(), "form"); 182 assertEquals(listener.getMethodName(), "doFoo"); 183 } 184 185 public void test_ReWire_Component_Id() 186 { 187 String[] events = {"onClick", "onFoo"}; 188 ComponentEventProperty prop = new ComponentEventProperty("compid"); 189 190 prop.addListener(events, "doFoo", null, false, false, false); 191 prop.addListener(new String[]{"onchange"}, "doBar", "form2", false, false, false); 192 prop.addListener(new String[]{"onchange"}, "secondForm", "form1", false, false, false); 193 194 assertEquals("compid", prop.getComponentId()); 195 assertEquals(prop.getEvents().size(), 2); 196 assertEquals(prop.getFormEvents().size(), 1); 197 198 String path = "new/Path/Id"; 199 String idPath = "Home/" + path; 200 prop.rewireComponentId(path, idPath); 201 202 assertEquals(prop.getComponentId(), path); 203 204 205 Iterator it = prop.getEvents().iterator(); 206 while (it.hasNext()) 207 { 208 String key = (String) it.next(); 209 210 List listeners = prop.getEventListeners(key); 211 for (int i=0; i < listeners.size(); i++) { 212 213 EventBoundListener listener = (EventBoundListener) listeners.get(i); 214 assertEquals(listener.getComponentId(), path); 215 assertEquals(listener.getComponentIdPath(), idPath); 216 } 217 } 218 219 it = prop.getFormEvents().iterator(); 220 while (it.hasNext()) 221 { 222 String key = (String) it.next(); 223 224 List listeners = prop.getFormEventListeners(key); 225 for (int i=0; i < listeners.size(); i++) { 226 227 EventBoundListener listener = (EventBoundListener) listeners.get(i); 228 assertEquals(listener.getComponentId(), path); 229 assertEquals(listener.getComponentIdPath(), idPath); 230 } 231 } 232 } 233 }