blob: 056ebe101c9717a1eb26f53f188c1f96cf91291e [file] [edit]
<!doctype html>
<title>@import and @namespace inside grouping rules should be dropped as invalid</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<link rel="help" href="https://drafts.csswg.org/css-syntax-3/#consume-an-at-rule">
<script>
"use strict";
function sheetRules(cssText) {
const style = document.createElement("style");
style.textContent = cssText;
document.head.append(style);
const rules = style.sheet.cssRules;
const result = [];
for (let i = 0; i < rules.length; i++) {
result.push(rules[i]);
}
style.remove();
return result;
}
test(() => {
const rules = sheetRules('@media all { @import url("data:text/css,"); }');
assert_equals(rules.length, 1, "should have @media rule");
assert_equals(rules[0].constructor.name, "CSSMediaRule");
assert_equals(rules[0].cssRules.length, 0, "@import inside @media should be dropped");
}, "@import inside @media rule is dropped");
test(() => {
const rules = sheetRules('@supports (color: red) { @import url("data:text/css,"); }');
assert_equals(rules.length, 1, "should have @supports rule");
assert_equals(rules[0].constructor.name, "CSSSupportsRule");
assert_equals(rules[0].cssRules.length, 0, "@import inside @supports should be dropped");
}, "@import inside @supports rule is dropped");
test(() => {
const rules = sheetRules('@media all { @namespace x url("urn:x"); }');
assert_equals(rules.length, 1, "should have @media rule");
assert_equals(rules[0].constructor.name, "CSSMediaRule");
assert_equals(rules[0].cssRules.length, 0, "@namespace inside @media should be dropped");
}, "@namespace inside @media rule is dropped");
test(() => {
const rules = sheetRules('@media all { @import url("data:text/css,"); p { color: red; } }');
assert_equals(rules.length, 1, "should have @media rule");
assert_equals(rules[0].cssRules.length, 1, "only the style rule should survive");
assert_equals(rules[0].cssRules[0].selectorText, "p");
}, "@import inside @media is dropped but subsequent rules survive");
</script>