|
44 | 44 | last_scroll_top = scroller.scrollTop;
|
45 | 45 | }
|
46 | 46 | scroller.addEventListener("scroll", scroll_listener);
|
47 |
| - const scrollend_promise = waitForScrollendEventNoTimeout(scroller); |
48 |
| - await touchFlingInTarget(/*pixels_to_scroll*/100, scroller, "down"); |
49 |
| - await scrollend_promise; |
| 47 | + // We expect pointercancel to be triggered when scrolling starts due to |
| 48 | + // the touch-fling. If we instead get a pointerup event, we know that |
| 49 | + // scrolling isn't happening and we can immediately fail the test instead |
| 50 | + // of waiting for a timeout. |
| 51 | + const pointer_promise = () => { |
| 52 | + return new Promise((resolve, reject) => { |
| 53 | + document.addEventListener("pointerup", reject, { once: true }); |
| 54 | + document.addEventListener("pointercancel", resolve, { once: true }); |
| 55 | + }); |
| 56 | + }; |
| 57 | + |
| 58 | + try { |
| 59 | + const scrollend_promise = waitForScrollendEventNoTimeout(scroller); |
| 60 | + await touchFlingInTarget(/*pixels_to_scroll*/100, scroller, "down"); |
| 61 | + await pointer_promise; |
| 62 | + await scrollend_promise; |
| 63 | + } catch(e) { |
| 64 | + assert_unreached("Failed to trigger touch fling."); |
| 65 | + } |
50 | 66 |
|
51 | 67 | assert_greater_than(last_scroll_top, initial_scroll_top,
|
52 | 68 | "received at least one scroll update.");
|
|
0 commit comments