summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/css/cssom/CSSStyleRule.html
blob: 3acdfb12852356ac28e91af25c82052d45864b0e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<!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>