63 lines
2.6 KiB
HTML
63 lines
2.6 KiB
HTML
<!doctype html>
|
|
<html>
|
|
<head>
|
|
<script src="../../resources/js-test-pre.js"></script>
|
|
<style id="style-container">
|
|
</style>
|
|
</head>
|
|
<body>
|
|
</body>
|
|
<script>
|
|
description('Test the parsing of :nth-last-child(of) for querySelector and style on deeply nested pseudo elements.');
|
|
|
|
function testInvalidSelector(selectorString) {
|
|
var styleContainer = document.getElementById('style-container');
|
|
styleContainer.innerHTML = ':nth-last-child(' + selectorString + ') { }';
|
|
const parsed = document.getElementById('style-container').sheet.cssRules.length == 1;
|
|
debug(`selector '${styleContainer.innerHTML}' parsed: ${parsed ? "YES" : "NO"}`);
|
|
styleContainer.innerHTML = '';
|
|
}
|
|
|
|
// There are multiple ways of parsing :nth-last-child() based on the An+B part, we should test everything.
|
|
var validNthAnPlusB = [
|
|
"even",
|
|
"odd",
|
|
"n",
|
|
"-n",
|
|
"3",
|
|
"-3",
|
|
"n+0",
|
|
"n-0",
|
|
"0n",
|
|
"3n+5",
|
|
"-3n+5",
|
|
"3n-5",
|
|
"-3n-5",
|
|
];
|
|
|
|
debug("Test invalid selectors:");
|
|
for (var i = 0; i < validNthAnPlusB.length; ++i) {
|
|
testInvalidSelector(validNthAnPlusB[i] + " of :is(a, b, c::after)");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of :matches(a, b, c::after)");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of :is(a, b, c:after)");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of :matches(a, b, c:after)");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of :nth-last-child(2n+1 of d, e, :is(f, g, ::before))");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of :nth-last-child(2n+1 of d, e, :matches(f, g, ::before))");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of :nth-last-child(2n+1 of d, e, :is(f, g, :before))");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of :nth-last-child(2n+1 of d, e, :matches(f, g, :before))");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of :not(:is(a, b, c::after))");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of :not(:matches(a, b, c::after))");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of :not(:is(a, b, c:after))");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of :not(:matches(a, b, c:after))");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of :is(a, b, :is(c, d, :is(e, f, :is(g, h, i::after))))");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of :matches(a, b, :matches(c, d, :matches(e, f, :matches(g, h, i::after))))");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of :nth-last-child(odd of :nth-last-child(even of j::before))");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of :nth-last-child(odd of :nth-last-child(even of j:before))");
|
|
|
|
}
|
|
|
|
|
|
</script>
|
|
<script src="../../resources/js-test-post.js"></script>
|
|
</html>
|