diff options
Diffstat (limited to '')
-rw-r--r-- | editor/libeditor/tests/test_nsIEditor_clearUndoRedo.html | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/editor/libeditor/tests/test_nsIEditor_clearUndoRedo.html b/editor/libeditor/tests/test_nsIEditor_clearUndoRedo.html new file mode 100644 index 0000000000..695826c0d8 --- /dev/null +++ b/editor/libeditor/tests/test_nsIEditor_clearUndoRedo.html @@ -0,0 +1,125 @@ +<!DOCTYPE html> +<html> +<head> +<title>Test for nsIEditor.clearUndoRedo()</title> +<script src="/tests/SimpleTest/SimpleTest.js"></script> +<script src="/tests/SimpleTest/EventUtils.js"></script> +<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<p id="display"></p> +<div id="content"><input><textarea></textarea><div contenteditable></div></div> +<pre id="test"> +<script> + +SimpleTest.waitForExplicitFinish(); +SimpleTest.waitForFocus(() => { + function isTextEditor(aElement) { + return aElement.tagName.toLowerCase() == "input" || + aElement.tagName.toLowerCase() == "textarea"; + } + function getEditor(aElement) { + if (isTextEditor(aElement)) { + return SpecialPowers.wrap(aElement).editor; + } + return SpecialPowers.wrap(window).docShell.editingSession?.getEditorForWindow(window); + } + function setValue(aElement, aValue) { + if (isTextEditor(aElement)) { + aElement.value = aValue; + return; + } + aElement.innerHTML = aValue; + } + function getValue(aElement) { + if (isTextEditor(aElement)) { + return aElement.value; + } + return aElement.innerHTML.replace(/<br>/g, ""); + } + for (const selector of ["input", "textarea", "div[contenteditable]"]) { + const editableElement = document.querySelector(selector); + editableElement.focus(); + const editor = getEditor(editableElement); + (function test_clearing_undo_history() { + setValue(editableElement, ""); + is( + editor.canUndo, + false, + `Editor for ${selector} shouldn't have undo transaction at start` + ); + synthesizeKey("a"); + is( + getValue(editableElement), + "a", + `Editor for ${selector} should've handled typing "a"` + ); + is( + editor.canUndo, + true, + `Editor for ${selector} should have undo transaction for the inserted text` + ); + editor.clearUndoRedo(); + is( + editor.canUndo, + false, + `Editor for ${selector} shouldn't have undo transaction after calling nsIEditor.clearUndoRedo()` + ); + document.execCommand("undo"); + is( + getValue(editableElement), + "a", + `Editor for ${selector} should do noting for document.execCommand("undo")` + ); + })(); + + (function test_clearing_redo_history() { + setValue(editableElement, ""); + is( + editor.canRedo, + false, + `Editor for ${selector} shouldn't have redo transaction at start` + ); + synthesizeKey("b"); + is( + getValue(editableElement), + "b", + `Editor for ${selector} should've handled typing "b"` + ); + is( + editor.canRedo, + false, + `Editor for ${selector} shouldn't have redo transaction after inserting text` + ); + document.execCommand("undo"); + is( + getValue(editableElement), + "", + `Editor for ${selector} should've handled the typing "b" after undoing` + ); + is( + editor.canRedo, + true, + `Editor for ${selector} should have redo transaction of inserting text` + ); + editor.clearUndoRedo(); + is( + editor.canRedo, + false, + `Editor for ${selector} shouldn't have redo transaction after calling nsIEditor.clearUndoRedo()` + ); + document.execCommand("redo"); + is( + getValue(editableElement), + "", + `Editor for ${selector} should do noting for document.execCommand("redo")` + ); + })(); + } + SimpleTest.finish(); +}); + +</script> +</pre> +</body> +</html> |