|
1 <!DOCTYPE HTML> |
|
2 <html> |
|
3 <!-- |
|
4 https://bugzilla.mozilla.org/show_bug.cgi?id=968148 |
|
5 --> |
|
6 <head> |
|
7 <title>Test for Bug 968148</title> |
|
8 <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> |
|
9 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> |
|
10 <style> |
|
11 .test { |
|
12 width: 20px; |
|
13 height: 20px; |
|
14 border: 1px solid black; |
|
15 -moz-user-select: none; |
|
16 } |
|
17 </style> |
|
18 </head> |
|
19 <body> |
|
20 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=968148">Mozilla Bug 968148</a> |
|
21 <p id="display"></p> |
|
22 <div id="content" style="display: none"> |
|
23 </div> |
|
24 <pre id="test"> |
|
25 <script type="application/javascript"> |
|
26 |
|
27 /** |
|
28 * Test for Bug 968148, test orignally copied from test_bug582771.html. |
|
29 * Mouse functionality converted to pointer and all steps duplicated in order to run them in parallel for two different pointer Id's |
|
30 **/ |
|
31 |
|
32 function ok(condition, msg) { |
|
33 parent.ok(condition, msg); |
|
34 } |
|
35 |
|
36 function is(a, b, msg) { |
|
37 parent.is(a, b, msg); |
|
38 } |
|
39 |
|
40 var test1d1; |
|
41 var test1d2; |
|
42 var test2d1; |
|
43 var test2d2; |
|
44 var test1d1pointermovecount = 0; |
|
45 var test1d2pointermovecount = 0; |
|
46 var test2d1pointermovecount = 0; |
|
47 var test2d2pointermovecount = 0; |
|
48 |
|
49 var test1d1pointerlostcapture = 0; |
|
50 var test1d2pointerlostcapture = 0; |
|
51 var test2d1pointerlostcapture = 0; |
|
52 var test2d2pointerlostcapture = 0; |
|
53 var test1d1pointergotcapture = 0; |
|
54 var test1d2pointergotcapture = 0; |
|
55 var test2d1pointergotcapture = 0; |
|
56 var test2d2pointergotcapture = 0; |
|
57 var test1PointerId = 1; |
|
58 var test2PointerId = 2; |
|
59 |
|
60 function sendPointerMove(el, id) { |
|
61 var rect = el.getBoundingClientRect(); |
|
62 var utils = SpecialPowers.getDOMWindowUtils(window); |
|
63 utils.sendPointerEvent('pointermove', rect.left + 5, rect.top + 5, 0, 0, 0, false, 0, SpecialPowers.Ci.nsIDOMMouseEvent.MOZ_SOURCE_TOUCH, id); |
|
64 } |
|
65 |
|
66 function sendPointerDown(el, id) { |
|
67 var rect = el.getBoundingClientRect(); |
|
68 var utils = SpecialPowers.getDOMWindowUtils(window); |
|
69 utils.sendPointerEvent('pointerdown', rect.left + 5, rect.top + 5, 0, 1, 0, false, 0, SpecialPowers.Ci.nsIDOMMouseEvent.MOZ_SOURCE_TOUCH, id); |
|
70 } |
|
71 |
|
72 function sendPointerUp(el, id) { |
|
73 var rect = el.getBoundingClientRect(); |
|
74 var utils = SpecialPowers.getDOMWindowUtils(window); |
|
75 utils.sendPointerEvent('pointerup', rect.left + 5, rect.top + 5, 0, 1, 0, false, 0, SpecialPowers.Ci.nsIDOMMouseEvent.MOZ_SOURCE_TOUCH, id); |
|
76 } |
|
77 |
|
78 function log(s) { |
|
79 document.getElementById("l").textContent += s + "\n"; |
|
80 } |
|
81 |
|
82 function test1d2Listener(e) { |
|
83 log(e.type + ", " + e.target.id); |
|
84 is(e.target, test1d2, "test1d2 should have got pointermove."); |
|
85 ++test1d2pointermovecount; |
|
86 } |
|
87 |
|
88 function test2d2Listener(e) { |
|
89 log(e.type + ", " + e.target.id); |
|
90 is(e.target, test2d2, "test2d2 should have got pointermove."); |
|
91 ++test2d2pointermovecount; |
|
92 } |
|
93 |
|
94 function test1d1DownListener(e) { |
|
95 log(e.type + ", " + e.target.id); |
|
96 test1d1.setPointerCapture(e.pointerId); |
|
97 } |
|
98 |
|
99 function test1d1MoveListener(e) { |
|
100 log(e.type + ", " + e.target.id); |
|
101 test1d2.setPointerCapture(e.pointerId); |
|
102 } |
|
103 |
|
104 function test2d1DownListener(e) { |
|
105 log(e.type + ", " + e.target.id); |
|
106 test2d1.setPointerCapture(e.pointerId); |
|
107 } |
|
108 |
|
109 function test2d1MoveListener(e) { |
|
110 log(e.type + ", " + e.target.id); |
|
111 test2d2.setPointerCapture(e.pointerId); |
|
112 } |
|
113 |
|
114 function test1d1PointerGotCapture(e) { |
|
115 log(e.type + ", " + e.target.id); |
|
116 ++test1d1pointergotcapture; |
|
117 } |
|
118 |
|
119 function test1d1PointerLostCapture(e) { |
|
120 log(e.type + ", " + e.target.id); |
|
121 ++test1d1pointerlostcapture; |
|
122 } |
|
123 |
|
124 function test2d1PointerGotCapture(e) { |
|
125 log(e.type + ", " + e.target.id); |
|
126 ++test2d1pointergotcapture; |
|
127 } |
|
128 |
|
129 function test2d1PointerLostCapture(e) { |
|
130 log(e.type + ", " + e.target.id); |
|
131 ++test2d1pointerlostcapture; |
|
132 } |
|
133 |
|
134 function test1d2PointerGotCapture(e) { |
|
135 log(e.type + ", " + e.target.id); |
|
136 ++test1d2pointergotcapture; |
|
137 } |
|
138 |
|
139 function test1d2PointerLostCapture(e) { |
|
140 log(e.type + ", " + e.target.id); |
|
141 ++test1d2pointerlostcapture; |
|
142 } |
|
143 |
|
144 function test2d2PointerGotCapture(e) { |
|
145 log(e.type + ", " + e.target.id); |
|
146 ++test2d2pointergotcapture; |
|
147 } |
|
148 |
|
149 function test2d2PointerLostCapture(e) { |
|
150 log(e.type + ", " + e.target.id); |
|
151 ++test2d2pointerlostcapture; |
|
152 } |
|
153 |
|
154 function test1d1PointerMoveListener(e) { |
|
155 log(e.type + ", " + e.target.id); |
|
156 ++test1d1pointermovecount; |
|
157 } |
|
158 |
|
159 function test2d1PointerMoveListener(e) { |
|
160 log(e.type + ", " + e.target.id); |
|
161 ++test2d1pointermovecount; |
|
162 } |
|
163 |
|
164 function runTests() { |
|
165 test1d1 = document.getElementById("test1d1"); |
|
166 test1d2 = document.getElementById("test1d2"); |
|
167 test2d1 = document.getElementById("test2d1"); |
|
168 test2d2 = document.getElementById("test2d2"); |
|
169 |
|
170 test1d2.addEventListener("pointermove", test1d2Listener, true); |
|
171 test2d2.addEventListener("pointermove", test2d2Listener, true); |
|
172 |
|
173 test1d1.addEventListener("gotpointercapture", test1d1PointerGotCapture, true); |
|
174 test1d1.addEventListener("lostpointercapture", test1d1PointerLostCapture, true); |
|
175 |
|
176 test2d1.addEventListener("gotpointercapture", test2d1PointerGotCapture, true); |
|
177 test2d1.addEventListener("lostpointercapture", test2d1PointerLostCapture, true); |
|
178 |
|
179 test1d2.addEventListener("gotpointercapture", test1d2PointerGotCapture, true); |
|
180 test1d2.addEventListener("lostpointercapture", test1d2PointerLostCapture, true); |
|
181 |
|
182 test2d2.addEventListener("gotpointercapture", test2d2PointerGotCapture, true); |
|
183 test2d2.addEventListener("lostpointercapture", test2d2PointerLostCapture, true); |
|
184 |
|
185 document.body.offsetLeft; |
|
186 sendPointerMove(test1d2, test1PointerId); |
|
187 sendPointerMove(test2d2, test2PointerId); |
|
188 is(test1d2pointermovecount, 1, "Should have got pointermove"); |
|
189 is(test2d2pointermovecount, 1, "Should have got pointermove"); |
|
190 |
|
191 // This shouldn't enable capturing, since we're not in a right kind of |
|
192 // event listener. |
|
193 sendPointerDown(test1d1, test1PointerId); |
|
194 sendPointerDown(test2d1, test2PointerId); |
|
195 |
|
196 sendPointerMove(test1d2, test1PointerId); |
|
197 sendPointerMove(test2d2, test2PointerId); |
|
198 |
|
199 sendPointerUp(test1d1, test1PointerId); |
|
200 sendPointerUp(test2d1, test2PointerId); |
|
201 |
|
202 is(test1d2pointermovecount, 2, "Should have got pointermove"); |
|
203 is(test2d2pointermovecount, 2, "Should have got pointermove"); |
|
204 |
|
205 test1d1.addEventListener("pointerdown", test1d1DownListener, true); |
|
206 test1d1.addEventListener("pointermove", test1d1PointerMoveListener, true); |
|
207 test2d1.addEventListener("pointerdown", test2d1DownListener, true); |
|
208 test2d1.addEventListener("pointermove", test2d1PointerMoveListener, true); |
|
209 |
|
210 sendPointerDown(test1d1, test1PointerId); |
|
211 sendPointerDown(test2d1, test2PointerId); |
|
212 sendPointerMove(test1d2, test1PointerId); |
|
213 sendPointerMove(test2d2, test2PointerId); |
|
214 is(test1d2pointermovecount, 2, "Shouldn't have got pointermove"); |
|
215 is(test1d1pointermovecount, 1, "Should have got pointermove"); |
|
216 is(test1d1pointergotcapture, 1, "Should have got pointergotcapture"); |
|
217 |
|
218 is(test2d2pointermovecount, 2, "Shouldn't have got pointermove"); |
|
219 is(test2d1pointermovecount, 1, "Should have got pointermove"); |
|
220 is(test2d1pointergotcapture, 1, "Should have got pointergotcapture"); |
|
221 |
|
222 sendPointerUp(test1d1, test1PointerId); |
|
223 sendPointerUp(test2d1, test2PointerId); |
|
224 test1d1.removeEventListener("pointerdown", test1d1DownListener, true); |
|
225 test1d1.removeEventListener("pointermove", test1d1PointerMoveListener, true); |
|
226 test2d1.removeEventListener("pointerdown", test2d1DownListener, true); |
|
227 test2d1.removeEventListener("pointermove", test2d1PointerMoveListener, true); |
|
228 |
|
229 // Nothing should be capturing the event. |
|
230 sendPointerMove(test1d2, test1PointerId); |
|
231 sendPointerMove(test2d2, test2PointerId); |
|
232 |
|
233 is(test1d2pointermovecount, 3, "Should have got pointermove"); |
|
234 is(test1d1pointerlostcapture, 1, "Should have got pointerlostcapture"); |
|
235 is(test2d2pointermovecount, 3, "Should have got pointermove"); |
|
236 is(test2d1pointerlostcapture, 1, "Should have got pointerlostcapture"); |
|
237 |
|
238 test1d1.addEventListener("pointermove", test1d1MoveListener, true); |
|
239 test2d1.addEventListener("pointermove", test2d1MoveListener, true); |
|
240 |
|
241 sendPointerDown(test1d1, test1PointerId); |
|
242 sendPointerDown(test2d1, test2PointerId); |
|
243 |
|
244 sendPointerMove(test1d1, test1PointerId); // This should call setPointerCapture to test1d2! |
|
245 sendPointerMove(test2d1, test2PointerId); // This should call setPointerCapture to test2d2! |
|
246 |
|
247 test1d1.removeEventListener("pointermove", test1d1MoveListener, true); |
|
248 test1d1.addEventListener("pointermove", test1d1PointerMoveListener, true); |
|
249 |
|
250 test2d1.removeEventListener("pointermove", test2d1MoveListener, true); |
|
251 test2d1.addEventListener("pointermove", test2d1PointerMoveListener, true); |
|
252 |
|
253 sendPointerMove(test1d1, test1PointerId); // This should send pointer event to test1d2. |
|
254 sendPointerMove(test2d1, test2PointerId); // This should send pointer event to test2d2. |
|
255 |
|
256 is(test1d1pointermovecount, 1, "Shouldn't have got pointermove"); |
|
257 is(test1d2pointermovecount, 4, "Should have got pointermove"); |
|
258 is(test1d2pointergotcapture, 1, "Should have got pointergotcapture"); |
|
259 |
|
260 is(test2d1pointermovecount, 1, "Shouldn't have got pointermove"); |
|
261 is(test2d2pointermovecount, 4, "Should have got pointermove"); |
|
262 is(test2d2pointergotcapture, 1, "Should have got pointergotcapture"); |
|
263 |
|
264 sendPointerUp(test1d1, test1PointerId); |
|
265 sendPointerUp(test2d1, test2PointerId); |
|
266 |
|
267 finishTest(); |
|
268 } |
|
269 |
|
270 function finishTest() { |
|
271 // Let window.onerror have a chance to fire |
|
272 setTimeout(function() { |
|
273 setTimeout(function() { |
|
274 window.parent.postMessage("SimpleTest.finish();", "*"); |
|
275 }, 0); |
|
276 }, 0); |
|
277 } |
|
278 |
|
279 window.onload = function () { |
|
280 SpecialPowers.pushPrefEnv({ |
|
281 "set": [ |
|
282 ["dom.w3c_pointer_events.enabled", true], |
|
283 ] |
|
284 }, runTests); |
|
285 } |
|
286 |
|
287 SimpleTest.waitForExplicitFinish(); |
|
288 |
|
289 </script> |
|
290 </pre> |
|
291 <div class="test" id="test1d1"> </div><br><div class="test" id="test1d2"> </div> |
|
292 <div class="test" id="test2d1"> </div><br><div class="test" id="test2d2"> </div> |
|
293 <pre id="l"></pre> |
|
294 </body> |
|
295 </html> |