<!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>
 <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_idl_attribute(test, "style");
        declaration = test.style;
    }, "CSSStyleDeclaration_accessible", {
        assert: "Can access CSSStyleDeclaration through style property"
    });

    test(function() {
        assert_equals(declaration.cssText, "margin-left: 5px;");
        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_equals(declaration.cssText, "margin-left: 10px; padding-left: 10px;");
        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>
