Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test has a WPT meta file that expects 2 subtest issues.
- This WPT test may be referenced by the following Test IDs:
- /web-animations/interfaces/KeyframeEffect/setKeyframes.html - WPT Dashboard Interop Dashboard
<!DOCTYPE html>
<meta charset=utf-8>
<title>KeyframeEffect.setKeyframes</title>
<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>