aboutsummaryrefslogtreecommitdiffstats
path: root/tests/wpt/web-platform-tests/scroll-animations/multiple-scroll-offsets.html
diff options
context:
space:
mode:
Diffstat (limited to 'tests/wpt/web-platform-tests/scroll-animations/multiple-scroll-offsets.html')
-rw-r--r--tests/wpt/web-platform-tests/scroll-animations/multiple-scroll-offsets.html143
1 files changed, 143 insertions, 0 deletions
diff --git a/tests/wpt/web-platform-tests/scroll-animations/multiple-scroll-offsets.html b/tests/wpt/web-platform-tests/scroll-animations/multiple-scroll-offsets.html
new file mode 100644
index 00000000000..026b2e7673c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/scroll-animations/multiple-scroll-offsets.html
@@ -0,0 +1,143 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>ScrollTimeline current time algorithm</title>
+<link rel="help" href="https://wicg.github.io/scroll-animations/#current-time-algorithm">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/web-animations/testcommon.js"></script>
+<script src="./resources/scrolltimeline-utils.js"></script>
+
+<body></body>
+
+<script>
+'use strict';
+
+promise_test(async t => {
+ const scroller = setupScrollTimelineTest();
+ const scrollerSize = scroller.scrollHeight - scroller.clientHeight;
+
+ const scrollTimeline = new ScrollTimeline({
+ scrollSource: scroller,
+ timeRange: scrollerSize,
+ orientation: 'block',
+ scrollOffsets: [CSS.px(10), CSS.px(20), CSS.px(40), CSS.px(70), CSS.px(90)],
+ });
+
+ var offset = 0;
+ var w = 1 / 4; // offset weight
+ var p = 0; // progress within the offset
+
+ scroller.scrollTop = 10;
+ assert_times_equal(
+ scrollTimeline.currentTime, (offset + p) * w * scrollerSize,
+ "current time calculation when scroll = " + scroller.scrollTop);
+
+ p = (12 - 10) / (20 - 10);
+ scroller.scrollTop = 12;
+ await waitForNextFrame();
+ assert_times_equal(
+ scrollTimeline.currentTime, (offset + p) * w * scrollerSize,
+ "current time calculation when scroll = " + scroller.scrollTop);
+
+ offset = 1;
+ p = 0;
+ scroller.scrollTop = 20;
+ await waitForNextFrame();
+ assert_times_equal(
+ scrollTimeline.currentTime, (offset + p) * w * scrollerSize,
+ "current time calculation when scroll = " + scroller.scrollTop);
+
+ p = (35 - 20) / (40 - 20);
+ scroller.scrollTop = 35;
+ await waitForNextFrame();
+ assert_times_equal(
+ scrollTimeline.currentTime, (offset + p) * w * scrollerSize,
+ "current time calculation when scroll = " + scroller.scrollTop);
+
+ offset = 2;
+ p = 0;
+ scroller.scrollTop = 40;
+ await waitForNextFrame();
+ assert_times_equal(
+ scrollTimeline.currentTime, (offset + p) * w * scrollerSize,
+ "current time calculation when scroll = " + scroller.scrollTop);
+
+ p = (60 - 40) / (70 - 40);
+ scroller.scrollTop = 60;
+ await waitForNextFrame();
+ assert_times_equal(
+ scrollTimeline.currentTime, (offset + p) * w * scrollerSize,
+ "current time calculation when scroll = " + scroller.scrollTop);
+
+ offset = 3;
+ p = 0;
+ scroller.scrollTop = 70;
+ await waitForNextFrame();
+ assert_times_equal(
+ scrollTimeline.currentTime, (offset + p) * w * scrollerSize,
+ "current time calculation when scroll = " + scroller.scrollTop);
+
+ p = (80 - 70) / (90 - 70);
+ scroller.scrollTop = 80;
+ await waitForNextFrame();
+ assert_times_equal(
+ scrollTimeline.currentTime, (offset + p) * w * scrollerSize,
+ "current time calculation when scroll = " + scroller.scrollTop);
+
+ scroller.scrollTop = 90;
+ await waitForNextFrame();
+ assert_times_equal(
+ scrollTimeline.currentTime, scrollerSize,
+ "current time calculation when scroll = " + scroller.scrollTop);
+}, 'currentTime calculations when multiple scroll offsets are specified');
+
+promise_test(async t => {
+ const scroller = setupScrollTimelineTest();
+ const scrollerSize = scroller.scrollHeight - scroller.clientHeight;
+
+ var scrollTimeline = new ScrollTimeline({
+ scrollSource: scroller,
+ timeRange: scrollerSize,
+ orientation: 'block',
+ scrollOffsets: [CSS.px(300), CSS.px(200), CSS.px(10)],
+ });
+
+ scroller.scrollTop = 250;
+ await waitForNextFrame();
+ assert_times_equal(
+ scrollTimeline.currentTime, 0,
+ "current time calculation when scroll = " + scroller.scrollTop);
+
+ scroller.scrollTop = 400;
+ await waitForNextFrame();
+ assert_times_equal(
+ scrollTimeline.currentTime, scrollerSize,
+ "current time calculation when scroll = " + scroller.scrollTop);
+
+ scrollTimeline = new ScrollTimeline({
+ scrollSource: scroller,
+ timeRange: scrollerSize,
+ orientation: 'block',
+ scrollOffsets: [CSS.px(0), CSS.px(400), CSS.px(200)],
+ });
+
+ scroller.scrollTop = 100;
+ await waitForNextFrame();
+ assert_times_equal(
+ scrollTimeline.currentTime, 0.25 * 0.5 * scrollerSize,
+ "current time calculation when scroll = " + scroller.scrollTop);
+
+ scrollTimeline = new ScrollTimeline({
+ scrollSource: scroller,
+ timeRange: scrollerSize,
+ orientation: 'block',
+ scrollOffsets: [CSS.px(200), CSS.px(0), CSS.px(400)],
+ });
+
+ scroller.scrollTop = 200;
+ await waitForNextFrame();
+ assert_times_equal(
+ scrollTimeline.currentTime, 0.5 * scrollerSize + 0.5 * 0.5 * scrollerSize,
+ "current time calculation when scroll = " + scroller.scrollTop);
+}, 'currentTime calculations when overlapping scroll offsets are specified');
+</script>