Bug 1482016 - part 0: Add automated tests for nsIHTMLEditor.selectElement() r=m_kato

Differential Revision: https://phabricator.services.mozilla.com/D3186

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Masayuki Nakano 2018-08-14 05:56:24 +00:00
Родитель e6eaea8889
Коммит aa59ff8fc6
2 изменённых файлов: 132 добавлений и 0 удалений

Просмотреть файл

@ -281,6 +281,7 @@ skip-if = android_version == '24'
[test_middle_click_paste.html]
subsuite = clipboard
skip-if = android_version == '24'
[test_nsIHTMLEditor_selectElement.html]
[test_objectResizing.html]
[test_root_element_replacement.html]
[test_select_all_without_body.html]

Просмотреть файл

@ -0,0 +1,131 @@
<!DOCTYPE>
<html>
<head>
<title>Test for nsIHTMLEditor.selectElement()</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().selectElement(editor.firstChild.firstChild);
ok(false, "nsIHTMLEditor.selectElement() should throw an exception if given node is not an element");
} catch (e) {
ok(true, `nsIHTMLEditor.selectElement() should throw an exception if given node is not an element: ${e}`);
}
editor.focus();
try {
getHTMLEditor().selectElement(editor.firstChild.firstChild.nextSibling);
is(selection.anchorNode, editor.firstChild,
"nsIHTMLEditor.selectElement() should set anchor node to parent of <b> element in the first paragraph");
is(selection.anchorOffset, 1,
"nsIHTMLEditor.selectElement() should set anchor offset to the index of <b> element in the first paragraph");
is(selection.focusNode, editor.firstChild,
"nsIHTMLEditor.selectElement() should set focus node to parent of <b> element in the first paragraph");
is(selection.focusOffset, 2,
"nsIHTMLEditor.selectElement() should set anchor offset to the index of <b> element + 1 in the first paragraph");
} catch (e) {
ok(false, `nsIHTMLEditor.selectElement() shouldn't throw exception when selecting an element in focused editor #1: ${e}`);
}
editor.focus();
try {
getHTMLEditor().selectElement(editor.firstChild.nextSibling.firstChild);
is(selection.anchorNode, editor.firstChild.nextSibling,
"nsIHTMLEditor.selectElement() should set anchor node to parent of <b> element in the second paragraph");
is(selection.anchorOffset, 0,
"nsIHTMLEditor.selectElement() should set anchor offset to the index of <b> element in the second paragraph");
is(selection.focusNode, editor.firstChild.nextSibling,
"nsIHTMLEditor.selectElement() should set focus node to parent of <b> element in the second paragraph");
is(selection.focusOffset, 1,
"nsIHTMLEditor.selectElement() should set anchor offset to the index of <b> element + 1 in the second paragraph");
} catch (e) {
ok(false, `nsIHTMLEditor.selectElement() shouldn't throw exception when selecting an element in focused editor #2: ${e}`);
}
editor.focus();
try {
getHTMLEditor().selectElement(editor);
ok(false, "nsIHTMLEditor.selectElement() should throw an exception if given node is the editing host");
} catch (e) {
ok(true, `nsIHTMLEditor.selectElement() should throw an exception if given node is the editing host: ${e}`);
}
editor.focus();
try {
getHTMLEditor().selectElement(editor.parentElement);
ok(false, "nsIHTMLEditor.selectElement() should throw an exception if given node is outside of the editing host");
} catch (e) {
ok(true, `nsIHTMLEditor.selectElement() should throw an exception if given node is outside of the editing host: ${e}`);
}
selection.removeAllRanges();
editor.blur();
try {
getHTMLEditor().selectElement(editor.firstChild.nextSibling.firstChild);
ok(false, "nsIHTMLEditor.selectElement() should throw an exception if there is no active editing host");
} catch (e) {
ok(true, `nsIHTMLEditor.selectElement() should throw an exception if there is no active editing host: ${e}`);
}
editor.focus();
editor.firstChild.firstChild.nextSibling.nextSibling.setAttribute("contenteditable", "false");
try {
getHTMLEditor().selectElement(editor.firstChild.firstChild.nextSibling.nextSibling);
is(selection.anchorNode, editor.firstChild,
"nsIHTMLEditor.selectElement() should set anchor node to parent of <i contenteditable=\"false\"> element in the first paragraph");
is(selection.anchorOffset, 2,
"nsIHTMLEditor.selectElement() should set anchor offset to the index of <i contenteditable=\"false\"> element in the first paragraph");
is(selection.focusNode, editor.firstChild,
"nsIHTMLEditor.selectElement() should set focus node to parent of <i contenteditable=\"false\"> element in the first paragraph");
is(selection.focusOffset, 3,
"nsIHTMLEditor.selectElement() should set anchor offset to the index of <i contenteditable=\"false\"> element + 1 in the first paragraph");
} catch (e) {
ok(false, `nsIHTMLEditor.selectElement() shouldn't throw exception when selecting an element in focused editor #3: ${e}`);
}
editor.focus();
editor.firstChild.nextSibling.setAttribute("contenteditable", "false");
try {
getHTMLEditor().selectElement(editor.firstChild.nextSibling.firstChild.nextSibling);
is(selection.anchorNode, editor.firstChild.nextSibling,
"nsIHTMLEditor.selectElement() should set anchor node to parent of <i> element in the second paragraph which is not editable");
is(selection.anchorOffset, 1,
"nsIHTMLEditor.selectElement() should set anchor offset to the index of <i> element in the second paragraph which is not editable");
is(selection.focusNode, editor.firstChild.nextSibling,
"nsIHTMLEditor.selectElement() should set focus node to parent of <i> element in the second paragraph which is not editable");
is(selection.focusOffset, 2,
"nsIHTMLEditor.selectElement() 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 #4: ${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>