summaryrefslogtreecommitdiffstats
path: root/editor/libeditor/tests/test_insertParagraph_in_h2_and_li.html
diff options
context:
space:
mode:
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.html167
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>