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>