blob: feda6412dd342ddd66efbeb16ea2706d59dc89c9 [file] [log] [blame]
<!DOCTYPE html>
<div contenteditable dir="ltr">&#1494;&#1495;&#1496; &#1497;&#1498;&#1499; &#1500;&#1501;&#1502; &#1494;&#1495;&#1496; &#1497;&#1498;&#1499; &#1500;&#1501;&#1502;</div>
<div contenteditable dir="ltr">this is some ltr text in an rtl container</div>
<div contenteditable dir="rtl">&#1494;&#1495;&#1496; &#1497;&#1498;&#1499; &#1500;&#1501;&#1502; &#1494;&#1495;&#1496; &#1497;&#1498;&#1499; &#1500;&#1501;&#1502;</div>
<div contenteditable dir="rtl">this is some ltr text in an rtl container</div>
<pre id="console"></pre>
<script>
function log(text)
{
document.getElementById("console").appendChild(document.createTextNode(text + "\n"));
}
function showNode(node)
{
var tagName = node.tagName ? node.tagName : "TEXT";
return "<" + tagName + ">" + node.textContent + "</" + tagName + ">";
}
function assertSelectionEquals(expectedNode, expectedBaseOffset, expectedExtentOffset, message)
{
var selection = getSelection();
if (selection.baseNode !== expectedNode
|| selection.baseOffset !== expectedBaseOffset
|| selection.extentNode !== expectedNode
|| selection.extentOffset !== expectedExtentOffset)
log("FAIL (" + message + "):\n" +
" expected base offset " + expectedBaseOffset + " in node " + showNode(expectedNode) + "\n" +
" and extent offset " + expectedExtentOffset + " in node " + showNode(expectedNode) + "\n" +
" ... but got base offset " + selection.baseOffset + " in node " + showNode(selection.baseNode) + "\n" +
" and extent offset " + selection.extentOffset + " in node " + showNode(selection.extentNode));
else
log("PASS (" + message + ")");
}
function runTestForContainer(container)
{
log("Testing " + container.dir + " container with contents \"" + container.textContent + "\":");
var textNode = container.childNodes[0];
var rightmostOffset = container.dir === "rtl" ? 0 : textNode.length;
var leftmostOffset = container.dir === "rtl" ? textNode.length : 0;
getSelection().setPosition(textNode, leftmostOffset);
getSelection().modify("extend", "left", "lineboundary");
assertSelectionEquals(textNode, leftmostOffset, leftmostOffset, "extend left from left");
getSelection().modify("extend", "left", "lineboundary");
assertSelectionEquals(textNode, leftmostOffset, leftmostOffset, "extend left from left again");
getSelection().setPosition(textNode, leftmostOffset);
getSelection().modify("extend", "right", "lineboundary");
assertSelectionEquals(textNode, leftmostOffset, rightmostOffset, "extend right from left");
getSelection().modify("extend", "right", "lineboundary");
assertSelectionEquals(textNode, leftmostOffset, rightmostOffset, "extend right from left again");
getSelection().setPosition(textNode, rightmostOffset);
getSelection().modify("extend", "right", "lineboundary");
assertSelectionEquals(textNode, rightmostOffset, rightmostOffset, "extend right from right");
getSelection().modify("extend", "right", "lineboundary");
assertSelectionEquals(textNode, rightmostOffset, rightmostOffset, "extend right from right again");
getSelection().setPosition(textNode, rightmostOffset);
getSelection().modify("extend", "left", "lineboundary");
assertSelectionEquals(textNode, rightmostOffset, leftmostOffset, "extend left from right");
getSelection().modify("extend", "left", "lineboundary");
assertSelectionEquals(textNode, rightmostOffset, leftmostOffset, "extend left from right again");
log("");
}
var testContainers = document.getElementsByTagName("div");
for (var i = 0; i < testContainers.length; i++)
runTestForContainer(testContainers[i]);
if (window.testRunner) {
while (testContainers.length > 0)
document.body.removeChild(testContainers[0]);
testRunner.dumpAsText();
}
</script>