blob: 36668f19ca0d15d6cf2c88327367b25b015b3981 [file] [log] [blame]
<html>
<head>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script>
function testLtrCaretPosition(elementId, caretPosition) {
test(() => {
assert_own_property(window, 'textInputController');
e = document.getElementById(elementId);
e.focus();
var caretRect = textInputController.firstRectForCharacterRange(0, 0);
assert_equals(caretRect[0], caretPosition);
}, `${elementId} ${caretPosition}`);
}
function testRtlCaretPosition(elementId, caretPosition) {
test(() => {
assert_own_property(window, 'textInputController');
e = document.getElementById(elementId);
e.focus();
// Asserts the visual location of the text's right edge, whose logical
// offset differs with the bidi caret affinity flag.
var caretOffset = internals.runtimeFlags.bidiCaretAffinityEnabled ? 1 : 0;
var caretRect = textInputController.firstRectForCharacterRange(caretOffset, 0);
assert_equals(caretRect[0], caretPosition);
}, `${elementId} ${caretPosition}`);
}
function runTest() {
test(() => {
assert_own_property(window, 'textInputController');
var e = document.getElementById("right-align-div");
e.focus();
document.execCommand('selectAll');
document.execCommand('insertText', false, 'x');
var caretRect = textInputController.firstRectForCharacterRange(1, 0);
assert_equals(caretRect[0], 208);
}, 'right-align-div 208 after typing');
testRtlCaretPosition("rtl-div", 208);
testRtlCaretPosition("0-right-padding-rtl-textarea", 206);
testLtrCaretPosition("ltr-div", 9);
testLtrCaretPosition("ltr-textarea", 10);
testLtrCaretPosition("no-wrapping-right-align-div", 208);
testRtlCaretPosition("no-wrapping-rtl-div", 208);
testRtlCaretPosition("no-wrapping-0-right-padding-rtl-textarea", 206);
testLtrCaretPosition("no-wrapping-ltr-div", 9);
testLtrCaretPosition("no-wrapping-ltr-textarea", 10);
}
</script>
</head>
<body>
<br>
Right aligned div.
<br>
<div CONTENTEDITABLE id="right-align-div" style="text-align: right; width:200px; border: solid thin;"></div>
<br>
RTL div.
<br>
<div CONTENTEDITABLE id="rtl-div" style="direction: rtl; width:200px; border: solid thin; ">a</div>
<br>
0px right padding RTL textarea.
<br>
<textarea id="0-right-padding-rtl-textarea" style="direction:rtl; padding: 1px 0px 1px 1px; width:200px">a</textarea>
<br>
LTR div and textarea.
<br>
<div CONTENTEDITABLE id="ltr-div" style="width:200px; border: solid thin; ">a</div>
<br>
<textarea id="ltr-textarea" style="padding: 1px 0px 1px 1px; width:200px">a</textarea>
<br>
NO WRAPPING
<br>
No wrapping right aligned div.
<br>
<div CONTENTEDITABLE id="no-wrapping-right-align-div" style="white-space:nowrap; text-align: right; width:200px; border: solid thin;"></div>
<br>
No wrapping RTL div.
<br>
<div CONTENTEDITABLE id="no-wrapping-rtl-div" style="white-space:nowrap; direction: rtl; width:200px; border: solid thin; ">a</div>
<br>
No wrapping 0px right padding RTL textarea.
<br>
<textarea id="no-wrapping-0-right-padding-rtl-textarea" style="white-space:nowrap; direction:rtl; padding: 1px 0px 1px 1px; width:200px">a</textarea>
<br>
No wrapping LTR div and textarea.
<br>
<div CONTENTEDITABLE id="no-wrapping-ltr-div" style="white-space:nowrap; width:200px; border: solid thin; ">a</div>
<br>
<textarea id="no-wrapping-ltr-textarea" style="white-space:nowrap; padding: 1px 0px 1px 1px; width:200px">a</textarea>
<br>
<ul id="console"></ul>
</body>
<script> runTest(); </script>
</html>