<!DOCTYPE html>
<html>
<head>
    <title>CSS Variables - Animation - Substitute Within Keyframe - Multiple Substitution</title>

    <meta rel="author" title="Kevin Babbitt">
    <meta rel="author" title="Greg Whitworth">
    <link rel="author" title="Microsoft Corporation" href="http://microsoft.com" />
    <link rel="help" href="http://www.w3.org/TR/css-variables-1/#syntax">

    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <style>
        @keyframes coloranim
        {
            from { color: blue; }
            to { --myColor: green; --endColor: var(--myColor); color: var(--endColor); }
        }

        /* Start the animation in the paused state and fill at both ends so we can inspect values from both keyframes. */
        #target
        {
            animation-name: coloranim;
            animation-duration: 1s;
            animation-play-state: paused;
            animation-fill-mode: both;
        }
        #target
        {
            color: red;
            --myColor: red;
            --endColor: red;
        }
    </style>
</head>
<body>

    <div id="target">This text should animate from blue to green over a period of 1 second.</div>

<script type="text/javascript">
    "use strict";

    // Force an initial layout pass
    document.documentElement.offsetHeight;

    test(function() {
        // Different browsers generate interpolated colors differently, so check multiple valid forms.
        assert_in_array(window.getComputedStyle(document.getElementById("target")).getPropertyValue("color").trim(),
            ["rgb(0, 0, 255)", "rgba(0, 0, 255, 1)"],
            "color is blue before animation runs");
        }, "Verify color before animation");

    var animationTest = async_test("Verify color after animation");

    animationTest.step(function() {
        // Set event handler
        document.getElementById("target").addEventListener("animationend", animationTest.step_func(function() {
            assert_in_array(window.getComputedStyle(document.getElementById("target")).getPropertyValue("color").trim(),
                ["rgb(0, 128, 0)", "rgba(0, 128, 0, 1)"],
                "color is green after animation runs")
            animationTest.done();
            }));

        // Trigger animation
        document.getElementById("target").style.animationPlayState = "running";
    });
</script>

</body>
</html>
