Index: third_party/WebKit/LayoutTests/fast/layout/scroll-anchoring/resources/scroll-anchoring-test.js |
diff --git a/third_party/WebKit/LayoutTests/fast/layout/scroll-anchoring/resources/scroll-anchoring-test.js b/third_party/WebKit/LayoutTests/fast/layout/scroll-anchoring/resources/scroll-anchoring-test.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..766eefea02ad3970179c473c6f74fca4a8745170 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/fast/layout/scroll-anchoring/resources/scroll-anchoring-test.js |
@@ -0,0 +1,27 @@ |
+// Contains helper methods to verify expectations for tests related to Scroll |
+// Anchoring |
+var frame = () => new Promise((resolve) => { requestAnimationFrame(resolve); }); |
+ |
+var waitFor = function(condition, failmsg, deadline) { |
+ if (!deadline) deadline = Date.now() + 1000; |
+ if (condition()) return Promise.resolve(); |
+ else if (Date.now() > deadline) return Promise.reject(failmsg); |
+ else return frame().then(() => waitFor(condition, failmsg, deadline)); |
+}; |
+ |
+var waitFrames = function(n, condition, failmsg) { |
+ var p = Promise.resolve(); |
+ var check = () => (!condition || condition() ? |
+ Promise.resolve() : Promise.reject(failmsg)); |
+ while (n--) |
+ p = p.then(check).then(frame); |
+ return p.then(check); |
+}; |
+ |
+var scrollSettlesAt = function(expectedY) { |
+ return waitFor(() => (scrollY == expectedY), |
+ "scroll did not reach " + expectedY) |
+ .then(() => waitFrames(3)) |
+ .then(() => waitFrames(3, () => (scrollY == expectedY), |
+ "scroll did not stay at " + expectedY)); |
+}; |