OLD | NEW |
| (Empty) |
1 <!doctype html> | |
2 <html> | |
3 <head> | |
4 <style> | |
5 #ancestor { | |
6 position: absolute; | |
7 height: 50px; | |
8 width: 50px; | |
9 top: 200px; | |
10 left: 100px; | |
11 border: 1px solid; | |
12 } | |
13 | |
14 dialog { | |
15 height: 50px; | |
16 width: 50px; | |
17 top: 200px; | |
18 left: 200px; | |
19 margin: 0; | |
20 } | |
21 | |
22 dialog::backdrop { | |
23 display: none; | |
24 } | |
25 </style> | |
26 <script src="../../../resources/js-test.js"></script> | |
27 </head> | |
28 <body> | |
29 <div id="ancestor"> | |
30 <dialog></dialog> | |
31 </div> | |
32 <script> | |
33 function clickOn(element) | |
34 { | |
35 var rect = element.getBoundingClientRect(); | |
36 eventSender.mouseMoveTo(rect.left + rect.width / 2, rect.top + rect.height /
2); | |
37 eventSender.mouseDown(); | |
38 eventSender.mouseUp(); | |
39 } | |
40 | |
41 // For manual testing, indicate success only if automatic testing would also | |
42 // print success for all ancestor nodes. | |
43 function turnDivGreenOnSuccess() | |
44 { | |
45 if (handledEvent['document'] && handledEvent['body'] && handledEvent['div']) | |
46 div.style.backgroundColor = 'green'; | |
47 } | |
48 | |
49 description('Test that ancestors of modal <dialog> are inert. To test manu
ally, ' + | |
50 'click the left box. There should be no change. Then click the right
box. ' + | |
51 'If both boxes turn green, the test passes.'); | |
52 div = document.querySelector('#ancestor'); | |
53 dialog = document.querySelector('dialog'); | |
54 dialog.showModal(); | |
55 | |
56 handledEvent = {}; | |
57 document.addEventListener('click', function(event) { | |
58 handledEvent['document'] = true; | |
59 turnDivGreenOnSuccess(); | |
60 }); | |
61 | |
62 document.body.addEventListener('click', function(event) { | |
63 handledEvent['body'] = true; | |
64 turnDivGreenOnSuccess(); | |
65 // body should get a event only via bubbling. | |
66 if (event.target != dialog) { | |
67 testFailed('body was targeted for an click event'); | |
68 div.style.backgroundColor = 'red'; | |
69 } | |
70 }); | |
71 | |
72 div.addEventListener('click', function(event) { | |
73 handledEvent['div'] = true; | |
74 turnDivGreenOnSuccess(); | |
75 // div should get a event only via bubbling. | |
76 if (event.target != dialog) { | |
77 testFailed('div was targeted for an click event'); | |
78 div.style.backgroundColor = 'red'; | |
79 } | |
80 }); | |
81 | |
82 dialog.addEventListener('click', function(event) { | |
83 handledEvent['dialog'] = true; | |
84 dialog.style.backgroundColor = 'green'; | |
85 if (event.target != dialog) { | |
86 testFailed('dialog was not targeted for a click event'); | |
87 dialog.style.backgroundColor = 'red'; | |
88 } | |
89 }); | |
90 | |
91 if (window.eventSender) { | |
92 nodes = [ 'document', 'body', 'div', 'dialog' ]; | |
93 nodes.map(function(node) { handledEvent[node] = false; }); | |
94 debug('Clicking on ancestor'); | |
95 clickOn(div); | |
96 shouldBeTrue('handledEvent.document'); | |
97 shouldBeFalse('handledEvent.body'); | |
98 shouldBeFalse('handledEvent.dialog'); | |
99 shouldBeFalse('handledEvent.div'); | |
100 handledEvent.document = false; | |
101 | |
102 debug('Clicking on dialog'); | |
103 clickOn(dialog); | |
104 shouldBeTrue('handledEvent.document'); | |
105 shouldBeTrue('handledEvent.body'); | |
106 shouldBeTrue('handledEvent.dialog'); | |
107 shouldBeTrue('handledEvent.div'); | |
108 } | |
109 </script> | |
110 </body> | |
111 </html> | |
OLD | NEW |