<!DOCTYPE html>
<html>
<head>
    <title>test basic variable 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/#defining-variables">

    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <style>
        #testArea {
            color: orange;
        }
        #testArea  > div {
            width: 50px !important;
        }
    </style>
</head>
<body>
    <div id="log"></div>
    <div id="testArea"></div>
    <script type="text/javascript">
        "use strict";

        let templates = [
            {
                testName:"Simple substitution test",
                propertyName:"border-spacing",
                expectedValue:"20px",
                style:"--gap: 20px;border-spacing: var(--gap);"
            },
            {
                testName:"You can't build up a single token where part of it is provided by a variable",
                propertyName:"border-spacing",
                expectedValue:"0px",
                style:"--gap: 20;border-spacing: var(--gap)px;"
            },
            {
                testName:"You can't build up a single token where part of it is provided by a variable (percentages)",
                propertyName:"text-indent",
                expectedValue:"0px",
                style:"--v: 20;text-indent: var(--v)%;"
            },
            {
                testName:"Multiple variable references in a single property",
                propertyName:"border-spacing",
                expectedValue:"19px 47px",
                style:"--gap1: 19px;--gap2: 47px;border-spacing: var(--gap1) var(--gap2);"
            },
            {
                testName:"Multiple variable references in a single property (no spaces)",
                propertyName:"border-spacing",
                expectedValue:"23px 59px",
                style:"--gap1:23px;--gap2:59px;border-spacing:var(--gap1)var(--gap2);"
            },
            {
                testName:"Fallback value",
                propertyName:"border-spacing",
                expectedValue:"11px",
                style:"border-spacing:var(--gap,11px);"
            },
            {
                testName:"Fallback value which is also a variable reference",
                propertyName:"border-spacing",
                expectedValue:"27px",
                style:"--gap2: 27px; border-spacing:var(--gap,var(--gap2));"
            },
            {
                testName:"Multiple var references in fallback value",
                propertyName:"border-spacing",
                expectedValue:"66px 92px",
                style:"--gap2: 66px; --gap3: 92px; border-spacing:var(--gap,var(--gap2)var(--gap3));"
            },
            {
                testName:"Multiple nested fallbacks",
                propertyName:"border-spacing",
                expectedValue:"98px 18px",
                style:"--gap4: 98px 18px; border-spacing:var(--gap1,var(--gap2,var(--gap3,var(--gap4,var(--gap5)))));"
            },
            {
                testName:"Bad variable reference that should inherit by default",
                propertyName:"color",
                expectedValue:"rgb(255, 165, 0)",
                style:"color: var(--colorVar) pink;"
            },
            {
                testName:"Test that var reference doesn’t overwrite !important",
                propertyName:"width",
                expectedValue:"50px",
                style:"--varWidth: 28px; width: var(--varWidth);"
            },
            {
                testName:"Test that !important on a property that has a variable reference can overwrite !important",
                propertyName:"width",
                expectedValue:"28px",
                style:"--varWidth: 28px; width: var(--varWidth) !important;"
            },
            {
                testName:"Test that !important inside of var reference can't overwrite !important on property",
                propertyName:"width",
                expectedValue:"50px",
                style:"--varWidth: 28px !important; width: var(--varWidth);"
            },
        ];

        let testArea = document.getElementById("testArea");

        templates.forEach(function (template) {
            test( function () {
                let div = document.createElement("div");
                div.style.cssText = template.style;
                testArea.appendChild(div);
                let computedStyle = window.getComputedStyle(div);
                let value = computedStyle.getPropertyValue(template.propertyName);
                assert_equals(value, template.expectedValue, "Expected Value should match actual value");
                testArea.removeChild(div);
            }, template.testName);
        });
    </script>
</body>
</html>
