<!DOCTYPE html>

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Test Changing Name of A Keyframes Rule Using CSSOM</title>
  <style type="text/css" media="screen">
    #box {
        position: relative;
        left: 0;
        top: 0;
        height: 100px;
        width: 100px;
        background-color: blue;
        animation-duration: 0.5s;
        animation-timing-function: linear;
        animation-repeat-count: infinite;
        animation-name: "bar";
    }
    @-webkit-keyframes "foo" {
        from { left: 100px; }
        40%  { left: 200px; }
        60%  { left: 200px; }
        to   { left: 300px; }
    }
    </style>
    <script src="../resources/testharness.js"></script>
 	<script src="../resources/testharnessreport.js"></script>
 	<script src="resources/animation-test.js"></script>
</head>
<body>
<div id="box"></div>
    <script type="text/javascript" charset="utf-8">

    function findKeyframesRule(rule)
    {
        var ss = document.styleSheets;
        for (var i = 0; i < ss.length; ++i) {
            for (var j = 0; j < ss[i].cssRules.length; ++j) {
                if (ss[i].cssRules[j].type == window.CSSRule.WEBKIT_KEYFRAMES_RULE && ss[i].cssRules[j].name == rule)
                    return ss[i].cssRules[j];
            }
        }

        return null;
    }

    promise_test(async t => {
        const delay = 100;
        const box = document.getElementById("box");
        const previousAnimationName = "foo";
        const newAnimationName = "anim";

        const test = new AnimationTest({
            target: box,
            styleExtractor: style => parseFloat(style.left)
        });

        // First, ensure that there is no animation running.
        assert_true(!test.animation, "There is no animation initially.");

        // Now, rename "@keyframes foo" to allow an animation to start.
        findKeyframesRule(previousAnimationName).name = newAnimationName;
        box.style.animationName = newAnimationName;

        // There should be a running animation now.
        assert_true(test.animation instanceof CSSAnimation, "There is an animation after changing the @keyframes rule.");

        // Record two computed values after the specified delay each and ensure they're not the same,
        // showing animated values are applied.
        const initialValue = await test.recordValueAfterRunningFor(delay);
        const currentValue = await test.recordValueAfterRunningFor(delay);
        assert_not_equals(initialValue, currentValue, "Values recorded while running aren't the same.");

        // Now, check the recorded values were correct.
        test.checkRecordedValues();
    }, `Test that dynamically changing the name of a @keyframes rule starts animations using that name.`);
  </script>
</body>
</html>
