| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../resources/js-test-pre.js"></script> |
| </head> |
| <body> |
| <p id="description"></p> |
| <div><input id="dummy"></div> |
| <div id="tests"><input value="hello"><textarea>hello</textarea></div> |
| <div id="console"></div> |
| <div> |
| <script type="text/javascript"> |
| description('Tests for selectionDirection'); |
| |
| var dummy = document.getElementById('dummy'); |
| |
| function assertDirection(expectedDirection, element, description) { |
| var action = 'selectionDirection was "' + element.selectionDirection |
| + '" after ' + description; |
| |
| if (element.selectionDirection == expectedDirection) |
| testPassed(action); |
| else |
| testFailed(action + ', but expected "' + expectedDirection + '"'); |
| } |
| |
| function testCache(expectedDirection, element) { |
| dummy.focus(); |
| assertDirection(expectedDirection, element, 'focusing on another element'); |
| |
| element.style.display = 'none'; |
| assertDirection(expectedDirection, element, 'hiding the element'); |
| element.style.display = null; |
| } |
| |
| function runTest(element, platform) { |
| debug(element.localName + ' on ' + platform); |
| element.focus(); |
| |
| var noneOnMacAndForwardOnOthers = (platform == 'Mac') ? 'none' : 'forward'; |
| |
| element.setSelectionRange(1, 2); |
| assertDirection(noneOnMacAndForwardOnOthers, element, 'focusing and setting selection by setSelectionRange(1, 2)'); |
| testCache(noneOnMacAndForwardOnOthers, element); |
| |
| element.focus(); |
| element.setSelectionRange(1, 2, 'forward'); |
| assertDirection('forward', element, 'focusing and setting selection by setSelectionRange(1, 2, "forward")'); |
| testCache('forward', element); |
| |
| element.setSelectionRange(1, 2, 'backward'); |
| assertDirection('backward', element, 'setting selection by setSelectionRange(1, 2, "backward") without focus'); |
| testCache('backward', element); |
| |
| element.selectionDirection = 'none'; |
| assertDirection(noneOnMacAndForwardOnOthers, element, 'setting selection by selectionDirection = "none" without focus'); |
| testCache(noneOnMacAndForwardOnOthers, element); |
| |
| element.selectionDirection = 'forward'; |
| assertDirection('forward', element, 'focusing and setting selection by selectionDirection = "forward" without focus'); |
| testCache('forward', element); |
| |
| element.focus(); |
| element.selectionDirection = 'backward'; |
| assertDirection('backward', element, 'focusing and setting selection by selectionDirection = "backward"'); |
| testCache('backward', element); |
| |
| element.focus(); |
| element.setSelectionRange(1, 1); |
| window.getSelection().modify('extend', 'forward', 'character'); |
| assertDirection('forward', element, 'extending selection forward by character'); |
| testCache('forward', element); |
| |
| element.focus(); |
| element.setSelectionRange(1, 1); |
| window.getSelection().modify('extend', 'backward', 'character'); |
| assertDirection('backward', element, 'extending selection backward by character'); |
| testCache('backward', element); |
| |
| } |
| |
| function runTestFor(platform) { |
| if (window.internals) |
| internals.settings.setEditingBehavior(platform.toLowerCase()); |
| var tests = document.getElementById('tests'); |
| for (var i = 0; i < tests.childNodes.length; i++) { |
| runTest(tests.childNodes[i], platform); |
| debug(''); |
| } |
| } |
| |
| if (window.internals) { |
| runTestFor('Mac'); |
| runTestFor('Windows'); |
| runTestFor('Unix'); |
| } else |
| runTestFor(navigator.platform.indexOf('Mac') >= 0 ? 'Mac' : 'Win'); |
| |
| tests.style.display = 'none'; |
| dummy.parentNode.style.display = 'none'; |
| |
| </script> |
| <script src="../../resources/js-test-post.js"></script> |
| </body> |
| </html> |