diff options
Diffstat (limited to '')
-rw-r--r-- | layout/base/tests/test_bug993936.html | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/layout/base/tests/test_bug993936.html b/layout/base/tests/test_bug993936.html new file mode 100644 index 0000000000..5325b66a22 --- /dev/null +++ b/layout/base/tests/test_bug993936.html @@ -0,0 +1,164 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=993936 +--> +<head> + <meta charset="utf-8"> + <title>Test for Bug 993936</title> + <script src="/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> + <script type="application/javascript"> + + /** Test for Bug 993936 **/ + +var currentId = 0; +var evictedTouchesCount = 0; + +function testtouch(aOptions) { + if (!aOptions) + aOptions = {}; + this.identifier = aOptions.identifier || 0; + this.target = aOptions.target || 0; + this.page = aOptions.page || {x: 0, y: 0}; + this.radius = aOptions.radius || {x: 0, y: 0}; + this.rotationAngle = aOptions.rotationAngle || 0; + this.force = aOptions.force || 1; +} + +function touchEvent(aOptions) { + if (!aOptions) { + aOptions = {}; + } + this.ctrlKey = aOptions.ctrlKey || false; + this.altKey = aOptions.altKey || false; + this.shiftKey = aOptions.shiftKey || false; + this.metaKey = aOptions.metaKey || false; + this.touches = aOptions.touches || []; + this.targetTouches = aOptions.targetTouches || []; + this.changedTouches = aOptions.changedTouches || []; +} + +function sendTouchEvent(windowUtils, aType, aEvent, aModifiers) { + var ids = [], xs=[], ys=[], rxs = [], rys = [], + rotations = [], forces = [], tiltXs = [], tiltYs = [], twists = []; + + for (var touchType of ["touches", "changedTouches", "targetTouches"]) { + for (var i = 0; i < aEvent[touchType].length; i++) { + if (!ids.includes(aEvent[touchType][i].identifier)) { + ids.push(aEvent[touchType][i].identifier); + xs.push(aEvent[touchType][i].page.x); + ys.push(aEvent[touchType][i].page.y); + rxs.push(aEvent[touchType][i].radius.x); + rys.push(aEvent[touchType][i].radius.y); + rotations.push(aEvent[touchType][i].rotationAngle); + forces.push(aEvent[touchType][i].force); + tiltXs.push(0); + tiltYs.push(0); + twists.push(0); + } + } + } + return windowUtils.sendTouchEvent(aType, + ids, xs, ys, rxs, rys, + rotations, forces, tiltXs, tiltYs, twists, + aModifiers, 0); +} + +function getSingleTouchEventForTarget(target, cwu) { + currentId++; + var bcr = target.getBoundingClientRect(); + var touch = new testtouch({ + page: {x: Math.round(bcr.left + bcr.width/2), + y: Math.round(bcr.top + bcr.height/2)}, + target: target, + identifier: currentId, + }); + var event = new touchEvent({ + touches: [touch], + targetTouches: [touch], + changedTouches: [touch] + }); + return event; +} + +function getMultiTouchEventForTarget(target, cwu) { + currentId++; + var bcr = target.getBoundingClientRect(); + var touch1 = new testtouch({ + page: {x: Math.round(bcr.left + bcr.width/2), + y: Math.round(bcr.top + bcr.height/2)}, + target: target, + identifier: currentId, + }); + currentId++; + var touch2 = new testtouch({ + page: {x: Math.round(bcr.left + bcr.width), + y: Math.round(bcr.top + bcr.height)}, + target: target, + identifier: currentId, + }); + var event = new touchEvent({ + touches: [touch1, touch2], + targetTouches: [touch1, touch2], + changedTouches: [touch1, touch2] + }); + return event; +} + +function runTests() { + var cwu = SpecialPowers.getDOMWindowUtils(window); + + var event1 = getMultiTouchEventForTarget(d0, cwu); + sendTouchEvent(cwu, "touchstart", event1, 0); + sendTouchEvent(cwu, "touchmove", event1, 0); + is(evictedTouchesCount, 0, "Still no evicted touches"); + + var event2 = getSingleTouchEventForTarget(d0, cwu); + sendTouchEvent(cwu, "touchstart", event2, 0); + + // By now we should get touchend event + ok(evictedTouchesCount > 0, "Got evicted touch"); + + finishTest(); +} + +function finishTest() { + // Let window.onerror have a chance to fire + setTimeout(function() { + SimpleTest.finish(); + }, 0); +} + +SimpleTest.waitForExplicitFinish(); + + </script> +</head> +<body> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=993936">Mozilla Bug 993936</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +</pre> +<div id="d0"> + Test div +</div> + +<script> +var d0 = document.getElementById("d0"); + +d0.addEventListener("touchend", function(ev) { + evictedTouchesCount++; +}); + +window.onload = function () { + setTimeout(function() { + runTests(); + }, 0); +} + +</script> +</body> +</html> |