blob: 15a93d151923da3fd2555988f67c05658c118e74 [file] [log] [blame]
<!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 testValidSelector(selectorString, expectedSerializedSelector) {
shouldNotThrow('document.querySelector(":nth-last-child(' + selectorString.replace(/\\/g, '\\\\') + ')")');
var styleContainer = document.getElementById('style-container');
styleContainer.innerHTML = ':nth-last-child(' + selectorString + ') { }';
shouldBe("document.getElementById('style-container').sheet.cssRules.length", "1");
if (!expectedSerializedSelector)
expectedSerializedSelector = selectorString;
shouldBeEqualToString("document.getElementById('style-container').sheet.cssRules[0].selectorText", ':nth-last-child(' + expectedSerializedSelector + ')');
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",
];
var expectedNthAnPlusB = [
"2n",
"2n+1",
"n",
"-n",
"3",
"-3",
"n",
"n",
"0",
"3n+5",
"-3n+5",
"3n-5",
"-3n-5",
];
debug("Basic valid cases without [of selectors]");
for (var i = 0; i < validNthAnPlusB.length; ++i)
testValidSelector(validNthAnPlusB[i], expectedNthAnPlusB[i]);
var validRightSide = [
// Basic types.
"*",
"foobar",
"#id",
".class",
":first-child",
":last-child",
// Compound selectors.
"foobar#id.class",
".class:not(.notclass)",
"#id:empty",
// Complex selectors.
"a > b",
"a b",
"a + b",
"a ~ b",
"a + b > c ~ d e + g",
// Selector lists.
"a, a",
"a, b",
"a, b, c, d",
".foo, .bar, .baz",
"a > b, a b, a + b, a ~ b",
];
debug("Basic cases with [of selectors]");
for (var leftSideIndex = 0; leftSideIndex < validNthAnPlusB.length; ++leftSideIndex) {
for (var rightSideIndex = 0; rightSideIndex < validRightSide.length; ++rightSideIndex) {
var selectorString = validNthAnPlusB[leftSideIndex] + " of " + validRightSide[rightSideIndex];
var expectedSelectorString = expectedNthAnPlusB[leftSideIndex] + " of " + validRightSide[rightSideIndex];
testValidSelector(selectorString, expectedSelectorString);
testValidSelector(selectorString + " ", expectedSelectorString);
}
}
</script>
<script src="../../resources/js-test-post.js"></script>
</html>