blob: cb5479042b256a5dcfb70944fb9095f524147f3e [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<style type="text/css">
.tests {
width: 250px;
float: left;
list-style: none;
}
.tests div, .tests pre {
border: solid 1px black;
width: 200px;
font-size: 13px;
line-height: 13px;
padding: 13px;
}
</style>
</head>
<body>
<p>This tests selecting LTR/RTL text that spans multiple lines in RTL/LTR block (opposite directionality).
To manually test, select text in each of editable regions below by dragging mouse from one edge to another.
The entire line should be selected.</p>
<div id="tests">
<ol class="tests">
<li><div contenteditable title="0 3, 4 6">abc<br>def</div></li>
<li><div contenteditable title="0 3">ابص</div></li>
<li><div contenteditable dir="rtl" title="0 3">abc</div></li>
<li><div contenteditable title="0 3, 4, 5 6">ابص<span dir="ltr"><br><br>a</span></div></li>
<li><div contenteditable dir="rtl" title="0 3, 4, 5 6">abc<span dir="rtl"><br><br>ا</span></div></li>
<li><div contenteditable title="0 3, 4, 5 6">ابص<br><br>a</div></li>
<li><div contenteditable dir="rtl" title="0 3, 4, 5 6">ابص<br><br>a</div></li>
</ol>
<ol class="tests">
<li><pre contenteditable title="0 3, 4, 5 6"><span dir="rtl">ابص
a</span></pre></li>
<li><pre contenteditable dir="rtl" title="0 3, 4, 5 6"><span dir="ltr">abc
a</span></pre></li>
<li><pre contenteditable dir="rtl" title="0 3, 4, 5 6">abc<span dir="rtl">
a</span></pre></li>
</ol>
</div>
<pre id="log"><script>
function selectLineSafely(test, lineTop) {
var y = test.offsetTop + lineTop + 5;
eventSender.mouseMoveTo(test.offsetLeft + 5, y);
eventSender.mouseDown();
eventSender.leapForward(200);
eventSender.mouseMoveTo(test.offsetLeft + test.offsetWidth - 5, y);
eventSender.mouseUp();
}
if (window.testRunner) {
testRunner.dumpAsText();
if (!window.eventSender)
document.writeln('This test requires eventSender');
else {
var tests = document.getElementsByTagName('li');
var testNumber = 0;
for (var i = 0; i < tests.length; i++) {
var test = tests[i].firstChild;
offsets = test.title.split(', ');
for (var j = 0; j < offsets.length; j++) {
function log(msg) {
return document.write('TEST ' + (i + 1) + ' line ' + (j + 1) + ':' + msg + '\n');
}
var start = parseInt(offsets[j].split(' ')[0]);
var afterEnd = parseInt(offsets[j].split(' ')[1]); // Might be NaN
var selection = window.getSelection();
selectLineSafely(test, 13 * (j + 1));
var actual = selection.toString();
var expected = test.innerText.substr(start, afterEnd);
if (actual == expected)
log('PASS');
else
log('FAIL - expected "' + expected + '" but got "' + actual + '"');
}
}
}
document.getElementById('tests').style.display = 'none';
} else {
document.addEventListener('selectionchange', function () {
var selection = window.getSelection();
if (selection.isCollapsed)
document.getElementById('log').innerHTML += selection.baseOffset + '\n';
else
document.getElementById('log').innerHTML += selection.baseOffset + ':' + selection.extentOffset + '\n';
});
}
</script></pre>
</body>
</html>