Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="variant" content="?white-space=normal">
<meta name="variant" content="?white-space=pre">
<meta name="variant" content="?white-space=pre-wrap">
<meta name="variant" content="?white-space=pre-line">
<title>Forward-delete per word should not change the deleting range whether the surrounding word is wrapped in an inline element</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script src="../include/editor-test-utils.js"></script>
<script>
"use strict";
const searchParams = new URLSearchParams(document.location.search);
const whiteSpace = searchParams.get("white-space");
document.addEventListener("DOMContentLoaded", () => {
const editingHost = document.querySelector("div[contenteditable]");
editingHost.style.whiteSpace = whiteSpace;
const utils = new EditorTestUtils(editingHost);
/**
* How to delete per word may depend on the browser and the platform. On the
* other hand, the result (at least in the plaintext point of view) should be
* same even if surrounding word is wrapped in a <span>.
*/
for (const data of [
{
innerHTML: `[]abc <span>def</span> ghi`,
referenceInnerHTML: `[]abc def ghi`,
},
{
innerHTML: `abc[] <span>def</span> ghi`,
referenceInnerHTML: `abc[] def ghi`,
},
{
innerHTML: `abc []<span>def</span> ghi`,
referenceInnerHTML: `abc []def ghi`,
},
{
innerHTML: `abc <span>[]def</span> ghi`,
referenceInnerHTML: `abc []def ghi`,
},
{
innerHTML: `abc <span>def</span>[] ghi`,
referenceInnerHTML: `abc def[] ghi`,
},
{
innerHTML: `abc <span>def</span> []ghi`,
referenceInnerHTML: `abc def []ghi`,
},
]) {
promise_test(async () => {
utils.setupEditingHost(data.referenceInnerHTML);
await utils.sendDeleteKey(utils.deleteWordModifier);
const expectedInnerText = editingHost.innerText;
utils.setupEditingHost(data.innerHTML);
await utils.sendDeleteKey(utils.deleteWordModifier);
assert_equals(
editingHost.innerText.replaceAll("\u00A0", " "),
expectedInnerText.replaceAll("\u00A0", " ")
);
}, `Ctrl/Cmd - Delete when "${data.innerHTML}" should get same innerText as when "${data.referenceInnerHTML}"`);
}
}, {once: true});
</script>
</head>
<body>
<div contenteditable></div>
</body>
</html>