зеркало из https://github.com/mozilla/gecko-dev.git
150 строки
6.7 KiB
HTML
150 строки
6.7 KiB
HTML
<!DOCTYPE>
|
|
<html>
|
|
<head>
|
|
<title>Test for nsIHTMLEditor.setCaretAfterElement()</title>
|
|
<script src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
<link rel="stylesheet" href="/tests/SimpleTest/test.css">
|
|
</head>
|
|
<body>
|
|
<div id="display">
|
|
</div>
|
|
<div id="content" contenteditable></div>
|
|
<pre id="test">
|
|
</pre>
|
|
|
|
<script class="testbody" type="application/javascript">
|
|
|
|
SimpleTest.waitForExplicitFinish();
|
|
SimpleTest.waitForFocus(function() {
|
|
let editor = document.getElementById("content");
|
|
let selection = window.getSelection();
|
|
|
|
editor.innerHTML = "<p>p1<b>b1</b><i>i1</i></p><p><b>b2</b><i>i2</i>p2</p>";
|
|
|
|
editor.focus();
|
|
try {
|
|
getHTMLEditor().setCaretAfterElement(editor.firstChild.firstChild);
|
|
ok(false, "nsIHTMLEditor.setCaretAfterElement() should throw an exception if given node is not an element");
|
|
} catch (e) {
|
|
ok(true, `nsIHTMLEditor.setCaretAfterElement() should throw an exception if given node is not an element: ${e}`);
|
|
}
|
|
|
|
editor.focus();
|
|
try {
|
|
getHTMLEditor().setCaretAfterElement(editor.firstChild.firstChild.nextSibling);
|
|
ok(selection.isCollapsed,
|
|
"nsIHTMLEditor.setCaretAfterElement() should collapse Selection #1");
|
|
is(selection.anchorNode, editor.firstChild,
|
|
"nsIHTMLEditor.setCaretAfterElement() should set anchor node to parent of <b> element in the first paragraph");
|
|
is(selection.anchorOffset, 2,
|
|
"nsIHTMLEditor.setCaretAfterElement() should set anchor offset to the index of <b> element + 1 in the first paragraph");
|
|
} catch (e) {
|
|
ok(false, `nsIHTMLEditor.setCaretAfterElement() shouldn't throw exception when selecting an element in focused editor #1: ${e}`);
|
|
}
|
|
|
|
editor.focus();
|
|
try {
|
|
getHTMLEditor().setCaretAfterElement(editor.firstChild.firstChild.nextSibling.nextSibling);
|
|
ok(selection.isCollapsed,
|
|
"nsIHTMLEditor.setCaretAfterElement() should collapse Selection #2");
|
|
is(selection.anchorNode, editor.firstChild,
|
|
"nsIHTMLEditor.setCaretAfterElement() should set anchor node to parent of <i> element in the first paragraph");
|
|
is(selection.anchorOffset, 3,
|
|
"nsIHTMLEditor.setCaretAfterElement() should set anchor offset to the index of <i> element + 1 in the first paragraph");
|
|
} catch (e) {
|
|
ok(false, `nsIHTMLEditor.setCaretAfterElement() shouldn't throw exception when selecting an element in focused editor #2: ${e}`);
|
|
}
|
|
|
|
editor.focus();
|
|
try {
|
|
getHTMLEditor().setCaretAfterElement(editor.firstChild.nextSibling.firstChild);
|
|
ok(selection.isCollapsed,
|
|
"nsIHTMLEditor.setCaretAfterElement() should collapse Selection #3");
|
|
is(selection.anchorNode, editor.firstChild.nextSibling,
|
|
"nsIHTMLEditor.setCaretAfterElement() should set anchor node to parent of <b> element in the second paragraph");
|
|
is(selection.anchorOffset, 1,
|
|
"nsIHTMLEditor.setCaretAfterElement() should set anchor offset to the index of <b> element + 1 in the second paragraph");
|
|
} catch (e) {
|
|
ok(false, `nsIHTMLEditor.setCaretAfterElement() shouldn't throw exception when selecting an element in focused editor #3: ${e}`);
|
|
}
|
|
|
|
editor.focus();
|
|
try {
|
|
getHTMLEditor().setCaretAfterElement(editor);
|
|
ok(false, "nsIHTMLEditor.setCaretAfterElement() should throw an exception if given node is the editing host");
|
|
} catch (e) {
|
|
ok(true, `nsIHTMLEditor.setCaretAfterElement() should throw an exception if given node is the editing host: ${e}`);
|
|
}
|
|
|
|
editor.focus();
|
|
try {
|
|
getHTMLEditor().setCaretAfterElement(editor.parentElement);
|
|
ok(false, "nsIHTMLEditor.setCaretAfterElement() should throw an exception if given node is outside of the editing host");
|
|
} catch (e) {
|
|
ok(true, `nsIHTMLEditor.setCaretAfterElement() should throw an exception if given node is outside of the editing host: ${e}`);
|
|
}
|
|
|
|
selection.removeAllRanges();
|
|
editor.blur();
|
|
try {
|
|
getHTMLEditor().setCaretAfterElement(editor.firstChild.nextSibling.firstChild);
|
|
ok(false, "nsIHTMLEditor.setCaretAfterElement() should throw an exception if there is no active editing host");
|
|
} catch (e) {
|
|
ok(true, `nsIHTMLEditor.setCaretAfterElement() should throw an exception if there is no active editing host: ${e}`);
|
|
}
|
|
|
|
editor.focus();
|
|
editor.firstChild.firstChild.nextSibling.nextSibling.setAttribute("contenteditable", "false");
|
|
try {
|
|
getHTMLEditor().setCaretAfterElement(editor.firstChild.firstChild.nextSibling.nextSibling);
|
|
ok(selection.isCollapsed,
|
|
"nsIHTMLEditor.setCaretAfterElement() should collapse Selection #4");
|
|
is(selection.anchorNode, editor.firstChild,
|
|
"nsIHTMLEditor.setCaretAfterElement() should set anchor node to parent of <i contenteditable=\"false\"> element in the first paragraph");
|
|
is(selection.anchorOffset, 3,
|
|
"nsIHTMLEditor.setCaretAfterElement() should set anchor offset to the index of <i contenteditable=\"false\"> element + 1 in the first paragraph");
|
|
} catch (e) {
|
|
ok(false, `nsIHTMLEditor.setCaretAfterElement() shouldn't throw exception when selecting an element in focused editor #4: ${e}`);
|
|
}
|
|
|
|
editor.focus();
|
|
try {
|
|
getHTMLEditor().setCaretAfterElement(editor.firstChild.firstChild.nextSibling);
|
|
ok(selection.isCollapsed,
|
|
"nsIHTMLEditor.setCaretAfterElement() should collapse Selection #5");
|
|
is(selection.anchorNode, editor.firstChild,
|
|
"nsIHTMLEditor.setCaretAfterElement() should set anchor node to parent of <b> element in the first paragraph");
|
|
is(selection.anchorOffset, 2,
|
|
"nsIHTMLEditor.setCaretAfterElement() should set anchor offset to the index of <b> element in the first paragraph");
|
|
} catch (e) {
|
|
ok(false, `nsIHTMLEditor.setCaretAfterElement() shouldn't throw exception when selecting an element in focused editor #5: ${e}`);
|
|
}
|
|
|
|
editor.focus();
|
|
editor.firstChild.nextSibling.setAttribute("contenteditable", "false");
|
|
try {
|
|
getHTMLEditor().setCaretAfterElement(editor.firstChild.nextSibling.firstChild.nextSibling);
|
|
ok(selection.isCollapsed,
|
|
"nsIHTMLEditor.setCaretAfterElement() should collapse Selection #6");
|
|
is(selection.anchorNode, editor.firstChild.nextSibling,
|
|
"nsIHTMLEditor.setCaretAfterElement() should set anchor node to parent of <i> element in the second paragraph which is not editable");
|
|
is(selection.anchorOffset, 2,
|
|
"nsIHTMLEditor.setCaretAfterElement() should set anchor offset to the index of <i> element + 1 in the second paragraph which is not editable");
|
|
} catch (e) {
|
|
ok(false, `nsIHTMLEditor.selectElement() shouldn't throw exception when selecting an element in focused editor #6: ${e}`);
|
|
}
|
|
|
|
SimpleTest.finish();
|
|
});
|
|
|
|
function getHTMLEditor() {
|
|
var Ci = SpecialPowers.Ci;
|
|
var editingSession = SpecialPowers.wrap(window).docShell.editingSession;
|
|
return editingSession.getEditorForWindow(window).QueryInterface(Ci.nsIHTMLEditor);
|
|
}
|
|
|
|
</script>
|
|
</body>
|
|
|
|
</html>
|