Commit 4561642e authored by Navid Zolghadr's avatar Navid Zolghadr Committed by Commit Bot

Migrate pointerevents/touch-pointercancel.html to wpt

pointerevents/touch-pointercancel.html test verifies
the touch and pointer events interaction in single
and multi touch point cases when scrolling happens or
not. The single touch point portion is already tested
as part of
wpt/pointerevents/pointerevent_pointercancel_touch.html

The two finger interaction is not very well specified
and is tested as part of
wpt/pointerevents/compat/pointerevent_touch-action_two-finger_interaction.html

and that only is missing the pointerid checks that
this CL adds as well.

Change-Id: I3ee27866dddc02cb87b1082b5a4fe2f9e8ba9220
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2159577Reviewed-by: default avatarMustaq Ahmed <mustaq@chromium.org>
Commit-Queue: Navid Zolghadr <nzolghadr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#761123}
parent 718ab74b
......@@ -15,30 +15,14 @@
<script type="text/javascript" src="../pointerevent_support.js"></script>
<script type="text/javascript">
var event_log = [];
var active_pointers = 0;
var actions_promise;
var down_ids = new Set();
var release_ids = new Set();
function resetTestState() {
event_log = [];
active_pointers = 0;
}
function twoFingerDrag(target) {
return new test_driver.Actions()
.addPointer("touchPointer1", "touch")
.addPointer("touchPointer2", "touch")
.pointerMove(0, 0, {origin: target, sourceName: "touchPointer1"})
.pointerMove(10, 0, {origin: target, sourceName: "touchPointer2"})
.pointerDown({sourceName: "touchPointer1"})
.pointerDown({sourceName: "touchPointer2"})
.pointerMove(0, 10, {origin: target, sourceName: "touchPointer1"})
.pointerMove(10, 10, {origin: target, sourceName: "touchPointer2"})
.pointerMove(0, 20, {origin: target, sourceName: "touchPointer1"})
.pointerMove(10, 20, {origin: target, sourceName: "touchPointer2"})
.pause(100)
.pointerUp({sourceName: "touchPointer1"})
.pointerUp({sourceName: "touchPointer2"})
.send();
down_ids = new Set();
release_ids = new Set();
}
function run() {
......@@ -57,10 +41,11 @@
on_event(done, "click", function() {
test_pointer_events[current_test_index].step(function () {
assert_equals(active_pointers, 0);
assert_equals(down_ids.size, 2);
assert_equals(release_ids.size, 2);
assert_true([...down_ids].every(value => release_ids.has(value)));
assert_equals(event_log.join(", "), expected_events[current_test_index]);
});
event_log = [];
// Make sure the test finishes after all the input actions are completed.
actions_promise.then( () => {
......@@ -81,9 +66,9 @@
event_log.push(event.type + "@" + event.target.id);
if (event.type == "pointerdown") {
active_pointers++;
down_ids.add(event.pointerId);
} else {
active_pointers--;
release_ids.add(event.pointerId);
}
});
});
......
......@@ -296,6 +296,24 @@ function clickInTarget(pointerType, target) {
.send();
}
function twoFingerDrag(target) {
return new test_driver.Actions()
.addPointer("touchPointer1", "touch")
.addPointer("touchPointer2", "touch")
.pointerMove(0, 0, {origin: target, sourceName: "touchPointer1"})
.pointerMove(10, 0, {origin: target, sourceName: "touchPointer2"})
.pointerDown({sourceName: "touchPointer1"})
.pointerDown({sourceName: "touchPointer2"})
.pointerMove(0, 10, {origin: target, sourceName: "touchPointer1"})
.pointerMove(10, 10, {origin: target, sourceName: "touchPointer2"})
.pointerMove(0, 20, {origin: target, sourceName: "touchPointer1"})
.pointerMove(10, 20, {origin: target, sourceName: "touchPointer2"})
.pause(100)
.pointerUp({sourceName: "touchPointer1"})
.pointerUp({sourceName: "touchPointer2"})
.send();
}
function pointerDragInTarget(pointerType, target, direction) {
var x_delta = 0;
var y_delta = 0;
......
<!DOCTYPE HTML>
<script src="../../../resources/js-test.js"></script>
<style>
div.test {
margin: 10px;
width: 100px;
height: 200px;
overflow: scroll;
border: solid 1px;
float: left;
}
</style>
<div id="target" class="test"></div>
<div id="console"></div>
<script>
description("Verifies that pointercancel events are fired correctly on touch.");
var eventToPreventDefault = "";
function init() {
var eventList = ["pointerdown", "pointerup", "pointermove", "pointercancel", "pointerover", "pointerenter", "pointerout", "pointerleave",
"touchstart", "touchend", "touchmove", "touchcancel"];
eventList.forEach(function(eventName) {
document.getElementById("target").addEventListener(eventName, function(event) {
var idMsg;
if (event.type.startsWith("pointer"))
idMsg = ", pointerId=" + event.pointerId;
else {
idMsg = ", touchIds=";
touches = event.changedTouches;
for (var i = 0; i < touches.length; ++i) {
idMsg += touches[i].identifier;
};
}
var preventDefaultMsg = "";
if (event.type == eventToPreventDefault) {
event.preventDefault();
preventDefaultMsg = ", prevented default";
}
debug("Received " + event.type + idMsg + preventDefaultMsg);
});
});
}
function testSingleDrag(notifyStartOfTouchScroll) {
var rect = document.getElementById("target").getBoundingClientRect();
var x = rect.left + 50;
var y = rect.top + 50;
eventSender.addTouchPoint(x, y);
eventSender.touchStart();
eventSender.updateTouchPoint(0, x, y+50);
eventSender.touchMove();
if (notifyStartOfTouchScroll)
eventSender.notifyStartOfTouchScroll();
eventSender.updateTouchPoint(0, x, y+100);
eventSender.touchMove();
eventSender.updateTouchPoint(0, x, y+150);
eventSender.touchMove();
eventSender.releaseTouchPoint(0);
eventSender.touchEnd();
}
function testMultiDrag(notifyStartOfTouchScroll) {
var rect;
rect = document.getElementById("target").getBoundingClientRect();
var x0 = rect.left + 30;
var x1 = rect.left + 50;
var x2 = rect.left + 70;
var x3 = rect.left + 55;
var y = rect.top + 50;
eventSender.addTouchPoint(x0, y);
eventSender.addTouchPoint(x1, y);
eventSender.addTouchPoint(x2, y);
eventSender.touchStart();
y += 50;
eventSender.updateTouchPoint(0, x0, y);
eventSender.updateTouchPoint(1, x1, y);
eventSender.updateTouchPoint(2, x2, y);
eventSender.touchMove();
y += 50;
eventSender.updateTouchPoint(0, x0, y);
eventSender.updateTouchPoint(1, x1, y);
eventSender.updateTouchPoint(2, x2, y);
eventSender.touchMove();
if (notifyStartOfTouchScroll)
eventSender.notifyStartOfTouchScroll();
eventSender.addTouchPoint(x3, y);
eventSender.touchStart();
y += 50;
eventSender.updateTouchPoint(0, x0, y);
eventSender.updateTouchPoint(1, x1, y);
eventSender.updateTouchPoint(2, x2, y);
eventSender.updateTouchPoint(3, x3, y);
eventSender.touchMove();
eventSender.releaseTouchPoint(0);
eventSender.releaseTouchPoint(1);
eventSender.releaseTouchPoint(2);
eventSender.releaseTouchPoint(3);
eventSender.touchEnd();
}
function testMultiCancel() {
var rect;
rect = document.getElementById("target").getBoundingClientRect();
var x0 = rect.left + 30;
var x1 = rect.left + 50;
var x2 = rect.left + 70;
var y = rect.top + 50;
eventSender.addTouchPoint(x0, y);
eventSender.addTouchPoint(x1, y);
eventSender.addTouchPoint(x2, y);
eventSender.touchStart();
eventSender.cancelTouchPoint(2);
eventSender.touchCancel();
y += 50;
eventSender.updateTouchPoint(0, x0, y);
eventSender.updateTouchPoint(1, x2, y);
eventSender.touchMove();
eventSender.cancelTouchPoint(0);
eventSender.cancelTouchPoint(1);
eventSender.touchCancel();
}
function runTests() {
debug("--- single drag tests ---");
debug("");
debug("-- preventDefault on none, without notifyStartOfTouchScroll --");
eventToPreventDefault = "-none-";
testSingleDrag(false);
debug("");
debug("-- preventDefault on pointermove, without notifyStartOfTouchScroll --");
eventToPreventDefault = "pointermove";
testSingleDrag(false);
debug("");
debug("-- preventDefault on none, with notifyStartOfTouchScroll --");
eventToPreventDefault = "-none-";
testSingleDrag(true);
debug("");
debug("-- preventDefault on pointermove, with notifyStartOfTouchScroll --");
eventToPreventDefault = "pointermove";
testSingleDrag(true);
debug("");
debug("--- multi drag tests ---");
debug("");
debug("-- preventDefault on none, without notifyStartOfTouchScroll --");
eventToPreventDefault = "-none-";
testMultiDrag(false);
debug("");
debug("-- preventDefault on none, with notifyStartOfTouchScroll --");
eventToPreventDefault = "-none-";
testMultiDrag(true);
debug("");
debug("--- multi cancel tests ---");
debug("");
testMultiCancel();
debug("");
}
init();
if (window.eventSender)
runTests();
else
debug("This test requires eventSender");
</script>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment