summaryrefslogtreecommitdiffstats
path: root/editor/libeditor/tests/test_bug1406726.html
diff options
context:
space:
mode:
Diffstat (limited to 'editor/libeditor/tests/test_bug1406726.html')
-rw-r--r--editor/libeditor/tests/test_bug1406726.html126
1 files changed, 126 insertions, 0 deletions
diff --git a/editor/libeditor/tests/test_bug1406726.html b/editor/libeditor/tests/test_bug1406726.html
new file mode 100644
index 0000000000..7f7cbca963
--- /dev/null
+++ b/editor/libeditor/tests/test_bug1406726.html
@@ -0,0 +1,126 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=1406726
+-->
+<head>
+ <title>Test for Bug 1406726</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=1406726">Mozilla Bug 1406726</a>
+<p id="display"></p>
+<div id="editor" contenteditable></div>
+
+<pre id="test">
+<script type="application/javascript">
+
+/** Test for Bug 1406726 **/
+SimpleTest.waitForExplicitFinish();
+SimpleTest.waitForFocus(() => {
+ let editor = document.getElementById("editor");
+ let selection = window.getSelection();
+
+ editor.focus();
+ for (let paragraphSeparator of ["div", "p"]) {
+ document.execCommand("defaultParagraphSeparator", false, paragraphSeparator);
+
+ // The result of editor.innerHTML may be wrong in this tests.
+ // Currently, editor wraps following elements of <br> element with default
+ // paragraph separator only when there is only non-editable elements.
+ // This behavior should be standardized by execCommand spec.
+
+ editor.innerHTML = "foo<br>bar<br><span contenteditable=\"false\">baz</span>";
+ selection.collapse(editor.childNodes.item(2), "bar".length);
+ document.execCommand("insertParagraph", false);
+ is(editor.innerHTML, "foo<br>" +
+ "<" + paragraphSeparator + ">bar</" + paragraphSeparator + ">" +
+ "<" + paragraphSeparator + "><br></" + paragraphSeparator + ">" +
+ "<" + paragraphSeparator + "><span contenteditable=\"false\">baz</span></" + paragraphSeparator + ">",
+ "All inline nodes including non-editable <span> element should be wrapped with default paragraph separator, <" + paragraphSeparator + ">");
+ ok(selection.isCollapsed, "Selection should be collapsed");
+ is(selection.anchorNode, editor.childNodes.item(3),
+ "Caret should be in the third line");
+ is(selection.anchorOffset, 0,
+ "Caret should be at start of the third line");
+
+ editor.innerHTML = "foo<br>bar<br><span>baz</span>";
+ selection.collapse(editor.childNodes.item(2), "bar".length);
+ document.execCommand("insertParagraph", false);
+ is(editor.innerHTML, "foo<br>" +
+ "<" + paragraphSeparator + ">bar</" + paragraphSeparator + ">" +
+ "<" + paragraphSeparator + "><br></" + paragraphSeparator + ">" +
+ "<span>baz</span>",
+ "All inline nodes in the second line should be wrapped with default paragraph separator, <" + paragraphSeparator + ">");
+ ok(selection.isCollapsed, "Selection should be collapsed");
+ is(selection.anchorNode, editor.childNodes.item(3),
+ "Caret should be in the third line");
+ is(selection.anchorOffset, 0,
+ "Caret should be at start of the third line");
+
+ editor.innerHTML = "foo<br>bar<br><span contenteditable=\"false\">baz</span>qux";
+ selection.collapse(editor.childNodes.item(2), "bar".length);
+ document.execCommand("insertParagraph", false);
+ is(editor.innerHTML, "foo<br>" +
+ "<" + paragraphSeparator + ">bar</" + paragraphSeparator + ">" +
+ "<" + paragraphSeparator + "><br></" + paragraphSeparator + ">" +
+ "<span contenteditable=\"false\">baz</span>qux",
+ "All inline nodes in the second line should be wrapped with default paragraph separator, <" + paragraphSeparator + ">");
+ ok(selection.isCollapsed, "Selection should be collapsed");
+ is(selection.anchorNode, editor.childNodes.item(3),
+ "Caret should be in the third line");
+ is(selection.anchorOffset, 0,
+ "Caret should be at start of the third line");
+
+ editor.innerHTML = "foo<br>bar<br><span contenteditable=\"false\">baz</span>";
+ selection.collapse(editor.childNodes.item(2), "ba".length);
+ document.execCommand("insertParagraph", false);
+ is(editor.innerHTML, "foo<br>" +
+ "<" + paragraphSeparator + ">ba</" + paragraphSeparator + ">" +
+ "<" + paragraphSeparator + ">r</" + paragraphSeparator + ">" +
+ "<" + paragraphSeparator + "><span contenteditable=\"false\">baz</span></" + paragraphSeparator + ">",
+ "All inline nodes including non-editable <span> element should be wrapped with default paragraph separator, <" + paragraphSeparator + ">");
+ ok(selection.isCollapsed, "Selection should be collapsed");
+ is(selection.anchorNode, editor.childNodes.item(3).firstChild,
+ "Caret should be in the text node in the third line");
+ is(selection.anchorOffset, 0,
+ "Caret should be at start of the text node in the third line");
+
+ editor.innerHTML = "foo<br>bar<br><span>baz</span>";
+ selection.collapse(editor.childNodes.item(2), "ba".length);
+ document.execCommand("insertParagraph", false);
+ is(editor.innerHTML, "foo<br>" +
+ "<" + paragraphSeparator + ">ba</" + paragraphSeparator + ">" +
+ "<" + paragraphSeparator + ">r</" + paragraphSeparator + ">" +
+ "<span>baz</span>",
+ "All inline nodes in the second line should be wrapped with default paragraph separator, <" + paragraphSeparator + ">");
+ ok(selection.isCollapsed, "Selection should be collapsed");
+ is(selection.anchorNode, editor.childNodes.item(3).firstChild,
+ "Caret should be in the text node in the third line");
+ is(selection.anchorOffset, 0,
+ "Caret should be at start of the text node in the third line");
+
+ editor.innerHTML = "foo<br>bar<br><span contenteditable=\"false\">baz</span>qux";
+ selection.collapse(editor.childNodes.item(2), "ba".length);
+ document.execCommand("insertParagraph", false);
+ is(editor.innerHTML, "foo<br>" +
+ "<" + paragraphSeparator + ">ba</" + paragraphSeparator + ">" +
+ "<" + paragraphSeparator + ">r</" + paragraphSeparator + ">" +
+ "<span contenteditable=\"false\">baz</span>qux",
+ "All inline nodes in the second line should be wrapped with default paragraph separator, <" + paragraphSeparator + ">");
+ ok(selection.isCollapsed, "Selection should be collapsed");
+ is(selection.anchorNode, editor.childNodes.item(3).firstChild,
+ "Caret should be in the text node in the third line");
+ is(selection.anchorOffset, 0,
+ "Caret should be at start of the text node in the third line");
+ }
+
+ SimpleTest.finish();
+});
+
+</script>
+</pre>
+</body>
+</html>