haikuwebkit/LayoutTests/fast/dom/Range/range-expand.html

229 lines
12 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<html>
<head>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=UTF-8">
<title>Test for Range.expand()</title>
<script>
function log(str)
{
var li = document.createElement("li");
li.appendChild(document.createTextNode(str));
var console = document.getElementById("console");
console.appendChild(li);
}
function assertEqual(test_name, actual, expected)
{
if (actual != expected) {
log("==================================");
log("FAILED test " + test_name);
log("actual: " + actual);
log("expected: " + expected);
if (actual.length != expected.length) {
log("length !=" + "; actual.length: " + actual.length + "; expected.length: " + expected.length);
log("escaped actual: " + escape(actual));
log("escaped expected: " + escape(expected));
var length = actual.length;
if (actual.length > expected.length)
length = expected.length;
for (var i=0; i<length; ++i) {
log("i: " + i + "; actual: " + actual[i] + "; expected: " + expected[i]);
if (actual[i] != expected[i])
log("!=");
}
}
else {
log("actual: " + escape(actual));
log("expected: " + escape(expected));
for (var i=0; i<actual.length; ++i) {
log("i: " + i + "; actual: " + actual[i] + "; expected: " + expected[i]);
if (actual[i] != expected[i])
log("!=");
}
}
}
}
function expandRangeString(range, startId, startOffset, endId, endOffset, expandUnit, firstChild)
{
var startNode = document.getElementById(startId);
if (firstChild == true)
startNode = startNode.firstChild;
var endNode = document.getElementById(endId);
if (firstChild == true)
endNode = endNode.firstChild;
range.setStart(startNode, startOffset);
range.setEnd(endNode, endOffset);
range.expand(expandUnit);
return range.toString();
}
function test()
{
if (window.testRunner)
testRunner.dumpAsText();
// test 1 - Expand to document.
var range = document.createRange();
var actual = expandRangeString(range, 'myspan', 0, 'myspan', 0, 'document', false);
var expected = 'This is the begin of a block. A block is a collection of sentences. Each sentence begins with capital\x0Aletter and ends with a punctuation.\x0A\x0ANow, a sentence\x0Ais divided into\x0Amultiple lines.\x0A\x0ARoll the mouse around the page. The coordinates\x0Aof the mouse pointer are currently atop an elementwhose ID \x0Ais:"".\x0A\x0A\x0A\x0A Cell A1\x0A Cell B1\x0A\x0A\x0A Cell A2\x0A Cell B2\x0A\x0A\x0ASection 1\x0Atext.\x0ASection 2\x0Atext.\x0A\x0AHere is a positioned element.\x0A在甲型H1N1流感可能出现大流行的警告声中昨天召开的江苏省2009-2010年度流感防制研讨会注定与往年不同。每年都会召开的一次例会今年足足提前了一个月会上研讨的主题已从以前的季节性流感变成以甲型H1N1流感为重点。\x0Aבלשכת שר החוץ הגיבו להתקפות עליו בעקבות הנחייתו לדרוש מהמועמדים לקורס צוערים שירות צבאי או לאומי: "המתקיפים צבועים, מי שרוצה לייצג את המדינה רוצה גם לשרת אותה"'
assertEqual("document1", actual, expected);
// test 2 - Expand to block.
actual = expandRangeString(range, 'td_A1', 0, 'td_A1', 0, 'block', false);
assertEqual("block2", actual, "Cell A1");
// test 3 - Expand to block, different range start and end offset.
actual = expandRangeString(range, 'td_A1', 1, 'td_A1', 2, 'block', true);
assertEqual("block3", actual, "Cell A1");
// test 4 - Expand to block, different range start and end node.
actual = expandRangeString(range, 'td_A1', 0, 'td_B1', 0, 'block', false);
assertEqual("block4", actual, "Cell A1\x0A Cell B1");
// test 5 - Expand to sentence.
actual = expandRangeString(range, 'instructions', 0, 'instructions', 0, 'sentence', false);
assertEqual("sentence5", actual, "Roll the mouse around the page. ");
// test 6 - Expand to sentence, different range start and end offset.
actual = expandRangeString(range, 'instructions', 1, 'instructions', 2, 'sentence', true);
assertEqual("sentence6", actual, "Roll the mouse around the page. ");
// test 7 - Expand to sentence, different range start and end node.
actual = expandRangeString(range, 'instructions', 0, 'mybr', 0, 'sentence', false);
assertEqual("sentence7", actual, "Roll the mouse around the page. The coordinates\x0Aof the mouse pointer are currently atop an element");
// test 8 - Sentence does not go upstream?
actual = expandRangeString(range, 'multilineSentence', 0, 'multilineSentence', 0, 'sentence', false);
assertEqual("sentence8", actual, "Now, a sentence\x0Ais divided into\x0Amultiple lines.");
actual = expandRangeString(range, 'multilineSentence', 1, 'multilineSentence', 5, 'sentence', true);
assertEqual("sentence9", actual, "Now, a sentence\x0Ais divided into\x0Amultiple lines.");
actual = expandRangeString(range, 'multilineSentence', 20, 'multilineSentence', 20, 'sentence', true);
assertEqual("sentence10", actual, "is divided into\x0Amultiple lines.");
actual = expandRangeString(range, 'multilineSentence', 40, 'multilineSentence', 40, 'sentence', true);
assertEqual("sentence11", actual, "multiple lines.");
// Expand word.
// Same range start and end, both at the begin of word.
actual = expandRangeString(range, 'mydiv', 0, 'mydiv', 0, 'word', false);
assertEqual("word1", actual, "Here");
// Same range start and end, both at the begin of a word.
actual = expandRangeString(range, 'mydiv', 1, 'mydiv', 1, 'word', true);
assertEqual("word2", actual, "Here");
// Same range start and end, both at the middle of a word.
actual = expandRangeString(range, 'mydiv', 3, 'mydiv', 3, 'word', true);
assertEqual("word3", actual, "Here");
// Same range start and end, both at the end of a word.
actual = expandRangeString(range, 'mydiv', 4, 'mydiv', 4, 'word', true);
assertEqual("word4", actual, "Here");
// Different range start and end offset, both at the middle of a word.
actual = expandRangeString(range, 'mydiv', 2, 'mydiv', 3, 'word', true);
assertEqual("word5", actual, "Here");
// Different range start and end offset, start at the begin of a word,
// and end at the end of a word.
actual = expandRangeString(range, 'mydiv', 5, 'mydiv', 4, 'word', true);
assertEqual("word6", actual, "Here");
// Different range start and end offset, start at the begin of a word,
// and end at the middle of a word.
actual = expandRangeString(range, 'mydiv', 1, 'mydiv', 3, 'word', true);
assertEqual("word7", actual, "Here");
// Different range start and end offset, start at the middle of a word,
// and end at the end of a word.
actual = expandRangeString(range, 'mydiv', 2, 'mydiv', 4, 'word', true);
assertEqual("word8", actual, "Here");
// Across more than 1 word.
// Start at the begin of 1st word, end at the end of last word.
actual = expandRangeString(range, 'mydiv', 1, 'mydiv', 7, 'word', true);
assertEqual("word9", actual, "Here is");
// Start at the middle of 1st word, end at the middle of last word.
actual = expandRangeString(range, 'mydiv', 2, 'mydiv', 6, 'word', true);
assertEqual("word10", actual, "Here is");
// Start at the begin of 1st word, end at the middle of last word.
actual = expandRangeString(range, 'mydiv', 1, 'mydiv', 6, 'word', true);
assertEqual("word11", actual, "Here is");
// Start at the middle of 1st word, end at the end of last word.
actual = expandRangeString(range, 'mydiv', 2, 'mydiv', 7, 'word', true);
assertEqual("word12", actual, "Here is");
// Word and space.
actual = expandRangeString(range, 'mydiv', 4, 'mydiv', 5, 'word', true);
assertEqual("word13", actual, "Here ");
// Word across different nodes.
actual = expandRangeString(range, 'mydiv', 1, 'he-div', 0, 'word', true);
assertEqual("word14", actual, "Here is a positioned element.\x0A在甲型H1N1流感可能出现大流行的警告声中昨天召开的江苏省2009-2010年度流感防制研讨会注定与往年不同。每年都会召开的一次例会今年足足提前了一个月会上研讨的主题已从以前的季节性流感变成以甲型H1N1流感为重点。\x0Aבלשכת");
// Test for Chinese. No Chinese segmentation in platform/mac.
actual = expandRangeString(range, 'zh-CN-div', 0, 'zh-CN-div', 0, 'word', true);
assertEqual("Chinese word0", actual, "在");
actual = expandRangeString(range, 'zh-CN-div', 1, 'zh-CN-div', 1, 'word', true);
assertEqual("Chinese word1", actual, "甲");
actual = expandRangeString(range, 'zh-CN-div', 2, 'zh-CN-div', 2, 'word', true);
assertEqual("Chinese word1", actual, "型");
actual = expandRangeString(range, 'zh-CN-div', 3, 'zh-CN-div', 3, 'sentence', true);
assertEqual("Chinese sentence: ", actual, "在甲型H1N1流感可能出现大流行的警告声中昨天召开的江苏省2009-2010年度流感防制研讨会注定与往年不同。");
actual = expandRangeString(range, 'zh-CN-div', 3, 'zh-CN-div', 3, 'block', true);
assertEqual("Chinese block: ", actual, "在甲型H1N1流感可能出现大流行的警告声中昨天召开的江苏省2009-2010年度流感防制研讨会注定与往年不同。每年都会召开的一次例会今年足足提前了一个月会上研讨的主题已从以前的季节性流感变成以甲型H1N1流感为重点。");
// Test for Hebrew.
actual = expandRangeString(range, 'he-div', 1, 'he-div', 1, 'word', true);
assertEqual("Hebrew word", actual, "בלשכת");
actual = expandRangeString(range, 'he-div', 1, 'he-div', 1, 'sentence', true);
assertEqual("Hebrew sentence", actual, 'בלשכת שר החוץ הגיבו להתקפות עליו בעקבות הנחייתו לדרוש מהמועמדים לקורס צוערים שירות צבאי או לאומי: "המתקיפים צבועים, מי שרוצה לייצג את המדינה רוצה גם לשרת אותה"' );
actual = expandRangeString(range, 'he-div', 0, 'he-div', 0, 'sentence', false);
assertEqual("Hebrew block", actual, 'בלשכת שר החוץ הגיבו להתקפות עליו בעקבות הנחייתו לדרוש מהמועמדים לקורס צוערים שירות צבאי או לאומי: "המתקיפים צבועים, מי שרוצה לייצג את המדינה רוצה גם לשרת אותה"' );
}
</script>
<body onload="test()">
<p>This is the begin of a block. A block is a collection of sentences. Each sentence begins with capital
letter and ends with a punctuation.
</p>
<p id="multilineSentence">Now, a sentence
is divided into
multiple lines.
</p>
<p id="instructions">Roll the mouse around the page. The coordinates
of the mouse pointer are currently atop an element<br id="mybr">whose ID
is:"<span id="myspan" style="font-weight:bold"></span>".</p>
<table border=1 id="myTable">
<tr id="tr1">
<td id="td_A1">Cell A1</td>
<td id="td_B1">Cell B1</td>
</tr>
<tr id="tr2">
<td id="td_A2">Cell A2</td>
<td id="td_B2">Cell B2</td>
</tr>
</table>
<h2 id="sec1">Section 1</h2>
<p id="p1">text.</p>
<h2 id="sec2">Section 2</h2>
<p id="p2">text.</p>
<div id="mydiv" style="position:absolute; top:340; left:300; background-color:yellow">
Here is a positioned element.</div>
<div id="zh-CN-div">在甲型H1N1流感可能出现大流行的警告声中昨天召开的江苏省2009-2010年度流感防制研讨会注定与往年不同。每年都会召开的一次例会今年足足提前了一个月会上研讨的主题已从以前的季节性流感变成以甲型H1N1流感为重点。</div>
<div id="he-div">בלשכת שר החוץ הגיבו להתקפות עליו בעקבות הנחייתו לדרוש מהמועמדים לקורס צוערים שירות צבאי או לאומי: "המתקיפים צבועים, מי שרוצה לייצג את המדינה רוצה גם לשרת אותה"</div>
<ul id="console"></ul>
</body>
</html>