<!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, writability and type of CSSStyleRule attributes");

        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>
