mirror of
https://github.com/servo/servo.git
synced 2025-06-29 03:23:41 +01:00
152 lines
No EOL
6 KiB
HTML
152 lines
No EOL
6 KiB
HTML
<!DOCTYPE html>
|
|
<meta charset=utf-8>
|
|
<title>Test basic functionality of scroll linked animation.</title>
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script src="/web-animations/testcommon.js"></script>
|
|
<style>
|
|
.scroller {
|
|
overflow: auto;
|
|
height: 100px;
|
|
width: 100px;
|
|
}
|
|
.contents {
|
|
height: 1000px;
|
|
width: 100%;
|
|
}
|
|
</style>
|
|
<div id="log"></div>
|
|
<script>
|
|
'use strict';
|
|
|
|
function createScroller(test) {
|
|
var scroller = createDiv(test);
|
|
scroller.innerHTML = "<div class='contents'></div>";
|
|
scroller.classList.add('scroller');
|
|
return scroller;
|
|
}
|
|
|
|
function createScrollTimeline(test) {
|
|
return new ScrollTimeline({
|
|
scrollSource: createScroller(test),
|
|
timeRange: 1000
|
|
});
|
|
}
|
|
|
|
function createScrollLinkedAnimation(test, timeline) {
|
|
if(timeline === undefined)
|
|
timeline = createScrollTimeline(test);
|
|
const DURATION = 1000; // ms
|
|
const KEYFRAMES = { opacity: [1, 0] };
|
|
return new Animation(
|
|
new KeyframeEffect(createDiv(test), KEYFRAMES, DURATION), timeline);
|
|
}
|
|
|
|
promise_test(async t => {
|
|
const animation = createScrollLinkedAnimation(t);
|
|
const scroller = animation.timeline.scrollSource;
|
|
const maxScroll = scroller.scrollHeight - scroller.clientHeight;
|
|
const timeRange = animation.timeline.timeRange;
|
|
|
|
// Verify initial start and current times in Idle state.
|
|
assert_equals(animation.currentTime, null,
|
|
"The current time is null in Idle state.");
|
|
assert_equals(animation.startTime, null,
|
|
"The start time is null in Idle state.");
|
|
animation.play();
|
|
// Verify initial start and current times in Pending state.
|
|
assert_equals(animation.currentTime, 0,
|
|
"The current time is a hold time in Pending state.");
|
|
assert_equals(animation.startTime, null,
|
|
"The start time is null in Pending state.");
|
|
|
|
await animation.ready;
|
|
// Verify initial start and current times in Playing state.
|
|
assert_equals(animation.currentTime, 0,
|
|
"The current time is zero in Playing state.");
|
|
assert_equals(animation.startTime, 0,
|
|
"The start time is zero in Playing state.");
|
|
|
|
// Now do some scrolling and make sure that the Animation current time is
|
|
// correct.
|
|
scroller.scrollTop = 0.2 * maxScroll;
|
|
assert_equals(animation.currentTime, animation.timeline.currentTime,
|
|
"The current time corresponds to the scroll position of the scroller.");
|
|
}, 'Animation start and current times are correct for each animation state.');
|
|
|
|
promise_test(async t => {
|
|
const animation = createScrollLinkedAnimation(t);
|
|
const scroller = animation.timeline.scrollSource;
|
|
const maxScroll = scroller.scrollHeight - scroller.clientHeight;
|
|
const timeRange = animation.timeline.timeRange;
|
|
// Advance the scroller.
|
|
scroller.scrollTop = 0.2 * maxScroll;
|
|
|
|
// Verify initial start and current times in Idle state.
|
|
assert_equals(animation.currentTime, null,
|
|
"The current time is null in Idle state.");
|
|
assert_equals(animation.startTime, null,
|
|
"The start time is null in Idle state.");
|
|
animation.play();
|
|
// Verify initial start and current times in Pending state.
|
|
assert_equals(animation.currentTime, animation.timeline.currentTime,
|
|
"The current time is a hold time in Pending state.");
|
|
assert_equals(animation.startTime, null,
|
|
"The start time is null in Pending state.");
|
|
|
|
await animation.ready;
|
|
// Verify initial start and current times in Playing state.
|
|
assert_equals(animation.currentTime, animation.timeline.currentTime,
|
|
"The current corresponds to the scroll position of the scroller.");
|
|
assert_equals(animation.startTime, 0,
|
|
"The start time is zero in Playing state.");
|
|
}, 'Animation start and current times are correct for each animation state' +
|
|
' when the animation starts playing with advanced scroller.');
|
|
|
|
promise_test(async t => {
|
|
const timeline = createScrollTimeline(t);
|
|
const animation1 = createScrollLinkedAnimation(t, timeline);
|
|
const animation2 = createScrollLinkedAnimation(t, timeline);
|
|
const scroller = timeline.scrollSource;
|
|
const maxScroll = scroller.scrollHeight - scroller.clientHeight;
|
|
const timeRange = timeline.timeRange;
|
|
// Advance the scroller.
|
|
scroller.scrollTop = 0.2 * maxScroll;
|
|
|
|
// Verify initial start and current times in Idle state.
|
|
assert_equals(animation1.currentTime, null,
|
|
"The current time is null in Idle state.");
|
|
assert_equals(animation1.startTime, null,
|
|
"The start time is null in Idle state.");
|
|
assert_equals(animation2.currentTime, null,
|
|
"The current time is null in Idle state.");
|
|
assert_equals(animation2.startTime, null,
|
|
"The start time is null in Idle state.");
|
|
animation1.play();
|
|
animation2.play();
|
|
// Verify initial start and current times in Pending state.
|
|
assert_equals(animation1.currentTime, timeline.currentTime,
|
|
"The current time corresponds to the scroll position of the scroller" +
|
|
" in Pending state.");
|
|
assert_equals(animation1.startTime, null,
|
|
"The start time is null in Pending state.");
|
|
assert_equals(animation2.currentTime, timeline.currentTime,
|
|
"The current time corresponds to the scroll position of the scroller" +
|
|
" in Pending state.");
|
|
assert_equals(animation2.startTime, null,
|
|
"The start time is null in Pending state.");
|
|
|
|
await animation1.ready;
|
|
await animation2.ready;
|
|
// Verify initial start and current times in Playing state.
|
|
assert_equals(animation1.currentTime, timeline.currentTime,
|
|
"The current corresponds to the scroll position of the scroller.");
|
|
assert_equals(animation1.startTime, 0,
|
|
"The start time is zero in Playing state.");
|
|
assert_equals(animation2.currentTime, timeline.currentTime,
|
|
"The current corresponds to the scroll position of the scroller.");
|
|
assert_equals(animation2.startTime, 0,
|
|
"The start time is zero in Playing state.");
|
|
}, 'Animation start and current times are correct when multiple animations' +
|
|
' are attached to the same timeline.');
|
|
</script> |