diff options
Diffstat (limited to 'editor/libeditor/tests/test_bug1318312.html')
-rw-r--r-- | editor/libeditor/tests/test_bug1318312.html | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/editor/libeditor/tests/test_bug1318312.html b/editor/libeditor/tests/test_bug1318312.html new file mode 100644 index 0000000000..530731d6b3 --- /dev/null +++ b/editor/libeditor/tests/test_bug1318312.html @@ -0,0 +1,108 @@ +<!DOCTYPE> +<html> +<head> +<title>Test for bug1318312</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" /> +<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"); +var innerEditor = document.getElementById("innerEditor"); + +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> |