<!doctype html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<style>
innerTestCase {
    background-color: red;
}
</style>
<style id="style">
</style>
</head>
<body>
    <div style="display:none" id="test-root">
        <testcase type="foobar" attribute1="Value1"><span><span><span><span><span><innerTestCase id="innertestcase1"></innerTestCase></span></span></span></span></span></testcase>
        <testcase type="Foobar"></testcase>
        <testcase type="FOOBAR" attribute1="value1"><span><span><span><span><span><innerTestCase id="innertestcase2"></innerTestCase></span></span></span></span></span></testcase>
        <testcase type="foobar" attribute1="vAlue1"><span><span><span><span><span><innerTestCase id="innertestcase3"></innerTestCase></span></span></span></span></span></testcase>
        <testcase type="Foobar"><span><span><span><span><span><innerTestCase id="innertestcase4"></innerTestCase></span></span></span></span></span></testcase>
        <testcase type="FOOBAR" attribute1="vaLue1"><span><span><span><span><span><innerTestCase id="innertestcase5"></innerTestCase></span></span></span></span></span></testcase>
        <testcase type="foobar" attribute1="valUe1"><span><span><span><span><span><innerTestCase id="innertestcase6"></innerTestCase></span></span></span></span></span></testcase>
        <testcase type="Foobar" attribute1="valuE1"><span><span><span><span><span><innerTestCase id="innertestcase7"></innerTestCase></span></span></span></span></span></testcase>
        <testcase type="FOOBAR"></testcase>
        <testcase type="foobar" attribute1="value1"><span><span><span><span><span><innerTestCase id="innertestcase8"></innerTestCase></span></span></span></span></span></testcase>
    </div>
</body>
<script>
description('Check various cases of register pressure with case-insensitive attribute matching (e.g. [foo=bar i]).');

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

    // stylingElement.innerHTML = '';
}

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

var simpleCases = [
    ["[type=foobar i] > * > * innerTestCase", ["innertestcase1", "innertestcase2", "innertestcase3", "innertestcase4", "innertestcase5", "innertestcase6", "innertestcase7", "innertestcase8"]],
    ["[attribute1=VALUE1 i] > * > * innerTestCase",["innertestcase1", "innertestcase2", "innertestcase3", "innertestcase5", "innertestcase6", "innertestcase7", "innertestcase8"]],
    ["[type=foobar i] ~ * ~ * innerTestCase", ["innertestcase2", "innertestcase3", "innertestcase4", "innertestcase5", "innertestcase6", "innertestcase7", "innertestcase8"]],
    ["[attribute1=VALUE1 i] ~ * ~ * innerTestCase",["innertestcase2", "innertestcase3", "innertestcase4", "innertestcase5", "innertestcase6", "innertestcase7", "innertestcase8"]],
    ["[type=foobar i] ~ * ~ *  > * > * innerTestCase", ["innertestcase2", "innertestcase3", "innertestcase4", "innertestcase5", "innertestcase6", "innertestcase7", "innertestcase8"]],
    ["[attribute1=VALUE1 i] ~ * ~ *  > * > * innerTestCase",["innertestcase2", "innertestcase3", "innertestcase4", "innertestcase5", "innertestcase6", "innertestcase7", "innertestcase8"]],

    ["[type~=fOobar i] > * > * innerTestCase", ["innertestcase1", "innertestcase2", "innertestcase3", "innertestcase4", "innertestcase5", "innertestcase6", "innertestcase7", "innertestcase8"]],
    ["[type~=foObar i] ~ * ~ * innerTestCase", ["innertestcase2", "innertestcase3", "innertestcase4", "innertestcase5", "innertestcase6", "innertestcase7", "innertestcase8"]],
    ["[type~=foobar i] ~ * ~ *  > * > * innerTestCase", ["innertestcase2", "innertestcase3", "innertestcase4", "innertestcase5", "innertestcase6", "innertestcase7", "innertestcase8"]],

    ["[type|=foObar i] > * > * innerTestCase", ["innertestcase1", "innertestcase2", "innertestcase3", "innertestcase4", "innertestcase5", "innertestcase6", "innertestcase7", "innertestcase8"]],
    ["[type|=fooBar i] ~ * ~ * innerTestCase", ["innertestcase2", "innertestcase3", "innertestcase4", "innertestcase5", "innertestcase6", "innertestcase7", "innertestcase8"]],
    ["[type|=foobar i] ~ * ~ *  > * > * innerTestCase", ["innertestcase2", "innertestcase3", "innertestcase4", "innertestcase5", "innertestcase6", "innertestcase7", "innertestcase8"]],

    ["[type^=fooBa i] > * > * innerTestCase", ["innertestcase1", "innertestcase2", "innertestcase3", "innertestcase4", "innertestcase5", "innertestcase6", "innertestcase7", "innertestcase8"]],
    ["[type^=fOoba i] ~ * ~ * innerTestCase", ["innertestcase2", "innertestcase3", "innertestcase4", "innertestcase5", "innertestcase6", "innertestcase7", "innertestcase8"]],
    ["[type^=fooba i] ~ * ~ *  > * > * innerTestCase", ["innertestcase2", "innertestcase3", "innertestcase4", "innertestcase5", "innertestcase6", "innertestcase7", "innertestcase8"]],

    ["[type$=oobAr i] > * > * innerTestCase", ["innertestcase1", "innertestcase2", "innertestcase3", "innertestcase4", "innertestcase5", "innertestcase6", "innertestcase7", "innertestcase8"]],
    ["[type$=oObar i] ~ * ~ * innerTestCase", ["innertestcase2", "innertestcase3", "innertestcase4", "innertestcase5", "innertestcase6", "innertestcase7", "innertestcase8"]],
    ["[type$=oobar i] ~ * ~ *  > * > * innerTestCase", ["innertestcase2", "innertestcase3", "innertestcase4", "innertestcase5", "innertestcase6", "innertestcase7", "innertestcase8"]],

    ["[type*=oOba i] > * > * innerTestCase", ["innertestcase1", "innertestcase2", "innertestcase3", "innertestcase4", "innertestcase5", "innertestcase6", "innertestcase7", "innertestcase8"]],
    ["[type*=ooBa i] ~ * ~ * innerTestCase", ["innertestcase2", "innertestcase3", "innertestcase4", "innertestcase5", "innertestcase6", "innertestcase7", "innertestcase8"]],
    ["[type*=ooba i] ~ * ~ *  > * > * innerTestCase", ["innertestcase2", "innertestcase3", "innertestcase4", "innertestcase5", "innertestcase6", "innertestcase7", "innertestcase8"]],
];

for (var testCase of simpleCases) {
    testSelector(testCase[0], testCase[1]);
}

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