LibWeb: Add animation-effect method tests

This commit is contained in:
Matthew Olsson 2024-03-29 16:58:16 +00:00 committed by Andreas Kling
commit f0119a818b
Notes: sideshowbarker 2024-07-16 23:52:10 +09:00
6 changed files with 170 additions and 0 deletions

View file

@ -0,0 +1,52 @@
<!DOCTYPE html>
<div id="foo"></div>
<script src="../../include.js"></script>
<script>
const foo = document.getElementById("foo");
promiseTest(async () => {
const timeline = internals.createInternalAnimationTimeline();
let anim = foo.animate({}, {
delay: 10,
endDelay: 20,
fill: "forwards",
iterationStart: 30,
iterations: 40,
duration: 50,
direction: "normal",
easing: "linear",
timeline,
});
await animationFrame();
let timing = anim.effect.getComputedTiming();
println(`num properties: ${Object.getOwnPropertyNames(timing).length}`);
println(`delay: ${timing.delay}`);
println(`endDelay: ${timing.endDelay}`);
println(`fill: ${timing.fill}`);
println(`iterationStart: ${timing.iterationStart}`);
println(`iterations: ${timing.iterations}`);
println(`duration: ${timing.duration}`);
println(`direction: ${timing.direction}`);
println(`easing: ${timing.easing}`);
println(`endTime: ${timing.endTime}`);
println(`activeDuration: ${timing.activeDuration}`);
println(`localTime: ${timing.localTime}`);
println(`progress: ${timing.progress}`);
println(`currentIteration: ${timing.currentIteration}`);
// Test with some progress
anim = foo.animate({}, {
duration: 1000,
iterations: 3,
timeline,
});
timeline.setTime(1200);
await animationFrame();
timing = anim.effect.getComputedTiming();
println("");
println(`localTime: ${timing.localTime}`);
println(`progress: ${timing.progress.toFixed(2)}`);
println(`currentIteration: ${timing.currentIteration}`);
});
</script>

View file

@ -0,0 +1,30 @@
<!DOCTYPE html>
<div id="foo"></div>
<script src="../../include.js"></script>
<script>
const foo = document.getElementById("foo");
test(() => {
const anim = foo.animate({}, {
delay: 10,
endDelay: 20,
fill: "forwards",
iterationStart: 30,
iterations: 40,
duration: 50,
direction: "alternate-reverse",
easing: "linear",
});
const timing = anim.effect.getTiming();
println(`num properties: ${Object.getOwnPropertyNames(timing).length}`);
println(`delay: ${timing.delay}`);
println(`endDelay: ${timing.endDelay}`);
println(`fill: ${timing.fill}`);
println(`iterationStart: ${timing.iterationStart}`);
println(`iterations: ${timing.iterations}`);
println(`duration: ${timing.duration}`);
println(`direction: ${timing.direction}`);
println(`easing: ${timing.easing}`);
});
</script>

View file

@ -0,0 +1,46 @@
<!DOCTYPE html>
<div id="foo"></div>
<script src="../../include.js"></script>
<script>
const foo = document.getElementById("foo");
test(() => {
const anim = foo.animate({}, {});
anim.effect.updateTiming({
delay: 10,
endDelay: 20,
fill: "forwards",
iterationStart: 30,
iterations: 40,
duration: 50,
direction: "alternate-reverse",
easing: "linear",
});
const timing = anim.effect.getTiming();
println(`num properties: ${Object.getOwnPropertyNames(timing).length}`);
println(`delay: ${timing.delay}`);
println(`endDelay: ${timing.endDelay}`);
println(`fill: ${timing.fill}`);
println(`iterationStart: ${timing.iterationStart}`);
println(`iterations: ${timing.iterations}`);
println(`duration: ${timing.duration}`);
println(`direction: ${timing.direction}`);
println(`easing: ${timing.easing}`);
function expectThrows(obj, message) {
try {
anim.updateTiming(obj);
} catch {
println(message);
}
}
expectThrows({ iterationStart: -10 }, "updateTiming() throws if it receives a negative iterationStart value");
expectThrows({ iterations: -10 }, "updateTiming() throws if it receives a negative iterations value");
expectThrows({ iterations: NaN }, "updateTiming() throws if it receives a NaN iterations value");
expectThrows({ duration: -10 }, "updateTiming() throws if it receives a negative duration value");
expectThrows({ duration: NaN }, "updateTiming() throws if it receives a NaN duration value");
expectThrows({ easing: "abcd" }, "updateTiming() throws if it receives an invalid easing function value");
});
</script>