| <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> |
| <html> |
| <head> |
| <script src="../../resources/js-test-pre.js"></script> |
| <script src="resources/js-test-selection-shared.js"></script> |
| </head> |
| <body> |
| <p id="description"></p> |
| <div id="console"></div> |
| <script> |
| description("Tests that shift+clicking does the platform correct behavior."); |
| |
| var first = document.createElement('div'); |
| first.innerHTML = 'one <span id="start"></span>two three'; |
| document.body.appendChild(first); |
| |
| var second = document.createElement('div'); |
| second.innerHTML = 'four <span id="end"></span>five six'; |
| document.body.appendChild(second); |
| |
| var start = document.getElementById('start'); |
| var end = document.getElementById('end'); |
| |
| function shiftClick(x, y, expected) |
| { |
| eventSender.mouseMoveTo(x, y); |
| eventSender.mouseDown(0, ['shiftKey']); |
| eventSender.mouseUp(0, ['shiftKey']); |
| assertSelectionString(expected); |
| } |
| |
| function assertSelectionString(expected) |
| { |
| if (window.getSelection().toString() == expected) |
| testPassed('window.getSelection().toString() is correct'); |
| else |
| testFailed('window.getSelection().toString() is "' + window.getSelection().toString() + '" and should be "' + expected + '"'); |
| } |
| |
| function assertSelectionOrder(direction) |
| { |
| var expectedPosition; |
| if (direction == 'forward') |
| expectedPosition = Node.DOCUMENT_POSITION_FOLLOWING; |
| else if (direction == 'backward') |
| expectedPosition = Node.DOCUMENT_POSITION_PRECEDING; |
| |
| var sel = window.getSelection(); |
| if (sel.anchorNode.compareDocumentPosition(sel.focusNode) == expectedPosition) |
| testPassed("Selection direction is correct."); |
| else |
| testFailed("Selection direction is not correct. Expected a " + direction + " selection." + selectionAsString(sel)); |
| } |
| |
| function runShiftClickTest(editingBehavior) |
| { |
| internals.settings.setEditingBehavior(editingBehavior); |
| |
| // Double-click select to get around eventSender bug where it won't select |
| // text just using single-click. |
| eventSender.mouseMoveTo(start.offsetLeft, start.offsetTop); |
| eventSender.mouseDown(); |
| eventSender.mouseUp(); |
| eventSender.mouseDown(); |
| |
| eventSender.mouseMoveTo(end.offsetLeft, end.offsetTop); |
| eventSender.mouseUp(); |
| |
| assertSelectionString('two three\nfour five'); |
| assertSelectionOrder('forward'); |
| |
| shiftClick(second.offsetLeft + second.offsetWidth, second.offsetTop, 'two three\nfour five six'); |
| assertSelectionOrder('forward'); |
| |
| shiftClick(end.offsetLeft, end.offsetTop, 'two three\nfour five'); |
| assertSelectionOrder('forward'); |
| |
| // These two fail on Mac due to https://bugs.webkit.org/show_bug.cgi?id=36256. |
| // In the first shiftClick call, the space after five is selected and shouldn't be. |
| // In the second shiftClick call, "six" is selected and shouldn't be. |
| if (editingBehavior == "mac") |
| shiftClick(first.offsetLeft, first.offsetTop, 'one two three\nfour five'); |
| else |
| shiftClick(first.offsetLeft, first.offsetTop, 'one two'); |
| assertSelectionOrder('backward'); |
| |
| if (editingBehavior == "mac") |
| shiftClick(start.offsetLeft, start.offsetTop, 'two three\nfour five'); |
| else |
| shiftClick(start.offsetLeft, start.offsetTop, 'two'); |
| |
| // FIXME: The selection direction is incorrect on Win/Linux here. It should be backward. |
| assertSelectionOrder('backward'); |
| } |
| |
| if (window.eventSender && window.internals) { |
| runShiftClickTest("mac"); |
| runShiftClickTest("win"); |
| } |
| |
| var successfullyParsed = true; |
| </script> |
| <script src="../../resources/js-test-post.js"></script> |
| </body> |
| </html> |