test_getCoalescedEvents_touch.html (4709B)
1 <!DOCTYPE HTML> 2 <html> 3 <!-- 4 https://bugzilla.mozilla.org/show_bug.cgi?id=1511231 5 --> 6 <head> 7 <meta charset="utf-8"> 8 <title>Test for Bug 1511231</title> 9 <script src="/tests/SimpleTest/EventUtils.js"></script> 10 <script src="/tests/SimpleTest/SimpleTest.js"></script> 11 <script src="/tests/gfx/layers/apz/test/mochitest/apz_test_native_event_utils.js"></script> 12 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 13 </head> 14 <body> 15 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1303957">Mozilla Bug 1511231</a> 16 <p id="display"></p> 17 <div id="target0" style="margin: 50px; width: 50px; height: 50px; background: green"></div> 18 <script type="text/javascript"> 19 /** Test for Bug 1511231 */ 20 SimpleTest.waitForExplicitFinish(); 21 22 if (!window.opener) { 23 // the utils function in apz can't not be used in remote iframe, so run the 24 // test in a new tab. 25 info("run tests in a new tab"); 26 window.open("test_getCoalescedEvents_touch.html"); 27 } else { 28 function runTests() { 29 let target0 = window.document.getElementById("target0"); 30 let utils = SpecialPowers.getDOMWindowUtils(window); 31 utils.advanceTimeAndRefresh(0); 32 33 SimpleTest.executeSoon(async () => { 34 // Flush all pending touch events before synthesizing events. 35 36 let eventCount = 0; 37 target0.addEventListener("pointermove", function handler(ev) { 38 eventCount++; 39 if (eventCount == 1) { 40 // Ignore the first pointermove event since the first touch event won't 41 // be coalesced. 42 is(ev.getCoalescedEvents().length, 1, 43 "Coalesced events should be 1 for the first touchmove event"); 44 return; 45 } 46 47 let length = ev.getCoalescedEvents().length; 48 ok(length >= 1, "Coalesced events should >= 1, got " + length); 49 50 let rect = target0.getBoundingClientRect(); 51 let prevOffsetX = 0; 52 let prevOffsetY = 0; 53 54 for (let i = 0; i < length; ++i) { 55 let coalescedEvent = ev.getCoalescedEvents()[i]; 56 opener.isnot(coalescedEvent.timeStamp, 0, "getCoalescedEvents()[" + i + "].timeStamp"); 57 opener.is(coalescedEvent.type, "pointermove", "getCoalescedEvents()[" + i + "].type"); 58 opener.is(coalescedEvent.pointerId, ev.pointerId, "getCoalescedEvents()[" + i + "].pointerId"); 59 opener.is(coalescedEvent.pointerType, ev.pointerType, "getCoalescedEvents()[" + i + "].pointerType"); 60 opener.is(coalescedEvent.isPrimary, ev.isPrimary, "getCoalescedEvents()[" + i + "].isPrimary"); 61 opener.is(coalescedEvent.target, ev.target, "getCoalescedEvents()[" + i + "].target"); 62 opener.is(coalescedEvent.currentTarget, null, "getCoalescedEvents()[" + i + "].currentTarget"); 63 opener.is(coalescedEvent.eventPhase, Event.NONE, "getCoalescedEvents()[" + i + "].eventPhase"); 64 opener.is(coalescedEvent.cancelable, false, "getCoalescedEvents()[" + i + "].cancelable"); 65 opener.is(coalescedEvent.bubbles, false, "getCoalescedEvents()[" + i + "].bubbles"); 66 67 opener.ok(coalescedEvent.offsetX >= prevOffsetX, "getCoalescedEvents()[" + i + "].offsetX = " + coalescedEvent.offsetX); 68 opener.ok(coalescedEvent.offsetX >= 10 && coalescedEvent.offsetX <= 40, "expected offsetX"); 69 70 opener.ok(coalescedEvent.offsetY >= prevOffsetY, "getCoalescedEvents()[" + i + "].offsetY = " + coalescedEvent.offsetY); 71 opener.ok(coalescedEvent.offsetY >= 10 && coalescedEvent.offsetY <= 40, "expected offsetY"); 72 73 prevOffsetX = coalescedEvent.offsetX; 74 prevOffsetY = coalescedEvent.offsetY; 75 76 let x = rect.left + prevOffsetX; 77 let y = rect.top + prevOffsetY; 78 // coordinates may change slightly due to rounding 79 opener.ok((coalescedEvent.clientX <= x+2) && (coalescedEvent.clientX >= x-2), "getCoalescedEvents()[" + i + "].clientX"); 80 opener.ok((coalescedEvent.clientY <= y+2) && (coalescedEvent.clientY >= y-2), "getCoalescedEvents()[" + i + "].clientY"); 81 } 82 83 target0.removeEventListener("pointermove", handler); 84 }); 85 86 target0.addEventListener("pointerup", (ev) => { 87 utils.restoreNormalRefresh(); 88 opener.SimpleTest.finish(); 89 window.close(); 90 }, { once: true }); 91 92 let positions = []; 93 for (let i = 10; i <= 40; i+=5) { 94 positions.push([{ x: i, y: i }]); 95 } 96 97 await synthesizeNativeTouchSequences(target0, positions); 98 }); 99 } 100 101 SimpleTest.waitForFocus(() => { 102 SpecialPowers.pushPrefEnv({"set": [ 103 ["dom.events.coalesce.touchmove", true], 104 ["dom.events.compress.touchmove", false], 105 ]}, runTests); 106 }); 107 } 108 109 </script> 110 </body> 111 </html>