| <!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> |