84 lines
2.9 KiB
HTML
84 lines
2.9 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.');
|
|
|
|
function testInvalidSelector(selectorString) {
|
|
shouldThrowErrorName('document.querySelector(":nth-last-child(' + selectorString + ')")', 'SyntaxError');
|
|
|
|
var styleContainer = document.getElementById('style-container');
|
|
styleContainer.innerHTML = ':nth-last-child(' + selectorString + ') { }';
|
|
shouldBe("document.getElementById('style-container').sheet.cssRules.length", "0");
|
|
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:");
|
|
// Missing space characters.
|
|
for (var i = 0; i < validNthAnPlusB.length; ++i) {
|
|
testInvalidSelector(validNthAnPlusB[i] + " of");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of ");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of.class");
|
|
testInvalidSelector(validNthAnPlusB[i] + "of .class");
|
|
}
|
|
|
|
// Use valid identifier but not "of" as a separator.
|
|
for (var i = 0; i < validNthAnPlusB.length; ++i) {
|
|
testInvalidSelector(validNthAnPlusB[i] + " empty .class");
|
|
testInvalidSelector(validNthAnPlusB[i] + " from .class");
|
|
testInvalidSelector(validNthAnPlusB[i] + " to .class");
|
|
testInvalidSelector(validNthAnPlusB[i] + " webkit .class");
|
|
}
|
|
|
|
// Matching pseudo elements do not make any sense.
|
|
for (var i = 0; i < validNthAnPlusB.length; ++i) {
|
|
testInvalidSelector(validNthAnPlusB[i] + " of ::first-letter");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of ::before");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of ::after");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of ::-webkit-custom");
|
|
|
|
testInvalidSelector(validNthAnPlusB[i] + " of .foo, ::before");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of ::before, .foo");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of -webkit-any(::before, .foo)");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of :nth-last-child(2n+1 of ::before)");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of :not(::before)");
|
|
}
|
|
|
|
// Invalid identifiers, syntax, etc.
|
|
for (var i = 0; i < validNthAnPlusB.length; ++i) {
|
|
testInvalidSelector(validNthAnPlusB[i] + " of .123class");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of #123id");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of []");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of ()");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of )");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of {}");
|
|
testInvalidSelector(validNthAnPlusB[i] + " of }");
|
|
}
|
|
|
|
</script>
|
|
<script src="../../resources/js-test-post.js"></script>
|
|
</html>
|