<!DOCTYPE html>
<html>
<head>
    <title>CSS Variables - Animation - Substitute Into Keyframe with Shorthand</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 { border: 1px solid blue; }
            to { border: 1px solid 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
        {
            border: 1px solid red;
            --endColor: green;
        }
    </style>
</head>
<body>

    <div id="target">The border around 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("border-bottom-color").trim(),
            ["rgb(0, 0, 255)", "rgba(0, 0, 255, 1)"],
            "border-bottom-color is blue before animation runs");
        }, "Verify border-bottom-color before animation");

    var animationTest = async_test("Verify border-bottom-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("border-bottom-color").trim(),
            ["rgb(0, 128, 0)", "rgba(0, 128, 0, 1)"],
            "border-bottom-color is green after animation runs")
            animationTest.done();
            }));

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

</body>
</html>
