| <!doctype html> |
| <script src="../../resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| <script src="../assert_selection.js"></script> |
| <script> |
| // Test for https://bugs.webkit.org/show_bug.cgi?id=42941 |
| function populateUndoStack(selection) { |
| const div = selection.document.querySelector('div'); |
| selection.document.execCommand('insertParagraph'); |
| selection.setBaseAndExtent(div.firstChild, 0, div.firstChild, 2); |
| selection.document.execCommand('bold'); |
| selection.document.execCommand('undo'); |
| selection.document.execCommand('undo'); |
| } |
| |
| test(() => assert_selection( |
| '<div contenteditable>he|llo</div>', |
| selection => populateUndoStack(selection), |
| '<div contenteditable>he|llo</div>'), |
| 'undo'); |
| |
| test(() => assert_selection( |
| '<div contenteditable>he|llo</div>', |
| selection => { |
| populateUndoStack(selection); |
| selection.document.execCommand('redo'); |
| selection.document.execCommand('redo'); |
| }, |
| '<div contenteditable><b>^he|</b><div>llo</div></div>'), |
| 'redo'); |
| |
| test(() => assert_selection( |
| '<div contenteditable>he|llo</div>', |
| selection => { |
| const div = selection.document.querySelector('div'); |
| populateUndoStack(selection); |
| div.firstChild.remove(); |
| selection.document.execCommand('redo'); |
| selection.document.execCommand('redo'); |
| }, |
| '<div contenteditable><div>|hello</div></div>'), |
| 'redo with removing node'); |
| </script> |