<!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>
