<!DOCTYPE html><!-- webkit-test-runner [ enableCSSAnimationsAndCSSTransitionsBackedByWebAnimations=true ] -->
<meta charset=utf-8>
<meta name="assert"
content="This test checks the output of frame timing functions with different frame numbers" />
<title>Frames timing function output tests</title>
<link rel="help"
href="https://drafts.csswg.org/css-timing/#frames-timing-functions">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="testcommon.js"></script>
<style>
@keyframes anim {
  from { left: 0px; }
  to   { left: 100px; }
}
</style>
<body>
<div id="log"></div>
<script>
"use strict";

test(function(t) {
  const div = createDiv(t);
  div.style.animation = 'anim 10s frames(2) forwards';
  assert_equals(getComputedStyle(div).left, '0px');
}, 'For an input progress of 0.0, the output of a frames timing function is ' +
   'the first frame');

test(function(t) {
  const div = createDiv(t);
  div.style.animation = 'anim 10s frames(2) forwards';

  div.style.animationDelay = '-4999ms';
  assert_equals(getComputedStyle(div).left, '0px');
  div.style.animationDelay = '-5000ms';
  assert_equals(getComputedStyle(div).left, '100px');
}, 'At a frame boundary, the output of a frames timing function is the next ' +
   'frame');

test(function(t) {
  const div = createDiv(t);
  div.style.animation = 'anim 10s frames(2) forwards';

  div.style.animationDelay = '-10s';
  assert_equals(getComputedStyle(div).left, '100px');
}, 'For an input progress of 1.0, the output of a frames timing function is ' +
   'the final frame');

test(function(t) {
  const div = createDiv(t);
  div.style.animation = 'anim 11s frames(11) forwards';

  // We have 11 frames in 11s, so the first step happens at 1.0.
  div.style.animationDelay = '-999ms';
  assert_equals(getComputedStyle(div).left, '0px');
  div.style.animationDelay = '-1000ms';
  assert_equals(getComputedStyle(div).left, '10px');
}, 'The number of frames is correctly reflected in the frames timing ' +
   'function output');

test(function(t) {
  const div = createDiv(t);
  div.style.transition = 'left 11s frames(11)';

  // We have 11 frames in 11s, so the first step happens at 1.0.
  div.style.left = '0px';
  div.style.transitionDelay = '-999ms';
  getComputedStyle(div).left;
  div.style.left = '100px';
  assert_equals(getComputedStyle(div).left, '0px');

  div.style.left = '0px';
  div.style.transitionDelay = '-1000ms';
  getComputedStyle(div).left;
  div.style.left = '100px';
  assert_equals(getComputedStyle(div).left, '10px');
}, 'The number of frames is correctly reflected in the frames timing ' +
   'function output on CSS Transitions');

test(function(t) {
  var target = createDiv(t);
  target.style.position = 'absolute';
  var anim = target.animate([ { left: '0px', easing: 'frames(2)' },
                              { left: '100px' } ],
                            { duration: 1000,
                              fill: 'forwards',
                              easing: 'cubic-bezier(0, 1.5, 1, 1.5)' });

  // The bezier function produces values between 0.5 and 1 in
  // (~0.0442, 0.23368), and values between 1 and 2 in (0.23368794, 1).
  anim.currentTime = 0;
  assert_equals(getComputedStyle(target).left, '0px');
  anim.currentTime = 45;
  assert_equals(getComputedStyle(target).left, '100px');
  anim.currentTime = 230;
  assert_equals(getComputedStyle(target).left, '100px');
  anim.currentTime = 250;
  assert_equals(getComputedStyle(target).left, '200px');
  anim.currentTime = 1000;
  assert_equals(getComputedStyle(target).left, '100px');
}, 'frames easing with input progress greater than 1');

test(function(t) {
  var target = createDiv(t);
  target.style.position = 'absolute';
  var anim = target.animate([ { left: '0px', easing: 'frames(2)' },
                              { left: '100px' } ],
                            { duration: 1000,
                              fill: 'forwards',
                              easing: 'cubic-bezier(0, 3, 1, 3)' });

  // The bezier funciton produces values:
  // Input           ->  Output
  // 0.0                 0.0
  // 0.114 ~ 0.245       1.5~2.0, so frames(2) is 3.0
  // 0.245 ~ 0.6         2.0~2.4, so frames(2) is 4.0
  // 0.6   ~ 0.882       2.4~2.0, so frames(2) is 4.0
  // 0.882 ~ 0.976       2.0~1.5, so frames(2) is 3.0
  // 1.0                 1.0
  anim.currentTime = 0;
  assert_equals(getComputedStyle(target).left, '0px');
  anim.currentTime = 114;
  assert_equals(getComputedStyle(target).left, '300px');
  anim.currentTime = 500;
  assert_equals(getComputedStyle(target).left, '400px');
  anim.currentTime = 900;
  assert_equals(getComputedStyle(target).left, '300px');
}, 'frames easing with input progress greater than 1.5');

test(function(t) {
  var target = createDiv(t);
  target.style.position = 'absolute';
  var anim = target.animate([ { left: '0px', easing: 'frames(2)' },
                              { left: '100px' } ],
                            { duration: 1000,
                              fill: 'forwards',
                              easing: 'cubic-bezier(0, -0.5, 1, -0.5)' });

  // The bezier function produces negative values (but always greater than -0.5)
  // in (0, 0.766312060).
  anim.currentTime = 0;
  assert_equals(getComputedStyle(target).left, '0px');
  anim.currentTime = 750;
  assert_equals(getComputedStyle(target).left, '-100px');
  anim.currentTime = 800;
  assert_equals(getComputedStyle(target).left, '0px');
  anim.currentTime = 1000;
  assert_equals(getComputedStyle(target).left, '100px');
}, 'frames easing with input progress less than 0');

</script>
</body>
