<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
    <div id="with-renderer">
        <!-- With renderer -->
        <rect class="target1"></rect>
        <Rect class="target2"></Rect>
        <RECT class="target3"></RECT>
        <xml xmlns="https://www.webkit.org/awesome">
            <rect class="target4"></rect>
            <Rect class="target5"></Rect>
            <RECT class="target6"></RECT>
        </xml>
    </div>
    <div id="without-renderer" style="display:none;">
        <!-- Without renderer -->
        <rect class="target1"></rect>
        <Rect class="target2"></Rect>
        <RECT class="target3"></RECT>
        <xml xmlns="https://www.webkit.org/awesome">
            <rect class="target4"></rect>
            <Rect class="target5"></Rect>
            <RECT class="target6"></RECT>
        </xml>
    </div>
</body>
<script><![CDATA[
description("Test tagname's case-sensitivity when matching XML-in-XHTML with querySelector.");

var withRenderer = document.getElementById("with-renderer");
var withoutRenderer = document.getElementById("without-renderer");

var xmlDocument = new DOMParser().parseFromString('<xml xmlns="https://www.webkit.org/awesome"><rect class="target7"></rect><Rect class="target8"></Rect><RECT class="target9"></RECT></xml>', 'text/xml');
withRenderer.appendChild(document.importNode(xmlDocument.documentElement, true));
withoutRenderer.appendChild(document.importNode(xmlDocument.documentElement, true));

function testSelector(selector, expectedClasses)
{
    shouldBe("document.getElementById('with-renderer').querySelectorAll('" + selector + "').length", '' + expectedClasses.length);
    shouldBe("document.getElementById('without-renderer').querySelectorAll('" + selector + "').length", '' + expectedClasses.length);
    for (var i = 0; i < expectedClasses.length; ++i) {
        shouldBeEqualToString("document.getElementById(\"with-renderer\").querySelectorAll('" + selector + "')[" + i + "].getAttribute('class')", "target" + expectedClasses[i]);
        shouldBeEqualToString("document.getElementById(\"without-renderer\").querySelectorAll('" + selector + "')[" + i + "].getAttribute('class')", "target" + expectedClasses[i]);
    }
}

debug("Basic cases, tagname alone.");
testSelector("rect", [1, 4, 7]);
testSelector("Rect", [2, 5, 8]);
testSelector("RECT", [3, 6, 9]);

debug("");
debug("Compound selectors.");
testSelector("rect[class]", [1, 4, 7]);
testSelector("Rect[class]", [2, 5, 8]);
testSelector("RECT[class]", [3, 6, 9]);
testSelector("rect[class^=\"target\"]", [1, 4, 7]);
testSelector("Rect[class^=\"target\"]", [2, 5, 8]);
testSelector("RECT[class^=\"target\"]", [3, 6, 9]);

debug("");
debug("Complex selectors.");
testSelector("xml > rect[class]", [4, 7]);
testSelector("xml > Rect[class]", [5, 8]);
testSelector("xml > RECT[class]", [6, 9]);
testSelector("xml > rect[class^=\"target\"]", [4, 7]);
testSelector("xml > Rect[class^=\"target\"]", [5, 8]);
testSelector("xml > RECT[class^=\"target\"]", [6, 9]);

testSelector("div rect[class]", [1, 4, 7]);
testSelector("div Rect[class]", [2, 5, 8]);
testSelector("div RECT[class]", [3, 6, 9]);
testSelector("div rect[class^=\"target\"]", [1, 4, 7]);
testSelector("div Rect[class^=\"target\"]", [2, 5, 8]);
testSelector("div RECT[class^=\"target\"]", [3, 6, 9]);

testSelector(":root div rect[class]", [1, 4, 7]);
testSelector(":root div Rect[class]", [2, 5, 8]);
testSelector(":root div RECT[class]", [3, 6, 9]);
testSelector(":root div rect[class^=\"target\"]", [1, 4, 7]);
testSelector(":root div Rect[class^=\"target\"]", [2, 5, 8]);
testSelector(":root div RECT[class^=\"target\"]", [3, 6, 9]);

debug("");
debug("With functional pseudo classes.");
testSelector(":root div :matches(not-there, rect[class])", [1, 4, 7]);
testSelector(":root div :matches(not-there, Rect[class])", [2, 5, 8]);
testSelector(":root div :matches(not-there, RECT[class])", [3, 6, 9]);
testSelector(":root div :matches(not-there, rect[class^=\"target\"])", [1, 4, 7]);
testSelector(":root div :matches(not-there, Rect[class^=\"target\"])", [2, 5, 8]);
testSelector(":root div :matches(not-there, RECT[class^=\"target\"])", [3, 6, 9]);

testSelector(":root div :nth-child(n of not-there, rect[class])", [1, 4, 7]);
testSelector(":root div :nth-child(n of not-there, Rect[class])", [2, 5, 8]);
testSelector(":root div :nth-child(n of not-there, RECT[class])", [3, 6, 9]);
testSelector(":root div :nth-child(n of not-there, rect[class^=\"target\"])", [1, 4, 7]);
testSelector(":root div :nth-child(n of not-there, Rect[class^=\"target\"])", [2, 5, 8]);
testSelector(":root div :nth-child(n of not-there, RECT[class^=\"target\"])", [3, 6, 9]);

// Remove the content otherwise it will appear in the results.
withRenderer.style.display = 'none';
]]></script>
<script src="../../resources/js-test-post.js"></script>
</html>
