diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /editor/libeditor/tests/test_nsIEditor_undoAll.html | |
parent | Initial commit. (diff) | |
download | firefox-esr-upstream.tar.xz firefox-esr-upstream.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | editor/libeditor/tests/test_nsIEditor_undoAll.html | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/editor/libeditor/tests/test_nsIEditor_undoAll.html b/editor/libeditor/tests/test_nsIEditor_undoAll.html new file mode 100644 index 0000000000..45e82e884b --- /dev/null +++ b/editor/libeditor/tests/test_nsIEditor_undoAll.html @@ -0,0 +1,115 @@ +<!DOCTYPE html> +<html> +<head> +<title>Test for nsIEditor.undoAll()</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); + setValue(editableElement, ""); + is( + editor.canUndo, + false, + `Editor for ${selector} shouldn't have undo transaction at start` + ); + 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 inserting "b"` + ); + is( + editor.canUndo, + true, + `Editor for ${selector} should have undo transaction after inserting "b"` + ); + is( + editor.canRedo, + false, + `Editor for ${selector} shouldn't have redo transaction after inserting "b"` + ); + + synthesizeKey("KEY_ArrowLeft"); + synthesizeKey("a"); + is( + getValue(editableElement), + "ab", + `Editor for ${selector} should've handled inserting "a" before "b"` + ); + is( + editor.canUndo, + true, + `Editor for ${selector} should have undo transaction after inserting text again` + ); + is( + editor.canRedo, + false, + `Editor for ${selector} should have redo transaction after inserting text again` + ); + + editor.undoAll(); + is( + getValue(editableElement), + "", + `Editor for ${selector} should've undone everything` + ); + is( + editor.canUndo, + false, + `Editor for ${selector} shouldn't have undo transactions after undoAll() called` + ); + is( + editor.canRedo, + true, + `Editor for ${selector} should have redo transaction after undoAll() called` + ); + + } + SimpleTest.finish(); +}); + +</script> +</pre> +</body> +</html> |