summaryrefslogtreecommitdiffstats
path: root/dom/events/test/pointerevents/touch_action_helpers.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/events/test/pointerevents/touch_action_helpers.js')
-rw-r--r--dom/events/test/pointerevents/touch_action_helpers.js242
1 files changed, 242 insertions, 0 deletions
diff --git a/dom/events/test/pointerevents/touch_action_helpers.js b/dom/events/test/pointerevents/touch_action_helpers.js
new file mode 100644
index 0000000000..12bb25b8fa
--- /dev/null
+++ b/dom/events/test/pointerevents/touch_action_helpers.js
@@ -0,0 +1,242 @@
+// Some common helpers
+
+function promiseTimeout(delay) {
+ return new Promise(resolve => {
+ setTimeout(resolve, delay);
+ });
+}
+
+function promiseTouchStart(element) {
+ return new Promise(resolve => {
+ element.addEventListener("touchstart", resolve, {
+ passive: true,
+ once: true,
+ });
+ });
+}
+
+async function touchScrollRight(aSelector = "#target0", aX = 20, aY = 20) {
+ const target = document.querySelector(aSelector);
+ const touchStartPromise = promiseTouchStart(document.body);
+ const touchEndPromise = promiseTouchEnd(document.body);
+ dump("Synthesizing horizontal drag\n");
+ await promiseNativePointerDrag(target, "touch", aX + 40, aY, -40, 0);
+ await touchStartPromise;
+ dump("Got touchstart from the horizontal drag\n");
+ await touchEndPromise;
+ dump("Got touchend from the horizontal drag\n");
+}
+
+async function touchScrollDown(aSelector = "#target0", aX = 20, aY = 20) {
+ const target = document.querySelector(aSelector);
+ const touchStartPromise = promiseTouchStart(document.body);
+ const touchEndPromise = promiseTouchEnd(document.body);
+ dump("Synthesizing vertical drag\n");
+ await promiseNativePointerDrag(target, "touch", aX, aY + 40, 0, -40);
+ await touchStartPromise;
+ dump("Got touchstart from the vertical drag\n");
+ await touchEndPromise;
+ dump("Got touchend from the vertical drag\n");
+}
+
+async function tapCompleteAndWaitTestDone() {
+ let testDone = new Promise(resolve => {
+ add_completion_callback(resolve);
+ });
+
+ var button = document.getElementById("btnComplete");
+ button.click();
+ await testDone;
+}
+
+function promiseResetScrollLeft(aSelector = "#target0") {
+ var target = document.querySelector(aSelector);
+ return new Promise(resolve => {
+ target.addEventListener("scroll", function onScroll() {
+ if (target.scrollLeft == 0) {
+ target.removeEventListener("scroll", onScroll);
+ resolve();
+ }
+ });
+ });
+}
+
+// The main body functions to simulate the input events required for the named test
+
+async function pointerevent_touch_action_auto_css_touch_manual() {
+ let testDone = new Promise(resolve => {
+ add_completion_callback(resolve);
+ });
+
+ await touchScrollRight();
+ await promiseApzFlushedRepaints();
+ await touchScrollDown();
+ await testDone;
+}
+
+async function pointerevent_touch_action_button_test_touch_manual() {
+ await touchScrollDown();
+ await promiseApzFlushedRepaints();
+ await promiseTimeout(2 * scrollReturnInterval);
+ await touchScrollRight();
+ let resetScrollLeftPromise = promiseResetScrollLeft();
+ await promiseApzFlushedRepaints();
+ await promiseTimeout(2 * scrollReturnInterval);
+ // Wait for resetting target0's scrollLeft to avoid the reset break the
+ // following scroll behaviors.
+ await resetScrollLeftPromise;
+ await touchScrollDown("#target0 > button");
+ await promiseApzFlushedRepaints();
+ await touchScrollRight("#target0 > button");
+ await promiseApzFlushedRepaints();
+ await tapCompleteAndWaitTestDone();
+}
+
+async function pointerevent_touch_action_inherit_child_auto_child_none_touch_manual() {
+ await touchScrollDown("#target0 > div div");
+ await promiseApzFlushedRepaints();
+ await touchScrollRight("#target0 > div div");
+ await promiseApzFlushedRepaints();
+ await tapCompleteAndWaitTestDone();
+}
+
+async function pointerevent_touch_action_inherit_child_none_touch_manual() {
+ await touchScrollDown("#target0 > div");
+ await promiseApzFlushedRepaints();
+ await touchScrollRight("#target0 > div");
+ await promiseApzFlushedRepaints();
+ await tapCompleteAndWaitTestDone();
+}
+
+async function pointerevent_touch_action_inherit_child_pan_x_child_pan_x_touch_manual() {
+ await touchScrollDown("#target0 > div div");
+ await promiseApzFlushedRepaints();
+ await touchScrollRight("#target0 > div div");
+ await promiseApzFlushedRepaints();
+ await tapCompleteAndWaitTestDone();
+}
+
+async function pointerevent_touch_action_inherit_child_pan_x_child_pan_y_touch_manual() {
+ await touchScrollDown("#target0 > div div");
+ await promiseApzFlushedRepaints();
+ await touchScrollRight("#target0 > div div");
+ await promiseApzFlushedRepaints();
+ await tapCompleteAndWaitTestDone();
+}
+
+async function pointerevent_touch_action_inherit_highest_parent_none_touch_manual() {
+ let testDone = new Promise(resolve => {
+ add_completion_callback(resolve);
+ });
+
+ await touchScrollDown("#target0 > div");
+ await promiseApzFlushedRepaints();
+ await touchScrollRight("#target0 > div");
+ await testDone;
+}
+
+async function pointerevent_touch_action_inherit_parent_none_touch_manual() {
+ await touchScrollDown();
+ await promiseApzFlushedRepaints();
+ await touchScrollRight();
+ await promiseApzFlushedRepaints();
+ await tapCompleteAndWaitTestDone();
+}
+
+async function pointerevent_touch_action_none_css_touch_manual() {
+ await touchScrollDown();
+ await promiseApzFlushedRepaints();
+ await touchScrollRight();
+ await promiseApzFlushedRepaints();
+ await tapCompleteAndWaitTestDone();
+}
+
+async function pointerevent_touch_action_pan_x_css_touch_manual() {
+ await touchScrollDown();
+ await promiseApzFlushedRepaints();
+ await touchScrollRight();
+ await promiseApzFlushedRepaints();
+ await tapCompleteAndWaitTestDone();
+}
+
+async function pointerevent_touch_action_pan_x_pan_y_pan_y_touch_manual() {
+ await touchScrollDown("#target0 > div div");
+ await promiseApzFlushedRepaints();
+ await touchScrollRight("#target0 > div div");
+ await promiseApzFlushedRepaints();
+ await tapCompleteAndWaitTestDone();
+}
+
+async function pointerevent_touch_action_pan_x_pan_y_touch_manual() {
+ let testDone = new Promise(resolve => {
+ add_completion_callback(resolve);
+ });
+
+ await touchScrollDown();
+ await promiseApzFlushedRepaints();
+ await touchScrollRight();
+ await testDone;
+}
+
+async function pointerevent_touch_action_pan_y_css_touch_manual() {
+ await touchScrollDown();
+ await promiseApzFlushedRepaints();
+ await touchScrollRight();
+ await promiseApzFlushedRepaints();
+ await tapCompleteAndWaitTestDone();
+}
+
+async function pointerevent_touch_action_span_test_touch_manual() {
+ await touchScrollDown();
+ await promiseApzFlushedRepaints();
+ await promiseTimeout(2 * scrollReturnInterval);
+ await touchScrollRight();
+ let resetScrollLeftPromise = promiseResetScrollLeft();
+ await promiseApzFlushedRepaints();
+ await promiseTimeout(2 * scrollReturnInterval);
+ // Wait for resetting target0's scrollLeft to avoid the reset break the
+ // following scroll behaviors.
+ await resetScrollLeftPromise;
+ await touchScrollDown("#testspan");
+ await promiseApzFlushedRepaints();
+ await touchScrollRight("#testspan");
+ await promiseApzFlushedRepaints();
+ await tapCompleteAndWaitTestDone();
+}
+
+async function pointerevent_touch_action_svg_test_touch_manual() {
+ await touchScrollDown();
+ await promiseApzFlushedRepaints();
+ await promiseTimeout(2 * scrollReturnInterval);
+ await touchScrollRight();
+ await promiseApzFlushedRepaints();
+ await promiseTimeout(2 * scrollReturnInterval);
+ await touchScrollDown("#target0", 250, 250);
+ await promiseApzFlushedRepaints();
+ await touchScrollRight("#target0", 250, 250);
+ await promiseApzFlushedRepaints();
+ await tapCompleteAndWaitTestDone();
+}
+
+async function pointerevent_touch_action_table_test_touch_manual() {
+ await touchScrollDown("#row1");
+ await promiseApzFlushedRepaints();
+ await promiseTimeout(2 * scrollReturnInterval);
+ await touchScrollRight("#row1");
+ let resetScrollLeftPromise = promiseResetScrollLeft();
+ await promiseApzFlushedRepaints();
+ await promiseTimeout(2 * scrollReturnInterval);
+ // Wait for resetting target0's scrollLeft to avoid the reset break the
+ // following scroll behaviors.
+ await resetScrollLeftPromise;
+ await touchScrollDown("#cell3");
+ await promiseApzFlushedRepaints();
+ await touchScrollRight("#cell3");
+ await promiseApzFlushedRepaints();
+ await tapCompleteAndWaitTestDone();
+}
+
+// This the stuff that runs the appropriate body function above
+
+var test = eval(_ACTIVE_TEST_NAME.replace(/-/g, "_"));
+waitUntilApzStable().then(test).then(subtestDone, subtestFailed);