1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.htmlunit.javascript.host.html;
16
17 import org.htmlunit.WebDriverTestCase;
18 import org.htmlunit.junit.annotation.Alerts;
19 import org.htmlunit.junit.annotation.HtmlUnitNYI;
20 import org.junit.jupiter.api.Test;
21 import org.openqa.selenium.By;
22 import org.openqa.selenium.WebDriver;
23
24
25
26
27
28
29 public class HTMLDialogElementTest extends WebDriverTestCase {
30
31 private static final String DUMP_EVENT_FUNCTION = " function dump(event) {\n"
32 + " log(event);\n"
33 + " log(event.type);\n"
34 + " log(event.bubbles);\n"
35 + " log(event.cancelable);\n"
36 + " log(event.composed);\n"
37 + " log(event.target);\n"
38 + " }\n";
39
40
41
42
43 @Test
44 @Alerts({"false", "null", "true", "", "false", "null", "true", "",
45 "true", "", "true", "TrUE", "false", "null"})
46 public void open() throws Exception {
47 final String html = DOCTYPE_HTML
48 + "<html>\n"
49 + " <head>\n"
50 + " <script>\n"
51 + LOG_TITLE_FUNCTION
52 + DUMP_EVENT_FUNCTION
53 + " function test() {\n"
54 + " var dia = document.getElementById('tester');\n"
55 + " if (typeof HTMLDialogElement !== 'function') { log('No'); return; }\n"
56
57 + " dia.addEventListener('close', (event) => {\n"
58 + " dump(event);\n"
59 + " });\n"
60
61 + " log(dia.open);\n"
62 + " log(dia.getAttribute('open'));\n"
63
64 + " dia.open = true;\n"
65 + " log(dia.open);\n"
66 + " log(dia.getAttribute('open'));\n"
67
68 + " dia.open = false;\n"
69 + " log(dia.open);\n"
70 + " log(dia.getAttribute('open'));\n"
71
72 + " dia.open = 'true';\n"
73 + " log(dia.open);\n"
74 + " log(dia.getAttribute('open'));\n"
75
76 + " dia.open = 'faLSE';\n"
77 + " log(dia.open);\n"
78 + " log(dia.getAttribute('open'));\n"
79
80 + " dia.setAttribute('open', 'TrUE');\n"
81 + " log(dia.open);\n"
82 + " log(dia.getAttribute('open'));\n"
83
84 + " dia.removeAttribute('open');\n"
85 + " log(dia.open);\n"
86 + " log(dia.getAttribute('open'));\n"
87 + " }\n"
88 + " </script>\n"
89 + " </head>\n"
90 + " <body onload='test()'>\n"
91 + " <dialog id='tester'>\n"
92 + " <p>HtmlUNit dialog</p>\n"
93 + " </dialog>\n"
94 + " </body>\n"
95 + "</html>";
96
97 loadPageVerifyTitle2(html);
98 }
99
100
101
102
103 @Test
104 @Alerts({"false", "null", "false", "null", "true", "", "true", "blah", "false", "null"})
105 public void openString() throws Exception {
106 final String html = DOCTYPE_HTML
107 + "<html>\n"
108 + " <head>\n"
109 + " <script>\n"
110 + LOG_TITLE_FUNCTION
111 + DUMP_EVENT_FUNCTION
112 + " function test() {\n"
113 + " var dia = document.getElementById('tester');\n"
114 + " if (typeof HTMLDialogElement !== 'function') { log('No'); return; }\n"
115
116 + " dia.addEventListener('close', (event) => {\n"
117 + " dump(event);\n"
118 + " });\n"
119
120 + " log(dia.open);\n"
121 + " log(dia.getAttribute('open'));\n"
122
123 + " dia.open = '';\n"
124 + " log(dia.open);\n"
125 + " log(dia.getAttribute('open'));\n"
126
127 + " dia.open = 'abc';\n"
128 + " log(dia.open);\n"
129 + " log(dia.getAttribute('open'));\n"
130
131 + " dia.setAttribute('open', 'blah');\n"
132 + " log(dia.open);\n"
133 + " log(dia.getAttribute('open'));\n"
134
135 + " dia.removeAttribute('open');\n"
136 + " log(dia.open);\n"
137 + " log(dia.getAttribute('open'));\n"
138 + " }\n"
139 + " </script>\n"
140 + " </head>\n"
141 + " <body onload='test()'>\n"
142 + " <dialog id='tester'>\n"
143 + " <p>HtmlUNit dialog</p>\n"
144 + " </dialog>\n"
145 + " </body>\n"
146 + "</html>";
147
148 loadPageVerifyTitle2(html);
149 }
150
151
152
153
154 @Test
155 @Alerts({"false", "null", "true", "", "true", ""})
156 public void show() throws Exception {
157 final String html = DOCTYPE_HTML
158 + "<html>\n"
159 + " <head>\n"
160 + " <script>\n"
161 + LOG_TITLE_FUNCTION
162 + DUMP_EVENT_FUNCTION
163 + " function test() {\n"
164 + " var dia = document.getElementById('tester');\n"
165 + " if (typeof HTMLDialogElement !== 'function') { log('No'); return; }\n"
166
167 + " dia.addEventListener('close', (event) => {\n"
168 + " dump(event);\n"
169 + " });\n"
170
171 + " log(dia.open);\n"
172 + " log(dia.getAttribute('open'));\n"
173
174 + " dia.show();\n"
175 + " log(dia.open);\n"
176 + " log(dia.getAttribute('open'));\n"
177
178 + " dia.show();\n"
179 + " log(dia.open);\n"
180 + " log(dia.getAttribute('open'));\n"
181 + " }\n"
182 + " </script>\n"
183 + " </head>\n"
184 + " <body onload='test()'>\n"
185 + " <dialog id='tester'>\n"
186 + " <p>HtmlUNit dialog</p>\n"
187 + " </dialog>\n"
188 + " </body>\n"
189 + "</html>";
190
191 loadPageVerifyTitle2(html);
192 }
193
194
195
196
197 @Test
198 @Alerts({"true", "", "true", ""})
199 public void showAlreadyOpend() throws Exception {
200 final String html = DOCTYPE_HTML
201 + "<html>\n"
202 + " <head>\n"
203 + " <script>\n"
204 + LOG_TITLE_FUNCTION
205 + DUMP_EVENT_FUNCTION
206 + " function test() {\n"
207 + " var dia = document.getElementById('tester');\n"
208 + " if (typeof HTMLDialogElement !== 'function') { log('No'); return; }\n"
209
210 + " dia.addEventListener('close', (event) => {\n"
211 + " dump(event);\n"
212 + " });\n"
213
214 + " log(dia.open);\n"
215 + " log(dia.getAttribute('open'));\n"
216
217 + " dia.show();\n"
218 + " log(dia.open);\n"
219 + " log(dia.getAttribute('open'));\n"
220 + " }\n"
221 + " </script>\n"
222 + " </head>\n"
223 + " <body onload='test()'>\n"
224 + " <dialog id='tester' open>\n"
225 + " <p>HtmlUNit dialog</p>\n"
226 + " </dialog>\n"
227 + " </body>\n"
228 + "</html>";
229
230 loadPageVerifyTitle2(html);
231 }
232
233
234
235
236 @Test
237 @Alerts({"false", "null", "true", "", "true", ""})
238 public void showModal() throws Exception {
239 final String html = DOCTYPE_HTML
240 + "<html>\n"
241 + " <head>\n"
242 + " <script>\n"
243 + LOG_TITLE_FUNCTION
244 + DUMP_EVENT_FUNCTION
245 + " function test() {\n"
246 + " var dia = document.getElementById('tester');\n"
247 + " if (typeof HTMLDialogElement !== 'function') { log('No'); return; }\n"
248
249 + " dia.addEventListener('close', (event) => {\n"
250 + " dump(event);\n"
251 + " });\n"
252
253 + " log(dia.open);\n"
254 + " log(dia.getAttribute('open'));\n"
255
256 + " dia.showModal();\n"
257 + " log(dia.open);\n"
258 + " log(dia.getAttribute('open'));\n"
259
260 + " try {\n"
261 + " dia.showModal();\n"
262 + " } catch(e) { log('InvalidStateError'); }"
263 + " log(dia.open);\n"
264 + " log(dia.getAttribute('open'));\n"
265 + " }\n"
266 + " </script>\n"
267 + " </head>\n"
268 + " <body onload='test()'>\n"
269 + " <dialog id='tester'>\n"
270 + " <p>HtmlUNit dialog</p>\n"
271 + " </dialog>\n"
272 + " </body>\n"
273 + "</html>";
274
275 loadPageVerifyTitle2(html);
276 }
277
278
279
280
281 @Test
282 @Alerts({"true", "", "InvalidStateError", "true", ""})
283 public void showModalAlreadyOpend() throws Exception {
284 final String html = DOCTYPE_HTML
285 + "<html>\n"
286 + " <head>\n"
287 + " <script>\n"
288 + LOG_TITLE_FUNCTION
289 + DUMP_EVENT_FUNCTION
290 + " function test() {\n"
291 + " var dia = document.getElementById('tester');\n"
292 + " if (typeof HTMLDialogElement !== 'function') { log('No'); return; }\n"
293
294 + " dia.addEventListener('close', (event) => {\n"
295 + " dump(event);\n"
296 + " });\n"
297
298 + " log(dia.open);\n"
299 + " log(dia.getAttribute('open'));\n"
300
301 + " try {\n"
302 + " dia.showModal();\n"
303 + " } catch(e) { log('InvalidStateError'); }"
304 + " log(dia.open);\n"
305 + " log(dia.getAttribute('open'));\n"
306 + " }\n"
307 + " </script>\n"
308 + " </head>\n"
309 + " <body onload='test()'>\n"
310 + " <dialog id='tester' open>\n"
311 + " <p>HtmlUNit dialog</p>\n"
312 + " </dialog>\n"
313 + " </body>\n"
314 + "</html>";
315
316 loadPageVerifyTitle2(html);
317 }
318
319
320
321
322 @Test
323 @Alerts({"false", "null", "true", "", "true", ""})
324 public void showAfterShow() throws Exception {
325 final String html = DOCTYPE_HTML
326 + "<html>\n"
327 + " <head>\n"
328 + " <script>\n"
329 + LOG_TITLE_FUNCTION
330 + DUMP_EVENT_FUNCTION
331 + " function test() {\n"
332 + " var dia = document.getElementById('tester');\n"
333 + " if (typeof HTMLDialogElement !== 'function') { log('No'); return; }\n"
334
335 + " dia.addEventListener('close', (event) => {\n"
336 + " dump(event);\n"
337 + " });\n"
338
339 + " log(dia.open);\n"
340 + " log(dia.getAttribute('open'));\n"
341
342 + " dia.show();\n"
343 + " log(dia.open);\n"
344 + " log(dia.getAttribute('open'));\n"
345
346 + " try {\n"
347 + " dia.show();\n"
348 + " } catch(e) { log('InvalidStateError'); }"
349 + " log(dia.open);\n"
350 + " log(dia.getAttribute('open'));\n"
351 + " }\n"
352 + " </script>\n"
353 + " </head>\n"
354 + " <body onload='test()'>\n"
355 + " <dialog id='tester'>\n"
356 + " <p>HtmlUNit dialog</p>\n"
357 + " </dialog>\n"
358 + " </body>\n"
359 + "</html>";
360
361 loadPageVerifyTitle2(html);
362 }
363
364
365
366
367 @Test
368 @Alerts({"false", "null", "true", "", "InvalidStateError", "true", ""})
369 public void showAfterShowModal() throws Exception {
370 final String html = DOCTYPE_HTML
371 + "<html>\n"
372 + " <head>\n"
373 + " <script>\n"
374 + LOG_TITLE_FUNCTION
375 + DUMP_EVENT_FUNCTION
376 + " function test() {\n"
377 + " var dia = document.getElementById('tester');\n"
378 + " if (typeof HTMLDialogElement !== 'function') { log('No'); return; }\n"
379
380 + " dia.addEventListener('close', (event) => {\n"
381 + " dump(event);\n"
382 + " });\n"
383
384 + " log(dia.open);\n"
385 + " log(dia.getAttribute('open'));\n"
386
387 + " dia.showModal();\n"
388 + " log(dia.open);\n"
389 + " log(dia.getAttribute('open'));\n"
390
391 + " try {\n"
392 + " dia.show();\n"
393 + " } catch(e) { log('InvalidStateError'); }"
394 + " log(dia.open);\n"
395 + " log(dia.getAttribute('open'));\n"
396 + " }\n"
397 + " </script>\n"
398 + " </head>\n"
399 + " <body onload='test()'>\n"
400 + " <dialog id='tester'>\n"
401 + " <p>HtmlUNit dialog</p>\n"
402 + " </dialog>\n"
403 + " </body>\n"
404 + "</html>";
405
406 loadPageVerifyTitle2(html);
407 }
408
409
410
411
412 @Test
413 @Alerts({"false", "null", "true", "", "InvalidStateError", "true", ""})
414 public void showModalAfterShow() throws Exception {
415 final String html = DOCTYPE_HTML
416 + "<html>\n"
417 + " <head>\n"
418 + " <script>\n"
419 + LOG_TITLE_FUNCTION
420 + DUMP_EVENT_FUNCTION
421 + " function test() {\n"
422 + " var dia = document.getElementById('tester');\n"
423 + " if (typeof HTMLDialogElement !== 'function') { log('No'); return; }\n"
424
425 + " dia.addEventListener('close', (event) => {\n"
426 + " dump(event);\n"
427 + " });\n"
428
429 + " log(dia.open);\n"
430 + " log(dia.getAttribute('open'));\n"
431
432 + " dia.show();\n"
433 + " log(dia.open);\n"
434 + " log(dia.getAttribute('open'));\n"
435
436 + " try {\n"
437 + " dia.showModal();\n"
438 + " } catch(e) { log('InvalidStateError'); }"
439 + " log(dia.open);\n"
440 + " log(dia.getAttribute('open'));\n"
441 + " }\n"
442 + " </script>\n"
443 + " </head>\n"
444 + " <body onload='test()'>\n"
445 + " <dialog id='tester'>\n"
446 + " <p>HtmlUNit dialog</p>\n"
447 + " </dialog>\n"
448 + " </body>\n"
449 + "</html>";
450
451 loadPageVerifyTitle2(html);
452 }
453
454
455
456
457 @Test
458 @Alerts({"false", "null", "true", "", "true", ""})
459 public void showModalAfterShowModal() throws Exception {
460 final String html = DOCTYPE_HTML
461 + "<html>\n"
462 + " <head>\n"
463 + " <script>\n"
464 + LOG_TITLE_FUNCTION
465 + DUMP_EVENT_FUNCTION
466 + " function test() {\n"
467 + " var dia = document.getElementById('tester');\n"
468 + " if (typeof HTMLDialogElement !== 'function') { log('No'); return; }\n"
469
470 + " dia.addEventListener('close', (event) => {\n"
471 + " dump(event);\n"
472 + " });\n"
473
474 + " log(dia.open);\n"
475 + " log(dia.getAttribute('open'));\n"
476
477 + " dia.showModal();\n"
478 + " log(dia.open);\n"
479 + " log(dia.getAttribute('open'));\n"
480
481 + " try {\n"
482 + " dia.showModal();\n"
483 + " } catch(e) { log('InvalidStateError'); }"
484 + " log(dia.open);\n"
485 + " log(dia.getAttribute('open'));\n"
486 + " }\n"
487 + " </script>\n"
488 + " </head>\n"
489 + " <body onload='test()'>\n"
490 + " <dialog id='tester'>\n"
491 + " <p>HtmlUNit dialog</p>\n"
492 + " </dialog>\n"
493 + " </body>\n"
494 + "</html>";
495
496 loadPageVerifyTitle2(html);
497 }
498
499
500
501
502 @Test
503 @Alerts({"false", "null", "", "true", "", "",
504 "false", "null", "", "false", "null", "",
505 "[object Event]", "close", "false", "false", "false", "[object HTMLDialogElement]"})
506 public void close() throws Exception {
507 final String html = DOCTYPE_HTML
508 + "<html>\n"
509 + " <head>\n"
510 + " <script>\n"
511 + LOG_TITLE_FUNCTION
512 + DUMP_EVENT_FUNCTION
513 + " function test() {\n"
514 + " var dia = document.getElementById('tester');\n"
515 + " if (typeof HTMLDialogElement !== 'function') { log('No'); return; }\n"
516
517 + " dia.addEventListener('close', (event) => {\n"
518 + " dump(event);\n"
519 + " });\n"
520
521 + " log(dia.open);\n"
522 + " log(dia.getAttribute('open'));\n"
523 + " log(dia.returnValue);\n"
524
525 + " dia.show();\n"
526 + " log(dia.open);\n"
527 + " log(dia.getAttribute('open'));\n"
528 + " log(dia.returnValue);\n"
529
530 + " dia.close();\n"
531 + " log(dia.open);\n"
532 + " log(dia.getAttribute('open'));\n"
533 + " log(dia.returnValue);\n"
534
535 + " dia.close();\n"
536 + " log(dia.open);\n"
537 + " log(dia.getAttribute('open'));\n"
538 + " log(dia.returnValue);\n"
539 + " }\n"
540 + " </script>\n"
541 + " </head>\n"
542 + " <body onload='test()'>\n"
543 + " <dialog id='tester'>\n"
544 + " <p>HtmlUNit dialog</p>\n"
545 + " </dialog>\n"
546 + " </body>\n"
547 + "</html>";
548
549 loadPageVerifyTitle2(html);
550 }
551
552
553
554
555 @Test
556 @Alerts({"false", "null", "", "true", "", "",
557 "false", "null", "", "false", "null", "", "closed"})
558 public void closeOnclose() throws Exception {
559 final String html = DOCTYPE_HTML
560 + "<html>\n"
561 + " <head>\n"
562 + " <script>\n"
563 + LOG_TITLE_FUNCTION
564 + DUMP_EVENT_FUNCTION
565 + " function test() {\n"
566 + " var dia = document.getElementById('tester');\n"
567 + " if (typeof HTMLDialogElement !== 'function') { log('No'); return; }\n"
568
569 + " log(dia.open);\n"
570 + " log(dia.getAttribute('open'));\n"
571 + " log(dia.returnValue);\n"
572
573 + " dia.show();\n"
574 + " log(dia.open);\n"
575 + " log(dia.getAttribute('open'));\n"
576 + " log(dia.returnValue);\n"
577
578 + " dia.close();\n"
579 + " log(dia.open);\n"
580 + " log(dia.getAttribute('open'));\n"
581 + " log(dia.returnValue);\n"
582
583 + " dia.close();\n"
584 + " log(dia.open);\n"
585 + " log(dia.getAttribute('open'));\n"
586 + " log(dia.returnValue);\n"
587 + " }\n"
588 + " </script>\n"
589 + " </head>\n"
590 + " <body onload='test()'>\n"
591 + " <dialog id='tester' onclose='log(\"closed\")'>\n"
592 + " <p>HtmlUNit dialog</p>\n"
593 + " </dialog>\n"
594 + " </body>\n"
595 + "</html>";
596
597 loadPage2(html);
598 verifyTitle2(DEFAULT_WAIT_TIME, getWebDriver(), getExpectedAlerts());
599 }
600
601
602
603
604 @Test
605 @Alerts({"false", "null", "", "true", "", "",
606 "false", "null", "Html", "false", "null", "Html",
607 "[object Event]", "close", "false", "false", "false", "[object HTMLDialogElement]"})
608 public void closeReturnValue() throws Exception {
609 final String html = DOCTYPE_HTML
610 + "<html>\n"
611 + " <head>\n"
612 + " <script>\n"
613 + LOG_TITLE_FUNCTION
614 + DUMP_EVENT_FUNCTION
615 + " function test() {\n"
616 + " var dia = document.getElementById('tester');\n"
617 + " if (typeof HTMLDialogElement !== 'function') { log('No'); return; }\n"
618
619 + " dia.addEventListener('close', (event) => {\n"
620 + " dump(event);\n"
621 + " });\n"
622
623 + " log(dia.open);\n"
624 + " log(dia.getAttribute('open'));\n"
625 + " log(dia.returnValue);\n"
626
627 + " dia.show();\n"
628 + " log(dia.open);\n"
629 + " log(dia.getAttribute('open'));\n"
630 + " log(dia.returnValue);\n"
631
632 + " dia.close('Html');\n"
633 + " log(dia.open);\n"
634 + " log(dia.getAttribute('open'));\n"
635 + " log(dia.returnValue);\n"
636
637 + " dia.close('unit');\n"
638 + " log(dia.open);\n"
639 + " log(dia.getAttribute('open'));\n"
640 + " log(dia.returnValue);\n"
641 + " }\n"
642 + " </script>\n"
643 + " </head>\n"
644 + " <body onload='test()'>\n"
645 + " <dialog id='tester'>\n"
646 + " <p>HtmlUNit dialog</p>\n"
647 + " </dialog>\n"
648 + " </body>\n"
649 + "</html>";
650
651 loadPage2(html);
652 verifyTitle2(DEFAULT_WAIT_TIME, getWebDriver(), getExpectedAlerts());
653 }
654
655
656
657
658 @Test
659 @Alerts({"false", "", "1", "true", "1", "2", "false", "3", "4",
660 "[object Event]", "close", "false", "false", "false", "[object HTMLDialogElement]"})
661 public void returnValue() throws Exception {
662 final String html = DOCTYPE_HTML
663 + "<html>\n"
664 + " <head>\n"
665 + " <script>\n"
666 + LOG_TITLE_FUNCTION
667 + DUMP_EVENT_FUNCTION
668 + " function test() {\n"
669 + " var dia = document.getElementById('tester');\n"
670 + " if (typeof HTMLDialogElement !== 'function') { log('No'); return; }\n"
671
672 + " dia.addEventListener('close', (event) => {\n"
673 + " dump(event);\n"
674 + " });\n"
675
676 + " log(dia.open);\n"
677 + " log(dia.returnValue);\n"
678
679 + " dia.returnValue = '1';\n"
680 + " log(dia.returnValue);\n"
681
682 + " dia.show();\n"
683 + " log(dia.open);\n"
684 + " log(dia.returnValue);\n"
685
686 + " dia.returnValue = '2';\n"
687 + " log(dia.returnValue);\n"
688
689 + " dia.close('3');\n"
690 + " log(dia.open);\n"
691 + " log(dia.returnValue);\n"
692
693 + " dia.returnValue = '4';\n"
694 + " log(dia.returnValue);\n"
695 + " }\n"
696 + " </script>\n"
697 + " </head>\n"
698 + " <body onload='test()'>\n"
699 + " <dialog id='tester'>\n"
700 + " <p>HtmlUNit dialog</p>\n"
701 + " </dialog>\n"
702 + " </body>\n"
703 + "</html>";
704
705 loadPageVerifyTitle2(html);
706 }
707
708
709
710
711 @Test
712 @Alerts({"false", "string ", "string null", "string undefined", "string 4", "string [object Object]"})
713 public void returnValueSpecial() throws Exception {
714 final String html = DOCTYPE_HTML
715 + "<html>\n"
716 + " <head>\n"
717 + " <script>\n"
718 + LOG_TITLE_FUNCTION
719 + DUMP_EVENT_FUNCTION
720 + " function test() {\n"
721 + " var dia = document.getElementById('tester');\n"
722 + " if (typeof HTMLDialogElement !== 'function') { log('No'); return; }\n"
723
724 + " dia.addEventListener('close', (event) => {\n"
725 + " dump(event);\n"
726 + " });\n"
727
728 + " log(dia.open);\n"
729 + " log(typeof dia.returnValue + ' ' + dia.returnValue);\n"
730
731 + " dia.returnValue = null;\n"
732 + " log(typeof dia.returnValue + ' ' + dia.returnValue);\n"
733
734 + " dia.returnValue = undefined;\n"
735 + " log(typeof dia.returnValue + ' ' + dia.returnValue);\n"
736
737 + " dia.returnValue = 4;\n"
738 + " log(typeof dia.returnValue + ' ' + dia.returnValue);\n"
739
740 + " dia.returnValue = { a: '#' };\n"
741 + " log(typeof dia.returnValue + ' ' + dia.returnValue);\n"
742 + " }\n"
743 + " </script>\n"
744 + " </head>\n"
745 + " <body onload='test()'>\n"
746 + " <dialog id='tester'>\n"
747 + " <p>HtmlUNit dialog</p>\n"
748 + " </dialog>\n"
749 + " </body>\n"
750 + "</html>";
751
752 loadPageVerifyTitle2(html);
753 }
754
755
756
757
758 @Test
759 @Alerts({"false", "true", "false",
760 "[object Event]", "close", "false", "false", "false", "[object HTMLDialogElement]"})
761 @HtmlUnitNYI(CHROME = {"false", "true",
762 "[object Event]", "close", "false", "false", "false", "[object HTMLDialogElement]",
763 "false"},
764 EDGE = {"false", "true",
765 "[object Event]", "close", "false", "false", "false", "[object HTMLDialogElement]",
766 "false"},
767 FF = {"false", "true",
768 "[object Event]", "close", "false", "false", "false", "[object HTMLDialogElement]",
769 "false"},
770 FF_ESR = {"false", "true",
771 "[object Event]", "close", "false", "false", "false", "[object HTMLDialogElement]",
772 "false"})
773 public void formClosesDialog() throws Exception {
774 final String html = DOCTYPE_HTML
775 + "<html>\n"
776 + " <head>\n"
777 + " <script>\n"
778 + LOG_TITLE_FUNCTION
779 + DUMP_EVENT_FUNCTION
780 + " function test() {\n"
781 + " var dia = document.getElementById('tester');\n"
782 + " if (typeof HTMLDialogElement !== 'function') { log('No'); return; }\n"
783
784 + " dia.addEventListener('close', (event) => {\n"
785 + " dump(event);\n"
786 + " });\n"
787
788 + " log(dia.open);\n"
789
790 + " dia.show();\n"
791 + " log(dia.open);\n"
792
793 + " document.getElementById('close').click();\n"
794 + " log(dia.open);\n"
795 + " }\n"
796 + " </script>\n"
797 + " </head>\n"
798 + " <body onload='test()'>\n"
799 + " <dialog id='tester'>\n"
800 + " <p>HtmlUNit dialog</p>\n"
801 + " <form method='dialog'>\n"
802 + " <button id='close'>OK</button>\n"
803 + " </form>\n"
804 + " </dialog>\n"
805 + " </body>\n"
806 + "</html>";
807
808 loadPageVerifyTitle2(html);
809 }
810
811
812
813
814 @Test
815 @Alerts({"false", "true", "false",
816 "[object Event]", "close", "false", "false", "false", "[object HTMLDialogElement]"})
817 @HtmlUnitNYI(CHROME = {"false", "true",
818 "[object Event]", "close", "false", "false", "false", "[object HTMLDialogElement]",
819 "false"},
820 EDGE = {"false", "true",
821 "[object Event]", "close", "false", "false", "false", "[object HTMLDialogElement]",
822 "false"},
823 FF = {"false", "true",
824 "[object Event]", "close", "false", "false", "false", "[object HTMLDialogElement]",
825 "false"},
826 FF_ESR = {"false", "true",
827 "[object Event]", "close", "false", "false", "false", "[object HTMLDialogElement]",
828 "false"})
829 public void formClosesDialogWithoutJs() throws Exception {
830 final String html = DOCTYPE_HTML
831 + "<html>\n"
832 + " <head>\n"
833 + " <script>\n"
834 + LOG_TITLE_FUNCTION
835 + DUMP_EVENT_FUNCTION
836 + " function test() {\n"
837 + " var dia = document.getElementById('tester');\n"
838 + " if (typeof HTMLDialogElement !== 'function') { log('No'); return; }\n"
839
840 + " dia.addEventListener('close', (event) => {\n"
841 + " dump(event);\n"
842 + " });\n"
843
844 + " log(dia.open);\n"
845
846 + " dia.show();\n"
847 + " log(dia.open);\n"
848
849 + " document.getElementById('close').click();\n"
850 + " log(dia.open);\n"
851 + " }\n"
852 + " </script>\n"
853 + " </head>\n"
854 + " <body onload='test()'>\n"
855 + " <dialog id='tester'>\n"
856 + " <p>HtmlUNit dialog</p>\n"
857 + " <form method='dialog'>\n"
858 + " <button id='close'>OK</button>\n"
859 + " </form>\n"
860 + " </dialog>\n"
861 + " </body>\n"
862 + "</html>";
863
864 loadPage2(html);
865 verifyTitle2(DEFAULT_WAIT_TIME, getWebDriver(), getExpectedAlerts());
866 }
867
868
869
870
871 @Test
872 @Alerts({"false", "true", "true"})
873 public void formGet() throws Exception {
874 final String html = DOCTYPE_HTML
875 + "<html>\n"
876 + " <head>\n"
877 + " <script>\n"
878 + LOG_WINDOW_NAME_FUNCTION
879 + " function test() {\n"
880 + " var dia = document.getElementById('tester');\n"
881 + " if (typeof HTMLDialogElement !== 'function') { log('No'); return; }\n"
882
883 + " dia.addEventListener('close', (event) => {\n"
884 + " dump(event);\n"
885 + " });\n"
886
887 + " log(dia.open);\n"
888
889 + " dia.show();\n"
890 + " log(dia.open);\n"
891
892 + " document.getElementById('close').click();\n"
893 + " log(dia.open);\n"
894 + " }\n"
895 + " </script>\n"
896 + " </head>\n"
897 + " <body onload='test()'>\n"
898 + " <dialog id='tester'>\n"
899 + " <p>HtmlUNit dialog</p>\n"
900 + " <form method='get' action='" + URL_SECOND + "'>\n"
901 + " <button id='close'>OK</button>\n"
902 + " </form>\n"
903 + " </dialog>\n"
904 + " </body>\n"
905 + "</html>";
906
907 final String secondContent = DOCTYPE_HTML
908 + "<html><head><title>second</title></head><body>\n"
909 + "<p>hello world</p>\n"
910 + "</body></html>";
911 getMockWebConnection().setDefaultResponse(secondContent);
912
913 loadPage2(html);
914 Thread.sleep(DEFAULT_WAIT_TIME.toMillis() / 20);
915 verifyWindowName2(getWebDriver(), getExpectedAlerts());
916 }
917
918
919
920
921 @Test
922 @Alerts({"false", "true", "true"})
923 public void formOutsideDialog() throws Exception {
924 final String html = DOCTYPE_HTML
925 + "<html>\n"
926 + " <head>\n"
927 + " <script>\n"
928 + LOG_TITLE_FUNCTION
929 + DUMP_EVENT_FUNCTION
930 + " function test() {\n"
931 + " var dia = document.getElementById('tester');\n"
932 + " if (typeof HTMLDialogElement !== 'function') { log('No'); return; }\n"
933
934 + " dia.addEventListener('close', (event) => {\n"
935 + " dump(event);\n"
936 + " });\n"
937
938 + " log(dia.open);\n"
939
940 + " dia.show();\n"
941 + " log(dia.open);\n"
942
943 + " document.getElementById('close').click();\n"
944 + " log(dia.open);\n"
945 + " }\n"
946 + " </script>\n"
947 + " </head>\n"
948 + " <body onload='test()'>\n"
949 + " <dialog id='tester'>\n"
950 + " <p>HtmlUNit dialog</p>\n"
951 + " </dialog>\n"
952
953 + " <form method='dialog'>\n"
954 + " <button id='close'>OK</button>\n"
955 + " </form>\n"
956
957 + " </body>\n"
958 + "</html>";
959
960 loadPageVerifyTitle2(html);
961 }
962
963
964
965
966 @Test
967 @Alerts({"Show dialog", "false",
968 "Show dialog\nHello World\nDismiss", "true",
969 "Show dialog", "false"})
970 public void useCaseIssue598() throws Exception {
971 final String html = DOCTYPE_HTML
972 + "<html>\n"
973 + " <body>\n"
974 + " <button id='showMyDialog'>Show dialog</button><br/>\n"
975 + " <dialog id='mydialog'>\n"
976 + " Hello World<br/>\n"
977 + " <button id='dismiss'>Dismiss</button>\n"
978 + " </dialog>\n"
979
980 + " <script>\n"
981 + " showButton = document.getElementById('showMyDialog');\n"
982 + " showButton.addEventListener('click', showMyDialog);\n"
983
984 + " dismissButton = document.getElementById('dismiss');\n"
985 + " dismissButton.addEventListener('click', closeMyDialog);\r\n"
986
987 + " function showMyDialog() {\n"
988 + " mydialog = document.getElementById('mydialog');\n"
989 + " mydialog.showModal();\n"
990 + " }\n"
991
992 + " function closeMyDialog() {\n"
993 + " mydialog = document.getElementById('mydialog');\n"
994 + " mydialog.close();\n"
995 + " }\n"
996 + " </script>\n"
997 + " </body>\n"
998 + "</html>";
999
1000 final WebDriver driver = loadPage2(html);
1001
1002 assertEquals(getExpectedAlerts()[0], driver.findElement(By.tagName("body")).getText().trim());
1003 assertEquals(Boolean.parseBoolean(getExpectedAlerts()[1]), driver.findElement(By.id("mydialog")).isDisplayed());
1004
1005 driver.findElement(By.id("showMyDialog")).click();
1006 assertEquals(getExpectedAlerts()[2], driver.findElement(By.tagName("body")).getText().trim());
1007 assertEquals(Boolean.parseBoolean(getExpectedAlerts()[3]), driver.findElement(By.id("mydialog")).isDisplayed());
1008
1009 driver.findElement(By.id("dismiss")).click();
1010 assertEquals(getExpectedAlerts()[4], driver.findElement(By.tagName("body")).getText().trim());
1011 assertEquals(Boolean.parseBoolean(getExpectedAlerts()[5]), driver.findElement(By.id("mydialog")).isDisplayed());
1012 }
1013 }