1<!DOCTYPE html>
2<script src='../../resources/js-test-pre.js'></script>
3<script>
4description("Test for cssText of '::slotted' rule.");
5
6var rules = [
7"::slotted { display: block; }", /* invalid - no parameter */
8"::slotted() { display: block; }", /* invalid - empty parameter */
9"::slotted(*) { display: block; }",
10"*::slotted(*) { display: block; }",
11"::slotted(div) { display: block; }", /* expects universal selector (*) on the left in cssText */
12"::slotted( div) { display: block; }", /* allow a space on left */
13"::slotted(div ) { display: block; }", /* allow a space on right */
14"::slotted(div::before) { display: block; }", /* having a pseudo element in () is invalid */
15".foo::slotted(div) { color: blue; }",
16"#id::slotted(*) { color: blue; }",
17"[attr=foo]::slotted(*) { color: blue; }",
18".foo .bar::slotted(div) { color: blue; }",
19".foo::before .bar::slotted(div) { color: blue; }", /* invalid, only one pseudo element is allowed at the rightmost compound */
20".foo::slotted(div) .bar { color: blue; }", /* invalid, same as above */
21"::slotted(div, div) { color: blue; }", /* invalid - selector list */
22"::slotted(div div) { color: blue; }", /* invalid - complex selector (combinator is used) */
23"slot::slotted(.green) { color: green; }",
24"slot::slotted(#green) { color: green; }",
25"slot::slotted([green=green]) { color: green; }",
26"slot::slotted(div.green) { color: green; }",
27"div ::slotted(div) { color: red; }",
28"div + slot::slotted(div) { color: red; }",
29"span::slotted(*) { color: red; }", /* never matches, but valid as a selector */
30"::slotted(span)::slotted(span) { color: red; }", /* invalid */
31"::slotted(::slotted(div)) { color: red; }" /* invalid */
32];
33
34var expectedCSSTexts = [
35"",
36"",
37"::slotted(*) { display: block; }",
38"*::slotted(*) { display: block; }",
39"::slotted(div) { display: block; }",
40"::slotted(div) { display: block; }",
41"::slotted(div) { display: block; }",
42"",
43".foo::slotted(div) { color: blue; }",
44"#id::slotted(*) { color: blue; }",
45"[attr=\"foo\"]::slotted(*) { color: blue; }",
46".foo .bar::slotted(div) { color: blue; }",
47"",
48"",
49"",
50"",
51"slot::slotted(.green) { color: green; }",
52"slot::slotted(#green) { color: green; }",
53"slot::slotted([green=\"green\"]) { color: green; }",
54"slot::slotted(div.green) { color: green; }",
55"div ::slotted(div) { color: red; }",
56"div + slot::slotted(div) { color: red; }",
57"span::slotted(*) { color: red; }",
58"",
59"",
60];
61
62function ruleCSSText(rule)
63{
64 var style = document.createElement("style");
65 style.innerText = rule;
66 document.head.appendChild(style);
67 if (style.sheet.cssRules.length == 0)
68 return "";
69 return style.sheet.cssRules.item(0).cssText;
70}
71
72for (var i = 0; i < rules.length; ++i) {
73 debug("Rule " + rules[i]);
74 cssText = ruleCSSText(rules[i]);
75 expectedCSSText = expectedCSSTexts[i]
76 shouldBeEqualToString("cssText", expectedCSSText);
77}
78</script>
79<script src='../../resources/js-test-post.js'></script>