blob: 36ae746134629267447afd018306a7b6f1949b08 [file] [log] [blame]
<!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>
<svg xmlns="http://www.w3.org/2000/svg">
<rect class="target4"></rect>
<Rect class="target5"></Rect>
<RECT class="target6"></RECT>
</svg>
</div>
<div id="without-renderer" style="display:none;">
<!-- Without renderer -->
<rect class="target1"></rect>
<Rect class="target2"></Rect>
<RECT class="target3"></RECT>
<svg xmlns="http://www.w3.org/2000/svg">
<rect class="target4"></rect>
<Rect class="target5"></Rect>
<RECT class="target6"></RECT>
</svg>
</div>
</body>
<script><![CDATA[
description("Test tagname's case-sensitivity when matching SVG-in-XHTML with querySelector.");
var withRenderer = document.getElementById("with-renderer");
var withoutRenderer = document.getElementById("without-renderer");
var svgDocument = new DOMParser().parseFromString('<svg xmlns="http://www.w3.org/2000/svg"><rect class="target7"></rect><Rect class="target8"></Rect><RECT class="target9"></RECT></svg>', 'text/xml');
withRenderer.appendChild(document.importNode(svgDocument.documentElement, true));
withoutRenderer.appendChild(document.importNode(svgDocument.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("svg > rect[class]", [4, 7]);
testSelector("svg > Rect[class]", [5, 8]);
testSelector("svg > RECT[class]", [6, 9]);
testSelector("svg > rect[class^=\"target\"]", [4, 7]);
testSelector("svg > Rect[class^=\"target\"]", [5, 8]);
testSelector("svg > 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 :is(not-there, rect[class])", [1, 4, 7]);
testSelector(":root div :is(not-there, Rect[class])", [2, 5, 8]);
testSelector(":root div :is(not-there, RECT[class])", [3, 6, 9]);
testSelector(":root div :is(not-there, rect[class^=\"target\"])", [1, 4, 7]);
testSelector(":root div :is(not-there, Rect[class^=\"target\"])", [2, 5, 8]);
testSelector(":root div :is(not-there, RECT[class^=\"target\"])", [3, 6, 9]);
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>