tor-browser

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

test_textnode_split_in_selection.html (7265B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <!--
      4 https://bugzilla.mozilla.org/show_bug.cgi?id=803924
      5 -->
      6 <head>
      7  <meta charset="utf-8">
      8  <title>Test for Bug 803924</title>
      9  <script src="/tests/SimpleTest/SimpleTest.js"></script>
     10  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
     11 </head>
     12 <body>
     13 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=803924">Mozilla Bug 803924</a>
     14 <p id="display"></p>
     15 <div id="content" style="display: none">
     16  
     17 </div>
     18 <pre id="test">
     19 <script type="application/javascript">
     20 
     21 /** Test for Bug 803924 */
     22 
     23 var sel = document.getSelection();
     24 var flush = true;
     25 var dry = true;
     26 var run = "";
     27 var empty_range;
     28 var empty_first_text_range;
     29 var empty_last_text_range;
     30 var full_range;
     31 
     32 function check(range, expected, test)
     33 {
     34  is(""+range, expected, test);
     35  is(""+empty_range, "", "empty range test after: "+test);
     36  is(""+empty_first_text_range, "", "empty first text range test after: "+test);
     37  if (empty_last_text_range) is(""+empty_last_text_range, "", "empty last text range test after: "+test);
     38  is(""+full_range, full_range.startContainer.textContent, "full range test after: "+test);
     39 }
     40 
     41 function newDiv()
     42 {
     43  var div = document.createElement('div');
     44  for (var i = 0; i < arguments.length; ++i) {
     45    div.appendChild(document.createTextNode(arguments[i]));
     46  }
     47  document.body.appendChild(div)
     48  empty_range = document.createRange();
     49  empty_range.setStart(div,0);
     50  empty_range.setEnd(div,0);
     51  var firstTextNode = div.childNodes[0];
     52  var lastTextNode = div.childNodes[div.childNodes.length - 1];
     53  empty_first_text_range = document.createRange();
     54  empty_first_text_range.setStart(firstTextNode,0);
     55  empty_first_text_range.setEnd(firstTextNode,0);
     56  empty_last_text_range = null;
     57  if (firstTextNode != lastTextNode) {
     58    empty_last_text_range = document.createRange();
     59    empty_last_text_range.setStart(lastTextNode,0);
     60    empty_last_text_range.setEnd(lastTextNode,0);
     61  }
     62  full_range = document.createRange();
     63  full_range.setStart(div,0);
     64  full_range.setEnd(div,div.childNodes.length);
     65  return div;
     66 }
     67 
     68 function selEnd(div,child,index,split,s)
     69 {
     70  var start = div.childNodes[child];
     71  var r = document.createRange();
     72  sel.addRange(r);
     73  r.setStart(start, index);
     74  r.setEnd(div, div.childNodes.length);
     75  if (!dry) start.splitText(split);
     76  check(r,s,run+" selEnd "+child+","+index+","+split);
     77 }
     78 
     79 function selStart(div,child,index,split,s)
     80 {
     81  if (flush) document.body.getClientRects();
     82  var start = div.childNodes[child];
     83  var r = document.createRange();
     84  sel.addRange(r);
     85  r.setStart(div, 0);
     86  r.setEnd(start, index);
     87  if (!dry) start.splitText(split);
     88  check(r,s,run+" selStart "+child+","+index+","+split);
     89 }
     90 
     91 function selMiddleStart(div,child,index,split,s)
     92 {
     93  if (flush) document.body.getClientRects();
     94  var start = div.childNodes[child];
     95  var r = document.createRange();
     96  sel.addRange(r);
     97  r.setStart(div, 1);
     98  r.setEnd(start, index);
     99  if (!dry) start.splitText(split);
    100  check(r,s,run+" selMiddleStart "+child+","+index+","+split);
    101 }
    102 
    103 function selMiddleEnd(div,child,index,split,s)
    104 {
    105  if (flush) document.body.getClientRects();
    106  var start = div.childNodes[child];
    107  var r = document.createRange();
    108  sel.addRange(r);
    109  r.setStart(start, index);
    110  r.setEnd(div, 2);
    111  if (!dry) start.splitText(split);
    112  check(r,s,run+" selMiddleEnd "+child+","+index+","+split);
    113 }
    114 
    115 function splitBefore(div,child,index,split,s)
    116 {
    117  if (flush) document.body.getClientRects();
    118  var start = div.childNodes[child];
    119  var r = document.createRange();
    120  sel.addRange(r);
    121  r.setStart(div, 1);
    122  r.setEnd(start, index);
    123  if (!dry) div.childNodes[0].splitText(split);
    124  check(r,s,run+" splitBefore "+child+","+index+","+split);
    125 }
    126 
    127 function runTests(s)
    128 {
    129  run = s+":";
    130  selEnd(newDiv('111'), 0,0,0,'111');
    131  selEnd(newDiv('111'), 0,0,1,'111');
    132  selEnd(newDiv('111'), 0,0,3,'111');
    133  selEnd(newDiv(''), 0,0,0,'');
    134  selEnd(newDiv('111'), 0,1,0,'11');
    135  selEnd(newDiv('111'), 0,2,1,'1');
    136  selEnd(newDiv('111'), 0,1,3,'11');
    137  selEnd(newDiv('111','222'), 0,1,0,'11222');
    138  selEnd(newDiv('111','222'), 0,2,1,'1222');
    139  selEnd(newDiv('111','222'), 0,1,3,'11222');
    140  selEnd(newDiv('111','222'), 1,1,0,'22');
    141  selEnd(newDiv('111','222'), 1,2,1,'2');
    142  selEnd(newDiv('','222'), 1,1,1,'22');
    143  selEnd(newDiv('','222'), 0,0,0,'222');
    144  selEnd(newDiv('111',''), 0,1,0,'11');
    145  selEnd(newDiv('111','222'), 1,1,3,'22');
    146  selEnd(newDiv('111','222','333'), 1,1,0,'22333');
    147  selEnd(newDiv('111','222','333'), 1,2,1,'2333');
    148  selEnd(newDiv('111','222','333'), 1,1,3,'22333');
    149  selEnd(newDiv('111','222',''), 1,1,3,'22');
    150  selEnd(newDiv('111','','333'), 0,1,3,'11333');
    151 
    152  selStart(newDiv('111'), 0,0,0,'');
    153  selStart(newDiv('111'), 0,0,1,'');
    154  selStart(newDiv('111'), 0,0,3,'');
    155  selStart(newDiv('111'), 0,1,0,'1');
    156  selStart(newDiv('111'), 0,2,1,'11');
    157  selStart(newDiv('111'), 0,1,3,'1');
    158  selStart(newDiv(''), 0,0,0,'');
    159  selStart(newDiv('111','222'), 0,1,0,'1');
    160  selStart(newDiv('111','222'), 0,2,1,'11');
    161  selStart(newDiv('111','222'), 0,1,3,'1');
    162  selStart(newDiv('111','222'), 1,1,0,'1112');
    163  selStart(newDiv('111','222'), 1,2,1,'11122');
    164  selStart(newDiv('111','222'), 1,1,3,'1112');
    165  selStart(newDiv('','222'), 1,1,2,'2');
    166  selStart(newDiv('','222'), 0,0,0,'');
    167  selStart(newDiv('111',''), 1,0,0,'111');
    168  selStart(newDiv('111','222','333'), 1,1,0,'1112');
    169  selStart(newDiv('111','222','333'), 1,2,1,'11122');
    170  selStart(newDiv('111','222','333'), 1,1,3,'1112');
    171  selStart(newDiv('111','','333'), 1,0,0,'111');
    172  selStart(newDiv('111','222',''), 1,1,3,'1112');
    173 
    174  selMiddleStart(newDiv('111','222','333'), 1,1,0,'2');
    175  selMiddleStart(newDiv('111','222','333'), 1,2,1,'22');
    176  selMiddleStart(newDiv('111','222','333'), 1,1,3,'2');
    177  selMiddleStart(newDiv('111','222','333'), 2,1,0,'2223');
    178  selMiddleStart(newDiv('111','222','333'), 2,2,1,'22233');
    179  selMiddleStart(newDiv('111','222','333'), 2,1,3,'2223');
    180  selMiddleStart(newDiv('111','','333'), 2,1,2,'3');
    181  selMiddleStart(newDiv('111','','333'), 1,0,0,'');
    182 
    183  selMiddleEnd(newDiv('111','222','333'), 0,1,0,'11222');
    184  selMiddleEnd(newDiv('111','222','333'), 0,2,1,'1222');
    185  selMiddleEnd(newDiv('111','222','333'), 0,1,3,'11222');
    186  selMiddleEnd(newDiv('111','222','333'), 1,1,0,'22');
    187  selMiddleEnd(newDiv('111','222','333'), 1,2,1,'2');
    188  selMiddleEnd(newDiv('111','222','333'), 1,1,3,'22');
    189  selMiddleEnd(newDiv('111','','333'), 0,1,2,'11');
    190  selMiddleEnd(newDiv('111','','333'), 0,1,3,'11');
    191  selMiddleEnd(newDiv('111','','333'), 1,0,0,'');
    192 
    193  splitBefore(newDiv('111','222','333'), 1,1,0,'2');
    194  splitBefore(newDiv('111','222','333'), 1,2,1,'22');
    195  splitBefore(newDiv('111','222','333'), 1,1,3,'2');
    196  splitBefore(newDiv('111','222','333'), 2,1,0,'2223');
    197  splitBefore(newDiv('111','222','333'), 2,2,1,'22233');
    198  splitBefore(newDiv('111','222','333'), 2,1,3,'2223');
    199  splitBefore(newDiv('','222','333'), 1,1,0,'2');
    200  splitBefore(newDiv('','','333'), 1,0,0,'');
    201  splitBefore(newDiv('','222',''), 2,0,0,'222');
    202  splitBefore(newDiv('111','','333'), 2,1,2,'3');
    203 }
    204 
    205 function boom()
    206 {
    207  runTests("dry run");  // this is to verify the result strings without splitText()
    208  dry = false;
    209  flush = false;
    210  runTests("no flush");
    211  flush = true;
    212  runTests("flush");
    213 }
    214 
    215 boom();
    216 
    217 
    218 </script>
    219 </pre>
    220 </body>
    221 </html>