Index: LayoutTests/fast/events/pointerevents/touch-pointer-events.html |
diff --git a/LayoutTests/fast/events/pointerevents/touch-pointer-events.html b/LayoutTests/fast/events/pointerevents/touch-pointer-events.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4e2b79066e14983401dafea83a5e2ffd57dc87d2 |
--- /dev/null |
+++ b/LayoutTests/fast/events/pointerevents/touch-pointer-events.html |
@@ -0,0 +1,191 @@ |
+<!DOCTYPE HTML> |
+<script src="../../../resources/js-test.js"></script> |
+<style> |
+div { |
+ margin: 10px; |
+ padding: 50px; |
+ float: left; |
+} |
+#console { |
+ padding: 0px; |
+ float: none; |
+} |
+</style> |
+ |
+<div id="grey" style="background-color:grey"> |
+ <div id="lightgreen" style="background-color:lightgreen"> |
+ <div id="green" style="background-color:green;"> |
+ </div> |
+ </div> |
+</div> |
+ |
+<div id="console"></div> |
+ |
+<script> |
+description("Verifies that tapping on an element fires appropriate pointer events."); |
+ |
+var preventDefault; |
+var logAllEvents; |
+var receivedPEsAtTarget = []; |
+ |
+function getPhaseString(event) { |
+ return event.eventPhase == Event.NONE ? "none" : |
+ event.eventPhase == Event.CAPTURING_PHASE ? "capturing" : |
+ event.eventPhase == Event.AT_TARGET ? "target" : |
+ event.eventPhase == Event.BUBBLING_PHASE ? "bubbling" : |
+ "error"; |
+} |
+ |
+function init() { |
+ ["grey", "lightgreen", "green"].forEach(function(id) { |
+ var targetDiv = document.getElementById(id); |
+ |
+ ["touchstart", "touchend", "touchmove"].forEach(function(eventName) { |
+ targetDiv.addEventListener(eventName, function(event) { |
+ if (logAllEvents) |
+ debug(id + " received " + event.type + " at phase=" + getPhaseString(event)); |
+ }); |
+ }); |
+ |
+ ["pointerdown", "pointerup", "pointermove"].forEach(function(eventName) { |
+ targetDiv.addEventListener(eventName, function(event) { |
+ if (event.eventPhase == Event.AT_TARGET) |
+ receivedPEsAtTarget.push(event); |
+ if (logAllEvents || event.eventPhase == Event.AT_TARGET) |
+ debug(id + " received " + event.type + " at phase=" + getPhaseString(event)); |
+ if (preventDefault) |
+ event.preventDefault(); |
+ }); |
+ }); |
+ |
+ }); |
+} |
+ |
+function testEventSequences(x, y) { |
+ eventSender.addTouchPoint(x, y); |
+ eventSender.touchStart(); |
+ |
+ eventSender.updateTouchPoint(0, x+20, y+20); |
+ eventSender.touchMove(); |
+ |
+ eventSender.releaseTouchPoint(0); |
+ eventSender.touchEnd(); |
+} |
+ |
+function testPEParamsSingleTouch(x, y) { |
+ receivedPEsAtTarget = []; |
+ |
+ eventSender.addTouchPoint(x, y); |
+ eventSender.touchStart(); |
+ shouldBeTrue("receivedPEsAtTarget[0].isPrimary"); |
+ shouldBeEqualToNumber("receivedPEsAtTarget[0].button", 0); |
+ shouldBeEqualToNumber("receivedPEsAtTarget[0].buttons", 1); |
+ shouldBeEqualToNumber("receivedPEsAtTarget[0].clientX", x); |
+ shouldBeEqualToNumber("receivedPEsAtTarget[0].clientY", y); |
+ |
+ eventSender.updateTouchPoint(0, x+20, y+20); |
+ eventSender.touchMove(); |
+ shouldBeTrue("receivedPEsAtTarget[1].isPrimary"); |
+ shouldBeEqualToNumber("receivedPEsAtTarget[1].button", 0); |
+ shouldBeEqualToNumber("receivedPEsAtTarget[1].buttons", 1); |
+ shouldBeEqualToNumber("receivedPEsAtTarget[1].clientX", x+20); |
+ shouldBeEqualToNumber("receivedPEsAtTarget[1].clientY", y+20); |
+ |
+ eventSender.releaseTouchPoint(0); |
+ eventSender.touchEnd(); |
+ shouldBeTrue("receivedPEsAtTarget[2].isPrimary"); |
+ shouldBeEqualToNumber("receivedPEsAtTarget[2].button", 0); |
+ shouldBeEqualToNumber("receivedPEsAtTarget[2].buttons", 0); |
+ |
+ shouldBeEqualToNumber("receivedPEsAtTarget.length", 3); |
+} |
+ |
+function testPEParamsMultiTouch(x, y) { |
+ receivedPEsAtTarget = []; |
+ |
+ eventSender.addTouchPoint(x, y); |
+ eventSender.touchStart(); |
+ shouldBeTrue("receivedPEsAtTarget[0].isPrimary"); |
+ var idFirst = receivedPEsAtTarget[0].pointerId; |
+ debug("receivedPEsAtTarget[0].pointerId=" + idFirst) |
+ |
+ eventSender.addTouchPoint(x+10, y+10); |
+ eventSender.touchStart(); |
+ shouldBeFalse("receivedPEsAtTarget[1].isPrimary"); |
+ var idSecond = receivedPEsAtTarget[1].pointerId; |
+ debug("receivedPEsAtTarget[1].pointerId=" + idSecond) |
+ |
+ eventSender.updateTouchPoint(1, x+20, y+20); |
+ eventSender.touchMove(); |
+ shouldBeFalse("receivedPEsAtTarget[2].isPrimary"); |
+ shouldBeEqualToNumber("receivedPEsAtTarget[2].pointerId", idSecond); |
+ |
+ eventSender.releaseTouchPoint(0); |
+ eventSender.touchEnd(); |
+ shouldBeTrue("receivedPEsAtTarget[3].isPrimary"); |
+ shouldBeEqualToNumber("receivedPEsAtTarget[3].pointerId", idFirst); |
+ |
+ eventSender.updateTouchPoint(0, x+10, y+10); |
+ eventSender.touchMove(); |
+ shouldBeFalse("receivedPEsAtTarget[4].isPrimary"); |
+ shouldBeEqualToNumber("receivedPEsAtTarget[4].pointerId", idSecond); |
+ |
+ eventSender.addTouchPoint(x, y); |
+ eventSender.touchStart(); |
+ shouldBeFalse("receivedPEsAtTarget[5].isPrimary"); |
+ var idThird = receivedPEsAtTarget[5].pointerId; |
+ debug("receivedPEsAtTarget[5].pointerId=" + idThird) |
+ |
+ eventSender.releaseTouchPoint(0); |
+ eventSender.touchEnd(); |
+ shouldBeFalse("receivedPEsAtTarget[6].isPrimary"); |
+ shouldBeEqualToNumber("receivedPEsAtTarget[6].pointerId", idSecond); |
+ |
+ eventSender.releaseTouchPoint(0); |
+ eventSender.touchEnd(); |
+ shouldBeFalse("receivedPEsAtTarget[7].isPrimary"); |
+ shouldBeEqualToNumber("receivedPEsAtTarget[7].pointerId", idThird); |
+ |
+ eventSender.addTouchPoint(x, y); |
+ eventSender.touchStart(); |
+ shouldBeTrue("receivedPEsAtTarget[8].isPrimary"); |
+ |
+ shouldBeEqualToNumber("receivedPEsAtTarget.length", 9); |
+} |
+ |
+function runTests() { |
+ var rect = document.getElementById("green").getBoundingClientRect(); |
+ var x = rect.left + 10; |
+ var y = rect.top + 10; |
+ |
+ logAllEvents = true; |
+ preventDefault = false; |
+ |
+ debug("--- test PE+TE event sequences without preventDefault ---"); |
+ testEventSequences(x, y); |
+ debug(""); |
+ |
+ preventDefault = true; |
+ |
+ debug("--- test PE+TE event sequences with PE preventDefault ---"); |
+ testEventSequences(x, y); |
+ debug(""); |
+ |
+ logAllEvents = false; |
+ |
+ debug("--- test PE params for single-touch ---"); |
+ testPEParamsSingleTouch(x, y); |
+ debug(""); |
+ |
+ debug("--- test PE isPrimary values ---"); |
+ testPEParamsMultiTouch(x, y); |
+ debug(""); |
+} |
+ |
+init(); |
+if (window.eventSender) |
+ runTests(); |
+else |
+ debug("This test requires eventSender"); |
+ |
+</script> |