| <!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> |