OLD | NEW |
(Empty) | |
| 1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> |
| 2 <html> |
| 3 <head> |
| 4 <script src="../../../resources/js-test.js"></script> |
| 5 </head> |
| 6 <body> |
| 7 <p id="description"></p> |
| 8 <div id="target" style="padding: 10px; background-color: blue;"></div> |
| 9 <div id="console"></div> |
| 10 <script> |
| 11 description("Tests that events are received properly even when we never saw the
touchstart for the first finger (eg. was skipped by cc touch hit testing) - crbu
g.com/363321"); |
| 12 |
| 13 var event; |
| 14 var expectingStart = false; |
| 15 var expectingEnd = false; |
| 16 |
| 17 var target = document.getElementById('target'); |
| 18 var rect = target.getBoundingClientRect(); |
| 19 var targetX = rect.left + rect.width / 2; |
| 20 var targetY = rect.top + rect.height / 2; |
| 21 |
| 22 window.addEventListener('touchstart', function(e) { |
| 23 if (!expectingStart) { |
| 24 testFailed('Got unexpected touchstart event'); |
| 25 return; |
| 26 } |
| 27 expectingStart = false; |
| 28 event = e; |
| 29 |
| 30 shouldBe('event.target', 'target'); |
| 31 |
| 32 // Touch ID 0 is the one we never got a touchstart for, so it should |
| 33 // be targetted at the document. |
| 34 shouldBe('event.touches.length', '2'); |
| 35 shouldBe('event.touches[0].identifier', '0'); |
| 36 shouldBe('event.touches[0].pageX', '12'); |
| 37 shouldBe('event.touches[0].pageY', '0'); |
| 38 shouldBe('event.touches[0].target', 'document'); |
| 39 |
| 40 // Touch ID 1 should be the new touch. |
| 41 shouldBe('event.touches[1].identifier', '1'); |
| 42 shouldBe('event.touches[1].pageX', 'targetX'); |
| 43 shouldBe('event.touches[1].pageY', 'targetY'); |
| 44 shouldBe('event.touches[1].target', 'target'); |
| 45 |
| 46 shouldBe('event.changedTouches.length', '1'); |
| 47 shouldBe('event.changedTouches[0].identifier', '1'); |
| 48 |
| 49 shouldBe('event.targetTouches.length', '1'); |
| 50 shouldBe('event.targetTouches[0].identifier', '1'); |
| 51 }); |
| 52 |
| 53 window.addEventListener('touchmove', function(e) { |
| 54 testFailed('Got unexpected touchmove event'); |
| 55 }); |
| 56 |
| 57 window.addEventListener('touchend', function(e) { |
| 58 if (!expectingEnd) { |
| 59 testFailed('Got unexpected touchstart event'); |
| 60 return; |
| 61 } |
| 62 expectingEnd = false; |
| 63 event = e; |
| 64 |
| 65 shouldBe('event.target', 'target'); |
| 66 |
| 67 shouldBe('event.touches.length', '0'); |
| 68 |
| 69 shouldBe('event.changedTouches.length', '1'); |
| 70 shouldBe('event.changedTouches[0].identifier', '1'); |
| 71 shouldBe('event.changedTouches[0].pageX', 'targetX'); |
| 72 shouldBe('event.changedTouches[0].pageY', 'targetY'); |
| 73 shouldBe('event.changedTouches[0].target', 'target'); |
| 74 |
| 75 shouldBe('event.targetTouches.length', '0'); |
| 76 }); |
| 77 |
| 78 if (document.elementFromPoint(targetX, targetY) != target) { |
| 79 testFailed('Failed to hit expected target at ' + targetX + ',' + targetY); |
| 80 } else if (!window.eventSender) { |
| 81 testFailed('This test requires eventSender'); |
| 82 } else { |
| 83 eventSender.clearTouchPoints(); |
| 84 |
| 85 // First touch point is outside our target, but we never actually |
| 86 // get a touchstart event sent to the renderer for it. |
| 87 eventSender.addTouchPoint(10, 0); |
| 88 eventSender.updateTouchPoint(0, 12, 0); |
| 89 |
| 90 // Second point is on our target and we expect touchstart |
| 91 eventSender.addTouchPoint(targetX, targetY); |
| 92 debug('Sending touchstart event.'); |
| 93 expectingStart = true; |
| 94 eventSender.touchStart(); |
| 95 if (expectingStart) |
| 96 testFailed("Didn't receive expected touchstart event"); |
| 97 debug(''); |
| 98 |
| 99 // Make sure we don't get any events (or crash) if we receive a move or |
| 100 // end for just the first touch point. |
| 101 debug('Sending touchmove and touchend for unrelated touch point.'); |
| 102 eventSender.updateTouchPoint(0, 13, 0); |
| 103 eventSender.touchMove(); |
| 104 eventSender.releaseTouchPoint(0); |
| 105 eventSender.touchEnd(); |
| 106 debug(''); |
| 107 |
| 108 // If the 2nd touch point lifts, we get an event showing just that change. |
| 109 debug('Sending touchend.'); |
| 110 eventSender.releaseTouchPoint(0); |
| 111 expectingEnd = true; |
| 112 eventSender.touchEnd(); |
| 113 if (expectingEnd) |
| 114 testFailed("Didn't receive expected touchend event"); |
| 115 debug(''); |
| 116 } |
| 117 </script> |
| 118 </body> |
| 119 </html> |
| 120 |
OLD | NEW |