<!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>
