blob: a64551492316da9c7761756279673c182c0126d1 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<div id="test" contenteditable>
<p id="p1">the car is the good the The world.</p>
<p id="p2">中文字是中文字</p>
<bdo dir="rtl" id="p3">the best</bdo>
</div>
<div id="console"></div>
<script>
if (!window.internals)
testFailed('This test requires internals object');
else {
var container = document.getElementById('test');
function range(startContainer, startOffset, endContainer, endOffset) {
var range = document.createRange();
range.setStart(startContainer, startOffset);
range.setEnd(endContainer, endOffset);
return range;
}
function rangeOfNodeContent(referenceNode) {
var range = document.createRange();
range.selectNodeContents(referenceNode);
return range;
}
Range.prototype.toArray = function () {
return [this.startContainer, this.startOffset, this.endContainer, this.endOffset];
}
var p1 = document.getElementById("p1");
var p2 = document.getElementById("p2");
var p3 = document.getElementById("p3");
var firstThe = [p1.firstChild, 0, p1.firstChild, 3];
var secondThe = [p1.firstChild, 11, p1.firstChild, 14];
var upperThe = [p1.firstChild, 24, p1.firstChild, 27];
var chineseMatch = [p2.firstChild, 4, p2.firstChild, 6];
var germanMatch = [p3.firstChild, 5, p3.firstChild, 6];
var rtlMatch = [p3.firstChild, 0, p3.firstChild, 3];
// When the target position is correct, at the beginning of the matched range.
shouldBe('internals.rangeOfStringNearLocation(rangeOfNodeContent(p1), \'the\', 11).toArray()', 'secondThe');
// Cases that the matched range is on either side of the target position.
shouldBe('internals.rangeOfStringNearLocation(rangeOfNodeContent(p1), \'the\', 9).toArray()', 'secondThe');
shouldBe('internals.rangeOfStringNearLocation(rangeOfNodeContent(p1), \'the\', 6).toArray()', 'firstThe');
// In this case, target position is at the beginning of "oog", make sure it's picking the
// left side "the" as the closest match.
shouldBe('internals.rangeOfStringNearLocation(rangeOfNodeContent(p1), \'the\', 16).toArray()', 'secondThe');
// Upper case.
shouldBe('internals.rangeOfStringNearLocation(rangeOfNodeContent(p1), \'The\', 11).toArray()', 'upperThe');
// CJK
shouldBe('internals.rangeOfStringNearLocation(rangeOfNodeContent(p2), \'中文\', 5).toArray()', 'chineseMatch');
// RtL
shouldBe('internals.rangeOfStringNearLocation(rangeOfNodeContent(p3), \'the\', 5).toArray()', 'rtlMatch');
container.style.display = 'none';
}
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>