blob: ac7ee9ce760276dcc8a601174e3fc98a7e7158f1 [file] [log] [blame]
<!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("Click above/beneath the word FOO. Notice how the cursor goes in the right place (after the letter F).")
document.body.style.margin = 0;
var div = document.createElement('div');
div.style.cssText = "font-family:ahem; width:50px; height:60px; border:1px solid blue; white-space:nowrap; overflow:scroll; padding:50px;";
div.contentEditable = true;
div.innerHTML = "12345<span id='foo'>FOO</span>6789<span>BAR</span>";
document.body.insertBefore(div, document.body.firstChild);
div.scrollLeft = 50;
function clickShouldResultInRange(x, y, node, offset) {
if (window.eventSender) {
clickAt(x, y);
assertSelectionAt(node, offset);
} else {
tests.push({
testFunction: function() { assertRange(node, offset); },
clickString: " " + x + ", " + y }
)
}
}
function printClickStringForWaitingTest()
{
if (!tests[testIndex])
return;
debug("Waiting for click @ " + tests[testIndex].clickString);
}
var testIndex = 0;
var tests = [];
function runInteractiveTests()
{
testIndex = 0;
printClickStringForWaitingTest();
document.body.addEventListener("mouseup", function() {
debug("Got click @ " + event.clientX + ", " + event.clientY);
var test = tests[testIndex];
if (test) {
test.testFunction();
testIndex++;
printClickStringForWaitingTest();
}
}, false);
}
// The rules for clicking below the text are different on Windows and Mac.
function editingTest(editingBehavior)
{
if (window.internals)
internals.settings.setEditingBehavior(editingBehavior);
var expectMacStyleSelection = editingBehavior == "mac";
var foo = document.getElementById('foo');
var x = foo.offsetLeft - div.scrollLeft + 10;
// Click 10px after the start of the span should put the cursor right after the letter F.
if (expectMacStyleSelection) {
clickShouldResultInRange(x, foo.offsetTop - 20, div.firstChild, 0);
clickShouldResultInRange(x, foo.offsetTop + 20, div.lastChild.firstChild, 3);
} else {
clickShouldResultInRange(x, foo.offsetTop - 20, foo.firstChild, 1);
clickShouldResultInRange(x, foo.offsetTop + 20, foo.firstChild, 1);
}
}
editingTest("mac");
editingTest("windows");
// Clean up after ourselves if we're not being run in the browser
if (window.eventSender) {
document.body.removeChild(div);
} else {
runInteractiveTests();
}
var successfullyParsed = true;
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>