tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>