gecko-dev/editor/libeditor/tests/test_bug1318312.html
Masayuki Nakano cf83ee7bb4 Bug 1438157 - part 2: Remove unnecessary second argument of EventUtils.synthesizeKey() r=smaug
Note that this patch also replaces legacy VK_* with KEY_*, and replaces
synthesizeKey() for inputting some characters with sendString() because
it's better and clearer what it does and it sets shiftKey state properly.

MozReview-Commit-ID: De4enbjux3T

--HG--
extra : rebase_source : 2296b84bff8e22f01eeb48cd8614fac5db11136a
2018-02-15 04:15:39 +09:00

109 lines
5.2 KiB
HTML

<!DOCTYPE>
<html>
<head>
<title>Test for bug1318312</title>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
<style type="text/css">
</style>
</head>
<body>
<div id="outerEditor" contenteditable><p>content of outer editor</p>
<div id="staticInEditor" contenteditable="false"><p>static content of outer editor</p>
<div id="innerEditor" contenteditable><p>content of inner editor</p></div></div></div>
<pre id="test">
<script class="testbody" type="text/javascript">
var outerEditor = document.getElementById("outerEditor");
function runTests()
{
outerEditor.focus();
is(document.activeElement, outerEditor,
"outerEditor should have focus");
// Move cursor into the innerEditor with ArrowDown key. Then, focus shouldn't
// be moved to innerEditor from outerEditor.
// Note that Chrome moves focus in this case. However, we should do that
// at least for now because user can move focus with ArrowUp key even from
// innerEditor to outerEditor but we don't allow such navigation.
// FYI: Edge behaves same as us.
synthesizeKey("KEY_ArrowDown");
is(document.activeElement, outerEditor,
"outerEditor should still have focus because focus shouldn't be moved by moving caret");
is(document.getSelection().focusNode, document.getElementById("innerEditor").firstChild.firstChild,
"focus node of selection should be the text node in the innerEditor");
is(document.getSelection().focusOffset, 0,
"focus offset of selection should be 0");
sendString("a");
is(document.activeElement, outerEditor,
"outerEditor should still have focus because focus shouldn't be moved by typing a character");
is(document.getSelection().focusNode, document.getElementById("innerEditor").firstChild.firstChild,
"focus node of selection should be the text node in the innerEditor");
is(document.getSelection().focusOffset, 1,
"focus offset of selection should be 1");
synthesizeKey("KEY_Enter");
is(document.activeElement, outerEditor,
"outerEditor should still have focus because focus shouldn't be moved by typing Enter");
is(document.getSelection().focusNode, document.getElementById("innerEditor").childNodes.item(1).firstChild,
"focus node of selection should be the text node in the second paragraph in the innerEditor");
is(document.getSelection().focusOffset, 0,
"focus offset of selection should be 0");
synthesizeKey("KEY_Backspace");
is(document.activeElement, outerEditor,
"outerEditor should still have focus because focus shouldn't be moved by typing Backspace (removing the line breaker)");
is(document.getSelection().focusNode, document.getElementById("innerEditor").firstChild.firstChild,
"focus node of selection should be the text node in the innerEditor");
is(document.getSelection().focusOffset, 1,
"focus offset of selection should be 1");
synthesizeKey("KEY_ArrowLeft", {shiftKey: true});
is(document.activeElement, outerEditor,
"outerEditor should still have focus because focus shouldn't be moved by typing Shift+ArrowLeft (selecting 'a')");
is(document.getSelection().focusNode, document.getElementById("innerEditor").firstChild.firstChild,
"focus node of selection should be the text node in the innerEditor");
is(document.getSelection().focusOffset, 0,
"focus offset of selection should be 0");
is(document.getSelection().anchorNode, document.getElementById("innerEditor").firstChild.firstChild,
"anchor node of selection should be the text node in the innerEditor");
is(document.getSelection().anchorOffset, 1,
"anchor offset of selection should be 1");
synthesizeKey("KEY_Delete");
is(document.activeElement, outerEditor,
"outerEditor should still have focus because focus shouldn't be moved by typing Delete (removing the 'a')");
is(document.getSelection().focusNode, document.getElementById("innerEditor").firstChild.firstChild,
"focus node of selection should be the text node in the innerEditor");
is(document.getSelection().focusOffset, 0,
"focus offset of selection should be 0");
synthesizeKey("KEY_ArrowUp");
is(document.activeElement, outerEditor,
"outerEditor should still have focus because focus shouldn't be moved by moving caret from innerEditor to outerEditor");
is(document.getSelection().focusNode, document.getElementById("outerEditor").firstChild.firstChild,
"focus node of selection should be the text node in the outerEditor");
is(document.getSelection().focusOffset, 0,
"focus offset of selection should be 0");
// However, clicking in innerEditor should move focus.
synthesizeMouseAtCenter(innerEditor, {});
is(document.activeElement, innerEditor,
"innerEditor should get focus because focus should be moved to innerEditor even from outerEditor by click");
is(document.getSelection().focusNode, document.getElementById("innerEditor").firstChild.firstChild,
"focus node of selection should be the text node in the innerEditor");
SimpleTest.finish();
}
SimpleTest.waitForExplicitFinish();
SimpleTest.waitForFocus(runTests);
</script>
</pre>
</body>
</html>