Bug 1417821 - Test that click returns after spinning event loop. r?whimboo draft
authorAndreas Tolfsen <ato@sny.no>
Thu, 23 Nov 2017 15:45:01 +0000
changeset 703219 a2a9bdbd33df2179318cb30b657de64ad4be665e
parent 703218 262f107e4ee0af0a536aa2dd2e17d5a3e1e58853
child 741711 7efeb00b2954bf14ff8014721f667545f44d2e93
push id90754
push userbmo:ato@sny.no
push dateFri, 24 Nov 2017 16:38:54 +0000
reviewerswhimboo
bugs1417821
milestone59.0a1
Bug 1417821 - Test that click returns after spinning event loop. r?whimboo MozReview-Commit-ID: EpaM9PsFt6b
testing/web-platform/meta/MANIFEST.json
testing/web-platform/tests/webdriver/tests/element_click/bubbling.py
--- a/testing/web-platform/meta/MANIFEST.json
+++ b/testing/web-platform/meta/MANIFEST.json
@@ -575976,17 +575976,17 @@
    "9455d1504590154ad2a540f102455baff602aefb",
    "wdspec"
   ],
   "webdriver/tests/element_click/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/element_click/bubbling.py": [
-   "3168c91456dae68fbc4c289d1ad39b4cd11fc219",
+   "5437f5ca12b93e9a0087e9b341d63af6bace4ffd",
    "wdspec"
   ],
   "webdriver/tests/element_click/select.py": [
    "5ba51b660c7203bba3ada597c2f56fe094358e1f",
    "wdspec"
   ],
   "webdriver/tests/element_click/stale.py": [
    "37af63203540dfe11d36fe05d74694f05c6505f2",
--- a/testing/web-platform/tests/webdriver/tests/element_click/bubbling.py
+++ b/testing/web-platform/tests/webdriver/tests/element_click/bubbling.py
@@ -39,16 +39,55 @@ def test_click_event_bubbles_to_parents(
     one.click()
 
     clicks = session.execute_script("return window.clicks")
     assert one in clicks
     assert two in clicks
     assert three in clicks
 
 
+def test_spin_event_loop(session):
+    """
+    Wait until the user agent event loop has spun enough times to
+    process the DOM events generated by clicking.
+    """
+    session.url = inline("""
+        <style>
+        body * {
+          margin: 10px;
+          padding: 10px;
+          border: 1px solid blue;
+        }
+        </style>
+
+        <div id=three>THREE
+          <div id=two>TWO
+            <div id=one>ONE</div>
+          </div>
+        </div>
+
+        <script>
+        window.delayedClicks = [];
+
+        for (let level of document.querySelectorAll("div")) {
+          level.addEventListener("click", ({currentTarget}) => {
+            setTimeout(() => window.delayedClicks.push(currentTarget), 100);
+          });
+        }
+        </script>
+        """)
+    three, two, one = session.find.css("div")
+    one.click()
+
+    delayed_clicks = session.execute_script("return window.delayedClicks")
+    assert one in delayed_clicks
+    assert two in delayed_clicks
+    assert three in delayed_clicks
+
+
 def test_element_disappears_during_click(session):
     """
     When an element in the event bubbling order disappears (its CSS
     display style is set to "none") during a click, Gecko and Blink
     exhibit different behaviour.  Whilst Chrome fires a "click"
     DOM event on <body>, Firefox does not.
 
     A WebDriver implementation may choose to wait for this event to let