| <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> |