| <!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> |