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 /** 099 * tests regression of TAPESTRY-2003 100 * */ 101 public void test_Add_Form_Event_Listener_no_autoSubmit() 102 { 103 String[] events = {"onFoo"}; 104 ComponentEventProperty prop = new ComponentEventProperty("compid"); 105 106 prop.addListener(events, "doFoo", "", false, true, false, false); 107 prop.connectAutoSubmitEvents("fooForm"); 108 109 assertEquals("compid", prop.getComponentId()); 110 assertEquals(1, prop.getEvents().size()); 111 assertEquals(0, prop.getFormEvents().size()); 112 113 List listeners = prop.getEventListeners("onFoo"); 114 assertEquals(1, listeners.size()); 115 116 EventBoundListener listener = (EventBoundListener)listeners.get(0); 117 118 assertEquals("doFoo", listener.getMethodName()); 119 assert ! listener.isAutoSubmit(); 120 } 121 122 public void test_Add_Multiple_Event_Listener() 123 { 124 String[] events = {"onClick", "onFoo"}; 125 ComponentEventProperty prop = new ComponentEventProperty("compid"); 126 127 prop.addListener(events, "doFoo", "form1", false, false, false); 128 prop.addListener(new String[]{"onchange"}, "doBar", "form2", false, false, false); 129 prop.addListener(new String[]{"onchange"}, "secondForm", "form1", false, false, false); 130 131 assertEquals("compid", prop.getComponentId()); 132 assertEquals(prop.getEvents().size(), 0); 133 assertEquals(prop.getFormEvents().size(), 3); 134 135 Set s = prop.getFormEvents(); 136 String[] fevents = (String[])s.toArray(new String[s.size()]); 137 138 assertEquals(fevents.length, 3); 139 140 List listeners = prop.getFormEventListeners("onchange"); 141 assertEquals(listeners.size(), 2); 142 143 listeners = prop.getFormEventListeners("onClick"); 144 assertEquals(listeners.size(), 1); 145 146 EventBoundListener listener = (EventBoundListener)listeners.get(0); 147 assertEquals("compid", listener.getComponentId()); 148 assertEquals("form1", listener.getFormId()); 149 assertEquals("doFoo", listener.getMethodName()); 150 151 } 152 153 public void test_Get_Form_Events() 154 { 155 String[] events = {"onFoo"}; 156 ComponentEventProperty prop = new ComponentEventProperty("compid"); 157 BrowserEvent event = new BrowserEvent("onFoo", null); 158 159 prop.addListener(events, "doFoo", "formid", false, false, true); 160 161 List listeners = prop.getFormEventListeners("formid", event, null); 162 assertEquals(1, listeners.size()); 163 164 EventBoundListener listener = (EventBoundListener)listeners.get(0); 165 assertEquals("compid", listener.getComponentId()); 166 assertEquals("formid", listener.getFormId()); 167 assertFalse(listener.isValidateForm()); 168 169 assertEquals("doFoo", listener.getMethodName()); 170 assertTrue(listener.shouldFocusForm()); 171 } 172 173 public void test_Connect_Auto_Submit_Events() 174 { 175 String[] events = {"onClick"}; 176 ComponentEventProperty prop = new ComponentEventProperty("compid"); 177 178 prop.addListener(events, "doFoo", null, false, false, false, true); 179 180 assertEquals("compid", prop.getComponentId()); 181 assertEquals(prop.getEvents().size(), 1); 182 assertEquals(prop.getFormEvents().size(), 0); 183 184 assertNotNull(prop.getEventListeners("onClick")); 185 186 List listeners = prop.getEventListeners("onClick"); 187 assertEquals(listeners.size(), 1); 188 189 EventBoundListener listener = (EventBoundListener)listeners.get(0); 190 assertEquals(listener.getComponentId(), "compid"); 191 assertNull(listener.getFormId()); 192 assertEquals(listener.getMethodName(), "doFoo"); 193 assert listener.isAutoSubmit(); 194 195 prop.connectAutoSubmitEvents("form"); 196 197 assertEquals(prop.getEvents().size(), 0); 198 assertEquals(prop.getFormEvents().size(), 1); 199 200 listeners = prop.getFormEventListeners("onClick"); 201 assertEquals(listeners.size(), 1); 202 203 listener = (EventBoundListener)listeners.get(0); 204 assertEquals(listener.getComponentId(), "compid"); 205 assertEquals(listener.getFormId(), "form"); 206 assertEquals(listener.getMethodName(), "doFoo"); 207 } 208 209 public void test_ReWire_Component_Id() 210 { 211 String[] events = {"onClick", "onFoo"}; 212 ComponentEventProperty prop = new ComponentEventProperty("compid"); 213 214 prop.addListener(events, "doFoo", null, false, false, false); 215 prop.addListener(new String[]{"onchange"}, "doBar", "form2", false, false, false); 216 prop.addListener(new String[]{"onchange"}, "secondForm", "form1", false, false, false); 217 218 assertEquals("compid", prop.getComponentId()); 219 assertEquals(prop.getEvents().size(), 2); 220 assertEquals(prop.getFormEvents().size(), 1); 221 222 String path = "new/Path/Id"; 223 String idPath = "Home/" + path; 224 prop.rewireComponentId(path, idPath); 225 226 assertEquals(prop.getComponentId(), path); 227 228 229 Iterator it = prop.getEvents().iterator(); 230 while (it.hasNext()) 231 { 232 String key = (String) it.next(); 233 234 List listeners = prop.getEventListeners(key); 235 for (int i=0; i < listeners.size(); i++) { 236 237 EventBoundListener listener = (EventBoundListener) listeners.get(i); 238 assertEquals(listener.getComponentId(), path); 239 assertEquals(listener.getComponentIdPath(), idPath); 240 } 241 } 242 243 it = prop.getFormEvents().iterator(); 244 while (it.hasNext()) 245 { 246 String key = (String) it.next(); 247 248 List listeners = prop.getFormEventListeners(key); 249 for (int i=0; i < listeners.size(); i++) { 250 251 EventBoundListener listener = (EventBoundListener) listeners.get(i); 252 assertEquals(listener.getComponentId(), path); 253 assertEquals(listener.getComponentIdPath(), idPath); 254 } 255 } 256 } 257 }