tor-browser

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

test_textnode_normalize_in_selection.html (6078B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <!--
      4 https://bugzilla.mozilla.org/show_bug.cgi?id=804784
      5 -->
      6 <head>
      7  <meta charset="utf-8">
      8  <title>Test for Bug 804784</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=804784">Mozilla Bug 804784</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 804784 */
     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,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) div.normalize();
     76  check(r,s,run+" selEnd "+child+","+index);
     77 }
     78 
     79 function selStart(div,child,index,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) div.normalize();
     88  check(r,s,run+" selStart "+child+","+index);
     89 }
     90 
     91 function selMiddleStart(div,child,index,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  div.normalize();
    100  check(r,s,run+" selMiddleStart "+child+","+index);
    101 }
    102 
    103 function selMiddleEnd(div,child,index,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) div.normalize();
    112  check(r,s,run+" selMiddleEnd "+child+","+index);
    113 }
    114 
    115 function mergeBefore(div,child,index,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.normalize();
    124  check(r,s,run+" mergeBefore "+child+","+index);
    125 }
    126 
    127 function runTests(s)
    128 {
    129  run = s+":";
    130  selEnd(newDiv('111'), 0,0,'111');
    131  selEnd(newDiv('111'), 0,1,'11');
    132  selEnd(newDiv('111'), 0,2,'1');
    133  selEnd(newDiv(''), 0,0,'');
    134  selEnd(newDiv('',''), 1,0,'');
    135  selEnd(newDiv('','',''), 1,0,'');
    136  selEnd(newDiv('111','222'), 0,1,'11222');
    137  selEnd(newDiv('111','222'), 0,2,'1222');
    138  selEnd(newDiv('111','222'), 1,1,'22');
    139  selEnd(newDiv('','222'), 1,2,'2');
    140  selEnd(newDiv('111',''), 0,1,'11');
    141  selEnd(newDiv('111','222'), 1,2,'2');
    142  selEnd(newDiv('111','222','333'), 1,1,'22333');
    143  selEnd(newDiv('111','222','333'), 1,2,'2333');
    144  selEnd(newDiv('111','','333'), 0,2,'1333');
    145  selEnd(newDiv('111','','333'), 1,0,'333');
    146  selEnd(newDiv('111','','333'), 2,0,'333');
    147 
    148  selStart(newDiv('111'), 0,0,'');
    149  selStart(newDiv('111'), 0,1,'1');
    150  selStart(newDiv('111'), 0,2,'11');
    151  selStart(newDiv(''), 0,0,'');
    152  selStart(newDiv('111','222'), 0,1,'1');
    153  selStart(newDiv('111','222'), 0,2,'11');
    154  selStart(newDiv('111','222'), 1,1,'1112');
    155  selStart(newDiv('111','222'), 1,2,'11122');
    156  selStart(newDiv('111',''), 1,0,'111');
    157  selStart(newDiv('111',''), 0,2,'11');
    158  selStart(newDiv('111','222','333'), 1,1,'1112');
    159  selStart(newDiv('111','222','333'), 1,2,'11122');
    160  selStart(newDiv('111','222','333'), 1,2,'11122');
    161  selStart(newDiv('111','','333'), 1,0,'111');
    162 
    163  selMiddleStart(newDiv('111','222','333'), 1,1,'2');
    164  selMiddleStart(newDiv('111','222','333'), 1,2,'22');
    165  selMiddleStart(newDiv('111','222','333'), 2,1,'2223');
    166  selMiddleStart(newDiv('111','222','333'), 2,2,'22233');
    167  selMiddleStart(newDiv('111','','333'), 2,2,'33');
    168  selMiddleStart(newDiv('111','222',''), 2,0,'222');
    169 
    170  selMiddleEnd(newDiv('111','222','333'), 0,1,'11222');
    171  selMiddleEnd(newDiv('111','222','333'), 0,2,'1222');
    172  selMiddleEnd(newDiv('111','222','333'), 1,1,'22');
    173  selMiddleEnd(newDiv('111','222','333'), 1,2,'2');
    174  selMiddleEnd(newDiv('111','','333'), 1,0,'');
    175  selMiddleEnd(newDiv('','222','333'), 0,0,'222');
    176 
    177  mergeBefore(newDiv('111','222'), 1,1,'2');
    178  mergeBefore(newDiv('111','222','333'), 1,2,'22');
    179  mergeBefore(newDiv('111','222','333'), 2,1,'2223');
    180  mergeBefore(newDiv('111','222','333'), 2,2,'22233');
    181  mergeBefore(newDiv('111','','333'), 2,0,'');
    182  mergeBefore(newDiv('111','','333'), 2,2,'33');
    183 }
    184 
    185 function boom()
    186 {
    187  runTests("dry run");  // this is to verify the result strings without normalize()
    188  dry = false;
    189  flush = false;
    190  runTests("no flush");
    191  flush = true;
    192  runTests("flush");
    193 }
    194 
    195 boom();
    196 
    197 
    198 </script>
    199 </pre>
    200 </body>
    201 </html>