| <!doctype html><!-- webkit-test-runner [ enableCSSAnimationsAndCSSTransitionsBackedByWebAnimations=true ] --> |
| <meta charset=utf-8> |
| <script src="../../../resources/testharness.js"></script> |
| <script src="../../../resources/testharnessreport.js"></script> |
| <script src="../resources/testcommon.js"></script> |
| <style> |
| :root { |
| --var-100px: 100px; |
| } |
| </style> |
| <body> |
| <div id="log"></div> |
| <script> |
| 'use strict'; |
| |
| function getKeyframes(e) { |
| return e.getAnimations()[0].effect.getKeyframes(); |
| } |
| |
| function assert_frames_equal(a, b, name) { |
| assert_equals(Object.keys(a).sort().toString(), |
| Object.keys(b).sort().toString(), |
| "properties on " + name); |
| for (var p in a) { |
| assert_equals(a[p], b[p], "value for '" + p + "' on " + name); |
| } |
| } |
| |
| test(function(t) { |
| var div = addDiv(t); |
| |
| div.style.left = '0px'; |
| getComputedStyle(div).transitionProperty; |
| div.style.transition = 'left 100s'; |
| div.style.left = '100px'; |
| |
| var frames = getKeyframes(div); |
| |
| assert_equals(frames.length, 2, "number of frames"); |
| |
| var expected = [ |
| { offset: 0, computedOffset: 0, easing: "ease", composite: null, |
| left: "0px" }, |
| { offset: 1, computedOffset: 1, easing: "linear", composite: null, |
| left: "100px" }, |
| ]; |
| |
| for (var i = 0; i < frames.length; i++) { |
| assert_frames_equal(frames[i], expected[i], "ComputedKeyframe #" + i); |
| } |
| }, 'KeyframeEffectReadOnly.getKeyframes() returns expected frames for a simple' |
| + ' transition'); |
| |
| test(function(t) { |
| var div = addDiv(t); |
| |
| div.style.left = '0px'; |
| getComputedStyle(div).transitionProperty; |
| div.style.transition = 'left 100s steps(2,end)'; |
| div.style.left = '100px'; |
| |
| var frames = getKeyframes(div); |
| |
| assert_equals(frames.length, 2, "number of frames"); |
| |
| var expected = [ |
| { offset: 0, computedOffset: 0, easing: "steps(2)", composite: null, |
| left: "0px" }, |
| { offset: 1, computedOffset: 1, easing: "linear", composite: null, |
| left: "100px" }, |
| ]; |
| |
| for (var i = 0; i < frames.length; i++) { |
| assert_frames_equal(frames[i], expected[i], "ComputedKeyframe #" + i); |
| } |
| }, 'KeyframeEffectReadOnly.getKeyframes() returns expected frames for a simple' |
| + ' transition with a non-default easing function'); |
| |
| test(function(t) { |
| var div = addDiv(t); |
| div.style.left = '0px'; |
| getComputedStyle(div).transitionProperty; |
| div.style.transition = 'left 100s'; |
| div.style.left = 'var(--var-100px)'; |
| |
| var frames = getKeyframes(div); |
| |
| // CSS transition endpoints are based on the computed value so we |
| // shouldn't see the variable reference |
| var expected = [ |
| { offset: 0, computedOffset: 0, easing: 'ease', composite: null, |
| left: '0px' }, |
| { offset: 1, computedOffset: 1, easing: 'linear', composite: null, |
| left: '100px' }, |
| ]; |
| for (var i = 0; i < frames.length; i++) { |
| assert_frames_equal(frames[i], expected[i], "ComputedKeyframe #" + i); |
| } |
| }, 'KeyframeEffectReadOnly.getKeyframes() returns expected frames for a' |
| + ' transition with a CSS variable endpoint'); |
| |
| </script> |
| </body> |