| <!DOCTYPE HTML> |
| <html> |
| <head> |
| <meta charset=utf8> |
| <script src="../resources/js-test-pre.js"></script> |
| <style> |
| @supports (width: 0) { |
| s { width: 0; } |
| @supports (width: 1) { |
| s { color: #000; } |
| @import url("../fast/cssom/resources/import.css"); |
| @charset "UTF-8"; |
| @namespace ""; |
| } |
| } |
| |
| @supports (( ( padding: 0) and (display: none)) or (display: rainbow)) { |
| dfn { width:0; } |
| |
| @supports (width: 0) { |
| br { height:0; } |
| } |
| |
| /* Rules with syntax errors should be ignored. */ |
| @supports (display: none); |
| @supports (display: none)) ; |
| @supports; |
| @supports ; |
| @supports (display: none)) {} |
| @supports (display: )) {} |
| @supports ((display: none) and {} |
| @supports (display: none) {} |
| ); |
| @supports ((display: none) and ; |
| @supports (display: none) {} |
| ); |
| |
| ol { display:none; } |
| } |
| |
| @media all { |
| @supports ( padding: 0) { |
| @page :left { top: 0 } |
| } |
| } |
| |
| @supports (border: black) and (padding: 0) and (width: 0) { |
| dfn { width:0; } |
| } |
| </style> |
| </head> |
| <body> |
| <script> |
| description("Test CSSSupportRule."); |
| |
| |
| shouldBeDefined("CSSRule.SUPPORTS_RULE"); |
| |
| evalAndLog("rules = document.styleSheets[1].cssRules"); |
| shouldEvaluateTo("rules.length", 4); |
| shouldBe("rules[0].type", "CSSRule.SUPPORTS_RULE"); |
| shouldEvaluateTo("rules[0].cssRules.length", 2); |
| shouldBe("rules[0].cssRules[0].type", "CSSRule.STYLE_RULE"); |
| shouldBe("rules[0].cssRules[1].type", "CSSRule.SUPPORTS_RULE"); |
| shouldEvaluateTo("rules[0].cssRules[1].cssRules.length", 1); |
| shouldBe("rules[0].cssRules[1].cssRules[0].type", "CSSRule.STYLE_RULE"); |
| shouldBeEqualToString("rules[0].conditionText", "(width: 0)"); |
| shouldBeEqualToString("rules[0].cssText", |
| "@supports (width: 0) {\n" + |
| " s { width: 0px; }\n" + |
| " @supports (width: 1) {\n" + |
| " s { color: rgb(0, 0, 0); }\n" + |
| "}\n" + |
| "}"); |
| |
| debug("\nInserting and deleting rules."); |
| evalAndLog("rules[0].insertRule('@media all { #s { width: 0px; } }', 2)"); |
| shouldEvaluateTo("rules[0].cssRules.length", 3); |
| shouldBe("rules[0].cssRules[2].type", "CSSRule.MEDIA_RULE"); |
| evalAndLog("rules[0].deleteRule(2)"); |
| shouldEvaluateTo("rules[0].cssRules.length", 2); |
| |
| evalAndLog("rules[0].cssRules[1].insertRule('@supports (display: rainbow) {}', 1)"); |
| shouldEvaluateTo("rules[0].cssRules[1].cssRules.length", 2); |
| shouldBe("rules[0].cssRules[1].cssRules[1].type", "CSSRule.SUPPORTS_RULE"); |
| evalAndLog("rules[0].cssRules[1].deleteRule(1)"); |
| shouldEvaluateTo("rules[0].cssRules.length", 2); |
| |
| debug("\n@charset, @namespace, @import rules are not allowed inside @supports.") |
| shouldThrow("rules[0].insertRule('@charset \"UTF-8\"', 2)"); |
| shouldThrow("rules[0].insertRule('@namespace \"\"', 2)"); |
| shouldThrow("rules[0].insertRule('@import url(\"../fast/cssom/resources/import.css\")', 2)"); |
| |
| |
| debug("\nWhitespace and formatting should be preserved within the condition, whitespace outside the condition should be trimmed."); |
| shouldBeEqualToString("rules[1].conditionText", "(( ( padding: 0) and (display: none)) or (display: rainbow))"); |
| |
| |
| debug("\n@supports rule nested inside a media rule."); |
| shouldBe("rules[2].type", "CSSRule.MEDIA_RULE"); |
| shouldEvaluateTo("rules[2].cssRules.length", 1); |
| shouldBe("rules[2].cssRules[0].type", "CSSRule.SUPPORTS_RULE"); |
| shouldBeEqualToString("rules[2].cssRules[0].conditionText", "( padding: 0)"); |
| shouldEvaluateTo("rules[0].cssRules[1].cssRules.length", 1); |
| shouldBe("rules[2].cssRules[0].cssRules[0].type", "CSSRule.PAGE_RULE"); |
| shouldBeEqualToString("rules[2].cssText", |
| "@media all { \n" + |
| " @supports ( padding: 0) {\n" + |
| " @page :left { top: 0px; }\n" + |
| "}\n" + |
| "}"); |
| |
| |
| debug("\nNo extra parens should be added to the conditionText."); |
| shouldBeEqualToString("rules[3].conditionText", "(border: black) and (padding: 0) and (width: 0)"); |
| |
| |
| debug("\nDeleting a top-level rule should work correctly."); |
| evalAndLog("document.styleSheets[1].deleteRule(3)"); |
| shouldEvaluateTo("rules.length", 3); |
| shouldBe("rules[0].type", "CSSRule.SUPPORTS_RULE"); |
| shouldEvaluateTo("rules[0].cssRules.length", 2); |
| shouldBe("rules[0].cssRules[0].type", "CSSRule.STYLE_RULE"); |
| shouldBe("rules[0].cssRules[1].type", "CSSRule.SUPPORTS_RULE"); |
| shouldEvaluateTo("rules[0].cssRules[1].cssRules.length", 1); |
| shouldBe("rules[0].cssRules[1].cssRules[0].type", "CSSRule.STYLE_RULE"); |
| |
| </script> |
| <script src="../resources/js-test-post.js"></script> |
| </body> |
| </html> |
| |