<!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('Win'); | |
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> |