products/sources/formale Sprachen/C/Firefox/accessible/tests/mochitest/text/test_lineboundary.html
<!
DOCTYPE html >
<
html >
<
head >
<
title >Line boundary getText* functions tests</
title >
<
link rel=
"stylesheet" type=
"text/css" href=
"chrome://mochikit/content/tests/SimpleTest/test.css" />
<
script src=
"chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" ></
script >
<
script type=
"application/javascript"
src=
"../common.js" ></
script >
<
script type=
"application/javascript"
src=
"../text.js" ></
script >
<
script type=
"application/javascript" >
function doTest() {
testTextAtOffset(
"line_test_1" , BOUNDARY_LINE_START,
[[0, 6,
"Line 1 " , 0, 7],
// See the kOk test below.
// [7, 7, kEmbedChar, 7, 8],
[8, 15,
"Line 3 " , 8, 15]]);
testTextAtOffset(/* aOffset */ 7, BOUNDARY_LINE_START,
kEmbedChar, /* aStartOffset */ 7, /* aEndOffset */ 8,
"line_test_1" ,
/* returned text */ kOk,
/* returned start offset */ kOk, /* returned end offset */ kOk);
// ////////////////////////////////////////////////////////////////////////
// __h__e__l__l__o__ __m__y__ __f__r__i__e__n__d__
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
var IDs = [
"input" ,
"div" ,
"editable" ,
"textarea" ,
getNode(
"ta" , getNode(
"ta_cntr" ).contentDocument) ];
testTextBeforeOffset(IDs, BOUNDARY_LINE_START,
[ [ 0, 15,
"" , 0, 0 ] ]);
testTextBeforeOffset(IDs, BOUNDARY_LINE_END,
[ [ 0, 15,
"" , 0, 0 ] ]);
testTextAtOffset(IDs, BOUNDARY_LINE_START,
[ [ 0, 15,
"hello my friend" , 0, 15 ] ]);
testTextAtOffset(IDs, BOUNDARY_LINE_END,
[ [ 0, 15,
"hello my friend" , 0, 15 ] ]);
testTextAfterOffset(IDs, BOUNDARY_LINE_START,
[ [ 0, 15,
"" , 15, 15 ] ]);
testTextAfterOffset(IDs, BOUNDARY_LINE_END,
[ [ 0, 15,
"" , 15, 15 ] ]);
// ////////////////////////////////////////////////////////////////////////
// __o__n__e__w__o__r__d__\n
// 0 1 2 3 4 5 6 7
// __\n
// 8
// __t__w__o__ __w__o__r__d__s__\n
// 9 10 11 12 13 14 15 16 17 18
IDs = [
"ml_div" ,
"ml_divbr" ,
"ml_editable" ,
"ml_editablebr" ,
"ml_textarea" ];
testTextBeforeOffset(IDs, BOUNDARY_LINE_START,
[ [ 0, 7,
"" , 0, 0 ],
[ 8, 8,
"oneword\n" , 0, 8 ],
[ 9, 18,
"\n" , 8, 9 ],
[ 19, 19,
"two words\n" , 9, 19 ]]);
testTextBeforeOffset(IDs, BOUNDARY_LINE_END,
[ [ 0, 7,
"" , 0, 0 ],
[ 8, 8,
"oneword" , 0, 7 ],
[ 9, 18,
"\n" , 7, 8 ],
[ 19, 19,
"\ntwo words" , 8, 18 ]]);
testTextAtOffset(IDs, BOUNDARY_LINE_START,
[ [ 0, 7,
"oneword\n" , 0, 8 ],
[ 8, 8,
"\n" , 8, 9 ],
[ 9, 18,
"two words\n" , 9, 19 ],
[ 19, 19,
"" , 19, 19 ]]);
testTextAtOffset(IDs, BOUNDARY_LINE_END,
[ [ 0, 7,
"oneword" , 0, 7 ],
[ 8, 8,
"\n" , 7, 8 ],
[ 9, 18,
"\ntwo words" , 8, 18 ],
[ 19, 19,
"\n" , 18, 19 ]]);
testTextAfterOffset(IDs, BOUNDARY_LINE_START,
[ [ 0, 7,
"\n" , 8, 9 ],
[ 8, 8,
"two words\n" , 9, 19 ],
[ 9, 19,
"" , 19, 19 ]]);
testTextAfterOffset(IDs, BOUNDARY_LINE_END,
[ [ 0, 7,
"\n" , 7, 8 ],
[ 8, 8,
"\ntwo words" , 8, 18 ],
[ 9, 18,
"\n" , 18, 19 ],
[ 19, 19,
"" , 19, 19 ]]);
// ////////////////////////////////////////////////////////////////////////
// a * b (* is embedded char for
link )
testTextBeforeOffset([ getAccessible(
"ht_1" ).firstChild ], BOUNDARY_LINE_START,
[ [ 0, 5,
"" , 0, 0 ] ]);
testTextBeforeOffset([ getAccessible(
"ht_1" ).firstChild ], BOUNDARY_LINE_END,
[ [ 0, 5,
"" , 0, 0 ] ]);
testTextAtOffset([ getAccessible(
"ht_1" ).firstChild ], BOUNDARY_LINE_START,
[ [ 0, 5,
"a " + kEmbedChar +
" c" , 0, 5 ] ]);
testTextAtOffset([ getAccessible(
"ht_1" ).firstChild ], BOUNDARY_LINE_END,
[ [ 0, 5,
"a " + kEmbedChar +
" c" , 0, 5 ] ]);
testTextAfterOffset([ getAccessible(
"ht_1" ).firstChild ], BOUNDARY_LINE_START,
[ [ 0, 5,
"" , 5, 5 ] ]);
testTextAfterOffset([ getAccessible(
"ht_1" ).firstChild ], BOUNDARY_LINE_END,
[ [ 0, 5,
"" , 5, 5 ] ]);
// ////////////////////////////////////////////////////////////////////////
// foo<
br > and foo<
br ><
br >
testTextAtOffset([ getAccessible(
"ht_2" ).firstChild.firstChild ],
BOUNDARY_LINE_START,
[ [ 0, 3,
"foo\n" , 0, 4 ] ]);
testTextAtOffset([ getAccessible(
"ht_3" ).firstChild.firstChild ],
BOUNDARY_LINE_START,
[ [ 0, 3,
"foo\n" , 0, 4 ], [ 4, 4,
"\n" , 4, 5 ] ]);
// ////////////////////////////////////////////////////////////////////////
//
'Hello world ' (\n is rendered as space)
testTextAtOffset([
"ht_4" ], BOUNDARY_LINE_START,
[ [ 0, 12,
"Hello world " , 0, 12 ] ]);
// ////////////////////////////////////////////////////////////////////////
// list items
testTextAtOffset([
"li1" ], BOUNDARY_LINE_START,
[ [ 0, 6, kDiscBulletText +
"Item" , 0, 6 ] ]);
testTextAtOffset([
"li2" ], BOUNDARY_LINE_START,
[ [ 0, 2, kDiscBulletText, 0, 2 ] ]);
testTextAtOffset([
"li3" ], BOUNDARY_LINE_START,
[ [ 0, 8, kDiscBulletText +
"a long " , 0, 9 ],
[ 9, 12,
"and " , 9, 13 ] ]);
testTextAtOffset([
"li4" ], BOUNDARY_LINE_START,
[ [ 0, 7, kDiscBulletText +
"a " + kEmbedChar +
" c" , 0, 7 ] ]);
testTextAtOffset([
"li5" ], BOUNDARY_LINE_START,
[ [ 0, 2, kDiscBulletText +
"\n" , 0, 3 ],
[ 3, 7,
"hello" , 3, 8 ] ]);
testTextAtOffset([
"ul1" ], BOUNDARY_LINE_START,
[ [ 0, 0, kEmbedChar, 0, 1 ],
[ 1, 1, kEmbedChar, 1, 2 ],
[ 2, 2, kEmbedChar, 2, 3 ],
[ 3, 3, kEmbedChar, 3, 4 ],
[ 4, 5, kEmbedChar, 4, 5 ] ]);
testTextAtOffset([
"li6" ], BOUNDARY_LINE_START,
[ [ 0, 7,
"1. Item" , 0, 7 ] ]);
testTextAtOffset([
"li7" ], BOUNDARY_LINE_START,
[ [ 0, 3,
"2. " , 0, 3 ] ]);
testTextAtOffset([
"li8" ], BOUNDARY_LINE_START,
[ [ 0, 9,
"3. a long " , 0, 10 ],
[ 10, 13,
"and " , 10, 14 ] ]);
testTextAtOffset([
"li9" ], BOUNDARY_LINE_START,
[ [ 0, 8,
"4. a " + kEmbedChar +
" c" , 0, 8 ] ]);
testTextAtOffset([
"li10" ], BOUNDARY_LINE_START,
[ [ 0, 3,
"5. \n" , 0, 4 ],
[ 4, 8,
"hello" , 4, 9 ] ]);
testTextAtOffset([
"ol1" ], BOUNDARY_LINE_START,
[ [ 0, 0, kEmbedChar, 0, 1 ],
[ 1, 1, kEmbedChar, 1, 2 ],
[ 2, 2, kEmbedChar, 2, 3 ],
[ 3, 3, kEmbedChar, 3, 4 ],
[ 4, 5, kEmbedChar, 4, 5 ] ]);
// ////////////////////////////////////////////////////////////////////////
// Nested hypertexts
testTextAtOffset([
"ht_5" ], BOUNDARY_LINE_START,
[ [ 0, 0, kEmbedChar, 0, 1 ] ]);
// ////////////////////////////////////////////////////////////////////////
// Block followed by list
testTextAtOffset([
"block_then_ul" ], BOUNDARY_LINE_START,
[ [ 0, 0, kEmbedChar, 0, 1 ],
[ 1, 1, kEmbedChar, 1, 2 ] ]);
// Embedded char containing a line break breaks line offsets in parent.
testTextAtOffset([
"brInEmbed" ], BOUNDARY_LINE_START,
[ [0, 1,
"a " + kEmbedChar, 0, 3],
[2, 2,
"a " + kEmbedChar +
" d" , 0, 5],
[3, 5, kEmbedChar +
" d" , 2, 5] ]);
testTextAtOffset([
"brInEmbedAndBefore" ], BOUNDARY_LINE_START,
[ [0, 1,
"a\n" , 0, 2],
[2, 3,
"b " + kEmbedChar, 2, 5],
[4, 4,
"b " + kEmbedChar +
" e" , 2, 7],
[5, 7, kEmbedChar +
" e" , 4, 7] ]);
testTextAtOffset([
"brInEmbedAndAfter" ], BOUNDARY_LINE_START,
[ [0, 1,
"a " + kEmbedChar, 0, 3],
[2, 2,
"a " + kEmbedChar +
" d\n" , 0, 6],
[3, 5, kEmbedChar +
" d\n" , 2, 6],
[6, 7,
"e" , 6, 7] ]);
testTextAtOffset([
"brInEmbedAndBlockElementAfter" ], BOUNDARY_LINE_START,
[ [0, 2,
"a " + kEmbedChar, 0, 3],
[3, 4, kEmbedChar, 3, 4] ]);
testTextAtOffset([
"brInEmbedThenTextThenBlockElement" ], BOUNDARY_LINE_START,
[ [0, 1,
"a " + kEmbedChar, 0, 3],
[2, 2,
"a " + kEmbedChar +
" d" , 0, 5],
[3, 4, kEmbedChar +
" d" , 2, 5],
[5, 6, kEmbedChar, 5, 6] ]);
testTextAtOffset([
"noBrInEmbedButOneBefore" ], BOUNDARY_LINE_START,
[ [0, 1,
"a\n" , 0, 2],
[2, 7,
"b " + kEmbedChar +
" d" , 2, 7] ]);
testTextAtOffset([
"noBrInEmbedButOneAfter" ], BOUNDARY_LINE_START,
[ [0, 3,
"a " + kEmbedChar +
"\n" , 0, 4],
[4, 5,
"c" , 4, 5] ]);
testTextAtOffset([
"twoEmbedsWithBRs" ], BOUNDARY_LINE_START,
[ [0, 1,
"a " + kEmbedChar, 0, 3],
[2, 2,
"a " + kEmbedChar + kEmbedChar, 0, 4],
[3, 3, kEmbedChar + kEmbedChar +
" f" , 2, 6],
[4, 6, kEmbedChar +
" f" , 3, 6] ]);
// Inline block
span with nested spans and BRs
testTextAtOffset([
"inlineBlockWithSpansAndBrs" ], BOUNDARY_LINE_START,
[ [0, 1,
"a\n" , 0, 2],
[2, 3,
"b\n" , 2, 4],
[4, 5,
"c" , 4, 5] ]);
// Spans with BRs and whitespaces.
testTextAtOffset([
"spansWithWhitespaces" ], BOUNDARY_LINE_START,
[ [0, 6,
"Line 1\n" , 0, 7],
[7, 13,
"Line 2\n" , 7, 14],
[14, 20,
"Line 3\n" , 14, 21],
[21, 27,
"Line 4\n" , 21, 28],
[28, 28,
"" , 28, 28] ]);
// A line with an empty display: contents leaf in the middle.
testTextAtOffset([
"displayContents" ], BOUNDARY_LINE_START,
// See the kOk test below.
// [ [0, 3, `a${kEmbedChar}b`, 0, 3] ]);
[ [0, 0, `a${kEmbedChar}b`, 0, 3],
[2, 3, `a${kEmbedChar}b`, 0, 3] ]);
testTextAtOffset(/* aOffset */ 1, BOUNDARY_LINE_START,
`a${kEmbedChar}b`, /* aStartOffset */ 0, /* aEndOffset */ 3,
"displayContents" ,
/* returned text */ kOk,
/* returned start offset */ kOk,
/* returned end offset */ kOk);
// A line which wraps, followed by a
br , followed by another line.
testTextAtOffset([
"brAfterWrapped" ], BOUNDARY_LINE_START,
[ [0, 1,
"a " , 0, 2],
[2, 3,
"b\n" , 2, 4],
[4, 5,
"c" , 4, 5] ]);
testTextAtOffset([
"inlineInput" ], BOUNDARY_LINE_END,
[ [0, 1,
"a" , 0, 1],
[2, 7, `\nb ${kEmbedChar} d`, 1, 7,
[ [ 4,
"inlineInput" , kOk, kOk, kOk] ] ] ]);
testTextAtOffset([
"inlineInput2" ], BOUNDARY_LINE_END,
[ [0, 1,
"a" , 0, 1],
[2, 7, `\n${kEmbedChar} c d`, 1, 7,
[ [ 2,
"inlineInput2" , kOk, kOk, kOk] ] ] ]);
testTextAtOffset([
"inlineInput3" ], BOUNDARY_LINE_END,
[ [0, 1,
"a" , 0, 1],
[2, 8, `\nb${kEmbedChar} c d`, 1, 8,
[ [ 3,
"inlineInput3" , kOk, kOk, kOk] ] ] ]);
testTextAtOffset([
"inlineInput4" ], BOUNDARY_LINE_END,
[ [0, 1,
"a" , 0, 1],
[2, 7, `\n${kEmbedChar}b c d`, 1, 8,
[ [ 2,
"inlineInput4" , kOk, kOk, kOk ] ] ] ]);
testTextAtOffset(/* aOffset */ 0, BOUNDARY_LINE_START,
kEmbedChar, 0, 1,
"contentEditableTable" ,
/* returned text */ kOk,
/* returned start offset */ kOk,
/* returned end offset */ kOk);
SimpleTest.finish();
}
SimpleTest.waitForExplicitFinish();
addA11yLoadEvent(doTest);
</
script >
</
head >
<
body >
<a target=
"_blank"
title =
"getTextAtOffset for word boundaries: beginning of a new life"
href=
"https://bugzilla.mozilla.org/show_bug.cgi?id=853340 " >
Bug 853340
</a>
<a target=
"_blank"
title =
"getTextBeforeOffset for word boundaries: evolving"
href=
"https://bugzilla.mozilla.org/show_bug.cgi?id=855732 " >
Bug 855732
</a>
<a target=
"_blank"
title =
" getTextAfterOffset for line boundary on new rails"
href=
"https://bugzilla.mozilla.org/show_bug.cgi?id=882292 " >
Bug 882292
</a>
<a target=
"_blank"
title =
"getTextAtOffset broken for last object when closing tag is preceded by newline char"
href=
"https://bugzilla.mozilla.org/show_bug.cgi?id=947170 " >
Bug 947170
</a>
<p id=
"display" ></p>
<
div id=
"content" style =
"display: none" ></
div >
<
pre id=
"test" >
</
pre >
<
input id=
"input" value=
"hello my friend" />
<
div id=
"div" >hello my friend</
div >
<
div id=
"editable" contenteditable=
"true" >hello my friend</
div >
<
textarea id=
"textarea" >hello my friend</
textarea >
<
iframe id=
"ta_cntr"
src=
"data:text/html," ></
iframe >
<
pre >
<
div id=
"ml_div" style =
"border-style:outset;" >oneword
two words
</
div >
<
div id=
"ml_divbr" style =
"border-style:outset;" >oneword<
br /><
br />two words<
br /></
div >
<
div id=
"ml_editable" style =
"border-style:outset;" contenteditable=
"true" >oneword
two words
</
div >
<
div id=
"ml_editablebr" contenteditable=
"true" style =
"border-style:outset;" >oneword<
br /><br />two words<br /></div >
<textarea id="ml_textarea" cols="300" >oneword
two words
</textarea >
</pre >
<iframe id="ht_1" src="data:text/html,a b c" ></iframe >
<iframe id="ht_2" src="data:text/html,foo
" ></iframe >
<iframe id="ht_3" src="data:text/html,foo
" ></iframe >
<p id="ht_4" >Hello world
</p>
<ul id="ul1" >
<li id="li1" >Item</li >
<li id="li2" ></li >
<li id="li3" style ="font-family:monospace; font-size:10pt; width:8ch;" >a long and winding road that lead me to your door</li >
<li id="li4" >a <a href='' >b</a> c</li >
<li id="li5" ><br >hello</li >
</ul >
<ol id="ol1" >
<li id="li6" >Item</li >
<li id="li7" ></li >
<li id="li8" style ="font-family:monospace; font-size:10pt; width:8ch;" >a long and winding road that lead me to your door</li >
<li id="li9" >a <a href='' >b</a> c</li >
<li id="li10" ><br >hello</li >
</ol >
<div id="ht_5" >
<div >
<p>sectiounus</p>
<p>seciofarus</p>
</div >
</div >
<div id="line_test_1" >
Line 1
<center ><input type="TEXT" ><input value="Button" type="SUBMIT" ></center >
Line 3
</div >
<div id="block_then_ul" >
<p>Block</p>
<ul ><li >Li </li ></ul >
</div >
<div id="brInEmbed" contenteditable>a <a href="https://mozilla.org/ " >b<br >c</a> d</div >
<div id="brInEmbedAndBefore" >a<br >b <a href="https://mozilla.org/ " >c<br >d</a> e</div >
<div id="brInEmbedAndAfter" >a <a href="https://mozilla.org/ " >b<br >c</a> d<br >e</div >
<div id="brInEmbedAndBlockElementAfter" >a <a href="https://mozilla.org/ " >b<br >c</a><p>d</p></div >
<div id="brInEmbedThenTextThenBlockElement" >a <a href="https://mozilla.org/ " >b<br >c</a> d<p>e</p></div >
<div id="noBrInEmbedButOneBefore" >a<br >b <a href="https://mozilla.org/ " >c</a> d</div >
<div id="noBrInEmbedButOneAfter" >a <a href="https://mozilla.org/ " >b</a><br >c</div >
<div id="twoEmbedsWithBRs" >a <a href="https://mozilla.org " >b<br >c</a><a href="https://mozilla.org" >d<br >e</a> f</div >
<span id="inlineBlockWithSpansAndBrs" style ="display: inline-block;" ><span >a<br >b<br ><span ></span ></span >c</span >
<div id="spansWithWhitespaces" > <!-- Don't indent the following block -->
<span >Line 1<br />
</span >
<span >Line 2<br />
</span >
<span >Line 3<br />
</span >
<span >Line 4<br />
</span ></div ><!-- OK to indent again -->
<div id="displayContents" >a<ul style ="display: contents;" ><li style ="display: contents;" ></li ></ul >b</div >
<div id="brAfterWrapped" style ="width: 10px;" >a b<br >c</div >
<div id="inlineInput" >a<br >b <input value="c" > d</div >
<div id="inlineInput2" >a<br ><input value="b" > c d</div >
<div id="inlineInput3" >a<br > b<input value="" > c d</div >
<div id="inlineInput4" >a<br ><input value="" >b c d</div >
<div id="contentEditableTable" contenteditable>
<table style ="display: inline-table" >
<thead >
<th >Foo</th >
</thead >
<tbody >
<tr >
<td >Bar</td >
</tr >
</tbody >
</table >
<br >
<table style ="display: inline-table" >
<thead >
<th >Foo</th >
</thead >
<tbody >
<tr >
<td >Bar</td >
</tr >
</tbody >
</table >
<br >
</div >
</body >
</html >
Messung V0.5 C=94 H=95 G=94
¤ Dauer der Verarbeitung: 0.70 Sekunden
(vorverarbeitet)
¤
*© Formatika GbR, Deutschland