<!DOCTYPE html>
<html>
<head>
    <title>CSSOM CSSRule CSSStyleRule interface</title>
    <link rel="author" title="Letitia Lew" href="mailto:lew.letitia@gmail.com">
    <link rel="help" href="http://www.w3.org/TR/cssom-1/#css-rules">
    <link rel="help" href="http://www.w3.org/TR/cssom-1/#the-cssrule-interface">
    <link rel="help" href="http://www.w3.org/TR/cssom-1/#the-cssstylerule-interface">
    <meta name="flags" content="dom">
    <meta name="assert" content="All properties for this CSSStyleRule instance of CSSRule are initialized correctly">
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>

    <style id="styleElement" type="text/css">
        div { margin: 10px; padding: 0px; }
    </style>
</head>
<body>
    <div id="log"></div>

    <script type="text/javascript">
        var rule;
        setup(function() {
            var styleSheet = document.getElementById("styleElement").sheet;
            var ruleList = styleSheet.cssRules;
            rule = ruleList[0];
        });

        test(function() {
            assert_true(rule instanceof CSSRule);
            assert_true(rule instanceof CSSStyleRule);
        }, "CSSRule and CSSStyleRule types");

        test(function() {
            assert_equals(rule.STYLE_RULE, 1);
            assert_equals(rule.IMPORT_RULE, 3);
            assert_equals(rule.MEDIA_RULE, 4);
            assert_equals(rule.FONT_FACE_RULE, 5);
            assert_equals(rule.PAGE_RULE, 6);
            assert_equals(rule.NAMESPACE_RULE, 10);
            assert_idl_attribute(rule, "type");
            assert_equals(typeof rule.type, "number");
        }, "Type of CSSRule#type and constant values");

        test(function() {
            assert_true(rule instanceof CSSRule);
            assert_idl_attribute(rule, "cssText");
            assert_idl_attribute(rule, "parentRule");
            assert_idl_attribute(rule, "parentStyleSheet");
        }, "Existence of CSSRule attributes");

        test(function() {
            assert_readonly(rule, "type");
            assert_readonly(rule, "parentRule");
            assert_readonly(rule, "parentStyleSheet");
        }, "Writability of CSSRule attributes");

        test(function() {
            assert_equals(rule.type, rule.STYLE_RULE);
            assert_equals(typeof rule.cssText, "string");
            assert_equals(rule.cssText, "div { margin: 10px; padding: 0px; }");
            assert_equals(rule.parentRule, null);
            assert_true(rule.parentStyleSheet instanceof CSSStyleSheet);
        }, "Values of CSSRule attributes");

        test(function() {
            assert_idl_attribute(rule, "selectorText");
            assert_equals(typeof rule.selectorText, "string");
            assert_idl_attribute(rule, "style");
        }, "Existence and type of CSSStyleRule attributes");

        test(function() {
            // CSSStyleRule.style has PutForwards=cssText and SameObject.
            var initial = rule.style.cssText;
            var style = rule.style;

            rule.style = "";
            assert_equals(rule.style.cssText, "");
            assert_equals(rule.style, style);

            rule.style = "margin: 42px;";
            assert_equals(rule.style.margin, "42px");
            assert_equals(rule.style, style);

            rule.style = initial;
            assert_equals(rule.style, style);
        }, "Assigning to CSSStyleRule.style assigns to cssText; CSSStyleRule.style returns the same object");

        test(function() {
            assert_equals(rule.selectorText, "div");
            assert_true(rule.style instanceof CSSStyleDeclaration);
        }, "Values of CSSStyleRule attributes");

        test(function() {
            assert_equals(rule.style.margin, "10px");
            assert_equals(rule.style.padding, "0px");

            rule.style.padding = "5px";
            rule.style.border = "1px solid";

            assert_equals(rule.style.padding, "5px");
            assert_equals(rule.style.border, "1px solid");
        }, "Mutability of CSSStyleRule's style attribute");

        test(function() {
            rule.style = "margin: 15px; padding: 2px;";

            assert_equals(rule.style.margin, "15px", "margin");
            assert_equals(rule.style.padding, "2px", "padding");
        }, "CSSStyleRule's style has [PutForwards]");
    </script>
</body>
</html>
