<!doctype html>
<meta charset=utf-8>
<title>CSSTransition.startTime</title>
<!--  TODO: Add a more specific link for this once it is specified.  -->
<link rel="help" href="https://drafts.csswg.org/css-transitions-2/#csstransition">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/helper.js"></script>
<div id="log"></div>
<script>

'use strict';

test(t => {
  const div = addDiv(t, {
    style: 'margin-left: 100px; transition: margin-left 100s linear 100s',
  });
  getComputedStyle(div).marginLeft;
  div.style.marginLeft = '200px';
  const animation = div.getAnimations()[0];

  assert_equals(animation.startTime, null, 'startTime is unresolved');
}, 'The start time of a newly-created transition is unresolved');

promise_test(async t => {
  const div = addDiv(t);

  div.style.left = '0px';
  div.style.top = '0px';
  getComputedStyle(div).transitionProperty;

  div.style.transition = 'all 100s';
  div.style.left = '100px';
  div.style.top = '100px';

  let animations = div.getAnimations();
  assert_equals(animations.length, 2);
  await waitForAllAnimations(animations);

  assert_equals(animations[0].startTime, animations[1].startTime,
    'CSS transitions started together have the same start time');

  await waitForAnimationFrames(1);

  div.style.backgroundColor = 'green';

  animations = div.getAnimations();
  assert_equals(animations.length, 3);
  await waitForAllAnimations(animations);

  assert_less_than(animations[1].startTime, animations[2].startTime,
    'A CSS transition added in a later frame has a later start time');
}, 'The start time of transitions is based on when they are generated');

test(t => {
  const div = addDiv(t, {
    style: 'margin-left: 100px; transition: margin-left 100s linear 100s',
  });
  getComputedStyle(div).marginLeft;
  div.style.marginLeft = '200px';
  const animation = div.getAnimations()[0];

  const timelineTime = animation.timeline.currentTime;
  animation.startTime = timelineTime;

  assert_times_equal(
    animation.startTime,
    timelineTime,
    'Check setting of startTime actually works'
  );
}, 'The start time of a transition can be set');

promise_test(async t => {
  const div = addDiv(t, {
    style: 'margin-left: 100px; transition: margin-left 100s linear 100s',
  });
  getComputedStyle(div).marginLeft;
  div.style.marginLeft = '200px';
  const animation = div.getAnimations()[0];

  await animation.ready;

  const timelineTime = animation.timeline.currentTime;
  const marginLeft = () => parseFloat(getComputedStyle(div).marginLeft);

  animation.startTime = timelineTime - 100 * MS_PER_SEC;
  assert_equals(marginLeft(), 100);

  animation.startTime = timelineTime - 150 * MS_PER_SEC;
  assert_equals(marginLeft(), 150);
}, 'The start time can be set to seek a transition');

promise_test(async t => {
  const div = addDiv(t, {
    style: 'margin-left: 100px; transition: margin-left 100s linear 100s',
  });
  const eventWatcher = new EventWatcher(t, div, [
    'transitionstart',
    'transitionend',
  ]);
  getComputedStyle(div).marginLeft;
  div.style.marginLeft = '200px';
  const animation = div.getAnimations()[0];

  await animation.ready;

  const timelineTime = animation.timeline.currentTime;

  animation.startTime = timelineTime - 100 * MS_PER_SEC;
  await frameTimeout(
    eventWatcher.wait_for('transitionstart'),
    2,
    'transitionstart'
  );

  animation.startTime = timelineTime - 200 * MS_PER_SEC;
  await frameTimeout(
    eventWatcher.wait_for('transitionend'),
    2,
    'transitionend'
  );
}, 'Seeking a transition using start time dispatches transition events');

</script>
