select-all-and-delete-in-html-element-having-contenteditable.html (4777B)
1 <!doctype html> 2 <html contenteditable> 3 <head> 4 <meta charset=utf-8> 5 <title>Test "Select all" and deletion work with <html contenteditable></title> 6 <script src=/resources/testharness.js></script> 7 <script src=/resources/testharnessreport.js></script> 8 <script src="/resources/testdriver.js"></script> 9 <script src="/resources/testdriver-vendor.js"></script> 10 <script src="/resources/testdriver-actions.js"></script> 11 </head> 12 <body> 13 <script> 14 "use strict"; 15 16 const kBackspaceKey = "\uE003"; 17 const kDeleteKey = "\uE017"; 18 const kMeta = "\uE03d"; 19 const kControl = "\uE009"; 20 21 async function selectAllWithKey(elementToSelectAll) { 22 if (elementToSelectAll.length === 0) { 23 throw "element to select all must not be empty"; 24 } 25 getSelection().collapse(elementToSelectAll, 0); 26 try { 27 await new test_driver.Actions() 28 .keyDown(kControl) 29 .keyDown("a") 30 .keyUp("a") 31 .keyUp(kControl) 32 .send(); 33 if (!getSelection().isCollapsed) { 34 return; 35 } 36 await new test_driver.Actions() 37 .keyDown(kMeta) 38 .keyDown("a") 39 .keyUp("a") 40 .keyUp(kMeta) 41 .send(); 42 if (!getSelection().isCollapsed) { 43 return; 44 } 45 } catch (ex) { 46 throw ex; 47 } 48 throw "Neither Control-A nor Meta-A does select all contents"; 49 } 50 51 function deleteWithBackspaceKey() { 52 return new test_driver.Actions() 53 .keyDown(kBackspaceKey) 54 .keyUp(kBackspaceKey) 55 .send(); 56 } 57 58 function deleteWithDeleteKey() { 59 return new test_driver.Actions() 60 .keyDown(kDeleteKey) 61 .keyUp(kDeleteKey) 62 .send(); 63 } 64 65 promise_test(async () => { 66 document.body.innerHTML = "abc"; 67 await selectAllWithKey(document.body); 68 await deleteWithBackspaceKey(); 69 assert_in_array(document.body.innerHTML, ["", "<br>"]); 70 }, "Select All, then, Backspace"); 71 72 promise_test(async () => { 73 document.body.innerHTML = "abc"; 74 await selectAllWithKey(document.body); 75 await deleteWithDeleteKey(); 76 assert_in_array(document.body.innerHTML, ["", "<br>"]); 77 }, "Select All, then, Delete"); 78 79 promise_test(async () => { 80 document.body.innerHTML = "abc"; 81 document.execCommand("selectall"); 82 await deleteWithBackspaceKey(); 83 assert_in_array(document.body.innerHTML, ["", "<br>"]); 84 }, 'execCommand("selectall"), then, Backspace'); 85 86 promise_test(async () => { 87 document.body.innerHTML = "abc"; 88 document.execCommand("selectall"); 89 await deleteWithDeleteKey(); 90 assert_in_array(document.body.innerHTML, ["", "<br>"]); 91 }, 'execCommand("selectall"), then, Delete'); 92 93 promise_test(async () => { 94 document.body.innerHTML = "abc"; 95 await selectAllWithKey(document.body); 96 document.execCommand("forwarddelete", false, false); 97 assert_in_array(document.body.innerHTML, ["", "<br>"]); 98 }, 'Select All, then, execCommand("forwarddelete")'); 99 100 promise_test(async () => { 101 document.body.innerHTML = "abc"; 102 await selectAllWithKey(document.body); 103 document.execCommand("delete", false, false); 104 assert_in_array(document.body.innerHTML, ["", "<br>"]); 105 }, 'Select All, then, execCommand("delete")'); 106 107 test(() => { 108 document.body.innerHTML = "abc"; 109 document.execCommand("selectall"); 110 document.execCommand("forwarddelete", false, false); 111 assert_in_array(document.body.innerHTML, ["", "<br>"]); 112 }, 'execCommand("selectall"), then, execCommand("forwarddelete")'); 113 114 test(() => { 115 document.body.innerHTML = "abc"; 116 document.execCommand("selectall"); 117 document.execCommand("delete", false, false); 118 assert_in_array(document.body.innerHTML, ["", "<br>"]); 119 }, 'execCommand("selectall"), then, execCommand("delete")'); 120 121 promise_test(async () => { 122 document.body.innerHTML = "abc"; 123 getSelection().selectAllChildren(document.documentElement); 124 await deleteWithBackspaceKey(); 125 assert_in_array(document.body.innerHTML, ["", "<br>"]); 126 }, 'getSelection().selectAllChildren(document.documentElement), then, Backspace'); 127 128 promise_test(async () => { 129 document.body.innerHTML = "abc"; 130 getSelection().selectAllChildren(document.documentElement); 131 await deleteWithDeleteKey(); 132 assert_in_array(document.body.innerHTML, ["", "<br>"]); 133 }, 'getSelection().selectAllChildren(document.documentElement), then, Delete'); 134 135 test(() => { 136 document.body.innerHTML = "abc"; 137 getSelection().selectAllChildren(document.documentElement); 138 document.execCommand("forwarddelete", false, false); 139 assert_in_array(document.body.innerHTML, ["", "<br>"]); 140 }, 'getSelection().selectAllChildren(document.documentElement), then, execCommand("forwarddelete")'); 141 142 test(() => { 143 document.body.innerHTML = "abc"; 144 getSelection().selectAllChildren(document.documentElement); 145 document.execCommand("delete", false, false); 146 assert_in_array(document.body.innerHTML, ["", "<br>"]); 147 }, 'getSelection().selectAllChildren(document.documentElement), then, execCommand("delete")'); 148 149 </script> 150 </body> 151 </html>