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 loadPageVerifyTitle2(html);
598 }
599
600
601
602
603 @Test
604 @Alerts({"false", "null", "", "true", "", "",
605 "false", "null", "Html", "false", "null", "Html",
606 "[object Event]", "close", "false", "false", "false", "[object HTMLDialogElement]"})
607 public void closeReturnValue() throws Exception {
608 final String html = DOCTYPE_HTML
609 + "<html>\n"
610 + " <head>\n"
611 + " <script>\n"
612 + LOG_TITLE_FUNCTION
613 + DUMP_EVENT_FUNCTION
614 + " function test() {\n"
615 + " var dia = document.getElementById('tester');\n"
616 + " if (typeof HTMLDialogElement !== 'function') { log('No'); return; }\n"
617
618 + " dia.addEventListener('close', (event) => {\n"
619 + " dump(event);\n"
620 + " });\n"
621
622 + " log(dia.open);\n"
623 + " log(dia.getAttribute('open'));\n"
624 + " log(dia.returnValue);\n"
625
626 + " dia.show();\n"
627 + " log(dia.open);\n"
628 + " log(dia.getAttribute('open'));\n"
629 + " log(dia.returnValue);\n"
630
631 + " dia.close('Html');\n"
632 + " log(dia.open);\n"
633 + " log(dia.getAttribute('open'));\n"
634 + " log(dia.returnValue);\n"
635
636 + " dia.close('unit');\n"
637 + " log(dia.open);\n"
638 + " log(dia.getAttribute('open'));\n"
639 + " log(dia.returnValue);\n"
640 + " }\n"
641 + " </script>\n"
642 + " </head>\n"
643 + " <body onload='test()'>\n"
644 + " <dialog id='tester'>\n"
645 + " <p>HtmlUNit dialog</p>\n"
646 + " </dialog>\n"
647 + " </body>\n"
648 + "</html>";
649
650 loadPageVerifyTitle2(html);
651 }
652
653
654
655
656 @Test
657 @Alerts({"false", "", "1", "true", "1", "2", "false", "3", "4",
658 "[object Event]", "close", "false", "false", "false", "[object HTMLDialogElement]"})
659 public void returnValue() throws Exception {
660 final String html = DOCTYPE_HTML
661 + "<html>\n"
662 + " <head>\n"
663 + " <script>\n"
664 + LOG_TITLE_FUNCTION
665 + DUMP_EVENT_FUNCTION
666 + " function test() {\n"
667 + " var dia = document.getElementById('tester');\n"
668 + " if (typeof HTMLDialogElement !== 'function') { log('No'); return; }\n"
669
670 + " dia.addEventListener('close', (event) => {\n"
671 + " dump(event);\n"
672 + " });\n"
673
674 + " log(dia.open);\n"
675 + " log(dia.returnValue);\n"
676
677 + " dia.returnValue = '1';\n"
678 + " log(dia.returnValue);\n"
679
680 + " dia.show();\n"
681 + " log(dia.open);\n"
682 + " log(dia.returnValue);\n"
683
684 + " dia.returnValue = '2';\n"
685 + " log(dia.returnValue);\n"
686
687 + " dia.close('3');\n"
688 + " log(dia.open);\n"
689 + " log(dia.returnValue);\n"
690
691 + " dia.returnValue = '4';\n"
692 + " log(dia.returnValue);\n"
693 + " }\n"
694 + " </script>\n"
695 + " </head>\n"
696 + " <body onload='test()'>\n"
697 + " <dialog id='tester'>\n"
698 + " <p>HtmlUNit dialog</p>\n"
699 + " </dialog>\n"
700 + " </body>\n"
701 + "</html>";
702
703 loadPageVerifyTitle2(html);
704 }
705
706
707
708
709 @Test
710 @Alerts({"false", "string ", "string null", "string undefined", "string 4", "string [object Object]"})
711 public void returnValueSpecial() throws Exception {
712 final String html = DOCTYPE_HTML
713 + "<html>\n"
714 + " <head>\n"
715 + " <script>\n"
716 + LOG_TITLE_FUNCTION
717 + DUMP_EVENT_FUNCTION
718 + " function test() {\n"
719 + " var dia = document.getElementById('tester');\n"
720 + " if (typeof HTMLDialogElement !== 'function') { log('No'); return; }\n"
721
722 + " dia.addEventListener('close', (event) => {\n"
723 + " dump(event);\n"
724 + " });\n"
725
726 + " log(dia.open);\n"
727 + " log(typeof dia.returnValue + ' ' + dia.returnValue);\n"
728
729 + " dia.returnValue = null;\n"
730 + " log(typeof dia.returnValue + ' ' + dia.returnValue);\n"
731
732 + " dia.returnValue = undefined;\n"
733 + " log(typeof dia.returnValue + ' ' + dia.returnValue);\n"
734
735 + " dia.returnValue = 4;\n"
736 + " log(typeof dia.returnValue + ' ' + dia.returnValue);\n"
737
738 + " dia.returnValue = { a: '#' };\n"
739 + " log(typeof dia.returnValue + ' ' + dia.returnValue);\n"
740 + " }\n"
741 + " </script>\n"
742 + " </head>\n"
743 + " <body onload='test()'>\n"
744 + " <dialog id='tester'>\n"
745 + " <p>HtmlUNit dialog</p>\n"
746 + " </dialog>\n"
747 + " </body>\n"
748 + "</html>";
749
750 loadPageVerifyTitle2(html);
751 }
752
753
754
755
756 @Test
757 @Alerts({"false", "true", "false",
758 "[object Event]", "close", "false", "false", "false", "[object HTMLDialogElement]"})
759 @HtmlUnitNYI(CHROME = {"false", "true",
760 "[object Event]", "close", "false", "false", "false", "[object HTMLDialogElement]",
761 "false"},
762 EDGE = {"false", "true",
763 "[object Event]", "close", "false", "false", "false", "[object HTMLDialogElement]",
764 "false"},
765 FF = {"false", "true",
766 "[object Event]", "close", "false", "false", "false", "[object HTMLDialogElement]",
767 "false"},
768 FF_ESR = {"false", "true",
769 "[object Event]", "close", "false", "false", "false", "[object HTMLDialogElement]",
770 "false"})
771 public void formClosesDialog() throws Exception {
772 final String html = DOCTYPE_HTML
773 + "<html>\n"
774 + " <head>\n"
775 + " <script>\n"
776 + LOG_TITLE_FUNCTION
777 + DUMP_EVENT_FUNCTION
778 + " function test() {\n"
779 + " var dia = document.getElementById('tester');\n"
780 + " if (typeof HTMLDialogElement !== 'function') { log('No'); return; }\n"
781
782 + " dia.addEventListener('close', (event) => {\n"
783 + " dump(event);\n"
784 + " });\n"
785
786 + " log(dia.open);\n"
787
788 + " dia.show();\n"
789 + " log(dia.open);\n"
790
791 + " document.getElementById('close').click();\n"
792 + " log(dia.open);\n"
793 + " }\n"
794 + " </script>\n"
795 + " </head>\n"
796 + " <body onload='test()'>\n"
797 + " <dialog id='tester'>\n"
798 + " <p>HtmlUNit dialog</p>\n"
799 + " <form method='dialog'>\n"
800 + " <button id='close'>OK</button>\n"
801 + " </form>\n"
802 + " </dialog>\n"
803 + " </body>\n"
804 + "</html>";
805
806 loadPageVerifyTitle2(html);
807 }
808
809
810
811
812 @Test
813 @Alerts({"false", "true", "false",
814 "[object Event]", "close", "false", "false", "false", "[object HTMLDialogElement]"})
815 @HtmlUnitNYI(CHROME = {"false", "true",
816 "[object Event]", "close", "false", "false", "false", "[object HTMLDialogElement]",
817 "false"},
818 EDGE = {"false", "true",
819 "[object Event]", "close", "false", "false", "false", "[object HTMLDialogElement]",
820 "false"},
821 FF = {"false", "true",
822 "[object Event]", "close", "false", "false", "false", "[object HTMLDialogElement]",
823 "false"},
824 FF_ESR = {"false", "true",
825 "[object Event]", "close", "false", "false", "false", "[object HTMLDialogElement]",
826 "false"})
827 public void formClosesDialogWithoutJs() throws Exception {
828 final String html = DOCTYPE_HTML
829 + "<html>\n"
830 + " <head>\n"
831 + " <script>\n"
832 + LOG_TITLE_FUNCTION
833 + DUMP_EVENT_FUNCTION
834 + " function test() {\n"
835 + " var dia = document.getElementById('tester');\n"
836 + " if (typeof HTMLDialogElement !== 'function') { log('No'); return; }\n"
837
838 + " dia.addEventListener('close', (event) => {\n"
839 + " dump(event);\n"
840 + " });\n"
841
842 + " log(dia.open);\n"
843
844 + " dia.show();\n"
845 + " log(dia.open);\n"
846
847 + " document.getElementById('close').click();\n"
848 + " log(dia.open);\n"
849 + " }\n"
850 + " </script>\n"
851 + " </head>\n"
852 + " <body onload='test()'>\n"
853 + " <dialog id='tester'>\n"
854 + " <p>HtmlUNit dialog</p>\n"
855 + " <form method='dialog'>\n"
856 + " <button id='close'>OK</button>\n"
857 + " </form>\n"
858 + " </dialog>\n"
859 + " </body>\n"
860 + "</html>";
861
862 loadPageVerifyTitle2(html);
863 }
864
865
866
867
868 @Test
869 @Alerts({"false", "true", "true"})
870 public void formGet() throws Exception {
871 final String html = DOCTYPE_HTML
872 + "<html>\n"
873 + " <head>\n"
874 + " <script>\n"
875 + LOG_WINDOW_NAME_FUNCTION
876 + " function test() {\n"
877 + " var dia = document.getElementById('tester');\n"
878 + " if (typeof HTMLDialogElement !== 'function') { log('No'); return; }\n"
879
880 + " dia.addEventListener('close', (event) => {\n"
881 + " dump(event);\n"
882 + " });\n"
883
884 + " log(dia.open);\n"
885
886 + " dia.show();\n"
887 + " log(dia.open);\n"
888
889 + " document.getElementById('close').click();\n"
890 + " log(dia.open);\n"
891 + " }\n"
892 + " </script>\n"
893 + " </head>\n"
894 + " <body onload='test()'>\n"
895 + " <dialog id='tester'>\n"
896 + " <p>HtmlUNit dialog</p>\n"
897 + " <form method='get' action='" + URL_SECOND + "'>\n"
898 + " <button id='close'>OK</button>\n"
899 + " </form>\n"
900 + " </dialog>\n"
901 + " </body>\n"
902 + "</html>";
903
904 final String secondContent = DOCTYPE_HTML
905 + "<html><head><title>second</title></head><body>\n"
906 + "<p>hello world</p>\n"
907 + "</body></html>";
908 getMockWebConnection().setDefaultResponse(secondContent);
909
910 loadPage2(html);
911 Thread.sleep(DEFAULT_WAIT_TIME.toMillis() / 20);
912 verifyWindowName2(getWebDriver(), getExpectedAlerts());
913 }
914
915
916
917
918 @Test
919 @Alerts({"false", "true", "true"})
920 public void formOutsideDialog() throws Exception {
921 final String html = DOCTYPE_HTML
922 + "<html>\n"
923 + " <head>\n"
924 + " <script>\n"
925 + LOG_TITLE_FUNCTION
926 + DUMP_EVENT_FUNCTION
927 + " function test() {\n"
928 + " var dia = document.getElementById('tester');\n"
929 + " if (typeof HTMLDialogElement !== 'function') { log('No'); return; }\n"
930
931 + " dia.addEventListener('close', (event) => {\n"
932 + " dump(event);\n"
933 + " });\n"
934
935 + " log(dia.open);\n"
936
937 + " dia.show();\n"
938 + " log(dia.open);\n"
939
940 + " document.getElementById('close').click();\n"
941 + " log(dia.open);\n"
942 + " }\n"
943 + " </script>\n"
944 + " </head>\n"
945 + " <body onload='test()'>\n"
946 + " <dialog id='tester'>\n"
947 + " <p>HtmlUNit dialog</p>\n"
948 + " </dialog>\n"
949
950 + " <form method='dialog'>\n"
951 + " <button id='close'>OK</button>\n"
952 + " </form>\n"
953
954 + " </body>\n"
955 + "</html>";
956
957 loadPageVerifyTitle2(html);
958 }
959
960
961
962
963 @Test
964 @Alerts({"Show dialog", "false",
965 "Show dialog\nHello World\nDismiss", "true",
966 "Show dialog", "false"})
967 public void useCaseIssue598() throws Exception {
968 final String html = DOCTYPE_HTML
969 + "<html>\n"
970 + " <body>\n"
971 + " <button id='showMyDialog'>Show dialog</button><br/>\n"
972 + " <dialog id='mydialog'>\n"
973 + " Hello World<br/>\n"
974 + " <button id='dismiss'>Dismiss</button>\n"
975 + " </dialog>\n"
976
977 + " <script>\n"
978 + " showButton = document.getElementById('showMyDialog');\n"
979 + " showButton.addEventListener('click', showMyDialog);\n"
980
981 + " dismissButton = document.getElementById('dismiss');\n"
982 + " dismissButton.addEventListener('click', closeMyDialog);\r\n"
983
984 + " function showMyDialog() {\n"
985 + " mydialog = document.getElementById('mydialog');\n"
986 + " mydialog.showModal();\n"
987 + " }\n"
988
989 + " function closeMyDialog() {\n"
990 + " mydialog = document.getElementById('mydialog');\n"
991 + " mydialog.close();\n"
992 + " }\n"
993 + " </script>\n"
994 + " </body>\n"
995 + "</html>";
996
997 final WebDriver driver = loadPage2(html);
998
999 assertEquals(getExpectedAlerts()[0], driver.findElement(By.tagName("body")).getText().trim());
1000 assertEquals(Boolean.parseBoolean(getExpectedAlerts()[1]), driver.findElement(By.id("mydialog")).isDisplayed());
1001
1002 driver.findElement(By.id("showMyDialog")).click();
1003 assertEquals(getExpectedAlerts()[2], driver.findElement(By.tagName("body")).getText().trim());
1004 assertEquals(Boolean.parseBoolean(getExpectedAlerts()[3]), driver.findElement(By.id("mydialog")).isDisplayed());
1005
1006 driver.findElement(By.id("dismiss")).click();
1007 assertEquals(getExpectedAlerts()[4], driver.findElement(By.tagName("body")).getText().trim());
1008 assertEquals(Boolean.parseBoolean(getExpectedAlerts()[5]), driver.findElement(By.id("mydialog")).isDisplayed());
1009 }
1010 }