blob: 25ad9d3dff9335a4238d525d0d0f3a598f127ef9 [file] [log] [blame]
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<div class="display:none;">
<div id="simple_unique" data-case="1"></div>
<div id="simple_Duplicated" data-case="2"></div>
<div id="simple_Duplicated" data-case="3"></div>
<div id="simple_Duplicated" data-case="4"></div>
<div id="Ancestor_Unique" data-case="5">
<div data-case="6">
<div data-case="7">
</div>
</div>
<div id="ANCESTOR_DUPLICATED" data-case="8">
<div data-case="9">
</div>
</div>
</div>
<div id="ANCESTOR_DUPLICATED" data-case="10">
<div data-case="11">
<div data-case="12">
</div>
</div>
<div id="ANCESTOR_DUPLICATED" data-case="13">
<div data-case="14">
</div>
</div>
</div>
</div>
<script>
description("Verify the optimization transforming [id=value] into #value for querySelector.");
function test(selector, expectedCases)
{
shouldBe('document.querySelectorAll("' + selector + '").length', '' + expectedCases.length);
/*let queryResult = document.querySelectorAll(selector);
for (let i = 0; i < queryResult.length; ++i) {
shouldBeEqualToString('document.querySelectorAll("' + selector + '")[' + i + '].dataset.case', '' + expectedCases[i]);
}*/
}
debug("Trivial Selector used as rightmost");
test("[id=simple_unique]", [1]);
test("[id=simple_Duplicated]", [2, 3, 4]);
test("[id=simple_duplicated]", []);
debug("Non-Trivial Selector used as rightmost");
test("div[id=simple_unique][data-case]", [1]);
test("div[id=simple_Duplicated][data-case]", [2, 3, 4]);
test("div[id=simple_duplicated][data-case]", []);
debug("Trivial Selector used as ancestor filter");
test("[id=Ancestor_Unique] >> *", [6, 7, 8, 9]);
test("[id=Ancestor_Unique] > * >> *", [7, 9]);
test("[id=Ancestor_Unique] >> * > *", [7, 9]);
test("[id=ancestor_unique] >> *", []);
test("[id=ancestor_unique] > * >> *", []);
test("[id=ancestor_unique] >> * > *", []);
test("[id=ANCESTOR_DUPLICATED] >> *", [9, 11, 12, 13, 14]);
test("[id=ANCESTOR_DUPLICATED] > * >> *", [12, 14]);
test("[id=ANCESTOR_DUPLICATED] >> * > *", [12, 14]);
test("[id=ancestor_duplicated] >> *", []);
test("[id=ancestor_duplicated] > * >> *", []);
test("[id=ancestor_duplicated] >> * > *", []);
debug("Non-Trivial Selector used as ancestor filter");
test("div[id=Ancestor_Unique][data-case] >> *", [6, 7, 8, 9]);
test("div[id=Ancestor_Unique][data-case] > * >> *", [7, 9]);
test("div[id=Ancestor_Unique][data-case] >> * > *", [7, 9]);
test("div[id=ancestor_unique][data-case] >> *", []);
test("div[id=ancestor_unique][data-case] > * >> *", []);
test("div[id=ancestor_unique][data-case] >> * > *", []);
test("div[id=ANCESTOR_DUPLICATED][data-case] >> *", [9, 11, 12, 13, 14]);
test("div[id=ANCESTOR_DUPLICATED][data-case] > * >> *", [12, 14]);
test("div[id=ANCESTOR_DUPLICATED][data-case] >> * > *", [12, 14]);
test("div[id=ancestor_duplicated][data-case] >> *", []);
test("div[id=ancestor_duplicated][data-case] > * >> *", []);
test("div[id=ancestor_duplicated][data-case] >> * > *", []);
debug("Trivial Selector used as sibling filter");
test("[id=simple_unique] + *", [2]);
test("[id=simple_unique] ~ *", [2, 3, 4, 5, 10]);
test("[id=simple_Duplicated] + *", [3, 4, 5]);
test("[id=simple_Duplicated] ~ *", [3, 4, 5, 10]);
test("[id=simple_duplicated] + *", []);
test("[id=simple_duplicated] ~ *", []);
debug("Trivial Selector used as sibling of ancestor filter");
test("[id=simple_unique] + * > *", []);
test("[id=simple_unique] ~ * > *", [6, 8, 11, 13]);
test("[id=simple_Duplicated] + * > *", [6, 8]);
test("[id=simple_Duplicated] ~ * > *", [6, 8, 11, 13]);
test("[id=simple_duplicated] + * > *", []);
test("[id=simple_duplicated] ~ * > *", []);
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>