Fri, 16 Jan 2015 18:13:44 +0100
Integrate suggestion from review to improve consistency with existing code.
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>Word boundary text tests</title>
5 <link rel="stylesheet" type="text/css"
6 href="chrome://mochikit/content/tests/SimpleTest/test.css" />
8 <script type="application/javascript"
9 src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
10 <script type="application/javascript"
11 src="../common.js"></script>
12 <script type="application/javascript"
13 src="../text.js"></script>
15 <script type="application/javascript">
16 function doTest()
17 {
18 // "hello"
19 // __h__e__l__l__o__
20 // 0 1 2 3 4 5
21 var ids = [ "i1", "d1", "e1", "t1" ];
22 testTextBeforeOffset(ids, BOUNDARY_WORD_START,
23 [ [ 0, 5, "", 0, 0 ] ]);
24 testTextBeforeOffset(ids, BOUNDARY_WORD_END,
25 [ [ 0, 5, "", 0, 0 ] ]);
27 testTextAtOffset(ids, BOUNDARY_WORD_START,
28 [ [ 0, 5, "hello", 0, 5 ] ]);
29 testTextAtOffset(ids, BOUNDARY_WORD_END,
30 [ [ 0, 5, "hello", 0, 5 ] ]);
32 testTextAfterOffset(ids, BOUNDARY_WORD_START,
33 [ [ 0, 5, "", 5, 5 ] ]);
34 testTextAfterOffset(ids, BOUNDARY_WORD_END,
35 [ [ 0, 5, "", 5, 5 ] ]);
37 // "hello "
38 // __h__e__l__l__o__ __
39 // 0 1 2 3 4 5 6
40 var ids = [ "i2", "d2", "e2", "t2" ];
41 testTextBeforeOffset(ids, BOUNDARY_WORD_START,
42 [ [ 0, 6, "", 0, 0 ] ]);
43 testTextBeforeOffset(ids, BOUNDARY_WORD_END,
44 [ [ 0, 5, "", 0, 0 ],
45 [ 6, 6, "hello", 0, 5,
46 [ [6, "e2", kTodo, kOk, kTodo ] ]
47 ]
48 ]);
50 testTextAtOffset(ids, BOUNDARY_WORD_START,
51 [ [ 0, 6, "hello ", 0, 6 ] ]);
52 testTextAtOffset(ids, BOUNDARY_WORD_END,
53 [ [ 0, 4, "hello", 0, 5 ],
54 [ 5, 6, " ", 5, 6,
55 [ [ 5, "e2", kTodo, kTodo, kOk ],
56 [ 6, "e2", kTodo, kTodo, kOk ] ]
57 ]
58 ]);
60 testTextAfterOffset(ids, BOUNDARY_WORD_START,
61 [ [ 0, 6, "", 6, 6 ] ]);
62 testTextAfterOffset(ids, BOUNDARY_WORD_END,
63 [ [ 0, 5, " ", 5, 6,
64 [ [ 5, "e2", kTodo, kTodo, kOk ] ]
65 ],
66 [ 6, 6, "", 6, 6 ]
67 ]);
69 // "hello all"
70 // __h__e__l__l__o__ __a__l__l__
71 // 0 1 2 3 4 5 6 7 8 9
72 ids = [ "i6", "d6", "e6", "t6" ];
73 testTextBeforeOffset(ids, BOUNDARY_WORD_START,
74 [ [ 0, 5, "", 0, 0 ],
75 [ 6, 9, "hello ", 0, 6 ]]);
76 testTextBeforeOffset(ids, BOUNDARY_WORD_END,
77 [ [ 0, 5, "", 0, 0 ],
78 [ 6, 9, "hello", 0, 5 ] ]);
80 testTextAtOffset(ids, BOUNDARY_WORD_START,
81 [ [ 0, 5, "hello ", 0, 6 ],
82 [ 6, 9, "all", 6, 9 ] ]);
83 testTextAtOffset(ids, BOUNDARY_WORD_END,
84 [ [ 0, 4, "hello", 0, 5 ],
85 [ 5, 9, " all", 5, 9 ] ]);
87 testTextAfterOffset(ids, BOUNDARY_WORD_START,
88 [ [ 0, 5, "all", 6, 9 ],
89 [ 6, 9, "", 9, 9 ] ]);
90 testTextAfterOffset(ids, BOUNDARY_WORD_END,
91 [ [ 0, 5, " all", 5, 9 ],
92 [ 6, 9, "", 9, 9 ] ]);
94 // "hello my friend"
95 // __h__e__l__l__o__ __m__y__ __f__r__i__e__n__d__
96 // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
97 ids = [ "i7", "d7", "e7", "t7" ];
98 testTextBeforeOffset(ids, BOUNDARY_WORD_START,
99 [ [ 0, 5, "", 0, 0 ],
100 [ 6, 8, "hello ", 0, 6 ],
101 [ 9, 15, "my ", 6, 9 ] ]);
102 testTextBeforeOffset(ids, BOUNDARY_WORD_END,
103 [ [ 0, 5, "", 0, 0 ],
104 [ 6, 8, "hello", 0, 5 ],
105 [ 9, 15, " my", 5, 8 ] ]);
107 testTextAtOffset(ids, BOUNDARY_WORD_START,
108 [ [ 0, 5, "hello ", 0, 6 ],
109 [ 6, 8, "my ", 6, 9 ],
110 [ 9, 15, "friend", 9, 15] ]);
111 testTextAtOffset(ids, BOUNDARY_WORD_END,
112 [ [ 0, 4, "hello", 0, 5 ],
113 [ 5, 7, " my", 5, 8 ],
114 [ 8, 15, " friend", 8, 15] ]);
116 testTextAfterOffset(ids, BOUNDARY_WORD_START,
117 [ [ 0, 5, "my ", 6, 9 ],
118 [ 6, 8, "friend", 9, 15 ],
119 [ 9, 15, "", 15, 15 ] ]);
120 testTextAfterOffset(ids, BOUNDARY_WORD_END,
121 [ [ 0, 5, " my", 5, 8 ],
122 [ 6, 8, " friend", 8, 15 ],
123 [ 9, 15, "", 15, 15 ] ]);
125 // "Brave Sir Robin ran"
126 // __B__r__a__v__e__ __S__i__r__ __ __R__o__b__i__n__ __ __ __r__a__n__
127 // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
128 ids = [ "i8", "d8", "e8", "t8" ];
129 testTextBeforeOffset(ids, BOUNDARY_WORD_START,
130 [ [ 0, 5, "", 0, 0 ],
131 [ 6, 10, "Brave ", 0, 6 ],
132 [ 11, 18, "Sir ", 6, 11 ],
133 [ 19, 22, "Robin ", 11, 19 ] ]);
134 testTextBeforeOffset(ids, BOUNDARY_WORD_END,
135 [ [ 0, 5, "", 0, 0 ],
136 [ 6, 9, "Brave", 0, 5 ],
137 [ 10, 16, " Sir", 5, 9 ],
138 [ 17, 22, " Robin", 9, 16 ] ]);
140 testTextAtOffset(ids, BOUNDARY_WORD_START,
141 [ [ 0, 5, "Brave ", 0, 6 ],
142 [ 6, 10, "Sir ", 6, 11 ],
143 [ 11, 18, "Robin ", 11, 19 ],
144 [ 19, 22, "ran", 19, 22 ] ]);
145 testTextAtOffset(ids, BOUNDARY_WORD_END,
146 [ [ 0, 4, "Brave", 0, 5 ],
147 [ 5, 8, " Sir", 5, 9 ],
148 [ 9, 15, " Robin", 9, 16 ],
149 [ 16, 22, " ran", 16, 22 ] ]);
151 testTextAfterOffset(ids, BOUNDARY_WORD_START,
152 [ [ 0, 5, "Sir ", 6, 11 ],
153 [ 6, 10, "Robin ", 11, 19 ],
154 [ 11, 18, "ran", 19, 22 ],
155 [ 19, 22, "", 22, 22 ] ]);
156 testTextAfterOffset(ids, BOUNDARY_WORD_END,
157 [ [ 0, 5, " Sir", 5, 9 ],
158 [ 6, 9, " Robin", 9, 16 ],
159 [ 10, 16, " ran", 16, 22 ],
160 [ 17, 22, "", 22, 22 ] ]);
162 // 'oneword
163 // '
164 // 'two words
165 // '
166 // __o__n__e__w__o__r__d__\n
167 // 0 1 2 3 4 5 6 7
168 // __\n
169 // 8
170 // __t__w__o__ __w__o__r__d__s__\n__
171 // 9 10 11 12 13 14 15 16 17 18 19
173 ids = ["ml_div1", "ml_divbr1", "ml_ediv1", "ml_edivbr1", "ml_t1"];
174 testTextBeforeOffset(ids, BOUNDARY_WORD_START,
175 [ [ 0, 8, "", 0, 0 ],
176 [ 9, 12, "oneword\n\n", 0, 9 ],
177 [ 13, 19, "two ", 9, 13 ] ]);
178 testTextBeforeOffset(ids, BOUNDARY_WORD_END,
179 [ [ 0, 7, "", 0, 0 ],
180 [ 8, 12, "oneword", 0, 7,
181 [ [ 8, "ml_divbr1", kTodo, kOk, kTodo ],
182 [ 8, "ml_edivbr1", kTodo, kOk, kTodo ],
183 [ 9, "ml_divbr1", kTodo, kOk, kTodo ],
184 [ 9, "ml_edivbr1", kTodo, kOk, kTodo ] ] ],
185 [ 13, 18, "\n\ntwo", 7, 12 ],
186 [ 19, 19, " words", 12, 18,
187 [ [ 19, "ml_divbr1", kTodo, kTodo, kTodo, ],
188 [ 19, "ml_edivbr1", kTodo, kTodo, kTodo, ] ] ]
189 ] );
191 testTextAtOffset(ids, BOUNDARY_WORD_START,
192 [ [ 0, 8, "oneword\n\n", 0, 9,
193 [ [ 7, "ml_divbr1", kTodo, kTodo, kTodo ],
194 [ 7, "ml_edivbr1", kTodo, kTodo, kTodo ],
195 [ 8, "ml_divbr1", kTodo, kTodo, kTodo ],
196 [ 8, "ml_edivbr1", kTodo, kTodo, kTodo ] ] ],
197 [ 9, 12, "two ", 9, 13 ],
198 [ 13, 19, "words\n", 13, 19 ] ]);
199 testTextAtOffset(ids, BOUNDARY_WORD_END,
200 [ [ 0, 6, "oneword", 0, 7 ],
201 [ 7, 11, "\n\ntwo", 7, 12 ],
202 [ 12, 17, " words", 12, 18 ],
203 [ 18, 19, "\n", 18, 19,
204 [ [ 18, "ml_divbr1", kTodo, kTodo, kOk ],
205 [ 18, "ml_edivbr1", kTodo, kTodo, kOk ],
206 [ 19, "ml_divbr1", kTodo, kTodo, kOk ],
207 [ 19, "ml_edivbr1", kTodo, kTodo, kOk ] ] ] ]);
209 testTextAfterOffset(ids, BOUNDARY_WORD_START,
210 [ [ 0, 8, "two ", 9, 13,
211 [ [ 7, "ml_divbr1", kTodo, kTodo, kTodo ],
212 [ 7, "ml_edivbr1", kTodo, kTodo, kTodo ],
213 [ 8, "ml_divbr1", kTodo, kTodo, kTodo ],
214 [ 8, "ml_edivbr1", kTodo, kTodo, kTodo ] ] ],
215 [ 9, 12, "words\n", 13, 19 ],
216 [ 13, 19, "", 19, 19 ] ]);
217 testTextAfterOffset(ids, BOUNDARY_WORD_END,
218 [ [ 0, 7, "\n\ntwo", 7, 12 ],
219 [ 8, 12, " words", 12, 18 ],
220 [ 13, 18, "\n", 18, 19,
221 [ [ 18, "ml_divbr1", kTodo, kTodo, kOk ],
222 [ 18, "ml_edivbr1", kTodo, kTodo, kOk ] ] ],
223 [ 19, 19, "", 19, 19 ] ]);
225 // a <a href="#">b</a>
226 // a *
227 testTextBeforeOffset("cntr_1", BOUNDARY_WORD_START,
228 [ [ 0, 1, "", 0, 0 ],
229 [ 2, 3, "a ", 0, 2 ] ]);
231 testTextAtOffset("cntr_1", BOUNDARY_WORD_START,
232 [ [ 0, 1, "a ", 0, 2 ],
233 [ 2, 3, kEmbedChar, 2, 3 ] ]);
234 testTextAfterOffset("cntr_1", BOUNDARY_WORD_START,
235 [ [ 0, 1, kEmbedChar, 2, 3 ],
236 [ 2, 3, "", 3, 3 ] ]);
238 SimpleTest.finish();
239 }
241 SimpleTest.waitForExplicitFinish();
242 addA11yLoadEvent(doTest);
243 </script>
244 </head>
245 <body>
247 <p id="display"></p>
248 <div id="content" style="display: none"></div>
249 <pre id="test">
250 </pre>
252 <input id="i1" value="hello"/>
253 <div id="d1">hello</div>
254 <div id="e1" contenteditable="true">hello</div>
255 <textarea id="t1">hello</textarea>
257 <input id="i2" value="hello "/>
258 <pre><div id="d2">hello </div></pre>
259 <div id="e2" contenteditable="true">hello </div>
260 <textarea id="t2">hello </textarea>
262 <input id="i6" value="hello all"/>
263 <div id="d6">hello all</div>
264 <div id="e6" contenteditable="true">hello all</div>
265 <textarea id="t6">hello all</textarea>
267 <input id="i7" value="hello my friend"/>
268 <div id="d7">hello my friend</div>
269 <div id="e7" contenteditable="true">hello my friend</div>
270 <textarea id="t7">hello my friend</textarea>
272 <input id="i8" value="Brave Sir Robin ran"/>
273 <pre>
274 <div id="d8">Brave Sir Robin ran</div>
275 <div id="e8" contenteditable="true">Brave Sir Robin ran</div>
276 </pre>
277 <textarea id="t8" cols="300">Brave Sir Robin ran</textarea>
279 <pre>
280 <div id="ml_div1">oneword
282 two words
283 </div>
284 <div id="ml_divbr1">oneword<br/><br/>two words<br/><br/></div>
285 <div id="ml_ediv1" contenteditable="true">oneword
287 two words
288 </div>
289 <div id="ml_edivbr1" contenteditable="true">oneword<br/><br/>two words<br/><br/></div>
290 <textarea id="ml_t1" cols="300">oneword
292 two words
293 </textarea>
294 </pre>
296 <div id="cntr_1">a <a href="#">b</a></div>
297 </body>
298 </html>