diff options
Diffstat (limited to '')
-rw-r--r-- | testing/web-platform/tests/editing/other/select-all-and-delete-in-html-element-having-contenteditable.html | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/testing/web-platform/tests/editing/other/select-all-and-delete-in-html-element-having-contenteditable.html b/testing/web-platform/tests/editing/other/select-all-and-delete-in-html-element-having-contenteditable.html new file mode 100644 index 0000000000..ab324c6d03 --- /dev/null +++ b/testing/web-platform/tests/editing/other/select-all-and-delete-in-html-element-having-contenteditable.html @@ -0,0 +1,151 @@ +<!doctype html> +<html contenteditable> +<head> +<meta charset=utf-8> +<title>Test "Select all" and deletion work with <html contenteditable></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> +</head> +<body> +<script> +"use strict"; + +const kBackspaceKey = "\uE003"; +const kDeleteKey = "\uE017"; +const kMeta = "\uE03d"; +const kControl = "\uE009"; + +async function selectAllWithKey(elementToSelectAll) { + if (elementToSelectAll.length === 0) { + throw "element to select all must not be empty"; + } + getSelection().collapse(elementToSelectAll, 0); + try { + await new test_driver.Actions() + .keyDown(kControl) + .keyDown("a") + .keyUp("a") + .keyUp(kControl) + .send(); + if (!getSelection().isCollapsed) { + return; + } + await new test_driver.Actions() + .keyDown(kMeta) + .keyDown("a") + .keyUp("a") + .keyUp(kMeta) + .send(); + if (!getSelection().isCollapsed) { + return; + } + } catch (ex) { + throw ex; + } + throw "Neither Control-A nor Meta-A does select all contents"; +} + +function deleteWithBackspaceKey() { + return new test_driver.Actions() + .keyDown(kBackspaceKey) + .keyUp(kBackspaceKey) + .send(); +} + +function deleteWithDeleteKey() { + return new test_driver.Actions() + .keyDown(kDeleteKey) + .keyUp(kDeleteKey) + .send(); +} + +promise_test(async () => { + document.body.innerHTML = "abc"; + await selectAllWithKey(document.body); + await deleteWithBackspaceKey(); + assert_in_array(document.body.innerHTML, ["", "<br>"]); +}, "Select All, then, Backspace"); + +promise_test(async () => { + document.body.innerHTML = "abc"; + await selectAllWithKey(document.body); + await deleteWithDeleteKey(); + assert_in_array(document.body.innerHTML, ["", "<br>"]); +}, "Select All, then, Delete"); + +promise_test(async () => { + document.body.innerHTML = "abc"; + document.execCommand("selectall"); + await deleteWithBackspaceKey(); + assert_in_array(document.body.innerHTML, ["", "<br>"]); +}, 'execCommand("selectall"), then, Backspace'); + +promise_test(async () => { + document.body.innerHTML = "abc"; + document.execCommand("selectall"); + await deleteWithDeleteKey(); + assert_in_array(document.body.innerHTML, ["", "<br>"]); +}, 'execCommand("selectall"), then, Delete'); + +promise_test(async () => { + document.body.innerHTML = "abc"; + await selectAllWithKey(document.body); + document.execCommand("forwarddelete", false, false); + assert_in_array(document.body.innerHTML, ["", "<br>"]); +}, 'Select All, then, execCommand("forwarddelete")'); + +promise_test(async () => { + document.body.innerHTML = "abc"; + await selectAllWithKey(document.body); + document.execCommand("delete", false, false); + assert_in_array(document.body.innerHTML, ["", "<br>"]); +}, 'Select All, then, execCommand("delete")'); + +test(() => { + document.body.innerHTML = "abc"; + document.execCommand("selectall"); + document.execCommand("forwarddelete", false, false); + assert_in_array(document.body.innerHTML, ["", "<br>"]); +}, 'execCommand("selectall"), then, execCommand("forwarddelete")'); + +test(() => { + document.body.innerHTML = "abc"; + document.execCommand("selectall"); + document.execCommand("delete", false, false); + assert_in_array(document.body.innerHTML, ["", "<br>"]); +}, 'execCommand("selectall"), then, execCommand("delete")'); + +promise_test(async () => { + document.body.innerHTML = "abc"; + getSelection().selectAllChildren(document.documentElement); + await deleteWithBackspaceKey(); + assert_in_array(document.body.innerHTML, ["", "<br>"]); +}, 'getSelection().selectAllChildren(document.documentElement), then, Backspace'); + +promise_test(async () => { + document.body.innerHTML = "abc"; + getSelection().selectAllChildren(document.documentElement); + await deleteWithDeleteKey(); + assert_in_array(document.body.innerHTML, ["", "<br>"]); +}, 'getSelection().selectAllChildren(document.documentElement), then, Delete'); + +test(() => { + document.body.innerHTML = "abc"; + getSelection().selectAllChildren(document.documentElement); + document.execCommand("forwarddelete", false, false); + assert_in_array(document.body.innerHTML, ["", "<br>"]); +}, 'getSelection().selectAllChildren(document.documentElement), then, execCommand("forwarddelete")'); + +test(() => { + document.body.innerHTML = "abc"; + getSelection().selectAllChildren(document.documentElement); + document.execCommand("delete", false, false); + assert_in_array(document.body.innerHTML, ["", "<br>"]); +}, 'getSelection().selectAllChildren(document.documentElement), then, execCommand("delete")'); + +</script> +</body> +</html>
\ No newline at end of file |