<!DOCTYPE html>
<html>
 <head>
  <title>CSS Test: Inline CSSStyleDeclaration</title>
  <link rel="author" title="Bear Travis" href="mailto:betravis@adobe.com">
  <link rel="help" href="http://www.w3.org/TR/cssom-1/#elementcssinlinestyle">
  <meta name="flags" content="dom">
  <meta name="assert" content="Inline CSSStyleDeclaration is properly initialized and can be modified through its interface">
  <script src="/resources/testharness.js" type="text/javascript"></script>
  <script src="/resources/testharnessreport.js" type="text/javascript"></script>
 </head>
 <script id="metadata_cache">/*
{
  "CSSStyleDeclaration_accessible": { "assert": "Can access CSSStyleDeclaration through style property" },
  "read": { "assert": "initial property values are correct" },
  "csstext_write": {
    "assert": ["setting cssText adds new properties",
               "setting cssText removes existing properties",
               "properties set through cssText are reflected in the computed style"]
  },
  "property_write": {
    "assert": ["setProperty adds new properties",
               "properties set through setProperty are reflected in the computed style"]
  },
  "shorthand_properties": { "assert": "shorthand property is expanded" }
}
*/</script>
 <body>
 <noscript>Test not run - javascript required.</noscript>
 <div id="log"></div>
 <div id="test" style="margin-left: 5px;"></div>
 <script type="text/javascript">
    test(function() {
        var test = document.getElementById("test");
        assert_own_property(test, "style");
        assert_readonly(test, "style");
        declaration = test.style;
    }, "CSSStyleDeclaration_accessible", {
        assert: "Can access CSSStyleDeclaration through style property"
    });

    test(function() {
        assert_regexp_match(declaration.cssText, /margin-left: 5px;\s*/);
        assert_equals(declaration.getPropertyValue("margin-left"), "5px");
    }, "read", {
        assert: "initial property values are correct"
    });

    test(function() {
        declaration.cssText = "margin-left: 10px; padding-left: 10px;";
        assert_regexp_match(declaration.cssText, /margin-left: 10px;\s+padding-left: 10px;\s+/);
        assert_equals(declaration.length, 2);
        assert_equals(declaration.item(0), "margin-left");
        assert_equals(declaration.item(1), "padding-left");
        assert_equals(declaration.getPropertyValue("margin-left"), "10px");
        assert_equals(declaration.getPropertyValue("padding-left"), "10px");

        var computedStyle = window.getComputedStyle(document.getElementById("test"));
        assert_equals(computedStyle.getPropertyValue("margin-left"), "10px");
        assert_equals(computedStyle.getPropertyValue("padding-left"), "10px");
    }, "csstext_write", {
        assert: [ "setting cssText adds new properties",
                "setting cssText removes existing properties",
                "properties set through cssText are reflected in the computed style"]
    });

    test(function() {
        while(declaration.length > 0)
            declaration.removeProperty(declaration.item(0));
        declaration.setProperty("margin-left", "15px");
        declaration.setProperty("padding-left", "15px");

        assert_equals(declaration.length, 2);
        assert_equals(declaration.item(0), "margin-left");
        assert_equals(declaration.item(1), "padding-left");
        assert_equals(declaration.getPropertyValue("margin-left"), "15px");
        assert_equals(declaration.getPropertyValue("padding-left"), "15px");

        var computedStyle = window.getComputedStyle(document.getElementById("test"));
        assert_equals(computedStyle.getPropertyValue("margin-left"), "15px");
        assert_equals(computedStyle.getPropertyValue("padding-left"), "15px");
    }, "property_write", {
        assert: [ "setProperty adds new properties",
                "properties set through setProperty are reflected in the computed style"]
    });

    test(function() {
        while(declaration.length > 0)
            declaration.removeProperty(declaration.item(0));
        declaration.cssText = "margin: 20px";
        assert_equals(declaration.getPropertyValue("margin-top"), "20px");
        assert_equals(declaration.getPropertyValue("margin-right"), "20px");
        assert_equals(declaration.getPropertyValue("margin-bottom"), "20px");
        assert_equals(declaration.getPropertyValue("margin-left"), "20px");
    }, "shorthand_properties", {
        assert: "shorthand property is expanded"
    });
 </script>
 </body>
</html>
