<!doctype html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<style>
#test-root * {
    background-color: red;
}
</style>
<style id="style">
</style>
</head>
<body>
    <div style="display:none" id="test-root">
        <testcaseA id="testcase1" attribute1="value1" class="bar baz bazoo" attribute3="value3">Not empty</testcaseA>
        <testcaseB id="testcase2" class="bar baz bazoo" attribute2="value2" attribute3="value3"></testcaseB>
        <testcaseA id="testcase3" attribute1="value1" class="foo baz bazoo">Not empty</testcaseA>
        <testcaseB id="testcase4" attribute1="value1" class="foo bar bazoo">Not empty</testcaseB>
        <testcaseA id="testcase5" class="foo baz bazoo" attribute2="value2" attribute3="value3">Not empty</testcaseA>
        <testcaseB id="testcase6" attribute1="value1" class="foo bar baz" attribute3="value3">Not empty</testcaseB>
        <testcaseA id="testcase7" attribute1="value1" class="bar baz bazoo">Not empty</testcaseA>
        <testcaseB id="testcase8" attribute1="value1" class="foo baz bazoo">Not empty</testcaseB>
        <testcaseA id="testcase9" class="foo bar bazoo" attribute2="value2" attribute3="value3"></testcaseA>
        <testcaseB id="testcase10" attribute1="value1" class="foo bar bazoo" attribute3="value3">Not empty</testcaseB>
        <testcaseA id="testcase11" attribute1="value1" class="foo bar baz">Not empty</testcaseA>
        <testcaseB id="testcase12" attribute1="value1" class="bar baz bazoo">Not empty</testcaseB>
        <testcaseA id="testcase13" attribute1="value1" class="foo baz bazoo" attribute3="value3">Not empty</testcaseA>
        <testcaseB id="testcase14" class="foo bar baz" attribute2="value2">Not empty</testcaseB>
        <testcaseA id="testcase15" attribute1="value1" class="foo bar bazoo">Not empty</testcaseA>
        <testcaseB id="testcase16" attribute1="value1" class="foo bar baz" attribute3="value3">Not empty</testcaseB>
        <testcaseA id="testcase17" attribute1="value1" class="bar baz bazoo" attribute3="value3">Not empty</testcaseA>
        <testcaseB id="testcase18" attribute1="value1" class="foo baz bazoo">Not empty</testcaseB>
        <testcaseA id="testcase19" attribute1="value1" class="foo bar bazoo">Not empty</testcaseA>
        <testcaseB id="testcase20" class="bar baz bazoo" attribute2="value2" attribute3="value3">Not empty</testcaseB>
        <testcaseA id="testcase21" attribute1="value1" class="foo bar baz" attribute3="value3"></testcaseA>
        <testcaseB id="testcase22" attribute1="value1" class="bar baz bazoo">Not empty</testcaseB>
        <testcaseA id="testcase23" attribute1="value1" class="foo baz bazoo">Not empty</testcaseA>
        <testcaseB id="testcase24" attribute1="value1" class="foo bar bazoo" attribute3="value3">Not empty</testcaseB>
        <testcaseA id="testcase25" attribute1="value1" class="foo bar baz" attribute3="value3">Not empty</testcaseA>
        <testcaseB id="testcase26" attribute1="value1" class="bar baz bazoo">Not empty</testcaseB>
        <testcaseA id="testcase27" class="foo baz bazoo" attribute2="value2"></testcaseA>
        <testcaseB id="testcase28" attribute1="value1" class="foo baz bazoo" attribute3="value3">Not empty</testcaseB>
        <testcaseA id="testcase29" attribute1="value1" class="foo bar bazoo">Not empty</testcaseA>
        <testcaseB id="testcase30" attribute1="value1" class="foo bar baz">Not empty</testcaseB>
    </div>
</body>
<script>
description('Check ":nth-child(An+B of selectorList)" with a selector list.');

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("#test-root *");
    for (var i = 0; i < allTestCases.length; ++i) {
        var expectMatch = expectedIds.indexOf(allTestCases[i].id) >= 0;
        shouldBeEqualToString('getComputedStyle(document.querySelectorAll("#test-root *")[' + i + ']).backgroundColor', expectMatch ? 'rgb(10, 100, 200)' : 'rgb(255, 0, 0)');
    }

    stylingElement.innerHTML = '';
}

function testSelector(selector, expectedIds) {
    debug("Testing \"" + selector + "\"");
    testQuerySelector("#test-root " + selector, expectedIds);
    testStyling("#test-root " + selector, expectedIds);
    debug("");
}

// Since :not(*) never match anything, this should be equivalent to :nth-child(2n).
testSelector(":nth-child(2n of *, :not(*), *)", ["testcase2", "testcase4", "testcase6", "testcase8", "testcase10", "testcase12", "testcase14", "testcase16", "testcase18", "testcase20", "testcase22", "testcase24", "testcase26", "testcase28", "testcase30"]);

// The selector list can never match anything.
testSelector(":nth-child(2n of :not(*), :empty:not(:empty), [attribute1][attribute2][attribute3], .foo.bar.baz.bazoo, :not([id]), :not([class]))", []);

// Filtering with "testcaseA, testcaseB" matches everything too, that should be equivalent to :nth-child(odd).
testSelector(":nth-child(odd of testcaseA, testcaseB)", ["testcase1", "testcase3", "testcase5", "testcase7", "testcase9", "testcase11", "testcase13", "testcase15", "testcase17", "testcase19", "testcase21", "testcase23", "testcase25", "testcase27", "testcase29"]);

// Matching all the classes should match everything like :nth-child(even).
testSelector(":nth-child(even of .foo, .bar, .baz)", ["testcase2", "testcase4", "testcase6", "testcase8", "testcase10", "testcase12", "testcase14", "testcase16", "testcase18", "testcase20", "testcase22", "testcase24", "testcase26", "testcase28", "testcase30"]);

// Every element has an attribute, this should be equivalent to :nth-child(odd)
testSelector(":nth-child(odd of [attribute1], [attribute2=value2])", ["testcase1", "testcase3", "testcase5", "testcase7", "testcase9", "testcase11", "testcase13", "testcase15", "testcase17", "testcase19", "testcase21", "testcase23", "testcase25", "testcase27", "testcase29"]);

// Any element with an odd number of (attribute3 or empty) above.
testSelector(':nth-child(even of [attribute3$="3"], :empty)', ["testcase2", "testcase6", "testcase10", "testcase16", "testcase20", "testcase24", "testcase27"]);

// Any element with an odd number of (attribute3 or empty) above. Overqualified with id to test compound selectors.
testSelector(':nth-child(even of [id][attribute3$="3"], [id]:empty)', ["testcase2", "testcase6", "testcase10", "testcase16", "testcase20", "testcase24", "testcase27"]);

// id is always there but attribute2 is uncommon. The classes .foo.bar matches many elements.
testSelector(':nth-child(even of [id][attribute2*="alue"], .foo.bar)', ["testcase4", "testcase6", "testcase10", "testcase14", "testcase16", "testcase20", "testcase24", "testcase27", "testcase30"]);

</script>
<script src="../../resources/js-test-post.js"></script>
</html>
