test_wordboundary.html (14205B)
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" /> 7 8 <script 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 14 <script type="application/javascript"> 15 function doTest() { 16 // "hello" 17 // __h__e__l__l__o__ 18 // 0 1 2 3 4 5 19 var ids = [ "i1", "d1", "e1", "t1" ]; 20 testTextBeforeOffset(ids, BOUNDARY_WORD_START, 21 [ [ 0, 5, "", 0, 0 ] ]); 22 testTextBeforeOffset(ids, BOUNDARY_WORD_END, 23 [ [ 0, 5, "", 0, 0 ] ]); 24 25 testTextAtOffset(ids, BOUNDARY_WORD_START, 26 [ [ 0, 5, "hello", 0, 5 ] ]); 27 testTextAtOffset(ids, BOUNDARY_WORD_END, 28 [ [ 0, 5, "hello", 0, 5 ] ]); 29 30 testTextAfterOffset(ids, BOUNDARY_WORD_START, 31 [ [ 0, 5, "", 5, 5 ] ]); 32 testTextAfterOffset(ids, BOUNDARY_WORD_END, 33 [ [ 0, 5, "", 5, 5 ] ]); 34 35 // "hello " 36 // __h__e__l__l__o__ __ 37 // 0 1 2 3 4 5 6 38 ids = [ "i2", "d2", "p2", "e2", "t2" ]; 39 testTextBeforeOffset(ids, BOUNDARY_WORD_START, 40 [ [ 0, 6, "", 0, 0 ] ]); 41 testTextBeforeOffset(ids, BOUNDARY_WORD_END, 42 [ [ 0, 5, "", 0, 0 ], 43 [ 6, 6, "hello", 0, 5 ], 44 ]); 45 46 testTextAtOffset(ids, BOUNDARY_WORD_START, 47 [ [ 0, 6, "hello ", 0, 6 ] ]); 48 testTextAtOffset(ids, BOUNDARY_WORD_END, 49 [ [ 0, 4, "hello", 0, 5 ], 50 [ 5, 6, " ", 5, 6 ], 51 ]); 52 53 testTextAfterOffset(ids, BOUNDARY_WORD_START, 54 [ [ 0, 6, "", 6, 6 ] ]); 55 testTextAfterOffset(ids, BOUNDARY_WORD_END, 56 [ [ 0, 5, " ", 5, 6 ], 57 [ 6, 6, "", 6, 6 ], 58 ]); 59 60 // "hello all" 61 // __h__e__l__l__o__ __a__l__l__ 62 // 0 1 2 3 4 5 6 7 8 9 63 ids = [ "i6", "d6", "e6", "t6" ]; 64 testTextBeforeOffset(ids, BOUNDARY_WORD_START, 65 [ [ 0, 5, "", 0, 0 ], 66 [ 6, 9, "hello ", 0, 6 ]]); 67 testTextBeforeOffset(ids, BOUNDARY_WORD_END, 68 [ [ 0, 5, "", 0, 0 ], 69 [ 6, 9, "hello", 0, 5 ] ]); 70 71 testTextAtOffset(ids, BOUNDARY_WORD_START, 72 [ [ 0, 5, "hello ", 0, 6 ], 73 [ 6, 9, "all", 6, 9 ] ]); 74 testTextAtOffset(ids, BOUNDARY_WORD_END, 75 [ [ 0, 4, "hello", 0, 5 ], 76 [ 5, 9, " all", 5, 9 ] ]); 77 78 testTextAfterOffset(ids, BOUNDARY_WORD_START, 79 [ [ 0, 5, "all", 6, 9 ], 80 [ 6, 9, "", 9, 9 ] ]); 81 testTextAfterOffset(ids, BOUNDARY_WORD_END, 82 [ [ 0, 5, " all", 5, 9 ], 83 [ 6, 9, "", 9, 9 ] ]); 84 85 // " hello all " (with whitespace collapsing) 86 // __h__e__l__l__o__ __a__l__l__ __ 87 // 0 1 2 3 4 5 6 7 8 9 10 88 ids = [ "d6a", "e6a" ]; 89 testTextBeforeOffset(ids, BOUNDARY_WORD_START, 90 [ [ 0, 5, "", 0, 0 ], 91 [ 6, 10, "hello ", 0, 6 ] ]); 92 testTextBeforeOffset(ids, BOUNDARY_WORD_END, 93 [ [ 0, 5, "", 0, 0 ], 94 [ 6, 9, "hello", 0, 5 ], 95 [ 10, 10, " all", 5, 9 ] ]); 96 97 testTextAtOffset(ids, BOUNDARY_WORD_START, 98 [ [ 0, 5, "hello ", 0, 6 ], 99 [ 6, 10, "all ", 6, 10 ] ]); 100 testTextAtOffset(ids, BOUNDARY_WORD_END, 101 [ [ 0, 4, "hello", 0, 5 ], 102 [ 5, 8, " all", 5, 9 ], 103 [ 9, 10, " ", 9, 10 ] ]); 104 105 testTextAfterOffset(ids, BOUNDARY_WORD_START, 106 [ [ 0, 5, "all ", 6, 10 ], 107 [ 6, 10, "", 10, 10 ] ]); 108 testTextAfterOffset(ids, BOUNDARY_WORD_END, 109 [ [ 0, 5, " all", 5, 9 ], 110 [ 6, 9, " ", 9, 10 ], 111 [ 10, 10, "", 10, 10 ] ]); 112 113 // "hello my friend" 114 // __h__e__l__l__o__ __m__y__ __f__r__i__e__n__d__ 115 // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 116 ids = [ "i7", "d7", "e7", "t7", "w7" ]; 117 testTextBeforeOffset(ids, BOUNDARY_WORD_START, 118 [ [ 0, 5, "", 0, 0 ], 119 [ 6, 8, "hello ", 0, 6 ], 120 [ 9, 15, "my ", 6, 9 ] ]); 121 testTextBeforeOffset(ids, BOUNDARY_WORD_END, 122 [ [ 0, 5, "", 0, 0 ], 123 [ 6, 8, "hello", 0, 5 ], 124 [ 9, 15, " my", 5, 8 ] ]); 125 126 testTextAtOffset(ids, BOUNDARY_WORD_START, 127 [ [ 0, 5, "hello ", 0, 6 ], 128 [ 6, 8, "my ", 6, 9 ], 129 [ 9, 15, "friend", 9, 15] ]); 130 testTextAtOffset(ids, BOUNDARY_WORD_END, 131 [ [ 0, 4, "hello", 0, 5 ], 132 [ 5, 7, " my", 5, 8 ], 133 [ 8, 15, " friend", 8, 15] ]); 134 135 testTextAfterOffset(ids, BOUNDARY_WORD_START, 136 [ [ 0, 5, "my ", 6, 9 ], 137 [ 6, 8, "friend", 9, 15 ], 138 [ 9, 15, "", 15, 15 ] ]); 139 testTextAfterOffset(ids, BOUNDARY_WORD_END, 140 [ [ 0, 5, " my", 5, 8 ], 141 [ 6, 8, " friend", 8, 15 ], 142 [ 9, 15, "", 15, 15 ] ]); 143 144 // "Brave Sir Robin ran" 145 // __B__r__a__v__e__ __S__i__r__ __ __R__o__b__i__n__ __ __ __r__a__n__ 146 // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 147 ids = [ "i8", "d8", "e8", "t8" ]; 148 testTextBeforeOffset(ids, BOUNDARY_WORD_START, 149 [ [ 0, 5, "", 0, 0 ], 150 [ 6, 10, "Brave ", 0, 6 ], 151 [ 11, 18, "Sir ", 6, 11 ], 152 [ 19, 22, "Robin ", 11, 19 ] ]); 153 testTextBeforeOffset(ids, BOUNDARY_WORD_END, 154 [ [ 0, 5, "", 0, 0 ], 155 [ 6, 9, "Brave", 0, 5 ], 156 [ 10, 16, " Sir", 5, 9 ], 157 [ 17, 22, " Robin", 9, 16 ] ]); 158 159 testTextAtOffset(ids, BOUNDARY_WORD_START, 160 [ [ 0, 5, "Brave ", 0, 6 ], 161 [ 6, 10, "Sir ", 6, 11 ], 162 [ 11, 18, "Robin ", 11, 19 ], 163 [ 19, 22, "ran", 19, 22 ] ]); 164 testTextAtOffset(ids, BOUNDARY_WORD_END, 165 [ [ 0, 4, "Brave", 0, 5 ], 166 [ 5, 8, " Sir", 5, 9 ], 167 [ 9, 15, " Robin", 9, 16 ], 168 [ 16, 22, " ran", 16, 22 ] ]); 169 170 testTextAfterOffset(ids, BOUNDARY_WORD_START, 171 [ [ 0, 5, "Sir ", 6, 11 ], 172 [ 6, 10, "Robin ", 11, 19 ], 173 [ 11, 18, "ran", 19, 22 ], 174 [ 19, 22, "", 22, 22 ] ]); 175 testTextAfterOffset(ids, BOUNDARY_WORD_END, 176 [ [ 0, 5, " Sir", 5, 9 ], 177 [ 6, 9, " Robin", 9, 16 ], 178 [ 10, 16, " ran", 16, 22 ], 179 [ 17, 22, "", 22, 22 ] ]); 180 181 // 'oneword 182 // ' 183 // 'two words 184 // ' 185 // __o__n__e__w__o__r__d__\n 186 // 0 1 2 3 4 5 6 7 187 // __\n 188 // 8 189 // __t__w__o__ __w__o__r__d__s__\n__ 190 // 9 10 11 12 13 14 15 16 17 18 19 191 192 ids = ["ml_div1", "ml_divbr1", "ml_ediv1", "ml_edivbr1", "ml_t1"]; 193 testTextBeforeOffset(ids, BOUNDARY_WORD_START, 194 [ [ 0, 8, "", 0, 0 ], 195 [ 9, 12, "oneword\n\n", 0, 9 ], 196 [ 13, 19, "two ", 9, 13 ] ]); 197 testTextBeforeOffset(ids, BOUNDARY_WORD_END, 198 [ [ 0, 7, "", 0, 0 ], 199 [ 8, 12, "oneword", 0, 7, 200 [ [ 8, "ml_divbr1", kOk, kOk, kOk ], 201 [ 8, "ml_edivbr1", kOk, kOk, kOk ], 202 [ 9, "ml_divbr1", kOk, kOk, kOk ], 203 [ 9, "ml_edivbr1", kOk, kOk, kOk ] ] ], 204 [ 13, 18, "\n\ntwo", 7, 12 ], 205 [ 19, 19, " words", 12, 18, 206 [ [ 19, "ml_divbr1", kOk, kOk, kOk ], 207 [ 19, "ml_edivbr1", kOk, kOk, kOk ] ] ], 208 ] ); 209 210 testTextAtOffset(ids, BOUNDARY_WORD_START, 211 [ [ 0, 8, "oneword\n\n", 0, 9 ], 212 [ 9, 12, "two ", 9, 13 ], 213 [ 13, 19, "words\n", 13, 19 ] ]); 214 testTextAtOffset(ids, BOUNDARY_WORD_END, 215 [ [ 0, 6, "oneword", 0, 7 ], 216 [ 7, 11, "\n\ntwo", 7, 12 ], 217 [ 12, 17, " words", 12, 18 ], 218 [ 18, 19, "\n", 18, 19, 219 [ [ 18, "ml_divbr1", kOk, kOk, kOk ], 220 [ 18, "ml_edivbr1", kOk, kOk, kOk ], 221 [ 19, "ml_divbr1", kOk, kOk, kOk ], 222 [ 19, "ml_edivbr1", kOk, kOk, kOk ] ] ] ]); 223 224 testTextAfterOffset(ids, BOUNDARY_WORD_START, 225 [ [ 0, 8, "two ", 9, 13 ], 226 [ 9, 12, "words\n", 13, 19 ], 227 [ 13, 19, "", 19, 19 ] ]); 228 testTextAfterOffset(ids, BOUNDARY_WORD_END, 229 [ [ 0, 7, "\n\ntwo", 7, 12 ], 230 [ 8, 12, " words", 12, 18 ], 231 [ 13, 18, "\n", 18, 19, 232 [ [ 18, "ml_divbr1", kOk, kOk, kOk ], 233 [ 18, "ml_edivbr1", kOk, kOk, kOk ] ] ], 234 [ 19, 19, "", 19, 19 ] ]); 235 236 // a <a href="#">b</a> 237 // a * 238 testTextBeforeOffset("cntr_1", BOUNDARY_WORD_START, 239 [ [ 0, 1, "", 0, 0 ], 240 [ 2, 3, "a ", 0, 2 ] ]); 241 242 testTextAtOffset("cntr_1", BOUNDARY_WORD_START, 243 [ [ 0, 1, "a ", 0, 2 ], 244 [ 2, 3, kEmbedChar, 2, 3 ] ]); 245 testTextAfterOffset("cntr_1", BOUNDARY_WORD_START, 246 [ [ 0, 1, kEmbedChar, 2, 3 ], 247 [ 2, 3, "", 3, 3 ] ]); 248 249 // Punctuation tests. 250 testTextAtOffset("punc_alone", BOUNDARY_WORD_START, [ 251 [ 0, 1, "a ", 0, 2 ], 252 [ 2, 4, "@@ ", 2, 5 ], 253 [ 5, 6, "b", 5, 6 ] 254 ]); 255 testTextAtOffset("punc_begin", BOUNDARY_WORD_START, [ 256 [ 0, 1, "a ", 0, 2 ], 257 [ 2, 5, "@@b ", 2, 6 ], 258 [ 6, 7, "c", 6, 7 ] 259 ]); 260 testTextAtOffset("punc_end", BOUNDARY_WORD_START, [ 261 [ 0, 1, "a ", 0, 2 ], 262 [ 2, 5, "b@@ ", 2, 6 ], 263 [ 6, 7, "c", 6, 7 ] 264 ]); 265 testTextAtOffset("punc_middle", BOUNDARY_WORD_START, [ 266 [ 0, 1, "a ", 0, 2 ], 267 [ 2, 4, "b@@", 2, 5 ], 268 [ 5, 6, "c ", 5, 7 ], 269 [ 7, 8, "d", 7, 8 ] 270 ]); 271 testTextAtOffset("punc_everywhere", BOUNDARY_WORD_START, [ 272 [ 0, 1, "a ", 0, 2 ], 273 [ 2, 6, "@@b@@", 2, 7 ], 274 [ 7, 10, "c@@ ", 7, 11 ], 275 [ 11, 12, "d", 11, 12 ] 276 ]); 277 278 // Multi-word embedded object test. 279 testTextAtOffset("multiword_embed", BOUNDARY_WORD_START, [ 280 [ 0, 1, "a ", 0, 2 ], 281 [ 2, 3, `${kEmbedChar} `, 2, 4, [ 282 // Word at offset 2 returns end offset 3, should be 4. 283 [ 2, "multiword_embed", kOk, kOk, kOk ] 284 ] ], 285 [ 4, 5, "b", 4, 5 ] 286 ]); 287 288 SimpleTest.finish(); 289 } 290 291 SimpleTest.waitForExplicitFinish(); 292 addA11yLoadEvent(doTest); 293 </script> 294 </head> 295 <body> 296 297 <p id="display"></p> 298 <div id="content" style="display: none"></div> 299 <pre id="test"> 300 </pre> 301 302 <input id="i1" value="hello"/> 303 <div id="d1">hello</div> 304 <div id="e1" contenteditable="true">hello</div> 305 <textarea id="t1">hello</textarea> 306 307 <input id="i2" value="hello "/> 308 <div id="d2"> hello </div> 309 <pre><div id="p2">hello </div></pre> 310 <div id="e2" contenteditable="true" style='white-space:pre'>hello </div> 311 <textarea id="t2">hello </textarea> 312 313 <input id="i6" value="hello all"/> 314 <div id="d6"> hello all</div> 315 <div id="e6" contenteditable="true">hello all</div> 316 <textarea id="t6">hello all</textarea> 317 318 <div id="d6a"> hello all </div> 319 <div id="e6a" contenteditable="true"> hello all </div> 320 321 <input id="i7" value="hello my friend"/> 322 <div id="d7"> hello my friend</div> 323 <div id="e7" contenteditable="true">hello my friend</div> 324 <textarea id="t7">hello my friend</textarea> 325 <div id="w7" style="width:1em"> hello my friend</div> 326 327 <input id="i8" value="Brave Sir Robin ran"/> 328 <pre> 329 <div id="d8">Brave Sir Robin ran</div> 330 <div id="e8" contenteditable="true">Brave Sir Robin ran</div> 331 </pre> 332 <textarea id="t8" cols="300">Brave Sir Robin ran</textarea> 333 334 <pre> 335 <div id="ml_div1">oneword 336 337 two words 338 </div> 339 <div id="ml_divbr1">oneword<br/><br/>two words<br/></div> 340 <div id="ml_ediv1" contenteditable="true">oneword 341 342 two words 343 </div> 344 <div id="ml_edivbr1" contenteditable="true">oneword<br/><br/>two words<br/></div> 345 <textarea id="ml_t1" cols="300">oneword 346 347 two words 348 </textarea> 349 </pre> 350 351 <div id="cntr_1">a <a href="#">b</a></div> 352 353 <p id="punc_alone">a @@ b</p> 354 <p id="punc_begin">a @@b c</p> 355 <p id="punc_end">a b@@ c</p> 356 <p id="punc_middle">a b@@c d</p> 357 <p id="punc_everywhere">a @@b@@c@@ d</p> 358 359 <p id="multiword_embed">a <a href="#">x y</a> b</p> 360 </body> 361 </html>