LibWeb: Add a test for Animation.finish()

This commit is contained in:
Matthew Olsson 2024-03-27 18:47:35 -07:00 committed by Andreas Kling
commit 7472536ecb
Notes: sideshowbarker 2024-07-17 06:24:08 +09:00
2 changed files with 71 additions and 0 deletions

View file

@ -0,0 +1,8 @@
Cannot finish an animation with no effective playback rate
Cannot finish an animation with an infinite effect end
finish() updates animation's pending playback rate
finish() updates currentTime of animation with positive playback rate
finish() updates currentTime of animation with negative playback rate
finish() updates animation's startTime
finish() sends an onfinish event
finish() recreated the animation's finished promise

View file

@ -0,0 +1,63 @@
<!DOCTYPE html>
<div id="foo"></div>
<script src="../../include.js"></script>
<script>
test(() => {
const foo = document.getElementById("foo");
let anim = foo.animate({}, {});
anim.playbackRate = 0;
try {
anim.finish();
} catch {
println("Cannot finish an animation with no effective playback rate");
}
anim = foo.animate({}, { duration: Infinity });
try {
anim.finish();
} catch {
println("Cannot finish an animation with an infinite effect end");
}
anim = foo.animate({}, {});
anim.updatePlaybackRate(2.0);
let previousPlaybackRate = anim.playbackRate;
anim.finish();
if (previousPlaybackRate === 1.0 && anim.playbackRate === 2.0)
println("finish() updates animation's pending playback rate")
const timeline = internals.createInternalAnimationTimeline();
anim = foo.animate({}, { duration: 1000, timeline });
anim.finish();
if (anim.currentTime === 1000)
println("finish() updates currentTime of animation with positive playback rate");
anim = foo.animate({}, { duration: 1000 });
anim.playbackRate = -1;
anim.finish();
if (anim.currentTime === 0)
println("finish() updates currentTime of animation with negative playback rate");
if (anim.startTime !== null)
println("finish() updates animation's startTime");
anim = foo.animate({}, { duration: 1000 });
let finishCount = 0;
anim.onfinish = () => { finishCount++; }
anim.finish();
requestAnimationFrame(() => {
if (finishCount === 1)
println("finish() sends an onfinish event");
})
anim = foo.animate({}, { duration: 1000 });
let finished = false;
anim.finished.then(() => finished = true);
anim.finish();
requestAnimationFrame(() => {
if (finished)
println("finish() recreated the animation's finished promise");
});
});
</script>