summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/css/css-easing/linear-timing-functions-output.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/css/css-easing/linear-timing-functions-output.html')
-rw-r--r--testing/web-platform/tests/css/css-easing/linear-timing-functions-output.html100
1 files changed, 100 insertions, 0 deletions
diff --git a/testing/web-platform/tests/css/css-easing/linear-timing-functions-output.html b/testing/web-platform/tests/css/css-easing/linear-timing-functions-output.html
new file mode 100644
index 0000000000..ef157e2e28
--- /dev/null
+++ b/testing/web-platform/tests/css/css-easing/linear-timing-functions-output.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<meta name="assert" content="This test checks the output of linear timing functions" />
+<title>Tests for the output of linear timing functions</title>
+<link rel="help" href="https://drafts.csswg.org/css-easing-2/#the-linear-easing-function">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="support/util.js"></script>
+<script src="testcommon.js"></script>
+<body>
+<div id="log"></div>
+<script>
+'use strict';
+
+function assert_style_left_at(animation, time, expected_y) {
+ animation.currentTime = time;
+ assert_approx_equals(pxToNum(getComputedStyle(animation.effect.target).left),
+ expected_y * 100,
+ 0.01,
+ 'The left of the animation should be approximately ' +
+ expected_y * 100 + ' at ' + time + 'ms');
+}
+
+function assert_animations_equal_at(actual_animation, expected_animation, time) {
+ actual_animation.currentTime = time;
+ var actual_left = pxToNum(getComputedStyle(actual_animation.effect.target).left);
+ expected_animation.currentTime = time;
+ var expected_left = pxToNum(getComputedStyle(expected_animation.effect.target).left);
+ assert_approx_equals(actual_left,
+ expected_left,
+ 0.01,
+ 'The left of the animation should be approximately ' +
+ expected_left + ' at ' + time + 'ms');
+}
+
+function create_animated_div(t, easing_function) {
+ var target = createDiv(t);
+ target.style.position = 'absolute';
+ return target.animate(
+ [ { left: '0px' },
+ { left: '100px' } ],
+ { duration: 1000,
+ fill: 'forwards',
+ easing: easing_function });
+}
+
+test(function(t) {
+ var anim = create_animated_div(t, 'linear(0, 1.5, 1)');
+
+ assert_style_left_at(anim, 0, 0.0);
+ assert_style_left_at(anim, 250, 0.75);
+ assert_style_left_at(anim, 500, 1.5);
+ assert_style_left_at(anim, 750, 1.25);
+ assert_style_left_at(anim, 1000, 1.00);
+}, 'linear function easing with output greater than 1');
+
+test(function(t) {
+ var anim = create_animated_div(t, 'linear(1, -0.5, 0)');
+
+ assert_style_left_at(anim, 0, 1.0);
+ assert_style_left_at(anim, 250, 0.25);
+ assert_style_left_at(anim, 500, -0.5);
+ assert_style_left_at(anim, 750, -0.25);
+ assert_style_left_at(anim, 1000, 0.00);
+}, 'linear function easing with output less than 1');
+
+test(function(t) {
+ var anim = create_animated_div(t, 'linear(0.2 0% 20%, 0.4 20% 40%, 0.6 40% 60%, 0.8 60% 80%, 1.0 80% 100%)');
+ var equiv = create_animated_div(t, 'steps(5, jump-start)');
+
+ assert_animations_equal_at(anim, equiv, 0);
+ assert_animations_equal_at(anim, equiv, 200);
+ assert_animations_equal_at(anim, equiv, 400);
+ assert_animations_equal_at(anim, equiv, 600);
+ assert_animations_equal_at(anim, equiv, 800);
+ assert_animations_equal_at(anim, equiv, 1000);
+}, 'linear function easing, steps equivalent');
+
+test(function(t) {
+ var anim = create_animated_div(t, 'linear(0, 0.1 -10%, 1)');
+ var equiv = create_animated_div(t, 'linear(0, 0.1 0%, 1)');
+
+ assert_animations_equal_at(anim, equiv, 0);
+ assert_animations_equal_at(anim, equiv, 100);
+ assert_animations_equal_at(anim, equiv, 550);
+ assert_animations_equal_at(anim, equiv, 1000);
+}, 'linear function easing, input value being unspecified in the first entry implies zero');
+
+test(function(t) {
+ var anim = create_animated_div(t, 'linear(0, 0.9 110%, 1)');
+ var equiv = create_animated_div(t, 'linear(0, 0.9 110%, 1 110%)');
+
+ assert_animations_equal_at(anim, equiv, 0);
+ assert_animations_equal_at(anim, equiv, 450);
+ assert_animations_equal_at(anim, equiv, 900);
+ assert_animations_equal_at(anim, equiv, 950);
+ assert_animations_equal_at(anim, equiv, 1000);
+}, 'linear function easing, input value being unspecified in the last entry implies max input value');
+</script>
+</body>