| <!DOCTYPE html><!-- webkit-test-runner [ LiveRangeSelectionEnabled=true ] --> |
| <head> |
| <script src="../../resources/js-test.js"></script> |
| <script src="../../resources/gc.js"></script> |
| </head> |
| <body> |
| <script> |
| |
| const repetitions = 20; |
| const expectedCount = "" + repetitions; |
| |
| function expandoCount(createExpando) |
| { |
| let count = 0; |
| for (let i = 0; i < repetitions; ++i) { |
| createExpando(); |
| gc(); |
| if (getSelection().getRangeAt(0).expando == 1) |
| ++count; |
| } |
| return count; |
| } |
| |
| function createSelectionWithExpando() |
| { |
| getSelection().removeAllRanges(); |
| let range = document.createRange(); |
| range.setStart(document, 0); |
| range.setEnd(document, 1); |
| range.expando = 1; |
| getSelection().addRange(range); |
| return range; |
| } |
| |
| function attachExpandoToExistingSelectionRange() |
| { |
| getSelection().getRangeAt(0).expando = 1; |
| } |
| |
| function setUpSelectionAndAttachExpando() |
| { |
| getSelection().setBaseAndExtent(document, 0, document, 1); |
| attachExpandoToExistingSelectionRange(); |
| } |
| |
| function collapseOvewritingRange() |
| { |
| setUpSelectionAndAttachExpando(); |
| getSelection().collapse(document); |
| } |
| |
| function setPositionOvewritingRange() |
| { |
| setUpSelectionAndAttachExpando(); |
| getSelection().setPosition(document); |
| } |
| |
| function extendOvewritingRange() |
| { |
| setUpSelectionAndAttachExpando(); |
| getSelection().extend(document); |
| } |
| |
| function setBaseAndExtentOvewritingRange() |
| { |
| setUpSelectionAndAttachExpando(); |
| getSelection().setBaseAndExtent(document, 0, document, 1); |
| } |
| |
| function selectAllChildrenOvewritingRange() |
| { |
| setUpSelectionAndAttachExpando(); |
| getSelection().selectAllChildren(document); |
| } |
| |
| function deleteFromDocumentMutatingRange() |
| { |
| let textNode = document.createTextNode("x"); |
| document.body.appendChild(textNode); |
| getSelection().setBaseAndExtent(textNode, 0, textNode, 1); |
| attachExpandoToExistingSelectionRange(); |
| getSelection().deleteFromDocument(); |
| } |
| |
| function mutateRangeAfterAttaching() |
| { |
| createSelectionWithExpando().setEnd(document, 0); |
| } |
| |
| shouldBe("expandoCount(createSelectionWithExpando)", expectedCount); |
| shouldBe("expandoCount(setUpSelectionAndAttachExpando)", expectedCount); |
| shouldBe("expandoCount(collapseOvewritingRange)", "0"); |
| shouldBe("expandoCount(setPositionOvewritingRange)", "0"); |
| shouldBe("expandoCount(extendOvewritingRange)", "0"); |
| shouldBe("expandoCount(setBaseAndExtentOvewritingRange)", "0"); |
| shouldBe("expandoCount(selectAllChildrenOvewritingRange)", "0"); |
| shouldBe("expandoCount(deleteFromDocumentMutatingRange)", expectedCount); |
| shouldBe("expandoCount(mutateRangeAfterAttaching)", expectedCount); |
| |
| var successfullyParsed = true; |
| |
| </script> |
| </body> |