blob: eef2b969adefc194a09fcd1f9534a20a8663d3aa [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<style>
.editable {
border-width: 0px;
margin: 0px;
padding: 0px;
font-size: 10px;
}
</style>
<script src="../../resources/js-test-pre.js"></script>
<script>
var succeed = true;
function runTest()
{
if (window.testRunner)
testRunner.dumpAsText();
// The 2nd parameter 22 is the last character in textarea with id "textarea_rtl".
testCaretRect("textarea_rtl", 22, "rtl", "horizontal");
// 6 is the last character in textarea with id "textarea_ltr".
testCaretRect("textarea_ltr", 6, "ltr", "horizontal");
// 22 is the last character in "vertical_rl" div.
testCaretRect("vertical_rl", 22, "rtl", "vertical");
if (succeed == true)
testPassed('');
}
function setFont(e)
{
e.style.fontFamily = "sans-serif";
e.style.fontSize = 10 + "px";
}
function testCaretRect(id, characterIndex, direction, writingMode)
{
var e = document.getElementById("span_" + id);
setFont(e);
var length;
if (writingMode == "horizontal")
length = e.offsetWidth;
else
length = e.offsetHeight;
e.style.visibility = "hidden";
testCaretRectInTextArea(id, length, characterIndex, direction, writingMode);
testCaretRectInTextArea(id + "_no_wrap", length, characterIndex, direction, writingMode);
}
function testCaretRectInTextArea(id, length, characterIndex, direction, writingMode)
{
e = document.getElementById(id);
if (e == null)
return;
setFont(e);
var originalLength = length;
if (id.match("_no_wrap"))
length = parseInt(length * 0.9);
if (writingMode == "horizontal")
e.style.width = length + "px";
else
e.style.height = length + "px";
e.focus();
if (window.textInputController) {
var first = caretRectForCharacter(0, writingMode);
var last = caretRectForCharacter(characterIndex, writingMode);
var caretRange;
if (direction == "rtl")
caretRange = first - last;
else
caretRange = last - first;
caretRange = Math.abs(caretRange);
if (caretRange != originalLength - 1) {
succeed = false;
--originalLength;
testFailed("test id: " + id + " (text width: " + originalLength + " != caretRange: " + caretRange + ")," +
" which means moving caret in the text, caret might be invisible or overlap with element.");
}
}
e.style.visibility = "hidden";
}
function caretRectForCharacter(characterIndex, writingMode)
{
var caretRect = textInputController.firstRectForCharacterRange(characterIndex, 0);
if (writingMode == "horizontal")
return caretRect[0];
return caretRect[1];
}
</script>
</head>
<body>
<!-- Following <div>/<span> is for width calculation -->
<div class="editable"><span id="span_textarea_rtl" class="editable" dir="rtl">&#1491;&#1490;&#1500;&#1495;&#1499; &#1490;&#1491;&#1499; &#1500;&#1495;&#1497;&#1491;&#1490;&#1499; &#1497;&#1495;&#1506;&#1491;&#1491;</span></div>
<p>autowrap text area with dir=rtl.
<textarea id="textarea_rtl" style="font-size:10px;" dir="rtl">&#1491;&#1490;&#1500;&#1495;&#1499; &#1490;&#1491;&#1499; &#1500;&#1495;&#1497;&#1491;&#1490;&#1499; &#1497;&#1495;&#1506;&#1491;&#1491;</textarea>
<p>nowrap text area with dir=rtl.
<!-- caret position overlaps with character (http://webkit.org/b/56854) -->
<textarea id="textarea_rtl_no_wrap" style="white-space:nowrap; font-size: 10px" dir="rtl">&#1491;&#1490;&#1500;&#1495;&#1499; &#1490;&#1491;&#1499; &#1500;&#1495;&#1497;&#1491;&#1490;&#1499; &#1497;&#1495;&#1506;&#1491;&#1491;</textarea>
<!-- Following <div>/<span> is for width calculation -->
<div class="editable"><pre class="editable"><span id="span_textarea_ltr" class="editable">www </span></pre></div>
<p>autowrap text area with dir=ltr.
<textarea id="textarea_ltr" style="font-size:10px">www </textarea>
<!-- Following <div>/<span> is for width calculation -->
<div style="-webkit-writing-mode:vertical-rl;" class="editable"><span id="span_vertical_rl" class="editable">&#1491;&#1490;&#1500;&#1495;&#1499; &#1490;&#1491;&#1499; &#1500;&#1495;&#1497;&#1491;&#1490;&#1499; &#1497;&#1495;&#1506;&#1491;&#1491;</span></div>
<p>vertical text.
<div contenteditable id="vertical_rl" style="-webkit-writing-mode:vertical-rl;" class="editable">&#1491;&#1490;&#1500;&#1495;&#1499; &#1490;&#1491;&#1499; &#1500;&#1495;&#1497;&#1491;&#1490;&#1499; &#1497;&#1495;&#1506;&#1491;&#1491;</div>
<ul id="console"></ul>
</body>
<script>runTest();</script>
</html>