blob: a5c81a29bd9d975c93e652edb614f6dbb1570e3b [file] [log] [blame]
<!DOCTYPE html>
<meta charset=utf-8>
<title>KeyframeEffect.setKeyframes</title>
<link rel="help" href="https://drafts.csswg.org/web-animations/#dom-keyframeeffect-setkeyframes">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../testcommon.js"></script>
<script src="../../resources/keyframe-utils.js"></script>
<script src="../../resources/keyframe-tests.js"></script>
<body>
<div id="log"></div>
<div id="target"></div>
<script>
'use strict';
const target = document.getElementById('target');
test(t => {
for (const frame of gEmptyKeyframeListTests) {
const effect = new KeyframeEffect(target, {});
effect.setKeyframes(frame);
assert_frame_lists_equal(effect.getKeyframes(), []);
}
}, 'Keyframes can be replaced with an empty keyframe');
for (const subtest of gKeyframesTests) {
test(t => {
const effect = new KeyframeEffect(target, {});
effect.setKeyframes(subtest.input);
assert_frame_lists_equal(effect.getKeyframes(), subtest.output);
}, `Keyframes can be replaced with ${subtest.desc}`);
}
for (const subtest of gInvalidKeyframesTests) {
test(t => {
const effect = new KeyframeEffect(target, {});
assert_throws_js(TypeError, () => {
effect.setKeyframes(subtest.input);
});
}, `KeyframeEffect constructor throws with ${subtest.desc}`);
}
test(t => {
const frames1 = [ { left: '100px' }, { left: '200px' } ];
const frames2 = [ { left: '200px' }, { left: '300px' } ];
const animation = target.animate(frames1, 1000);
animation.currentTime = 500;
assert_equals(getComputedStyle(target).left, "150px");
animation.effect.setKeyframes(frames2);
assert_equals(getComputedStyle(target).left, "250px");
}, 'Changes made via setKeyframes should be immediately visible in style');
</script>
</body>