<!doctype html>
<meta charset=utf-8>
<title>CSSAnimation.playState</title>
<!-- TODO: Add a more specific link for this once it is specified. -->
<link rel="help" href="https://drafts.csswg.org/css-animations-2/#cssanimation">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/testcommon.js"></script>
<style>
@keyframes anim { }
</style>
<div id="log"></div>
<script>
'use strict';

test(t => {
  const div = addDiv(t, { 'style': 'animation: anim 100s' });
  const animation = div.getAnimations()[0];
  assert_true(animation.pending);
  assert_equals(animation.playState, 'running');
  assert_equals(animation.startTime, null);
}, 'A new CSS animation is initially play-pending');

test(t => {
  const div = addDiv(t, { 'style': 'animation: anim 1000s paused' });
  const animation = div.getAnimations()[0];
  assert_equals(animation.playState, 'paused');
}, 'Animation returns correct playState when paused');

test(t => {
  const div = addDiv(t, { 'style': 'animation: anim 1000s' });
  const animation = div.getAnimations()[0];
  animation.pause();
  assert_equals(animation.playState, 'paused');
}, 'Animation.playState updates when paused by script');

test(t => {
  const div = addDiv(t, { 'style': 'animation: anim 1000s paused' });
  const animation = div.getAnimations()[0];
  div.style.animationPlayState = 'running';

  // This test also checks that calling playState flushes style
  assert_equals(animation.playState, 'running',
                'Animation.playState reports running after updating'
                + ' animation-play-state (got: ' + animation.playState + ')');
}, 'Animation.playState updates when resumed by setting style');

test(t => {
  const div = addDiv(t, { 'style': 'animation: anim 1000s' });
  const animation = div.getAnimations()[0];
  animation.cancel();
  assert_equals(animation.playState, 'idle');
}, 'Animation returns correct playState when canceled');

</script>
