|
1 <!DOCTYPE html> |
|
2 <html> |
|
3 <head> |
|
4 <title>Line boundary getText* functions tests</title> |
|
5 <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" /> |
|
6 |
|
7 <script type="application/javascript" |
|
8 src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> |
|
9 <script type="application/javascript" |
|
10 src="../common.js"></script> |
|
11 <script type="application/javascript" |
|
12 src="../text.js"></script> |
|
13 <script type="application/javascript"> |
|
14 function doTest() |
|
15 { |
|
16 ////////////////////////////////////////////////////////////////////////// |
|
17 // __h__e__l__l__o__ __m__y__ __f__r__i__e__n__d__ |
|
18 // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
19 |
|
20 var IDs = [ "input", "div", "editable", "textarea", |
|
21 getNode("ta", getNode("ta_cntr").contentDocument) ]; |
|
22 |
|
23 testTextBeforeOffset(IDs, BOUNDARY_LINE_START, |
|
24 [ [ 0, 15, "", 0, 0 ] ]); |
|
25 testTextBeforeOffset(IDs, BOUNDARY_LINE_END, |
|
26 [ [ 0, 15, "", 0, 0 ] ]); |
|
27 |
|
28 testTextAtOffset(IDs, BOUNDARY_LINE_START, |
|
29 [ [ 0, 15, "hello my friend", 0, 15 ] ]); |
|
30 testTextAtOffset(IDs, BOUNDARY_LINE_END, |
|
31 [ [ 0, 15, "hello my friend", 0, 15 ] ]); |
|
32 |
|
33 testTextAfterOffset(IDs, BOUNDARY_LINE_START, |
|
34 [ [ 0, 15, "", 15, 15 ] ]); |
|
35 testTextAfterOffset(IDs, BOUNDARY_LINE_END, |
|
36 [ [ 0, 15, "", 15, 15 ] ]); |
|
37 |
|
38 ////////////////////////////////////////////////////////////////////////// |
|
39 // __o__n__e__w__o__r__d__\n |
|
40 // 0 1 2 3 4 5 6 7 |
|
41 // __\n |
|
42 // 8 |
|
43 // __t__w__o__ __w__o__r__d__s__\n |
|
44 // 9 10 11 12 13 14 15 16 17 18 |
|
45 |
|
46 IDs = [ "ml_div", "ml_divbr", "ml_editable", "ml_editablebr", "ml_textarea"]; |
|
47 |
|
48 testTextBeforeOffset(IDs, BOUNDARY_LINE_START, |
|
49 [ [ 0, 7, "", 0, 0 ], |
|
50 [ 8, 8, "oneword\n", 0, 8 ], |
|
51 [ 9, 18, "\n", 8, 9 ], |
|
52 [ 19, 19, "two words\n", 9, 19 ]]); |
|
53 |
|
54 testTextBeforeOffset(IDs, BOUNDARY_LINE_END, |
|
55 [ [ 0, 7, "", 0, 0 ], |
|
56 [ 8, 8, "oneword", 0, 7 ], |
|
57 [ 9, 18, "\n", 7, 8 ], |
|
58 [ 19, 19, "\ntwo words", 8, 18 ]]); |
|
59 |
|
60 testTextAtOffset(IDs, BOUNDARY_LINE_START, |
|
61 [ [ 0, 7, "oneword\n", 0, 8 ], |
|
62 [ 8, 8, "\n", 8, 9 ], |
|
63 [ 9, 18, "two words\n", 9, 19 ], |
|
64 [ 19, 19, "", 19, 19 ]]); |
|
65 testTextAtOffset(IDs, BOUNDARY_LINE_END, |
|
66 [ [ 0, 7, "oneword", 0, 7 ], |
|
67 [ 8, 8, "\n", 7, 8 ], |
|
68 [ 9, 18, "\ntwo words", 8, 18 ], |
|
69 [ 19, 19, "\n", 18, 19 ]]); |
|
70 |
|
71 testTextAfterOffset(IDs, BOUNDARY_LINE_START, |
|
72 [ [ 0, 7, "\n", 8, 9 ], |
|
73 [ 8, 8, "two words\n", 9, 19 ], |
|
74 [ 9, 19, "", 19, 19 ]]); |
|
75 testTextAfterOffset(IDs, BOUNDARY_LINE_END, |
|
76 [ [ 0, 7, "\n", 7, 8 ], |
|
77 [ 8, 8, "\ntwo words", 8, 18 ], |
|
78 [ 9, 18, "\n", 18, 19 ], |
|
79 [ 19, 19, "", 19, 19 ]]); |
|
80 |
|
81 ////////////////////////////////////////////////////////////////////////// |
|
82 // a * b (* is embedded char for link) |
|
83 testTextBeforeOffset([ getAccessible("ht_1").firstChild ], BOUNDARY_LINE_START, |
|
84 [ [ 0, 5, "", 0, 0 ] ]); |
|
85 |
|
86 testTextBeforeOffset([ getAccessible("ht_1").firstChild ], BOUNDARY_LINE_END, |
|
87 [ [ 0, 5, "", 0, 0 ] ]); |
|
88 |
|
89 testTextAtOffset([ getAccessible("ht_1").firstChild ], BOUNDARY_LINE_START, |
|
90 [ [ 0, 5, "a " + kEmbedChar + " c", 0, 5 ] ]); |
|
91 |
|
92 testTextAtOffset([ getAccessible("ht_1").firstChild ], BOUNDARY_LINE_END, |
|
93 [ [ 0, 5, "a " + kEmbedChar + " c", 0, 5 ] ]); |
|
94 |
|
95 testTextAfterOffset([ getAccessible("ht_1").firstChild ], BOUNDARY_LINE_START, |
|
96 [ [ 0, 5, "", 5, 5 ] ]); |
|
97 |
|
98 testTextAfterOffset([ getAccessible("ht_1").firstChild ], BOUNDARY_LINE_END, |
|
99 [ [ 0, 5, "", 5, 5 ] ]); |
|
100 |
|
101 ////////////////////////////////////////////////////////////////////////// |
|
102 // foo<br> and foo<br><br> |
|
103 |
|
104 testTextAtOffset([ getAccessible("ht_2").firstChild.firstChild ], |
|
105 BOUNDARY_LINE_START, |
|
106 [ [ 0, 3, "foo", 0, 3 ] ]); |
|
107 testTextAtOffset([ getAccessible("ht_3").firstChild.firstChild ], |
|
108 BOUNDARY_LINE_START, |
|
109 [ [ 0, 3, "foo\n", 0, 4 ], [ 4, 4, "", 4, 4 ] ]); |
|
110 |
|
111 ////////////////////////////////////////////////////////////////////////// |
|
112 // 'Hello world ' (\n is rendered as space) |
|
113 |
|
114 testTextAtOffset([ "ht_4" ], BOUNDARY_LINE_START, |
|
115 [ [ 0, 12, "Hello world ", 0, 12 ] ]); |
|
116 |
|
117 ////////////////////////////////////////////////////////////////////////// |
|
118 // list items |
|
119 |
|
120 testTextAtOffset([ "li1" ], BOUNDARY_LINE_START, |
|
121 [ [ 0, 5, kDiscBulletChar + "Item", 0, 5 ] ]); |
|
122 testTextAtOffset([ "li2" ], BOUNDARY_LINE_START, |
|
123 [ [ 0, 1, kDiscBulletChar, 0, 1 ] ]); |
|
124 testTextAtOffset([ "li3" ], BOUNDARY_LINE_START, |
|
125 [ [ 0, 7, kDiscBulletChar + "a long ", 0, 8 ], |
|
126 [ 8, 11, "and ", 8, 12 ] ]); |
|
127 testTextAtOffset([ "li4" ], BOUNDARY_LINE_START, |
|
128 [ [ 0, 6, kDiscBulletChar + "a " + kEmbedChar + " c", 0, 6 ] ]); |
|
129 testTextAtOffset([ "ul1" ], BOUNDARY_LINE_START, |
|
130 [ [ 0, 0, kEmbedChar, 0, 1 ], |
|
131 [ 1, 1, kEmbedChar, 1, 2 ], |
|
132 [ 2, 2, kEmbedChar, 2, 3 ], |
|
133 [ 3, 4, kEmbedChar, 3, 4 ] ]); |
|
134 |
|
135 ////////////////////////////////////////////////////////////////////////// |
|
136 // Nested hypertexts |
|
137 |
|
138 testTextAtOffset(["ht_5" ], BOUNDARY_LINE_START, |
|
139 [ [ 0, 0, kEmbedChar, 0, 1 ] ]); |
|
140 |
|
141 SimpleTest.finish(); |
|
142 } |
|
143 |
|
144 SimpleTest.waitForExplicitFinish(); |
|
145 addA11yLoadEvent(doTest); |
|
146 </script> |
|
147 </head> |
|
148 <body> |
|
149 |
|
150 <a target="_blank" |
|
151 title="getTextAtOffset for word boundaries: beginning of a new life" |
|
152 href="https://bugzilla.mozilla.org/show_bug.cgi?id=853340"> |
|
153 Bug 853340 |
|
154 </a> |
|
155 <a target="_blank" |
|
156 title="getTextBeforeOffset for word boundaries: evolving" |
|
157 href="https://bugzilla.mozilla.org/show_bug.cgi?id=855732"> |
|
158 Bug 855732 |
|
159 </a> |
|
160 <a target="_blank" |
|
161 title=" getTextAfterOffset for line boundary on new rails" |
|
162 href="https://bugzilla.mozilla.org/show_bug.cgi?id=882292"> |
|
163 Bug 882292 |
|
164 </a> |
|
165 <a target="_blank" |
|
166 title="getTextAtOffset broken for last object when closing tag is preceded by newline char" |
|
167 href="https://bugzilla.mozilla.org/show_bug.cgi?id=947170"> |
|
168 Bug 947170 |
|
169 </a> |
|
170 |
|
171 <p id="display"></p> |
|
172 <div id="content" style="display: none"></div> |
|
173 <pre id="test"> |
|
174 </pre> |
|
175 |
|
176 <input id="input" value="hello my friend"/> |
|
177 <div id="div">hello my friend</div> |
|
178 <div id="editable" contenteditable="true">hello my friend</div> |
|
179 <textarea id="textarea">hello my friend</textarea> |
|
180 <iframe id="ta_cntr" |
|
181 src="data:text/html,<html><body><textarea id='ta'>hello my friend</textarea></body></html>"></iframe> |
|
182 |
|
183 <pre> |
|
184 <div id="ml_div" style="border-style:outset;">oneword |
|
185 |
|
186 two words |
|
187 </div> |
|
188 <div id="ml_divbr" style="border-style:outset;">oneword<br/><br/>two words<br/><br/></div> |
|
189 <div id="ml_editable" style="border-style:outset;" contenteditable="true">oneword |
|
190 |
|
191 two words |
|
192 </div> |
|
193 <div id="ml_editablebr" contenteditable="true" style="border-style:outset;">oneword<br/><br/>two words<br/><br/></div> |
|
194 <textarea id="ml_textarea" cols="300">oneword |
|
195 |
|
196 two words |
|
197 </textarea> |
|
198 </pre> |
|
199 |
|
200 <iframe id="ht_1" src="data:text/html,<html><body>a <a href=''>b</a> c</body></html>"></iframe> |
|
201 |
|
202 <iframe id="ht_2" src="data:text/html,<div contentEditable='true'>foo<br/></div>"></iframe> |
|
203 <iframe id="ht_3" src="data:text/html,<div contentEditable='true'>foo<br/><br/></div>"></iframe> |
|
204 |
|
205 <p id="ht_4">Hello world |
|
206 </p> |
|
207 |
|
208 <ul id="ul1"> |
|
209 <li id="li1">Item</li> |
|
210 <li id="li2"></li> |
|
211 <li id="li3" style="width:10ex; font-family:monospace; font-size:10pt;">a long and winding road that lead me to your door</li> |
|
212 <li id="li4">a <a href=''>b</a> c</li> |
|
213 </ul> |
|
214 |
|
215 <div id="ht_5"> |
|
216 <div> |
|
217 <p>sectiounus</p> |
|
218 <p>seciofarus</p> |
|
219 </div> |
|
220 </div> |
|
221 |
|
222 </body> |
|
223 </html> |