| /* |
| * Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| * for details. All rights reserved. Use of this source code is governed by a |
| * BSD-style license that can be found in the LICENSE file. |
| */ |
| /** |
| * @description Test nested at-rules. |
| */ |
| import "dart:html"; |
| import "../../testcommon.dart"; |
| import "../../../Utils/async_utils.dart"; |
| import "pwd.dart"; |
| |
| main() { |
| var index = document.getElementsByTagName("style").length; // skip test framework's ones |
| |
| var style = new Element.html(''' |
| <style> |
| .test { |
| content: "UNTOUCHED"; |
| } |
| |
| @media all { |
| @media all { |
| @font-face { |
| src: local('Courier'); |
| font-family: Courier; |
| } |
| |
| @page :left { top: 0 } |
| |
| #t0 { content: "APPLIED" } |
| |
| @import url("$root/resources/import.css"); |
| @charset "UTF-8"; |
| @namespace ""; |
| } |
| @media all { |
| @media none { |
| #t1 { content: "APPLIED" } |
| } |
| } |
| } |
| </style> |
| ''', treeSanitizer: new NullTreeSanitizer()); |
| document.head.append(style); |
| |
| document.body.setInnerHtml(''' |
| <span id=t0 class=test></span> |
| <span id=t1 class=test></span> |
| <div>PASS</div> |
| ''', treeSanitizer: new NullTreeSanitizer()); |
| |
| asyncStart(); |
| window.onLoad.listen((_) { |
| CssStyleSheet ss = document.styleSheets[index]; |
| var rules = ss.cssRules; |
| shouldEvaluateTo(rules.length, 2); |
| |
| shouldBe(rules[0].type, CssRule.STYLE_RULE); |
| shouldBe(rules[1].type, CssRule.MEDIA_RULE); |
| shouldEvaluateTo(rules[1].cssRules.length, 2); |
| shouldBe(rules[1].cssRules[0].type, CssRule.MEDIA_RULE); |
| shouldEvaluateTo(rules[1].cssRules[0].cssRules.length, 3); |
| shouldBe(rules[1].cssRules[0].cssRules[0].type, CssRule.FONT_FACE_RULE); |
| shouldBe(rules[1].cssRules[0].cssRules[1].type, CssRule.PAGE_RULE); |
| shouldBe(rules[1].cssRules[0].cssRules[2].type, CssRule.STYLE_RULE); |
| shouldBe(rules[1].cssRules[0].cssRules[0].parentStyleSheet, document.styleSheets[index]); |
| shouldBe(rules[1].cssRules[0].cssRules[1].parentStyleSheet, document.styleSheets[index]); |
| shouldBe(rules[1].cssRules[0].cssRules[2].parentStyleSheet, document.styleSheets[index]); |
| |
| shouldBe(rules[1].cssRules[1].type, CssRule.MEDIA_RULE); |
| shouldEvaluateTo(rules[1].cssRules[1].cssRules.length, 1); |
| shouldBe(rules[1].cssRules[1].cssRules[0].type, CssRule.MEDIA_RULE); |
| rules[1].cssRules[1].insertRule('@media all { @page :left { top: 0; } }', 1); |
| shouldEvaluateTo(rules[1].cssRules[1].cssRules.length, 2); |
| shouldBe(rules[1].cssRules[1].cssRules[1].type, CssRule.MEDIA_RULE); |
| shouldBe(rules[1].cssRules[1].cssRules[1].cssRules[0].type, CssRule.PAGE_RULE); |
| |
| shouldBeLikeString(getComputedStyle(document.getElementById('t0')).content, "APPLIED"); |
| shouldBeLikeString(getComputedStyle(document.getElementById('t1')).content, "UNTOUCHED"); |
| |
| asyncEnd(); |
| }); |
| } |