<!DOCTYPE html>
<html>
    <head>
        <title>CSSOM: CSSStyleDeclaration (set|remove)PropertyValue sets/removes shorthand properties</title>
        <link rel="author" title="Paul Irish" href="mailto:paul.irish@gmail.com">
        <link rel="help" href="http://www.w3.org/TR/cssom-1/#the-cssstyledeclaration-interface">

        <link rel="source" href="http://trac.webkit.org/export/120528/trunk/LayoutTests/fast/css/cssom-remove-shorthand-property.html">
        <meta name="flags" content="dom">

        <script src="/resources/testharness.js"></script>
        <script src="/resources/testharnessreport.js"></script>
    </head>

    <body>
        <div id="log"></div>

        <div id="box"></div>

        <script>
            shorthandProperties = [
                "font",
                "border-top",
                "border-right",
                "border-bottom",
                "border-left",
                "border",
                "border-color",
                "border-style",
                "border-width",
                "background-position",
                "background-repeat",
                "border-spacing",
                "list-style",
                "margin",
                "outline",
                "padding",
                "background",
                "overflow",
                "border-radius"
            ];

            element = document.createElement('span');

            function canSetProperty(propertyName, priority) {
                element.style.setProperty(propertyName, 'initial', priority);
                return element.style.getPropertyValue(propertyName) == 'initial';
            }

            function canRemoveProperty(propertyName) {
                element.style.removeProperty(propertyName);
                return element.style.getPropertyValue(propertyName) != 'initial';
            }

            for (i = 0; i < shorthandProperties.length; ++i) {
                var propertyName = shorthandProperties[i];

                test(function(){
                    assert_true(canSetProperty(propertyName, ''), 'can setPropertyValue with shorthand');
                }, 'shorthand ' + propertyName + ' can be set with setProperty');

                test(function(){
                    assert_true(canRemoveProperty(propertyName), 'can setPropertyValue with shorthand');
                }, 'shorthand ' + propertyName + ' can be removed with removeProperty');

                test(function(){
                    assert_true(canSetProperty(propertyName, 'important'), 'can setPropertyValue with shorthand');
                }, 'shorthand ' + propertyName + ' can be set with setProperty and priority !important');

                test(function(){
                    assert_true(canRemoveProperty(propertyName), 'can setPropertyValue with shorthand');
                }, 'shorthand ' + propertyName + ' can be removed with removeProperty even when set with !important');

            }
        </script>
    </body>
</html>
