| <!doctype html> |
| <html> |
| <head> |
| <meta charset="utf-8"> |
| <title>Delete editable range around elements having inert attribute</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="../editing/include/editor-test-utils.js"></script> |
| <script> |
| document.addEventListener("DOMContentLoaded", () => { |
| const editingHost = document.querySelector("div[contenteditable]"); |
| const utils = new EditorTestUtils(editingHost); |
| |
| test(t => { |
| utils.setupEditingHost(t.name, { selection: "setBaseAndExtent" }); |
| const initialInnerHTML = editingHost.innerHTML; |
| document.execCommand("delete"); |
| const desc = `execCommand("delete") at ${t.name}` |
| assert_equals( |
| editingHost.innerHTML, |
| initialInnerHTML, |
| `${desc}: <span> content should not be deleted because anchor node of Selection is in the <span inert>` |
| ); |
| }, "<span inert>a[bc</span><span>de]f</span>"); |
| |
| test(t => { |
| utils.setupEditingHost(t.name, { selection: "setBaseAndExtent" }); |
| const initialInnerHTML = editingHost.innerHTML; |
| document.execCommand("delete"); |
| const desc = `execCommand("delete") at ${t.name}` |
| assert_equals( |
| !!editingHost.querySelector("span[inert]"), |
| true, |
| `${desc}: <span inert> should not be deleted` |
| ); |
| assert_equals( |
| editingHost.querySelector("span[inert]").textContent, |
| "def", |
| `${desc}: <span inert> content should not be deleted` |
| ); |
| assert_not_equals( |
| editingHost.innerHTML, |
| initialInnerHTML, |
| `${desc}: <span> content should be deleted (but how to handle it is not tested here)` |
| ); |
| }, "<span>a[bc</span><span inert>de]f</span>"); |
| |
| test(t => { |
| utils.setupEditingHost(t.name, { selection: "setBaseAndExtent-reverse" }); |
| const initialInnerHTML = editingHost.innerHTML; |
| document.execCommand("delete"); |
| const desc = `execCommand("delete") at ${t.name} (selection range direction is inverted)` |
| assert_equals( |
| !!editingHost.querySelector("span[inert]"), |
| true, |
| `${desc}: <span inert> should not be deleted` |
| ); |
| assert_equals( |
| editingHost.querySelector("span[inert]").textContent, |
| "def", |
| `${desc}: <span inert> content should not be deleted` |
| ); |
| assert_not_equals( |
| editingHost.innerHTML, |
| initialInnerHTML, |
| `${desc}: <span> content should be deleted (but how to handle it is not tested here)` |
| ); |
| }, "<span inert>d[ef</span><span>ab]c</span>"); |
| |
| test(t => { |
| utils.setupEditingHost(t.name, { selection: "setBaseAndExtent-reverse" }); |
| const initialInnerHTML = editingHost.innerHTML; |
| document.execCommand("delete"); |
| const desc = `execCommand("delete") at ${t.name} (selection range direction is inverted)` |
| assert_equals( |
| editingHost.innerHTML, |
| initialInnerHTML, |
| `${desc}: <span> content should not be deleted because anchor node of Selection is in the <span inert>` |
| ); |
| }, "<span>d[ef</span><span inert>ab]c</span>"); |
| |
| test(t => { |
| utils.setupEditingHost(t.name, { selection: "setBaseAndExtent" }); |
| document.execCommand("delete"); |
| const desc = `execCommand("delete") at ${t.name}` |
| assert_equals(editingHost.innerHTML, "af", `${desc}: <span inert> should be deleted`); |
| }, "a[bc<span inert>XYZ</span>de]f"); |
| |
| test(t => { |
| utils.setupEditingHost(t.name, { selection: "setBaseAndExtent" }); |
| const initialInnerHTML = editingHost.innerHTML; |
| document.execCommand("delete"); |
| const desc = `execCommand("delete") at ${t.name}` |
| assert_equals( |
| editingHost.innerHTML, |
| initialInnerHTML, |
| `${desc}: <span> content should not be deleted because anchor node of Selection is in the <span inert>` |
| ); |
| }, `<span inert style="display:contents">a[bc</span><span>de]f</span>`); |
| |
| test(t => { |
| utils.setupEditingHost(t.name, { selection: "setBaseAndExtent" }); |
| const initialInnerHTML = editingHost.innerHTML; |
| document.execCommand("delete"); |
| const desc = `execCommand("delete") at ${t.name}` |
| assert_equals( |
| editingHost.innerHTML, |
| initialInnerHTML, |
| `${desc}: <span> content should not be deleted because anchor node of Selection is in the <span inert>` |
| ); |
| }, `<span inert style="display:contents">{abc</span><span>de]f</span>`); |
| |
| test(t => { |
| utils.setupEditingHost(t.name, { selection: "setBaseAndExtent" }); |
| const initialInnerHTML = editingHost.innerHTML; |
| document.execCommand("delete"); |
| const desc = `execCommand("delete") at ${t.name}` |
| assert_equals( |
| editingHost.innerHTML, |
| initialInnerHTML, |
| `${desc}: <span> content should not be deleted because anchor node of Selection is in the <span inert>` |
| ); |
| }, `<span inert><span style="display:contents">a[bc</span></span><span>de]f</span>`); |
| |
| test(t => { |
| utils.setupEditingHost(t.name, { selection: "setBaseAndExtent" }); |
| const initialInnerHTML = editingHost.innerHTML; |
| document.execCommand("delete"); |
| const desc = `execCommand("delete") at ${t.name}` |
| assert_equals( |
| editingHost.innerHTML, |
| initialInnerHTML, |
| `${desc}: <span> content should not be deleted because anchor node of Selection is in the <span inert>` |
| ); |
| }, `<span inert><span style="display:contents">{abc</span></span><span>de]f</span>`); |
| |
| test(t => { |
| utils.setupEditingHost(t.name, { selection: "setBaseAndExtent" }); |
| const initialInnerHTML = editingHost.innerHTML; |
| document.execCommand("delete"); |
| const desc = `execCommand("delete") at ${t.name}` |
| assert_equals( |
| editingHost.innerHTML, |
| initialInnerHTML, |
| `${desc}: <span> content should not be deleted because anchor node of Selection is in the <span inert>` |
| ); |
| }, `<span inert style="display:none">a[bc</span><span>de]f</span>`); |
| |
| test(t => { |
| utils.setupEditingHost(t.name, { selection: "setBaseAndExtent" }); |
| const initialInnerHTML = editingHost.innerHTML; |
| document.execCommand("delete"); |
| const desc = `execCommand("delete") at ${t.name}` |
| assert_equals( |
| editingHost.innerHTML, |
| initialInnerHTML, |
| `${desc}: <span> content should not be deleted because anchor node of Selection is in the <span inert>` |
| ); |
| }, `<span inert style="display:none">{abc</span><span>de]f</span>`); |
| |
| test(t => { |
| utils.setupEditingHost(t.name, { selection: "setBaseAndExtent" }); |
| const initialInnerHTML = editingHost.innerHTML; |
| document.execCommand("delete"); |
| const desc = `execCommand("delete") at ${t.name}` |
| assert_equals( |
| editingHost.innerHTML, |
| initialInnerHTML, |
| `${desc}: <span> content should not be deleted because anchor node of Selection is in the <span inert>` |
| ); |
| }, `<span inert><span style="display:none">a[bc</span></span><span>de]f</span>`); |
| |
| test(t => { |
| utils.setupEditingHost(t.name, { selection: "setBaseAndExtent" }); |
| const initialInnerHTML = editingHost.innerHTML; |
| document.execCommand("delete"); |
| const desc = `execCommand("delete") at ${t.name}` |
| assert_equals( |
| editingHost.innerHTML, |
| initialInnerHTML, |
| `${desc}: <span> content should not be deleted because anchor node of Selection is in the <span inert>` |
| ); |
| }, `<span inert><span style="display:none">{abc</span></span><span>de]f</span>`); |
| }); |
| </script> |
| </head> |
| <body> |
| <div contenteditable></div> |
| </body> |
| </html> |