diff options
Diffstat (limited to 'editor/libeditor/tests/test_insertParagraph_in_h2_and_li.html')
-rw-r--r-- | editor/libeditor/tests/test_insertParagraph_in_h2_and_li.html | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/editor/libeditor/tests/test_insertParagraph_in_h2_and_li.html b/editor/libeditor/tests/test_insertParagraph_in_h2_and_li.html new file mode 100644 index 0000000000..0af77108c6 --- /dev/null +++ b/editor/libeditor/tests/test_insertParagraph_in_h2_and_li.html @@ -0,0 +1,167 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=449243 +--> +<head> + <title>Test for Bug 449243</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> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=449243">Mozilla Bug 449243</a> +<p id="display"></p> +<div id="content" contenteditable> + <h2>This is a title</h2> + <ul> + <li>this is a</li> + <li>bullet list</li> + </ul> + <ol> + <li>this is a</li> + <li>numbered list</li> + </ol> +</div> + +<pre id="test"> +<script type="application/javascript"> + +/** Test for Bug 449243 **/ +SimpleTest.waitForExplicitFinish(); +SimpleTest.waitForFocus(runTests); + +const CARET_BEGIN = 0; +const CARET_MIDDLE = 1; +const CARET_END = 2; + +function split(element, caretPos, nbKeyPresses) { + // put the caret on the requested position + const offset = (() => { + switch (caretPos) { + case CARET_BEGIN: + return 0; + case CARET_MIDDLE: + return Math.floor(element.textContent.length / 2); + case CARET_END: + return element.textContent.length; + } + return 0; + })(); + getSelection().collapse(element.firstChild, offset); + + // simulates a [Return] keypress + for (let i = 0; i < nbKeyPresses; i++) { + synthesizeKey("KEY_Enter"); + } +} + +function undo(nbKeyPresses) { + for (let i = 0; i < nbKeyPresses; i++) { + document.execCommand("Undo"); + } +} + +function getNewElement(element) { + return element.nextElementSibling; +} + +function runTests() { + const content = document.querySelector("[contenteditable]"); + const header = content.querySelector("h2"); + const ulItem = content.querySelector("ul > li:last-child"); + const olItem = content.querySelector("ol > li:last-child"); + content.focus(); + + // beginning of selection: split current node + split(header, CARET_BEGIN, 1); + is( + getNewElement(header)?.nodeName, + header.nodeName, + "Pressing [Return] at the beginning of a header " + + "should create another header." + ); + split(ulItem, CARET_BEGIN, 2); + is( + getNewElement(ulItem)?.nodeName, + ulItem.nodeName, + "Pressing [Return] at the beginning of an unordered list item " + + "should create another list item." + ); + split(olItem, CARET_BEGIN, 2); + is( + getNewElement(olItem)?.nodeName, + olItem.nodeName, + "Pressing [Return] at the beginning of an ordered list item " + + "should create another list item." + ); + undo(3); + + // middle of selection: split current node + split(header, CARET_MIDDLE, 1); + is( + getNewElement(header)?.nodeName, + header.nodeName, + "Pressing [Return] at the middle of a header " + + "should create another header." + ); + split(ulItem, CARET_MIDDLE, 2); + is( + getNewElement(ulItem)?.nodeName, + ulItem.nodeName, + "Pressing [Return] at the middle of an unordered list item " + + "should create another list item." + ); + split(olItem, CARET_MIDDLE, 2); + is( + getNewElement(olItem)?.nodeName, + olItem.nodeName, + "Pressing [Return] at the middle of an ordered list item " + + "should create another list item." + ); + undo(3); + + // end of selection: create a new div/paragraph + function testEndOfSelection(expected, defaultParagraphSeparator) { + split(header, CARET_END, 1); + is( + content.querySelector("h2+*")?.nodeName, + expected.toUpperCase(), + `Pressing [Return] at the end of a header should create a new <${ + expected + }> (defaultParagraphSeparator: <${defaultParagraphSeparator}>)` + ); + split(ulItem, CARET_END, 2); + is( + content.querySelector("ul+*")?.nodeName, + expected.toUpperCase(), + `Pressing [Return] twice at the end of an unordered list item should create a new <${ + expected + }> (defaultParagraphSeparator: <${defaultParagraphSeparator}>)` + ); + split(olItem, CARET_END, 2); + is( + content.querySelector("ol+*")?.nodeName, + expected.toUpperCase(), + `Pressing [Return] twice at the end of an ordered list item should create a new <${ + expected + }> (defaultParagraphSeparator: <${defaultParagraphSeparator}>)` + ); + undo(3); + } + + document.execCommand("defaultParagraphSeparator", false, "div"); + testEndOfSelection("div", "div"); + document.execCommand("defaultParagraphSeparator", false, "p"); + testEndOfSelection("p", "p"); + document.execCommand("defaultParagraphSeparator", false, "br"); + testEndOfSelection("p", "br"); + + // done + SimpleTest.finish(); +} + +</script> +</pre> +</body> +</html> |