dom/events/test/test_bug741666.html

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 <!DOCTYPE HTML>
     2 <html>
     3 <!--
     4 https://bugzilla.mozilla.org/show_bug.cgi?id=741666
     5 -->
     6 <head>
     7   <title>Test for Bug 741666</title>
     8   <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
     9   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
    10 </head>
    11 <body>
    12 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=741666">Mozilla Bug 741666</a>
    13 <p id="display"></p>
    14 <div id="content" style="display: none">
    16 </div>
    17 <pre id="test">
    18 <script class="testbody" type="application/javascript;version=1.8">
    20 /** Test for Bug 306008 - Touch events with a reference held should retain their touch lists **/
    22 let tests = [], testTarget, parent;
    24 let touch = {
    25   id: 0,
    26   point: {x: 0, y: 0},
    27   radius: {x: 0, y: 0},
    28   rotation: 0,
    29   force: 0.5,
    30   target: null
    31 }
    33 function nextTest() {
    34   if (tests.length)
    35     SimpleTest.executeSoon(tests.shift());
    36 }
    38 function checkEvent(aFakeEvent, aTouches) {
    39   return function(aEvent, aTrusted) {
    40     is(aFakeEvent.ctrlKey, aEvent.ctrlKey, "Correct ctrlKey");
    41     is(aFakeEvent.altKey, aEvent.altKey, "Correct altKey");
    42     is(aFakeEvent.shiftKey, aEvent.shiftKey, "Correct shiftKey");
    43     is(aFakeEvent.metaKey, aEvent.metaKey, "Correct metaKey");
    44     is(aEvent.isTrusted, aTrusted, "Event is trusted");
    45     checkTouches(aFakeEvent[aTouches], aEvent[aTouches]);
    46   }
    47 }
    49 function checkTouches(aTouches1, aTouches2) {
    50   is(aTouches1.length, aTouches2.length, "Correct touches length");
    51   for (var i = 0; i < aTouches1.length; i++) {
    52     checkTouch(aTouches1[i], aTouches2[i]);
    53   }
    54 }
    56 function checkTouch(aFakeTouch, aTouch) {
    57   is(aFakeTouch.identifier, aTouch.identifier, "Touch has correct identifier");
    58   is(aFakeTouch.target, aTouch.target, "Touch has correct target");
    59   is(aFakeTouch.page.x, aTouch.pageX, "Touch has correct pageX");
    60   is(aFakeTouch.page.y, aTouch.pageY, "Touch has correct pageY");
    61   is(aFakeTouch.page.x + Math.round(window.mozInnerScreenX), aTouch.screenX, "Touch has correct screenX");
    62   is(aFakeTouch.page.y + Math.round(window.mozInnerScreenY), aTouch.screenY, "Touch has correct screenY");
    63   is(aFakeTouch.page.x, aTouch.clientX, "Touch has correct clientX");
    64   is(aFakeTouch.page.y, aTouch.clientY, "Touch has correct clientY");
    65   is(aFakeTouch.radius.x, aTouch.radiusX, "Touch has correct radiusX");
    66   is(aFakeTouch.radius.y, aTouch.radiusY, "Touch has correct radiusY");
    67   is(aFakeTouch.rotationAngle, aTouch.rotationAngle, "Touch has correct rotationAngle");
    68   is(aFakeTouch.force, aTouch.force, "Touch has correct force");
    69 }
    71 function sendTouchEvent(windowUtils, aType, aEvent, aModifiers) {
    72   var ids = [], xs=[], ys=[], rxs = [], rys = [],
    73       rotations = [], forces = [];
    75   for (var touchType of ["touches", "changedTouches", "targetTouches"]) {
    76     for (var i = 0; i < aEvent[touchType].length; i++) {
    77       if (ids.indexOf(aEvent[touchType][i].identifier) == -1) {
    78         ids.push(aEvent[touchType][i].identifier);
    79         xs.push(aEvent[touchType][i].page.x);
    80         ys.push(aEvent[touchType][i].page.y);
    81         rxs.push(aEvent[touchType][i].radius.x);
    82         rys.push(aEvent[touchType][i].radius.y);
    83         rotations.push(aEvent[touchType][i].rotationAngle);
    84         forces.push(aEvent[touchType][i].force);
    85       }
    86     }
    87   }
    88   return windowUtils.sendTouchEvent(aType,
    89                                     ids, xs, ys, rxs, rys,
    90                                     rotations, forces,
    91                                     ids.length, aModifiers, 0);
    92 }
    94 function touchEvent(aOptions) {
    95   if (!aOptions) {
    96     aOptions = {};
    97   }
    98   this.ctrlKey = aOptions.ctrlKey || false;
    99   this.altKey = aOptions.altKey || false;
   100   this.shiftKey = aOptions.shiftKey || false;
   101   this.metaKey = aOptions.metaKey || false;
   102   this.touches = aOptions.touches || [];
   103   this.targetTouches = aOptions.targetTouches || [];
   104   this.changedTouches = aOptions.changedTouches || [];
   105 }
   107 function testtouch(aOptions) {
   108   if (!aOptions)
   109     aOptions = {};
   110   this.identifier = aOptions.identifier || 0;
   111   this.target = aOptions.target || 0;
   112   this.page = aOptions.page || {x: 0, y: 0};
   113   this.radius = aOptions.radius || {x: 0, y: 0};
   114   this.rotationAngle = aOptions.rotationAngle || 0;
   115   this.force = aOptions.force || 1;
   116 }
   118 function testPreventDefault(name) {
   119   let cwu = SpecialPowers.getDOMWindowUtils(window);
   120   let target = document.getElementById("testTarget");
   121   let bcr = target.getBoundingClientRect();
   123   let touch1 = new testtouch({
   124     page: {x: Math.round(bcr.left + bcr.width/2),
   125            y: Math.round(bcr.top  + bcr.height/2)},
   126     target: target
   127   });
   129   let event = new touchEvent({
   130     touches: [touch1],
   131     targetTouches: [touch1],
   132     changedTouches: [touch1]
   133   });
   135   // test touchstart event fires correctly
   136   var checkTouches = checkEvent(event, "touches");
   137   var checkTargetTouches = checkEvent(event, "targetTouches");
   139   /* This is the heart of the test. Verify that the touch event
   140      looks correct both in and outside of a setTimeout */
   141   window.addEventListener("touchstart", function(firedEvent) {
   142     checkTouches(firedEvent, true);
   143     setTimeout(function() {
   144       checkTouches(firedEvent, true);
   145       checkTargetTouches(firedEvent, true);
   147       event.touches = [];
   148       event.targetTouches = [];
   149       sendTouchEvent(cwu, "touchend", event, 0);
   151       nextTest();
   152     }, 0);
   153   }, false);
   154   sendTouchEvent(cwu, "touchstart", event, 0);
   155 }
   157 function doTest() {
   158   tests.push(testPreventDefault);
   160   tests.push(function() {
   161     SimpleTest.finish();
   162   });
   164   nextTest();
   165 }
   167 SimpleTest.waitForExplicitFinish();
   168 addLoadEvent(doTest);
   170 </script>
   171 </pre>
   172 <div id="parent">
   173   <span id="testTarget" style="padding: 5px; border: 1px solid black;">testTarget</span>
   174 </div>
   175 </body>
   176 </html>

mercurial