Title: [259844] trunk/LayoutTests
Revision
259844
Author
[email protected]
Date
2020-04-09 20:39:58 -0700 (Thu, 09 Apr 2020)

Log Message

Import test for programmatic scrolling scrollend event
https://bugs.webkit.org/show_bug.cgi?id=210281

Reviewed by Frédéric Wang.

LayoutTests/imported/w3c:

Import test cases.

* web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-programmatic-scroll-expected.txt: Added.
* web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-programmatic-scroll.html: Added.
* web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-scrollIntoView-expected.txt: Added.
* web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-scrollIntoView.html: Added.
* web-platform-tests/dom/events/scrolling/w3c-import.log:

LayoutTests:

* tests-options.json:

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (259843 => 259844)


--- trunk/LayoutTests/ChangeLog	2020-04-10 02:11:30 UTC (rev 259843)
+++ trunk/LayoutTests/ChangeLog	2020-04-10 03:39:58 UTC (rev 259844)
@@ -1,3 +1,12 @@
+2020-04-09  Cathie Chen  <[email protected]>
+
+        Import test for programmatic scrolling scrollend event
+        https://bugs.webkit.org/show_bug.cgi?id=210281
+
+        Reviewed by Frédéric Wang.
+
+        * tests-options.json:
+
 2020-04-09  Daniel Bates  <[email protected]>
 
         [iOS]: New test landed for r259762 landed broken: editing/editable-region/hit-test-overlap.html

Modified: trunk/LayoutTests/imported/w3c/ChangeLog (259843 => 259844)


--- trunk/LayoutTests/imported/w3c/ChangeLog	2020-04-10 02:11:30 UTC (rev 259843)
+++ trunk/LayoutTests/imported/w3c/ChangeLog	2020-04-10 03:39:58 UTC (rev 259844)
@@ -1,3 +1,18 @@
+2020-04-09  Cathie Chen  <[email protected]>
+
+        Import test for programmatic scrolling scrollend event
+        https://bugs.webkit.org/show_bug.cgi?id=210281
+
+        Reviewed by Frédéric Wang.
+
+        Import test cases.
+
+        * web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-programmatic-scroll-expected.txt: Added.
+        * web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-programmatic-scroll.html: Added.
+        * web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-scrollIntoView-expected.txt: Added.
+        * web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-scrollIntoView.html: Added.
+        * web-platform-tests/dom/events/scrolling/w3c-import.log:
+
 2020-04-09  Yusuke Suzuki  <[email protected]>
 
         [JSC] ModuleEnvironment do not have JSGlobalLexicalEnvironment as its upper scope

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-programmatic-scroll-expected.txt (0 => 259844)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-programmatic-scroll-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-programmatic-scroll-expected.txt	2020-04-10 03:39:58 UTC (rev 259844)
@@ -0,0 +1,4 @@
+
+FAIL Tests scrollend event for calling scroll functions. promise_test: Unhandled rejection with value: "DIV.scrollTo did not receive scrollend event."
+FAIL Tests scrollend event for changing scroll attributes. promise_test: Unhandled rejection with value: "DIV.scrollTop did not receive scrollend event."
+

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-programmatic-scroll.html (0 => 259844)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-programmatic-scroll.html	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-programmatic-scroll.html	2020-04-10 03:39:58 UTC (rev 259844)
@@ -0,0 +1,134 @@
+<!DOCTYPE HTML>
+<meta name="timeout" content="long">
+<script src=""
+<script src=""
+<script src=""
+<script src=""
+<script src=""
+<script src=""
+<style>
+html {
+  height: 3000px;
+  width: 3000px;
+}
+#targetDiv {
+  width: 200px;
+  height: 200px;
+  overflow: scroll;
+}
+
+#innerDiv {
+  width: 400px;
+  height: 400px;
+}
+</style>
+
+<body style="margin:0" _onload_=runTest()>
+<div id="targetDiv">
+  <div id="innerDiv">
+  </div>
+</div>
+</body>
+<script>
+var element_scrollend_arrived = false;
+var document_scrollend_arrived = false;
+
+function onElementScrollEnd(event) {
+  assert_false(event.cancelable);
+  assert_false(event.bubbles);
+  element_scrollend_arrived = true;
+}
+
+function onDocumentScrollEnd(event) {
+  assert_false(event.cancelable);
+  // scrollend events are bubbled when the target node is document.
+  assert_true(event.bubbles);
+  document_scrollend_arrived = true;
+}
+
+function callScrollFunction([scrollTarget, scrollFunction, args]) {
+  scrollTarget[scrollFunction](args);
+}
+
+function runTest() {
+  let root_element = document.scrollingElement;
+  let target_div = document.getElementById("targetDiv");
+
+  promise_test (async (t) => {
+    await waitForCompositorCommit();
+    target_div.addEventListener("scrollend", onElementScrollEnd);
+    document.addEventListener("scrollend", onDocumentScrollEnd);
+
+    let test_cases = [
+      [target_div, 200, 200, [target_div, "scrollTo", { top: 200, left: 200, behavior: "auto" }]],
+      [target_div, 0, 0, [target_div, "scrollTo", { top: 0, left: 0, behavior: "smooth" }]],
+      [root_element, 200, 200, [root_element, "scrollTo", { top: 200, left: 200, behavior: "auto" }]],
+      [root_element, 0, 0, [root_element, "scrollTo", { top: 0, left: 0, behavior: "smooth" }]],
+      [target_div, 200, 200, [target_div, "scrollBy", { top: 200, left: 200, behavior: "auto" }]],
+      [target_div, 0, 0, [target_div, "scrollBy", { top: -200, left: -200, behavior: "smooth" }]],
+      [root_element, 200, 200, [root_element, "scrollBy", { top: 200, left: 200, behavior: "auto" }]],
+      [root_element, 0, 0, [root_element, "scrollBy", { top: -200, left: -200, behavior: "smooth" }]]
+    ];
+
+    for(i = 0; i < test_cases.length; i++) {
+      let t = test_cases[i];
+      let target = t[0];
+      let expected_x = t[1];
+      let expected_y = t[2];
+      let scroll_datas = t[3];
+
+      callScrollFunction(scroll_datas);
+      await waitFor(() => { return element_scrollend_arrived || document_scrollend_arrived; }, target.tagName + "." + scroll_datas[1] + " did not receive scrollend event.");
+      if (target == root_element)
+        assert_false(element_scrollend_arrived);
+      else
+        assert_false(document_scrollend_arrived);
+      assert_equals(target.scrollLeft, expected_x, target.tagName + "." + scroll_datas[1] + " scrollLeft");
+      assert_equals(target.scrollTop, expected_y, target.tagName + "." + scroll_datas[1] + " scrollTop");
+
+      element_scrollend_arrived = false;
+      document_scrollend_arrived = false;
+    }
+  }, "Tests scrollend event for calling scroll functions.");
+
+  promise_test(async (t) => {
+    await waitForCompositorCommit();
+
+    let test_cases = [
+      [target_div, "scrollTop"],
+      [target_div, "scrollLeft"],
+      [root_element, "scrollTop"],
+      [root_element, "scrollLeft"]
+    ];
+    for (i = 0; i < test_cases.length; i++) {
+      let t = test_cases[i];
+      let target = t[0];
+      let attribute = t[1];
+      let position = 200;
+
+      target.style.scrollBehavior = "smooth";
+      target[attribute] = position;
+      await waitFor(() => { return element_scrollend_arrived || document_scrollend_arrived; }, target.tagName + "." + attribute + " did not receive scrollend event.");
+      if (target == root_element)
+        assert_false(element_scrollend_arrived);
+      else
+        assert_false(document_scrollend_arrived);
+      assert_equals(target[attribute], position, target.tagName + "." + attribute + " ");
+      element_scrollend_arrived = false;
+      document_scrollend_arrived = false;
+
+      await waitForCompositorCommit();
+      target.style.scrollBehavior = "auto";
+      target[attribute] = 0;
+      await waitFor(() => { return element_scrollend_arrived || document_scrollend_arrived; }, target.tagName + "." + attribute + " did not receive scrollend event.");
+      if (target == root_element)
+        assert_false(element_scrollend_arrived);
+      else
+        assert_false(document_scrollend_arrived);
+      assert_equals(target[attribute], 0, target.tagName + "." + attribute + " ");
+      element_scrollend_arrived = false;
+      document_scrollend_arrived = false;
+    }
+  }, "Tests scrollend event for changing scroll attributes.");
+}
+</script>

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-scrollIntoView-expected.txt (0 => 259844)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-scrollIntoView-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-scrollIntoView-expected.txt	2020-04-10 03:39:58 UTC (rev 259844)
@@ -0,0 +1,4 @@
+
+FAIL Tests scrollend event for scrollIntoView. promise_test: Unhandled rejection with value: "DIV.scrollIntoView  did not receive scrollend event."
+FAIL Tests scrollend event for nested scrollIntoView. promise_test: Unhandled rejection with value: "Nested scrollIntoView did not receive scrollend event."
+

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-scrollIntoView.html (0 => 259844)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-scrollIntoView.html	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-scrollIntoView.html	2020-04-10 03:39:58 UTC (rev 259844)
@@ -0,0 +1,123 @@
+<!DOCTYPE HTML>
+<meta name="timeout" content="long">
+<script src=""
+<script src=""
+<script src=""
+<script src=""
+<script src=""
+<script src=""
+<style>
+html {
+  height: 3000px;
+  width: 3000px;
+}
+#targetDiv {
+  width: 200px;
+  height: 200px;
+  overflow: scroll;
+}
+
+#innerDiv {
+  width: 400px;
+  height: 400px;
+}
+</style>
+
+<body style="margin:0" _onload_=runTest()>
+<div id="targetDiv">
+  <div id="innerDiv">
+  </div>
+</div>
+</body>
+<script>
+var element_scrollend_arrived = false;
+var document_scrollend_arrived = false;
+
+function onElementScrollEnd(event) {
+  assert_false(event.cancelable);
+  assert_false(event.bubbles);
+  element_scrollend_arrived = true;
+}
+
+function onDocumentScrollEnd(event) {
+  assert_false(event.cancelable);
+  // scrollend events are bubbled when the target node is document.
+  assert_true(event.bubbles);
+  document_scrollend_arrived = true;
+}
+
+function callScrollFunction([scrollTarget, scrollFunction, args]) {
+  scrollTarget[scrollFunction](args);
+}
+
+function runTest() {
+  let root_element = document.scrollingElement;
+  let target_div = document.getElementById("targetDiv");
+  let inner_div = document.getElementById("innerDiv");
+
+  // Get expected position for root_element scrollIntoView.
+  root_element.scrollTo(10000, 10000);
+  let max_root_x = root_element.scrollLeft;
+  let max_root_y = root_element.scrollTop;
+  root_element.scrollTo(0, 0);
+
+  target_div.scrollTo(10000, 10000);
+  let max_element_x = target_div.scrollLeft;
+  let max_element_y = target_div.scrollTop;
+  target_div.scrollTo(0, 0);
+
+  promise_test (async (t) => {
+    await waitForCompositorCommit();
+    target_div.addEventListener("scrollend", onElementScrollEnd);
+    document.addEventListener("scrollend", onDocumentScrollEnd);
+
+    let test_cases = [
+      [target_div, max_element_x, max_element_y, [inner_div, "scrollIntoView", { inline: "end", block: "end", behavior: "auto" }]],
+      [target_div, 0, 0, [inner_div, "scrollIntoView", { inline: "start", block: "start", behavior: "smooth" }]],
+      [root_element, max_root_x, max_root_y, [root_element, "scrollIntoView", { inline: "end", block: "end", behavior: "smooth" }]],
+      [root_element, 0, 0, [root_element, "scrollIntoView", { inline: "start", block: "start", behavior: "smooth" }]]
+    ];
+
+    for(i = 0; i < test_cases.length; i++) {
+      let t = test_cases[i];
+      let target = t[0];
+      let expected_x = t[1];
+      let expected_y = t[2];
+      let scroll_datas = t[3];
+
+      callScrollFunction(scroll_datas);
+      await waitFor(() => { return element_scrollend_arrived || document_scrollend_arrived; }, target.tagName + ".scrollIntoView  did not receive scrollend event.");
+      if (target == root_element)
+        assert_false(element_scrollend_arrived);
+      else
+        assert_false(document_scrollend_arrived);
+      assert_equals(target.scrollLeft, expected_x, target.tagName + ".scrollIntoView scrollLeft");
+      assert_equals(target.scrollTop, expected_y, target.tagName + ".scrollIntoView scrollTop");
+
+      element_scrollend_arrived = false;
+      document_scrollend_arrived = false;
+    }
+  }, "Tests scrollend event for scrollIntoView.");
+
+  promise_test(async (t) => {
+    document.body.removeChild(target_div);
+    let out_div = document.createElement("div");
+    out_div.style = "width: 100px; height:100px; overflow:scroll; scroll-behavior:smooth;";
+    out_div.appendChild(target_div);
+    document.body.appendChild(out_div);
+    await waitForCompositorCommit();
+
+    element_scrollend_arrived = false;
+    document_scrollend_arrived = false;
+    inner_div.scrollIntoView({ inline: "end", block: "end", behavior: "auto" });
+    await waitFor(() => { return element_scrollend_arrived || document_scrollend_arrived; }, "Nested scrollIntoView did not receive scrollend event.");
+    assert_equals(root_element.scrollLeft, 0, "Nested scrollIntoView root_element scrollLeft");
+    assert_equals(root_element.scrollTop, 0, "Nested scrollIntoView root_element scrollTop");
+    assert_equals(out_div.scrollLeft, 100, "Nested scrollIntoView out_div scrollLeft");
+    assert_equals(out_div.scrollTop, 100, "Nested scrollIntoView out_div scrollTop");
+    assert_equals(target_div.scrollLeft, max_element_x, "Nested scrollIntoView target_div scrollLeft");
+    assert_equals(target_div.scrollTop, max_element_y, "Nested scrollIntoView target_div scrollTop");
+    assert_false(document_scrollend_arrived);
+  }, "Tests scrollend event for nested scrollIntoView.");
+}
+</script>

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/scrolling/w3c-import.log (259843 => 259844)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/scrolling/w3c-import.log	2020-04-10 02:11:30 UTC (rev 259843)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/scrolling/w3c-import.log	2020-04-10 03:39:58 UTC (rev 259844)
@@ -20,6 +20,8 @@
 /LayoutTests/imported/w3c/web-platform-tests/dom/events/scrolling/overscroll-event-fired-to-window.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/events/scrolling/scroll_support.js
 /LayoutTests/imported/w3c/web-platform-tests/dom/events/scrolling/scrollend-event-fired-after-snap.html
+/LayoutTests/imported/w3c/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-programmatic-scroll.html
+/LayoutTests/imported/w3c/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-scrollIntoView.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/events/scrolling/scrollend-event-fired-to-document.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/events/scrolling/scrollend-event-fired-to-element-with-overscroll-behavior.html
 /LayoutTests/imported/w3c/web-platform-tests/dom/events/scrolling/scrollend-event-fired-to-scrolled-element.html

Modified: trunk/LayoutTests/tests-options.json (259843 => 259844)


--- trunk/LayoutTests/tests-options.json	2020-04-10 02:11:30 UTC (rev 259843)
+++ trunk/LayoutTests/tests-options.json	2020-04-10 03:39:58 UTC (rev 259844)
@@ -551,6 +551,12 @@
     "imported/w3c/web-platform-tests/dom/events/Event-dispatch-on-disabled-elements.html": [
         "slow"
     ],
+    "imported/w3c/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-programmatic-scroll.html": [
+        "slow"
+    ],
+    "imported/w3c/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-scrollIntoView.html": [
+        "slow"
+    ],
     "imported/w3c/web-platform-tests/dom/nodes/Document-characterSet-normalization.html": [
         "slow"
     ],
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to