tor-browser

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

forwarddelete-word-around-span.html (2619B)


      1 <!doctype html>
      2 <html>
      3 <head>
      4 <meta charset="utf-8">
      5 <meta name="variant" content="?white-space=normal">
      6 <meta name="variant" content="?white-space=pre">
      7 <meta name="variant" content="?white-space=pre-wrap">
      8 <meta name="variant" content="?white-space=pre-line">
      9 <title>Forward-delete per word should not change the deleting range whether the surrounding word is wrapped in an inline element</title>
     10 <script src="/resources/testharness.js"></script>
     11 <script src="/resources/testharnessreport.js"></script>
     12 <script src="/resources/testdriver.js"></script>
     13 <script src="/resources/testdriver-vendor.js"></script>
     14 <script src="/resources/testdriver-actions.js"></script>
     15 <script src="../include/editor-test-utils.js"></script>
     16 <script>
     17 "use strict";
     18 
     19 const searchParams = new URLSearchParams(document.location.search);
     20 const whiteSpace = searchParams.get("white-space");
     21 
     22 document.addEventListener("DOMContentLoaded", () => {
     23  const editingHost = document.querySelector("div[contenteditable]");
     24  editingHost.style.whiteSpace = whiteSpace;
     25  const utils = new EditorTestUtils(editingHost);
     26  /**
     27   * How to delete per word may depend on the browser and the platform. On the
     28   * other hand, the result (at least in the plaintext point of view) should be
     29   * same even if surrounding word is wrapped in a <span>.
     30   */
     31  for (const data of [
     32    {
     33      innerHTML: `[]abc <span>def</span> ghi`,
     34      referenceInnerHTML: `[]abc def ghi`,
     35    },
     36    {
     37      innerHTML: `abc[] <span>def</span> ghi`,
     38      referenceInnerHTML: `abc[] def ghi`,
     39    },
     40    {
     41      innerHTML: `abc []<span>def</span> ghi`,
     42      referenceInnerHTML: `abc []def ghi`,
     43    },
     44    {
     45      innerHTML: `abc <span>[]def</span> ghi`,
     46      referenceInnerHTML: `abc []def ghi`,
     47    },
     48    {
     49      innerHTML: `abc <span>def</span>[] ghi`,
     50      referenceInnerHTML: `abc def[] ghi`,
     51    },
     52    {
     53      innerHTML: `abc <span>def</span> []ghi`,
     54      referenceInnerHTML: `abc def []ghi`,
     55    },
     56  ]) {
     57    promise_test(async () => {
     58      utils.setupEditingHost(data.referenceInnerHTML);
     59      await utils.sendDeleteKey(utils.deleteWordModifier);
     60      const expectedInnerText = editingHost.innerText;
     61      utils.setupEditingHost(data.innerHTML);
     62      await utils.sendDeleteKey(utils.deleteWordModifier);
     63      assert_equals(
     64        editingHost.innerText.replaceAll("\u00A0", " "),
     65        expectedInnerText.replaceAll("\u00A0", " ")
     66      );
     67    }, `Ctrl/Cmd - Delete when "${data.innerHTML}" should get same innerText as when "${data.referenceInnerHTML}"`);
     68  }
     69 }, {once: true});
     70 </script>
     71 </head>
     72 <body>
     73  <div contenteditable></div>
     74 </body>
     75 </html>