<!DOCTYPE html>
<html>
<head>
    <title>CSS Variables - Animation - Substitute Within Keyframe - Fallback</title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>

    <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">
    <link rel="help" href="http://www.w3.org/TR/css-variables-1/#using-variables">
    <meta name="assert" content='The --endColor does the 50% flip and supports the fallback syntax'>

    <style>
        @keyframes coloranim
        {
            from { color: blue; }
            to { --endColor: var(--nonexistent, green); 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;
            --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>
