blob: 2da103c85956eba0855bf6cfcf033f406161b714 [file] [log] [blame]
<!DOCTYPE html>
<p>
On Mac when word-selecting backwards starting with the
caret on the middle of a word and then word-selecting forward, the
caret is left in the same place where it was, instead of directly selecting to the end
of the word (which is windows/unix behavior).
</p>
<div id="test-div" contenteditable=true>
line 1<br>
line 2<br>
line 3
</div>
<script>
function editingTest(behavior) {
if (window.testRunner && window.internals) {
testRunner.dumpAsText();
internals.settings.setEditingBehavior(behavior);
}
function getSetCaretFunction(node, container, offset) {
return function () {
var selection = window.getSelection();
selection.empty();
var range = document.createRange();
range.setStart(container, offset);
selection.addRange(range);
}
}
function runTest(firstDirection, secondDirection, granularity, expectedText, setCaret) {
var selection = window.getSelection();
setCaret();
selection.modify("extend", firstDirection, granularity);
selection.modify("extend", secondDirection, granularity);
var s = selection.toString();
document.write("Extend " + firstDirection + " and then " + secondDirection + " by " + granularity + ": ");
document.write(s === expectedText ? "PASS" : 'FAIL: expected "' + escape(expectedText) + '", got "' + escape(s) + '"');
document.write("<br>");
}
var node = document.getElementById("test-div");
var children = node.childNodes;
var wordCaretFunction = getSetCaretFunction(node, children[2], children[2].data.search("ne 2"));
document.write(behavior + ":<br>");
runTest("backward", "forward", "word", behavior == "mac" ? "" : behavior == "windows" ? "ne " : "ne", getSetCaretFunction(node, children[2], children[2].data.search("ne 2")));
runTest("forward", "backward", "word", behavior == "mac" ? "" : "li", getSetCaretFunction(node, children[2], children[2].data.search("ne 2")));
runTest("backward", "forward", "line", behavior == "mac" ? "" : "1\nline ", getSetCaretFunction(node, children[0], children[0].data.search("1")));
runTest("forward", "backward", "line", behavior == "mac" ? "" : "2\nline ", getSetCaretFunction(node, children[4], children[4].data.search("3")));
runTest("backward", "forward", "paragraph", behavior == "mac" ? "" : "1\nline ", getSetCaretFunction(node, children[0], children[0].data.search("1")));
runTest("forward", "backward", "paragraph", behavior == "mac" ? "" : "2\nline ", getSetCaretFunction(node, children[4], children[4].data.search("3")));
}
editingTest("mac");
editingTest("windows");
editingTest("unix");
var node = document.getElementById("test-div");
node.parentNode.removeChild(node);
</script>