blob: fe1c3f219ae1bbad9720a201ce9581828ea0d477 [file] [log] [blame]
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<style>
@keyframes a {}
@keyframes b {}
</style>
<div id="target"></div>
<script>
function setAnimationProperty(value) {
target.style.animation = value;
target.offsetTop;
}
function getAnimations() {
return document.timeline.getAnimations();
}
function clearAnimations() {
setAnimationProperty('none');
assert_equals(getAnimations().length, 0);
}
test(() => {
clearAnimations();
setAnimationProperty('a 1000ms 1500ms forwards, a 2000ms 2500ms backwards, a 3000ms 3500ms both');
var animations = getAnimations();
assert_equals(animations.length, 3);
assert_equals(animations[0].effect.timing.duration, 1000);
assert_equals(animations[0].effect.timing.delay, 1500);
assert_equals(animations[0].effect.timing.fill, 'forwards');
assert_equals(animations[1].effect.timing.duration, 2000);
assert_equals(animations[1].effect.timing.delay, 2500);
assert_equals(animations[1].effect.timing.fill, 'backwards');
assert_equals(animations[2].effect.timing.duration, 3000);
assert_equals(animations[2].effect.timing.delay, 3500);
assert_equals(animations[2].effect.timing.fill, 'both');
}, 'Multiple same animation names should start multiple animations.');
test(() => {
clearAnimations();
setAnimationProperty('a 1500ms paused, a 2500ms paused, a 3500ms paused');
var animations = getAnimations();
assert_equals(animations.length, 3);
animations[0].currentTime = 1000;
animations[1].currentTime = 2000;
animations[2].currentTime = 3000;
setAnimationProperty('a 1750ms paused, a 2750ms paused, a 3750ms paused');
animations = getAnimations();
assert_equals(animations.length, 3);
assert_equals(animations[0].currentTime, 1000);
assert_equals(animations[0].effect.timing.duration, 1750);
assert_equals(animations[1].currentTime, 2000);
assert_equals(animations[1].effect.timing.duration, 2750);
assert_equals(animations[2].currentTime, 3000);
assert_equals(animations[2].effect.timing.duration, 3750);
}, 'Multiple same animation names should persist with animation timing updates.');
test(() => {
clearAnimations();
setAnimationProperty('a 1500ms paused, a 2500ms paused, b 3500ms paused, b 4500ms paused');
var animations = getAnimations();
assert_equals(animations.length, 4);
animations[0].currentTime = 1000;
animations[1].currentTime = 2000;
animations[2].currentTime = 3000;
animations[3].currentTime = 4000;
setAnimationProperty('a 1500ms paused, b 3500ms paused, a 2500ms paused, b 4500ms paused');
animations = getAnimations();
assert_equals(animations.length, 4);
assert_equals(animations[0].currentTime, 1000);
assert_equals(animations[0].effect.timing.duration, 1500);
assert_equals(animations[1].currentTime, 2000);
assert_equals(animations[1].effect.timing.duration, 2500);
assert_equals(animations[2].currentTime, 3000);
assert_equals(animations[2].effect.timing.duration, 3500);
assert_equals(animations[3].currentTime, 4000);
assert_equals(animations[3].effect.timing.duration, 4500);
}, 'Mixed multiple same animation names should persist based on their same name relative position');
test(() => {
clearAnimations();
setAnimationProperty('a 1500ms paused, a 2500ms paused, a 3500ms paused');
var animations = getAnimations();
assert_equals(animations.length, 3);
animations[0].currentTime = 1000;
animations[1].currentTime = 2000;
animations[2].currentTime = 3000;
setAnimationProperty('a 1500ms paused, b 2500ms paused, a 3500ms paused');
animations = getAnimations();
assert_equals(animations.length, 3);
assert_equals(animations[0].currentTime, 1000);
assert_equals(animations[0].effect.timing.duration, 1500);
assert_equals(animations[1].currentTime, 2000);
assert_equals(animations[1].effect.timing.duration, 3500);
assert_equals(animations[2].currentTime, null);
assert_equals(animations[2].effect.timing.duration, 2500);
}, 'Removing same animation names should cancel animations from the end of the name list.');
test(() => {
clearAnimations();
setAnimationProperty('a 1500ms paused, a 2500ms paused');
var animations = getAnimations();
assert_equals(animations.length, 2);
animations[0].currentTime = 1000;
animations[1].currentTime = 2000;
setAnimationProperty('a 3500ms paused, a 2500ms paused, a 1500ms paused');
animations = getAnimations();
assert_equals(animations.length, 3);
assert_equals(animations[0].currentTime, 1000);
assert_equals(animations[0].effect.timing.duration, 3500);
assert_equals(animations[1].currentTime, 2000);
assert_equals(animations[1].effect.timing.duration, 2500);
assert_equals(animations[2].currentTime, null);
assert_equals(animations[2].effect.timing.duration, 1500);
}, 'Adding same animation names should start additional animations from the end of the name list.');
</script>