Index: third_party/WebKit/LayoutTests/external/wpt/web-animations/timing-model/time-transformations/transformed-progress.html |
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-animations/timing-model/time-transformations/transformed-progress.html b/third_party/WebKit/LayoutTests/external/wpt/web-animations/timing-model/time-transformations/transformed-progress.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3d97e4c1e0f72cdb33e42febde4d01eb5d250657 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/external/wpt/web-animations/timing-model/time-transformations/transformed-progress.html |
@@ -0,0 +1,272 @@ |
+<!DOCTYPE html> |
+<meta charset=utf-8> |
+<title>Tests for the transformed progress</title> |
+<link rel="help" href="https://w3c.github.io/web-animations/#calculating-the-transformed-progress"> |
+<script src="/resources/testharness.js"></script> |
+<script src="/resources/testharnessreport.js"></script> |
+<script src="../../testcommon.js"></script> |
+<script src="../../resources/easing-tests.js"></script> |
+<body> |
+<div id="log"></div> |
+<div id="target"></div> |
+<script> |
+'use strict'; |
+ |
+gEasingTests.forEach(params => { |
+ test(function(t) { |
+ const target = createDiv(t); |
+ const anim = target.animate(null, { duration: 1000, |
+ fill: 'forwards', |
+ easing: params.easing }); |
+ |
+ [ 0, 250, 500, 750, 1000 ].forEach(sampleTime => { |
+ anim.currentTime = sampleTime; |
+ const portion = sampleTime / anim.effect.getComputedTiming().duration; |
+ const expectedProgress = params.easingFunction(portion); |
+ assert_approx_equals(anim.effect.getComputedTiming().progress, |
+ expectedProgress, |
+ 0.01, |
+ 'The progress should be approximately ' + |
+ expectedProgress + ` at ${sampleTime}ms`); |
+ }); |
+ }, 'Transformed progress for ' + params.desc); |
+}); |
+ |
+// Additional tests for various boundary conditions of step timing functions |
+ |
+var gStepTimingFunctionTests = [ |
+ { |
+ description: 'Test bounds point of step-start easing', |
+ effect: { |
+ delay: 1000, |
+ duration: 1000, |
+ fill: 'both', |
+ easing: 'steps(2, start)' |
+ }, |
+ conditions: [ |
+ { currentTime: 0, progress: 0 }, |
+ { currentTime: 999, progress: 0 }, |
+ { currentTime: 1000, progress: 0.5 }, |
+ { currentTime: 1499, progress: 0.5 }, |
+ { currentTime: 1500, progress: 1 }, |
+ { currentTime: 2000, progress: 1 } |
+ ] |
+ }, |
+ { |
+ description: 'Test bounds point of step-start easing with reverse direction', |
+ effect: { |
+ delay: 1000, |
+ duration: 1000, |
+ fill: 'both', |
+ direction: 'reverse', |
+ easing: 'steps(2, start)' |
+ }, |
+ conditions: [ |
+ { currentTime: 0, progress: 1 }, |
+ { currentTime: 1001, progress: 1 }, |
+ { currentTime: 1500, progress: 1 }, |
+ { currentTime: 1501, progress: 0.5 }, |
+ { currentTime: 2000, progress: 0 }, |
+ { currentTime: 2500, progress: 0 } |
+ ] |
+ }, |
+ { |
+ description: 'Test bounds point of step-start easing ' + |
+ 'with iterationStart not at a transition point', |
+ effect: { |
+ delay: 1000, |
+ duration: 1000, |
+ fill: 'both', |
+ iterationStart: 0.25, |
+ easing: 'steps(2, start)' |
+ }, |
+ conditions: [ |
+ { currentTime: 0, progress: 0.5 }, |
+ { currentTime: 999, progress: 0.5 }, |
+ { currentTime: 1000, progress: 0.5 }, |
+ { currentTime: 1249, progress: 0.5 }, |
+ { currentTime: 1250, progress: 1 }, |
+ { currentTime: 1749, progress: 1 }, |
+ { currentTime: 1750, progress: 0.5 }, |
+ { currentTime: 2000, progress: 0.5 }, |
+ { currentTime: 2500, progress: 0.5 }, |
+ ] |
+ }, |
+ { |
+ description: 'Test bounds point of step-start easing ' + |
+ 'with iterationStart and delay', |
+ effect: { |
+ delay: 1000, |
+ duration: 1000, |
+ fill: 'both', |
+ iterationStart: 0.5, |
+ easing: 'steps(2, start)' |
+ }, |
+ conditions: [ |
+ { currentTime: 0, progress: 0.5 }, |
+ { currentTime: 999, progress: 0.5 }, |
+ { currentTime: 1000, progress: 1 }, |
+ { currentTime: 1499, progress: 1 }, |
+ { currentTime: 1500, progress: 0.5 }, |
+ { currentTime: 2000, progress: 1 } |
+ ] |
+ }, |
+ { |
+ description: 'Test bounds point of step-start easing ' + |
+ 'with iterationStart and reverse direction', |
+ effect: { |
+ delay: 1000, |
+ duration: 1000, |
+ fill: 'both', |
+ iterationStart: 0.5, |
+ direction: 'reverse', |
+ easing: 'steps(2, start)' |
+ }, |
+ conditions: [ |
+ { currentTime: 0, progress: 1 }, |
+ { currentTime: 1000, progress: 1 }, |
+ { currentTime: 1001, progress: 0.5 }, |
+ { currentTime: 1499, progress: 0.5 }, |
+ { currentTime: 1500, progress: 1 }, |
+ { currentTime: 1999, progress: 1 }, |
+ { currentTime: 2000, progress: 0.5 }, |
+ { currentTime: 2500, progress: 0.5 } |
+ ] |
+ }, |
+ { |
+ description: 'Test bounds point of step(4, start) easing ' + |
+ 'with iterationStart 0.75 and delay', |
+ effect: { |
+ duration: 1000, |
+ fill: 'both', |
+ delay: 1000, |
+ iterationStart: 0.75, |
+ easing: 'steps(4, start)' |
+ }, |
+ conditions: [ |
+ { currentTime: 0, progress: 0.75 }, |
+ { currentTime: 999, progress: 0.75 }, |
+ { currentTime: 1000, progress: 1 }, |
+ { currentTime: 2000, progress: 1 }, |
+ { currentTime: 2500, progress: 1 } |
+ ] |
+ }, |
+ { |
+ description: 'Test bounds point of step-start easing ' + |
+ 'with alternate direction', |
+ effect: { |
+ duration: 1000, |
+ fill: 'both', |
+ delay: 1000, |
+ iterations: 2, |
+ iterationStart: 1.5, |
+ direction: 'alternate', |
+ easing: 'steps(2, start)' |
+ }, |
+ conditions: [ |
+ { currentTime: 0, progress: 1 }, |
+ { currentTime: 1000, progress: 1 }, |
+ { currentTime: 1001, progress: 0.5 }, |
+ { currentTime: 2999, progress: 1 }, |
+ { currentTime: 3000, progress: 0.5 }, |
+ { currentTime: 3500, progress: 0.5 } |
+ ] |
+ }, |
+ { |
+ description: 'Test bounds point of step-start easing ' + |
+ 'with alternate-reverse direction', |
+ effect: { |
+ duration: 1000, |
+ fill: 'both', |
+ delay: 1000, |
+ iterations: 2, |
+ iterationStart: 0.5, |
+ direction: 'alternate-reverse', |
+ easing: 'steps(2, start)' |
+ }, |
+ conditions: [ |
+ { currentTime: 0, progress: 1 }, |
+ { currentTime: 1000, progress: 1 }, |
+ { currentTime: 1001, progress: 0.5 }, |
+ { currentTime: 2999, progress: 1 }, |
+ { currentTime: 3000, progress: 0.5 }, |
+ { currentTime: 3500, progress: 0.5 } |
+ ] |
+ }, |
+ { |
+ description: 'Test bounds point of step-end easing', |
+ effect: { |
+ delay: 1000, |
+ duration: 1000, |
+ fill: 'both', |
+ easing: 'steps(2, end)' |
+ }, |
+ conditions: [ |
+ { currentTime: 0, progress: 0 }, |
+ { currentTime: 999, progress: 0 }, |
+ { currentTime: 1000, progress: 0 }, |
+ { currentTime: 1499, progress: 0 }, |
+ { currentTime: 1500, progress: 0.5 }, |
+ { currentTime: 2000, progress: 1 } |
+ ] |
+ }, |
+ { |
+ description: 'Test bounds point of step-end easing ' + |
+ 'with iterationStart and delay', |
+ effect: { |
+ duration: 1000, |
+ fill: 'both', |
+ delay: 1000, |
+ iterationStart: 0.5, |
+ easing: 'steps(2, end)' |
+ }, |
+ conditions: [ |
+ { currentTime: 0, progress: 0 }, |
+ { currentTime: 999, progress: 0 }, |
+ { currentTime: 1000, progress: 0.5 }, |
+ { currentTime: 1499, progress: 0.5 }, |
+ { currentTime: 1500, progress: 0 }, |
+ { currentTime: 1999, progress: 0 }, |
+ { currentTime: 2000, progress: 0.5 }, |
+ { currentTime: 2500, progress: 0.5 } |
+ ] |
+ }, |
+ { |
+ description: 'Test bounds point of step-end easing ' + |
+ 'with iterationStart not at a transition point', |
+ effect: { |
+ delay: 1000, |
+ duration: 1000, |
+ fill: 'both', |
+ iterationStart: 0.75, |
+ easing: 'steps(2, end)' |
+ }, |
+ conditions: [ |
+ { currentTime: 0, progress: 0.5 }, |
+ { currentTime: 999, progress: 0.5 }, |
+ { currentTime: 1000, progress: 0.5 }, |
+ { currentTime: 1249, progress: 0.5 }, |
+ { currentTime: 1250, progress: 0 }, |
+ { currentTime: 1749, progress: 0 }, |
+ { currentTime: 1750, progress: 0.5 }, |
+ { currentTime: 2000, progress: 0.5 }, |
+ { currentTime: 2500, progress: 0.5 }, |
+ ] |
+ } |
+]; |
+ |
+gStepTimingFunctionTests.forEach(function(options) { |
+ test(function(t) { |
+ var target = createDiv(t); |
+ var animation = target.animate(null, options.effect); |
+ options.conditions.forEach(function(condition) { |
+ animation.currentTime = condition.currentTime; |
+ assert_equals(animation.effect.getComputedTiming().progress, |
+ condition.progress, |
+ 'Progress at ' + animation.currentTime + 'ms'); |
+ }); |
+ }, options.description); |
+}); |
+ |
+</script> |
+</body> |