input-events-get-target-ranges-during-and-after-dispatch.tentative.html (2835B)
1 <!DOCTYPE html> 2 <meta charset="utf-8"> 3 <title>InputEvent.getTargetRanges() should return same array in various timings</title> 4 <div contenteditable></div> 5 <script src="input-events-get-target-ranges.js"></script> 6 <script src="/resources/testharness.js"></script> 7 <script src="/resources/testharnessreport.js"></script> 8 <script src="/resources/testdriver.js"></script> 9 <script src="/resources/testdriver-vendor.js"></script> 10 <script src="/resources/testdriver-actions.js"></script> 11 <script> 12 "use strict"; 13 14 // https://github.com/w3c/input-events/issues/114 15 function checkGetTargetRangesKeepReturningSameValue(event, desc) { 16 assert_equals( 17 getArrayOfRangesDescription(event.getTargetRanges()), 18 getArrayOfRangesDescription(event.cachedRanges), 19 `getTargetRanges() of ${event.type} event should keep returning the same array of ranges ${desc}`); 20 } 21 22 promise_test(async () => { 23 initializeTest("<p>abc</p>"); 24 let textNode = gEditor.firstChild.firstChild; 25 gSelection.collapse(textNode, 2); 26 await sendBackspaceKey(); 27 assert_equals(gEditor.innerHTML, "<p>ac</p>", 'Should "b" be deleted'); 28 checkGetTargetRangesKeepReturningSameValue(gBeforeinput[0], "even after its propagation"); 29 checkGetTargetRangesKeepReturningSameValue(gInput[0], "even after its propagation"); 30 }, "Check consistency of getTargetRanges() result between during propagation and after propagation"); 31 32 promise_test(async () => { 33 initializeTest("<p>abc</p>"); 34 let textNode = gEditor.firstChild.firstChild; 35 gSelection.collapse(textNode, 2); 36 gEditor.addEventListener("beforeinput", (event) => { 37 assert_false(typeof event.cachedRanges === "undefined", "The beforeinput event should have cache of getTargetRanges()"); 38 gSelection.collapse(textNode, 3); 39 checkGetTargetRangesKeepReturningSameValue(event, "even after changing selection"); 40 }, {once: true}); 41 await sendBackspaceKey(); 42 assert_equals(gEditor.innerHTML, "<p>ab</p>", 'Should "c" be deleted'); 43 }, "Check consistency of getTargetRanges() result between before and after changing selection in an event listener"); 44 45 promise_test(async () => { 46 initializeTest("<p>abc</p>"); 47 let textNode = gEditor.firstChild.firstChild; 48 gSelection.collapse(textNode, 2); 49 window.addEventListener("beforeinput", (event) => { 50 assert_true(typeof event.cachedRanges === "undefined", "The beforeinput event shouldn't have cached ranges yet"); 51 gSelection.collapse(textNode, 3); 52 }, {once: true, capture: true}); 53 await sendBackspaceKey(); 54 assert_equals(gEditor.innerHTML, "<p>ab</p>", 'Should "c" be deleted'); 55 checkGetTargetRangesOfBeforeinputOnDeleteSomething({ 56 startContainer: textNode, 57 startOffset: 1, 58 endContainer: textNode, 59 endOffset: 2, 60 }); 61 }, "The result of getTargetRanges() of beforeinput event should be fixed at being dispatched"); 62 63 </script>