<!DOCTYPE html>
<html>
<head>
    <title>CSS Variables - Transitions - From no value to value</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>
        #target
        {
            transition-property: --value;
            transition-duration: 1s;
        }
        #target
        {
            color: var(--value);
        }
    </style>
</head>
<body>

    <div id="target">This text should transition from black 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() {
        assert_equals(window.getComputedStyle(document.getElementById("target")).getPropertyValue("--value").trim(), "", "--value has no value before transition runs");
        }, "Verify CSS variable value before transition");

    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, 0)", "rgba(0, 0, 0, 1)"],
            "color is black before transition runs");
        }, "Verify substituted color value before transition");

    var afterAnimationVariableTest = async_test("Verify CSS variable value after transition");
    document.getElementById("target").addEventListener("transitionend", afterAnimationVariableTest.step_func_done(function() {
        assert_equals(window.getComputedStyle(document.getElementById("target")).getPropertyValue("--value").trim(), "green", "--value is green after transition runs")
        }));

    var afterAnimationColorTest = async_test("Verify substituted color value after transition");
    document.getElementById("target").addEventListener("transitionend", afterAnimationColorTest.step_func_done(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 transition runs")
        }));

    // Trigger transition
    document.getElementById("target").setAttribute("style", "--value: green");

    // Force another layout pass
    document.documentElement.offsetHeight;
</script>

</body>
</html>
