tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>