<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Animations: parsing computedStyle.animation</title>
<link rel="help" href="https://drafts.csswg.org/css-animations/#animation">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="test1"></div>
<div id="test2"></div>
<script>
function testComputedStyle(computedStyle1, computedStyle2, name) {
  assert_equals(computedStyle1.animationName, name, "computedStyle1.animationName");
  assert_equals(computedStyle2.animationName, name, "computedStyle2.animationName");
  assert_equals(computedStyle1.animation, computedStyle2.animation,
                "computedStyle1 and computedStyle2 should have the same animation");
}

function testAnimation(input, name) {
  var style1 = test1.style;
  var style2 = test2.style;
  var computedStyle1 = getComputedStyle(test1);
  var computedStyle2 = getComputedStyle(test2);

  style1.animation = input;
  style2.animation = style1.animation;
  testComputedStyle(computedStyle1, computedStyle2, name);
  style2.animation = computedStyle1.animation;
  testComputedStyle(computedStyle1, computedStyle2, name);
}

test(() => {
  // We are duplicating the logic of testAnimation because the animationName of
  // the getComputedStyle is "none" when there is no animation.
  var style1 = test1.style;
  var style2 = test2.style;
  var computedStyle1 = getComputedStyle(test1);
  var computedStyle2 = getComputedStyle(test2);

  style1.animation = "";
  style2.animation = style1.animation;
  testComputedStyle(computedStyle1, computedStyle2, "none");
  style2.animation = computedStyle1.animation;
  assert_equals(computedStyle2.animationName, "none");
}, "Test animation name being empty.");

test(() => {
  testAnimation("myShorthandAnim", "myShorthandAnim");
}, "Test a non-conflicting animation name.");

test(() => {
  testAnimation("none", "none");
  testAnimation("forwards", "none");
  testAnimation("none forwards", "forwards");
}, "Test an animation name that is the same as a possible animation fill-mode.");

test(() => {
  testAnimation("normal", "none");
  testAnimation("reverse", "none");
  testAnimation("normal normal", "normal");
  testAnimation("normal reverse", "reverse");
}, "Test an animation name that is the same as a possible animation direction.");

test(() => {
  testAnimation("running", "none");
  testAnimation("paused", "none");
  testAnimation("running running", "running");
  testAnimation("running paused", "paused");
}, "Test an animation name that is the same as a possible running state.");
</script>
