<!
DOCTYPE HTML>
<
html>
<
head>
<
title>Test Character Movement (including nsTextFrame::PeekOffsetCharacter)</
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>
<p id=
"display"></p>
<
div id=
"content" style=
"display: block">
<
div contentEditable id=
"editor"></
div>
</
div>
<
pre id=
"test">
<
script class=
"testbody" type=
"text/javascript">
SimpleTest.waitForExplicitFinish();
if (navigator.userAgent.includes(
"Windows NT 6.2")) {
todo(false,
"Too many intermittent failures on Windows 8 (bug 886781)");
SimpleTest.finish();
} else {
setTimeout(focusing, 0);
}
function focusing() {
document.getElementById(
"editor").focus();
// This seems to be necessary because the selection is not set up properly otherwise
setTimeout(test, 0);
}
function test() {
var sel = window.getSelection();
var editor = document.getElementById(
"editor");
function testRight(node, offset) {
synthesizeKey(
"KEY_ArrowRight");
is(sel.anchorNode, node,
"Right movement broken in " + editor.innerHTML);
is(sel.anchorOffset, offset,
"Right movement broken in " + editor.innerHTML);
}
function testLeft(node, offset) {
synthesizeKey(
"KEY_ArrowLeft");
is(sel.anchorNode, node,
"Left movement broken in " + editor.innerHTML);
is(sel.anchorOffset, offset,
"Left movement broken in " + editor.innerHTML);
}
editor.innerHTML =
"H K";
sel.collapse(editor.firstChild, 0);
testRight(editor.firstChild, 1);
testRight(editor.firstChild, 2);
testRight(editor.firstChild, 3);
testLeft(editor.firstChild, 2);
testLeft(editor.firstChild, 1);
testLeft(editor.firstChild, 0);
editor.innerHTML =
"H K";
sel.collapse(editor.firstChild.firstChild, 0);
testRight(editor.firstChild.firstChild, 1);
testRight(editor.firstChild.nextSibling, 1);
testRight(editor.firstChild.nextSibling, 2);
testLeft(editor.firstChild.nextSibling, 1);
testLeft(editor.firstChild.nextSibling, 0);
testLeft(editor.firstChild.firstChild, 0);
editor.innerHTML =
"H
K";
sel.collapse(editor.firstChild, 0);
testRight(editor.firstChild, 1);
testRight(editor.firstChild, 2);
testRight(editor.firstChild.nextSibling.nextSibling, 0);
testRight(editor.firstChild.nextSibling.nextSibling, 1);
testLeft(editor.firstChild.nextSibling.nextSibling, 0);
testLeft(editor.firstChild, 2);
testLeft(editor.firstChild, 1);
testLeft(editor.firstChild, 0);
editor.innerHTML =
"aa\nbb
";
sel.collapse(editor.firstChild.firstChild, 0);
testRight(editor.firstChild.firstChild, 1);
// at the end of the first line, before the \n
testRight(editor.firstChild.firstChild, 2);
testRight(editor.firstChild.firstChild, 3);
testRight(editor.firstChild.firstChild, 4);
testLeft(editor.firstChild.firstChild, 3);
// at the end of the first line, before the \n
testLeft(editor.firstChild.firstChild, 2);
testLeft(editor.firstChild.firstChild, 1);
testLeft(editor.firstChild.firstChild, 0);
SimpleTest.finish();
}
</
script>
</
pre>
</
body>
</
html>