<!doctype html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<style>
testcase {
    background-color: red;
}
</style>
<style id="style">
</style>
</head>
<body>
    <div style="display:none">
        <testcase id="testcase1"><div><div><div><div><div><div><div><div><span></span></div></div></div></div></div></div></div></div></testcase>
        <testcase id="testcase2"><div><div><div><div><div><div><div><div><span></span></div></div></div></div></div></div></div></div></testcase>
        <testcase id="testcase3"><div><div><div><div><div><div><div><div><span></span></div></div></div></div></div></div></div></div></testcase>
        <testcase id="testcase4"><div><div><div><div><div><div><div><div><span></span></div></div></div></div></div></div></div></div></testcase>
        <testcase id="testcase5"><div><div><div><div><div><div><div><div><span></span></div></div></div></div></div></div></div></div></testcase>
        <testcase id="testcase6"><div><div><div><div><div><div><div><div><span></span></div></div></div></div></div></div></div></div></testcase>
        <testcase id="testcase7"><div><div><div><div><div><div><div><div><span></span></div></div></div></div></div></div></div></div></testcase>
        <testcase id="testcase8"><div><div><div><div><div><div><div><div><span></span></div></div></div></div></div></div></div></div></testcase>
        <testcase id="testcase9"><div><div><div><div><div><div><div><div><span></span></div></div></div></div></div></div></div></div></testcase>
        <testcase id="testcase10"><div><div><div><div><div><div><div><div><span></span></div></div></div></div></div></div></div></div></testcase>
        <testcase id="testcase11"><div><div><div><div><div><div><div><div><span></span></div></div></div></div></div></div></div></div></testcase>
        <testcase id="testcase12"><div><div><div><div><div><div><div><div><span></span></div></div></div></div></div></div></div></div></testcase>
        <testcase id="testcase13"><div><div><div><div><div><div><div><div><span></span></div></div></div></div></div></div></div></div></testcase>
        <testcase id="testcase14"><div><div><div><div><div><div><div><div><span></span></div></div></div></div></div></div></div></div></testcase>
        <testcase id="testcase15"><div><div><div><div><div><div><div><div><span></span></div></div></div></div></div></div></div></div></testcase>
        <testcase id="testcase16"><div><div><div><div><div><div><div><div><span></span></div></div></div></div></div></div></div></div></testcase>
        <testcase id="testcase17"><div><div><div><div><div><div><div><div><span></span></div></div></div></div></div></div></div></div></testcase>
        <testcase id="testcase18"><div><div><div><div><div><div><div><div><span></span></div></div></div></div></div></div></div></div></testcase>
        <testcase id="testcase19"><div><div><div><div><div><div><div><div><span></span></div></div></div></div></div></div></div></div></testcase>
        <testcase id="testcase20"><div><div><div><div><div><div><div><div><span></span></div></div></div></div></div></div></div></div></testcase>
    </div>
</body>
<script>
description('Test chaining many :nth-child() selectors. This verifies register allocation is correct.');

function testQuerySelector(selector, expectedIds) {
    shouldBe("document.querySelectorAll('" + selector + "').length", '' + expectedIds.length);
    for (var i = 0; i < expectedIds.length; ++i)
        shouldBeEqualToString("document.querySelectorAll('" + selector + "')[" + i + "].id", expectedIds[i]);
}

function testStyling(selector, expectedIds) {
    var stylingElement = document.getElementById("style");
    stylingElement.innerHTML = '' + selector + ' { background-color: rgb(10, 100, 200); }';

    var allTestCases = document.querySelectorAll("testcase");
    for (var i = 0; i < allTestCases.length; ++i) {
        var expectMatch = expectedIds.indexOf(allTestCases[i].id) >= 0;
        shouldBeEqualToString('getComputedStyle(document.querySelectorAll("testcase")[' + i + ']).backgroundColor', expectMatch ? 'rgb(10, 100, 200)' : 'rgb(255, 0, 0)');
    }

    stylingElement.innerHTML = '';
}

function testSelector(selector, expectedIds) {
    debug("Testing \"" + selector + "\"");
    testQuerySelector("testcase" + selector, expectedIds);
    testStyling("testcase" + selector, expectedIds);

    // Test the same request with a backtracking register.
    shouldBe("document.querySelectorAll('div>testcase" + selector + ">div>div>div span').length", '' + expectedIds.length);

    debug("");
}

// The :nth-child() should not completely overlap to ensure all of them are executed.

// All positive B.
testSelector(":nth-child(-n+21):nth-child(odd):nth-child(-2n+21):nth-child(3n+1):nth-child(-3n+22):nth-child(4n+1):nth-child(-5n+51)", ["testcase1"]);

// All negative B.
testSelector(":nth-child(2n-200):nth-child(3n-1):nth-child(4n-38):nth-child(5n-98)", ["testcase2"]);

// All positive A.
testSelector(":nth-child(even):nth-child(3n):nth-child(4n-2):nth-child(5n+1)", ["testcase6"]);

// All negative A.
testSelector(":nth-child(-n+9000):nth-child(-2n+683):nth-child(-3n+31):nth-child(-4n+47):nth-child(-5n+107):nth-child(-6n+73):nth-child(-7n+70)", ["testcase7"]);

// Positive and Negative B.
testSelector(":nth-child(odd):nth-child(3n+1):nth-child(4n-1):nth-child(5n+4)", ["testcase19"]);

// Positive and Negative A.
testSelector(":nth-child(-n+1500):nth-child(2n+1):nth-child(-3n+45):nth-child(4n+3):nth-child(-5n+1545)", ["testcase15"]);

// Everything.
testSelector(":nth-child(n+2):nth-child(-n+6000):nth-child(n-2):nth-child(2n):nth-child(-2n+20):nth-child(2n+2):nth-child(3n+1):nth-child(-3n+49):nth-child(3n-92):nth-child(4n+2):nth-child(-4n+50)", ["testcase10"]);
</script>
<script src="../../resources/js-test-post.js"></script>
</html>
