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