summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/pointerevents/pointerevent_touch-adjustment_click_target.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/pointerevents/pointerevent_touch-adjustment_click_target.html')
-rw-r--r--testing/web-platform/tests/pointerevents/pointerevent_touch-adjustment_click_target.html67
1 files changed, 67 insertions, 0 deletions
diff --git a/testing/web-platform/tests/pointerevents/pointerevent_touch-adjustment_click_target.html b/testing/web-platform/tests/pointerevents/pointerevent_touch-adjustment_click_target.html
new file mode 100644
index 0000000000..46d5ac1793
--- /dev/null
+++ b/testing/web-platform/tests/pointerevents/pointerevent_touch-adjustment_click_target.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Touch-generated events should have the same target</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<p>Touch letter 'O' below to run the test. If a "PASS" result appears the test passes, otherwise it fails</p>
+<p><a href="#" id="link">Link</a> <span id="target">O</span></p>
+<div id="log"></div>
+<script>
+let input_gesture;
+const target = document.getElementById('target');
+const xPosition = Math.ceil(target.offsetLeft + 2);
+const yPosition = Math.ceil(target.offsetTop + 2);
+
+function inject_input() {
+ let actions = new test_driver.Actions();
+ return actions
+ .addPointer("touchPointer", "touch")
+ .setPointer("touchPointer")
+ .pointerMove(xPosition, yPosition)
+ .pointerDown()
+ .pointerUp()
+ .send();
+}
+
+
+addEventListener('load', () => {
+ input_gesture = inject_input();
+});
+
+async_test(t => {
+ const link = document.getElementById('link');
+ const expectedEventLog = ['pointerdown-link', 'touchstart-link', 'pointerup-link', 'touchend-link', 'click-link'];
+ const eventLogRecorder = [];
+
+ const eventNames = ['touchstart', 'touchmove', 'touchend', 'pointerdown', 'pointermove', 'pointerup', 'click'];
+ for (eventName of eventNames) {
+ document.addEventListener(eventName, t.step_func(event => {
+ // TouchEvent and PointerEvent should have the same un-adjusted coordinates.
+ // click event should have coordinates adjusted to link element.
+ const eventClientX = event.clientX || (event.touches.length > 0 ? event.touches[0].clientX : 0);
+ const eventClientY = event.clientY || (event.touches.length > 0 ? event.touches[0].clientY : 0);
+
+ if (event.type === 'click') {
+ assert_equals(document.elementFromPoint(eventClientX, eventClientY), link,
+ 'click should have clientX/Y adjusted to link.');
+ } else if (event.type != 'touchend') {
+ assert_equals(eventClientX, xPosition,
+ `${event.type} should have un-adjusted x coordinates.`);
+ assert_equals(eventClientY, yPosition,
+ `${event.type} should have un-adjusted y coordinates.`);
+ }
+
+ // All events should have target adjusted to link.
+ const targetName = event.target.id || event.target.nodeName || '[null]';
+ eventLogRecorder.push(`${event.type}-${targetName}`);
+ if (event.type === 'click') {
+ assert_array_equals(eventLogRecorder, expectedEventLog);
+ input_gesture.then(() => { t.done(); });
+ }
+ }));
+ }
+});
+</script>