Skip to content

Commit 8d423fc

Browse files
Peng Zhouchromium-wpt-export-bot
authored andcommitted
Automate pointerevent-drag-interaction WPT test
This CL converts the manual pointerevent-drag-interaction test to an automated test using test_driver. This CL has no behavior changes. Bug: 40727316 Change-Id: I520aa36cff55b28930616256a3cc4223671ae55b Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7292485 Reviewed-by: Kent Tamura <[email protected]> Commit-Queue: Mustaq Ahmed <[email protected]> Reviewed-by: Mustaq Ahmed <[email protected]> Cr-Commit-Position: refs/heads/main@{#1564358}
1 parent 3af8623 commit 8d423fc

File tree

2 files changed

+123
-103
lines changed

2 files changed

+123
-103
lines changed

pointerevents/html/pointerevent_drag_interaction-manual.html

Lines changed: 0 additions & 103 deletions
This file was deleted.
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
<!DOCTYPE html>
2+
<meta charset="utf-8">
3+
<meta name="viewport" content="width=device-width">
4+
<meta name="timeout" content="long">
5+
<title>Pointer Events interaction with drag and drop</title>
6+
<link rel="author" href="mailto:[email protected]">
7+
<link rel="help" href="https://w3c.github.io/pointerevents/">
8+
<link rel="stylesheet" type="text/css" href="pointerevent_styles.css">
9+
<script src="/resources/testharness.js"></script>
10+
<script src="/resources/testharnessreport.js"></script>
11+
<script src="/resources/testdriver.js"></script>
12+
<script src="/resources/testdriver-actions.js"></script>
13+
<script src="/resources/testdriver-vendor.js"></script>
14+
<script src="pointerevent_support.js"></script>
15+
16+
<div id="testContainer">
17+
<div draggable="true" id="target0"></div>
18+
<div id="target1"></div>
19+
</div>
20+
21+
<script>
22+
let received_events = [];
23+
24+
function reset() {
25+
received_events = [];
26+
// Use ESC to cancel drag session.
27+
const Escape = '\uE00C';
28+
return new test_driver.Actions()
29+
.keyDown(Escape)
30+
.keyUp(Escape)
31+
.send();
32+
}
33+
34+
function performDrag() {
35+
return new test_driver.Actions()
36+
.addPointer('pointer-drag', 'mouse')
37+
.pointerMove(0, 0, { origin: target0 })
38+
.pointerDown()
39+
.pointerMove(10, 10, { origin: target0 })
40+
.pointerMove(0, 0, { origin: target1 })
41+
.pause(100)
42+
.pointerUp()
43+
.send();
44+
}
45+
46+
function on(t, target, eventName, handler) {
47+
target.addEventListener(eventName, handler);
48+
t.add_cleanup(() => target.removeEventListener(eventName, handler));
49+
}
50+
51+
function trackEvents(t, target, eventNames) {
52+
eventNames.forEach(name => {
53+
on(t, target, name, e => received_events.push(e.type + '@' + target.id));
54+
});
55+
}
56+
57+
promise_test(async t => {
58+
t.add_cleanup(reset);
59+
60+
trackEvents(t, target0, ['pointerdown', 'mousedown', 'dragstart', 'pointercancel']);
61+
const pointerCancelPromise = new Promise(resolve => {
62+
on(t, target0, 'pointercancel', resolve);
63+
});
64+
65+
await performDrag();
66+
await pointerCancelPromise;
67+
68+
assert_equals(received_events.join(', '),
69+
'pointerdown@target0, mousedown@target0, dragstart@target0, pointercancel@target0');
70+
}, 'Pointercancel should be fired with the expected order when drag operation starts');
71+
72+
promise_test(async t => {
73+
t.add_cleanup(reset);
74+
75+
trackEvents(t, target0, ['pointerdown', 'mousedown', 'gotpointercapture', 'dragstart', 'pointercancel', 'lostpointercapture']);
76+
on(t, target0, 'pointerdown', e => target0.setPointerCapture(e.pointerId));
77+
const lostCapturePromise = new Promise(resolve => {
78+
on(t, target0, 'lostpointercapture', resolve);
79+
});
80+
81+
await performDrag();
82+
await lostCapturePromise;
83+
84+
assert_equals(
85+
received_events.join(', '),
86+
'pointerdown@target0, mousedown@target0, gotpointercapture@target0, dragstart@target0, pointercancel@target0, lostpointercapture@target0');
87+
}, 'Pointercancel and lostpointercapture should be fired with the expected order when drag operation starts (capture on pointerdown)');
88+
89+
promise_test(async t => {
90+
t.add_cleanup(reset);
91+
let pointerId = -1;
92+
93+
trackEvents(t, target0, ['pointerdown', 'mousedown', 'gotpointercapture', 'dragstart', 'pointercancel', 'lostpointercapture']);
94+
on(t, target0, 'pointerdown', e => { pointerId = e.pointerId; });
95+
on(t, target0, 'mousedown', e => { target0.setPointerCapture(pointerId); });
96+
const lostCapturePromise = new Promise(resolve => {
97+
on(t, target0, 'lostpointercapture', resolve);
98+
});
99+
100+
await performDrag();
101+
await lostCapturePromise;
102+
103+
assert_equals(received_events.join(', '),
104+
'pointerdown@target0, mousedown@target0, gotpointercapture@target0, dragstart@target0, pointercancel@target0, lostpointercapture@target0');
105+
}, 'Pointercancel and lostpointercapture should be fired with the expected order when drag operation starts (capture on mousedown)');
106+
107+
promise_test(async t => {
108+
t.add_cleanup(reset);
109+
110+
trackEvents(t, target0, ['pointerdown', 'mousedown', 'dragstart']);
111+
trackEvents(t, target1, ['pointerup']);
112+
on(t, target0, 'dragstart', e => e.preventDefault());
113+
const pointerUpPromise = new Promise(resolve => {
114+
on(t, target1, 'pointerup', resolve);
115+
});
116+
117+
await performDrag();
118+
await pointerUpPromise;
119+
120+
assert_equals(received_events.join(', '),
121+
'pointerdown@target0, mousedown@target0, dragstart@target0, pointerup@target1');
122+
}, 'Pointerevent stream should not get interrupted when drag is prevented.');
123+
</script>

0 commit comments

Comments
 (0)