| <!DOCTYPE html> |
| <script src='../../resources/testharness.js'></script> |
| <script src='../../resources/testharnessreport.js'></script> |
| <script> |
| var rules = [ |
| "::slotted { display: block; }", /* invalid - no parameter */ |
| "::slotted() { display: block; }", /* invalid - empty parameter */ |
| "::slotted(*) { display: block; }", |
| "*::slotted(*) { display: block; }", |
| "::slotted(div) { display: block; }", /* expects universal selector (*) on the left in cssText */ |
| "::slotted( div) { display: block; }", /* allow a space on left */ |
| "::slotted(div ) { display: block; }", /* allow a space on right */ |
| "::slotted(div::before) { display: block; }", /* having a pseudo element in () is invalid */ |
| ".foo::slotted(div) { color: blue; }", |
| "#id::slotted(*) { color: blue; }", |
| "[attr=foo]::slotted(*) { color: blue; }", |
| ".foo .bar::slotted(div) { color: blue; }", |
| ".foo::before .bar::slotted(div) { color: blue; }", /* invalid, only one pseudo element is allowed at the rightmost compound */ |
| ".foo::slotted(div) .bar { color: blue; }", /* invalid, same as above */ |
| "::slotted(div, div) { color: blue; }", /* invalid - selector list */ |
| "::slotted(div div) { color: blue; }", /* invalid - complex selector (combinator is used) */ |
| "slot::slotted(.green) { color: green; }", |
| "slot::slotted(#green) { color: green; }", |
| "slot::slotted([green=green]) { color: green; }", |
| "slot::slotted(div.green) { color: green; }", |
| "div ::slotted(div) { color: red; }", |
| "div + slot::slotted(div) { color: red; }", |
| "span::slotted(*) { color: red; }", /* never matches, but valid as a selector */ |
| "::slotted(span)::slotted(span) { color: red; }", /* invalid */ |
| "::slotted(::slotted(div)) { color: red; }" /* invalid */ |
| ]; |
| |
| var expectedCSSTexts = [ |
| "", |
| "", |
| "::slotted(*) { display: block; }", |
| "*::slotted(*) { display: block; }", |
| "::slotted(div) { display: block; }", |
| "::slotted(div) { display: block; }", |
| "::slotted(div) { display: block; }", |
| "", |
| ".foo::slotted(div) { color: blue; }", |
| "#id::slotted(*) { color: blue; }", |
| "[attr=\"foo\"]::slotted(*) { color: blue; }", |
| ".foo .bar::slotted(div) { color: blue; }", |
| "", |
| "", |
| "", |
| "", |
| "slot::slotted(.green) { color: green; }", |
| "slot::slotted(#green) { color: green; }", |
| "slot::slotted([green=\"green\"]) { color: green; }", |
| "slot::slotted(div.green) { color: green; }", |
| "div ::slotted(div) { color: red; }", |
| "div + slot::slotted(div) { color: red; }", |
| "span::slotted(*) { color: red; }", |
| "", |
| "", |
| ]; |
| |
| function ruleCSSText(rule) |
| { |
| var style = document.createElement("style"); |
| style.innerText = rule; |
| document.head.appendChild(style); |
| if (style.sheet.cssRules.length == 0) |
| return ""; |
| return style.sheet.cssRules.item(0).cssText; |
| } |
| |
| for (var i = 0; i < rules.length; ++i) { |
| test(() => { |
| assert_equals(ruleCSSText(rules[i]), expectedCSSTexts[i]); |
| }, rules[i]); |
| } |
| </script> |