| <!DOCTYPE html> |
| <html> |
| <head> |
| <meta charset="utf-8"> |
| <script src="../../resources/js-test-pre.js"></script> |
| <style id="stylebro" type="text/css"> |
| .peb { |
| color: red; |
| } |
| </style> |
| </head> |
| <body> |
| <script> |
| |
| styleElement = document.getElementById("stylebro"); |
| |
| function repeatAndJoin(s, count) |
| { |
| var a = new Array(); |
| for (i = 0; i < count; ++i) |
| a.push(s); |
| return a.join(", "); |
| } |
| |
| function selectorListWithLength(length) |
| { |
| return repeatAndJoin(".x", length); |
| } |
| |
| function fatSelectorListWithLength(length) |
| { |
| return repeatAndJoin(".x .y .z .q", length); |
| } |
| |
| function styleSheetWithSelectorLength(length) |
| { |
| return selectorListWithLength(length) + " { color: red; }"; |
| } |
| |
| function fatStyleSheetWithSelectorLength(length) |
| { |
| return fatSelectorListWithLength(length) + " { color: red; }"; |
| } |
| |
| function sheet() |
| { |
| return styleElement.sheet; |
| } |
| |
| function rule() |
| { |
| return sheet().cssRules[0]; |
| } |
| |
| description("This test tests and documents the behavior of CSS style rules with a massive number of selectors. Rules with >8192 selector components get split into multiple rules at the parsing stage. Setting a rule's selectorText via CSSOM will do nothing if there are more than 8192 components."); |
| |
| shouldBe("rule().selectorText = selectorListWithLength(1); rule().selectorText", "selectorListWithLength(1)"); |
| shouldBe("rule().selectorText = selectorListWithLength(8192); rule().selectorText", "selectorListWithLength(8192)"); |
| shouldBe("rule().selectorText = '.reset'; rule().selectorText", "'.reset'"); |
| shouldBe("rule().selectorText = selectorListWithLength(8193); rule().selectorText", "'.reset'"); |
| shouldBe("rule().selectorText = '.reset'; rule().selectorText", "'.reset'"); |
| shouldBe("rule().selectorText = selectorListWithLength(8193); sheet().rules.length", "1"); |
| shouldBe("rule().selectorText = selectorListWithLength(8192); rule().selectorText", "selectorListWithLength(8192)"); |
| shouldBe("rule().selectorText = selectorListWithLength(8192); sheet().rules.length", "1"); |
| shouldBe("rule().selectorText = '.reset'; rule().selectorText", "'.reset'"); |
| shouldBe("rule().selectorText = selectorListWithLength(8193); rule().selectorText", "'.reset'"); |
| shouldBe("rule().selectorText = selectorListWithLength(8193); sheet().rules.length", "1"); |
| |
| shouldBe("rule().selectorText = fatSelectorListWithLength(1); sheet().rules.length", "1"); |
| shouldBe("rule().selectorText = fatSelectorListWithLength(1); rule().selectorText", "fatSelectorListWithLength(1)"); |
| shouldBe("rule().selectorText = fatSelectorListWithLength(2048); rule().selectorText", "fatSelectorListWithLength(2048)"); |
| shouldBe("rule().selectorText = '.reset'; rule().selectorText", "'.reset'"); |
| shouldBe("rule().selectorText = fatSelectorListWithLength(2049); rule().selectorText", "'.reset'"); |
| |
| shouldBe("styleElement.innerText = styleSheetWithSelectorLength(1); rule().selectorText", "selectorListWithLength(1)"); |
| shouldBe("styleElement.innerText = styleSheetWithSelectorLength(8192); rule().selectorText", "selectorListWithLength(8192)"); |
| shouldBe("styleElement.innerText = styleSheetWithSelectorLength(8192); sheet().rules.length", "1"); |
| shouldBe("styleElement.innerText = styleSheetWithSelectorLength(8193); rule().selectorText", "selectorListWithLength(8192)"); |
| shouldBe("styleElement.innerText = styleSheetWithSelectorLength(8193); sheet().rules.length", "2"); |
| shouldBe("styleElement.innerText = styleSheetWithSelectorLength(16384); sheet().rules.length", "2"); |
| shouldBe("styleElement.innerText = styleSheetWithSelectorLength(16385); sheet().rules.length", "3"); |
| |
| shouldBe("styleElement.innerText = fatStyleSheetWithSelectorLength(1); sheet().rules.length", "1"); |
| shouldBe("styleElement.innerText = fatStyleSheetWithSelectorLength(2048); sheet().rules.length", "1"); |
| shouldBe("styleElement.innerText = fatStyleSheetWithSelectorLength(2049); sheet().rules.length", "2"); |
| shouldBe("styleElement.innerText = fatStyleSheetWithSelectorLength(4096); sheet().rules.length", "2"); |
| shouldBe("styleElement.innerText = fatStyleSheetWithSelectorLength(4097); sheet().rules.length", "3"); |
| shouldBe("styleElement.innerText = fatStyleSheetWithSelectorLength(16385); sheet().rules.length", "9"); |
| shouldBe("styleElement.innerText = fatStyleSheetWithSelectorLength(16384); sheet().rules.length", "8"); |
| shouldBe("styleElement.innerText = fatStyleSheetWithSelectorLength(16385); sheet().rules.length", "9"); |
| |
| </script> |
| <script src="../../resources/js-test-post.js"></script> |
| </body> |
| </html> |