1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.htmlunit.javascript.host.event;
16
17 import org.htmlunit.WebDriverTestCase;
18 import org.htmlunit.junit.annotation.Alerts;
19 import org.junit.jupiter.api.Test;
20 import org.openqa.selenium.By;
21 import org.openqa.selenium.WebDriver;
22 import org.openqa.selenium.interactions.Actions;
23
24
25
26
27
28
29
30
31 public class UIEventTest extends WebDriverTestCase {
32
33 private static final String DUMP_EVENT_FUNCTION = " function dump(event) {\n"
34 + " log(event);\n"
35 + " log(event.type);\n"
36 + " log(event.bubbles);\n"
37 + " log(event.cancelable);\n"
38 + " log(event.composed);\n"
39
40 + " log(event.view == window);\n"
41 + " }\n";
42
43
44
45
46 @Test
47 @Alerts({"[object UIEvent]", "event", "false", "false", "false", "false"})
48 public void create_ctor() throws Exception {
49 final String html = DOCTYPE_HTML
50 + "<html><head><script>\n"
51 + LOG_TITLE_FUNCTION
52 + " function test() {\n"
53 + " try {\n"
54 + " var event = new UIEvent('event');\n"
55 + " dump(event);\n"
56 + " } catch(e) { logEx(e) }\n"
57 + " }\n"
58 + DUMP_EVENT_FUNCTION
59 + "</script></head><body onload='test()'>\n"
60 + "</body></html>";
61
62 loadPageVerifyTitle2(html);
63 }
64
65
66
67
68 @Test
69 @Alerts({"[object UIEvent]", "event", "true", "false", "false", "true"})
70 public void create_ctorWithDetails() throws Exception {
71 final String html = DOCTYPE_HTML
72 + "<html><head><script>\n"
73 + LOG_TITLE_FUNCTION
74 + " function test() {\n"
75 + " try {\n"
76 + " var event = new UIEvent('event', {\n"
77 + " 'bubbles': true,\n"
78 + " 'view': window\n"
79 + " });\n"
80 + " dump(event);\n"
81 + " } catch(e) { logEx(e) }\n"
82 + " }\n"
83 + DUMP_EVENT_FUNCTION
84 + "</script></head><body onload='test()'>\n"
85 + "</body></html>";
86
87 loadPageVerifyTitle2(html);
88 }
89
90
91
92
93 @Test
94 @Alerts("TypeError")
95 public void create_ctorWithDetailsViewNotWindow() throws Exception {
96 final String html = DOCTYPE_HTML
97 + "<html><head><script>\n"
98 + LOG_TITLE_FUNCTION
99 + " function test() {\n"
100 + " try {\n"
101 + " var event = new UIEvent('event', {\n"
102 + " 'view': {}\n"
103 + " });\n"
104 + " } catch(e) { logEx(e) }\n"
105 + " }\n"
106 + DUMP_EVENT_FUNCTION
107 + "</script></head><body onload='test()'>\n"
108 + "</body></html>";
109
110 loadPageVerifyTitle2(html);
111 }
112
113
114
115
116 @Test
117 @Alerts({"DOM2: [object UIEvent]", "DOM3: [object UIEvent]"})
118 public void createEvent() throws Exception {
119 final String html = DOCTYPE_HTML
120 + "<html><head><script>\n"
121 + LOG_TITLE_FUNCTION
122 + " function test() {\n"
123 + " try {\n"
124 + " log('DOM2: ' + document.createEvent('UIEvents'));\n"
125 + " } catch(e) {log('DOM2: exception')}\n"
126 + " try {\n"
127 + " log('DOM3: ' + document.createEvent('UIEvent'));\n"
128 + " } catch(e) {log('DOM3: exception')}\n"
129 + " }\n"
130 + "</script></head><body onload='test()'>\n"
131 + "</body></html>";
132 loadPageVerifyTitle2(html);
133 }
134
135
136
137
138 @Test
139 @Alerts({"[object UIEvent]", "click", "true", "true", "true", "7"})
140 public void initUIEvent() throws Exception {
141 final String html = DOCTYPE_HTML
142 + "<html><body><script>\n"
143 + LOG_TITLE_FUNCTION
144 + "try {\n"
145 + " var e = document.createEvent('UIEvents');\n"
146 + " log(e);\n"
147 + " e.initUIEvent('click', true, true, window, 7);\n"
148 + " log(e.type);\n"
149 + " log(e.bubbles);\n"
150 + " log(e.cancelable);\n"
151 + " log(e.view == window);\n"
152 + " log(e.detail);\n"
153 + "} catch(e) { logEx(e) }\n"
154 + "</script></body></html>";
155 loadPageVerifyTitle2(html);
156 }
157
158
159
160
161 @Test
162 @Alerts(CHROME = {"[object Event]", "undefined", "[object PointerEvent]", "1",
163 "[object MouseEvent]", "2", "[object PointerEvent]", "0"},
164 EDGE = {"[object Event]", "undefined", "[object PointerEvent]", "1",
165 "[object MouseEvent]", "2", "[object PointerEvent]", "0"},
166 FF = {"[object Event]", "undefined", "[object PointerEvent]", "1",
167 "[object MouseEvent]", "2", "[object PointerEvent]", "1"},
168 FF_ESR = {"[object Event]", "undefined", "[object MouseEvent]", "1",
169 "[object MouseEvent]", "2", "[object MouseEvent]", "1"})
170 public void detail() throws Exception {
171 final String html = DOCTYPE_HTML
172 + "<html><head><script>\n"
173 + LOG_TITLE_FUNCTION
174 + " function alertDetail(e) {\n"
175 + " log(e);\n"
176 + " log(e.detail);\n"
177 + " }\n"
178 + "</script></head>\n"
179 + "<body onload='alertDetail(event)'>\n"
180 + " <div id='a' onclick='alertDetail(event)'>abc</div>\n"
181 + " <div id='b' ondblclick='alertDetail(event)'>xyz</div>\n"
182 + " <div id='c' oncontextmenu='alertDetail(event)'>xyz</div>\n"
183 + "</body></html>";
184
185 final String[] alerts = getExpectedAlerts();
186 int i = 0;
187
188 final WebDriver driver = loadPage2(html);
189 verifyTitle2(driver, alerts[i++], alerts[i++]);
190
191 i = 0;
192 driver.findElement(By.id("a")).click();
193 verifyTitle2(driver, alerts[i++], alerts[i++], alerts[i++], alerts[i++]);
194
195 i = 0;
196 Actions action = new Actions(driver);
197 action.doubleClick(driver.findElement(By.id("b")));
198 action.perform();
199 verifyTitle2(driver, alerts[i++], alerts[i++], alerts[i++], alerts[i++], alerts[i++], alerts[i++]);
200
201 action = new Actions(driver);
202 action.contextClick(driver.findElement(By.id("c")));
203 action.perform();
204 verifyTitle2(driver, alerts);
205 }
206
207
208
209
210 @Test
211 @Alerts(CHROME = {"[object Event]", "undefined", "[object PointerEvent]", "1",
212 "[object MouseEvent]", "2", "[object PointerEvent]", "0"},
213 EDGE = {"[object Event]", "undefined", "[object PointerEvent]", "1",
214 "[object MouseEvent]", "2", "[object PointerEvent]", "0"},
215 FF = {"[object Event]", "undefined", "[object PointerEvent]", "1",
216 "[object MouseEvent]", "2", "[object PointerEvent]", "1"},
217 FF_ESR = {"[object Event]", "undefined", "[object MouseEvent]", "1",
218 "[object MouseEvent]", "2", "[object MouseEvent]", "1"})
219 public void detailInputText() throws Exception {
220 final String html = DOCTYPE_HTML
221 + "<html><head><script>\n"
222 + LOG_TITLE_FUNCTION
223 + " function alertDetail(e) {\n"
224 + " log(e);\n"
225 + " log(e.detail);\n"
226 + " }\n"
227 + "</script></head>\n"
228 + "<body onload='alertDetail(event)'>\n"
229 + " <input type='text' id='a' onclick='alertDetail(event)'>\n"
230 + " <input type='text' id='b' ondblclick='alertDetail(event)'>\n"
231 + " <input type='text' id='c' oncontextmenu='alertDetail(event)'>\n"
232 + "</body></html>";
233
234 final String[] alerts = getExpectedAlerts();
235 int i = 0;
236
237 final WebDriver driver = loadPage2(html);
238 verifyTitle2(driver, alerts[i++], alerts[i++]);
239
240 i = 0;
241 driver.findElement(By.id("a")).click();
242 verifyTitle2(driver, alerts[i++], alerts[i++], alerts[i++], alerts[i++]);
243
244
245 i = 0;
246 Actions action = new Actions(driver);
247 action.doubleClick(driver.findElement(By.id("b")));
248 action.perform();
249 verifyTitle2(driver, alerts[i++], alerts[i++], alerts[i++], alerts[i++], alerts[i++], alerts[i++]);
250
251 action = new Actions(driver);
252 action.contextClick(driver.findElement(By.id("c")));
253 action.perform();
254 verifyTitle2(driver, alerts);
255 }
256
257
258
259
260 @Test
261 @Alerts(CHROME = {"[object Event]", "undefined", "[object PointerEvent]", "1",
262 "[object MouseEvent]", "2", "[object PointerEvent]", "0"},
263 EDGE = {"[object Event]", "undefined", "[object PointerEvent]", "1",
264 "[object MouseEvent]", "2", "[object PointerEvent]", "0"},
265 FF = {"[object Event]", "undefined", "[object PointerEvent]", "1",
266 "[object MouseEvent]", "2", "[object PointerEvent]", "1"},
267 FF_ESR = {"[object Event]", "undefined", "[object MouseEvent]", "1",
268 "[object MouseEvent]", "2", "[object MouseEvent]", "1"})
269 public void detailInputRadio() throws Exception {
270 final String html = DOCTYPE_HTML
271 + "<html><head><script>\n"
272 + LOG_TITLE_FUNCTION
273 + " function alertDetail(e) {\n"
274 + " log(e);\n"
275 + " log(e.detail);\n"
276 + " }\n"
277 + "</script></head>\n"
278 + "<body onload='alertDetail(event)'>\n"
279 + " <input type='radio' id='a' onclick='alertDetail(event)'>\n"
280 + " <input type='radio' id='b' ondblclick='alertDetail(event)'>\n"
281 + " <input type='radio' id='c' oncontextmenu='alertDetail(event)'>\n"
282 + "</body></html>";
283
284 final String[] alerts = getExpectedAlerts();
285 int i = 0;
286
287 final WebDriver driver = loadPage2(html);
288 verifyTitle2(driver, alerts[i++], alerts[i++]);
289
290 i = 0;
291 driver.findElement(By.id("a")).click();
292 verifyTitle2(driver, alerts[i++], alerts[i++], alerts[i++], alerts[i++]);
293
294
295 i = 0;
296 Actions action = new Actions(driver);
297 action.doubleClick(driver.findElement(By.id("b")));
298 action.perform();
299 verifyTitle2(driver, alerts[i++], alerts[i++], alerts[i++], alerts[i++], alerts[i++], alerts[i++]);
300
301 action = new Actions(driver);
302 action.contextClick(driver.findElement(By.id("c")));
303 action.perform();
304 verifyTitle2(driver, alerts);
305 }
306
307
308
309
310 @Test
311 @Alerts(DEFAULT = {"[object Event]", "undefined", "[object PointerEvent]", "[object Window]"},
312 FF_ESR = {"[object Event]", "undefined", "[object MouseEvent]", "[object Window]"})
313 public void view() throws Exception {
314 final String html = DOCTYPE_HTML
315 + "<html><body onload='alertView(event)'><script>\n"
316 + LOG_TITLE_FUNCTION
317 + " function alertView(e) {\n"
318 + " log(e);\n"
319 + " log(e.view);\n"
320 + " }\n"
321 + "</script>\n"
322 + "<form><input type='button' id='b' onclick='alertView(event)'></form>\n"
323 + "</body></html>";
324
325 final String[] alerts = getExpectedAlerts();
326
327 final WebDriver driver = loadPage2(html);
328 verifyTitle2(driver, alerts[0], alerts[1]);
329
330 driver.findElement(By.id("b")).click();
331 verifyTitle2(driver, alerts);
332 }
333 }