tor-browser

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

test_NodeIterator_mutations_3.html (4017B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4 <title>DOM Traversal: NodeIterator: Mutations (3/x)</title>
      5  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      6  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css">
      7 </head>
      8 <p id="display"></p>
      9 <div id="content" style="display: none">
     10  <span id=root><span id=B></span><span id=C></span><span id=D></span><span id=E><span id=E1><span id=E11></span></span></span></span>
     11 </div>
     12 <pre id="test">
     13 <script class="testbody" type="text/javascript">
     14  function removeNode(n) {
     15    n.remove();
     16  }
     17  var initInner = $('content').innerHTML;
     18  var content = $('content');
     19  
     20 
     21  function resetContent() {
     22    content.innerHTML = initInner;
     23    var checkIt = document.createNodeIterator(content, NodeFilter.SHOW_ELEMENT,
     24 				      testNodeFilter);
     25    var node;
     26    while ((node = checkIt.nextNode()) != null) {
     27      if (node.id) {
     28        window[node.id] = node;
     29      }
     30    }
     31  }
     32 
     33  function makeSpan(id) {
     34    var e = document.createElement('span');
     35    e.id = id;
     36    return e;
     37  }
     38 
     39  function testNodeFilter(n) {
     40    if (n.tagName == 'SPAN')
     41      return NodeFilter.FILTER_ACCEPT;
     42    return NodeFilter.FILTER_SKIP;
     43  }
     44 
     45  function checkseq(it, root, expect) {
     46    var checkIt = document.createNodeIterator(root, NodeFilter.SHOW_ELEMENT,
     47 				      testNodeFilter);
     48    var printedPointer = (it.referenceNode == undefined);
     49    var string = '';
     50    var node;
     51    while ((node = checkIt.nextNode()) != null) {
     52      if (!printedPointer && it.referenceNode == node) {
     53        printedPointer = true;
     54 var s = '[' + node.id + '] ';
     55          if (it.pointerBeforeReferenceNode)
     56            string += "* " + s;
     57          else
     58            string += s + "* ";
     59      } else {
     60        string += node.id + " ";
     61      }
     62    }
     63    is(string.slice(0, -1), expect, "sequence check");
     64  }
     65 
     66  resetContent();
     67  var it = document.createNodeIterator(E, NodeFilter.SHOW_ELEMENT,
     68                                       testNodeFilter);
     69  checkseq(it, root, "root B C D * [E] E1 E11");
     70 
     71  removeNode(C);
     72  checkseq(it, root, "root B D * [E] E1 E11");
     73 
     74  it.nextNode();
     75  removeNode(D);
     76  checkseq(it, root, "root B [E] * E1 E11");
     77 
     78  it.nextNode();
     79  removeNode(B);
     80  checkseq(it, root, "root E [E1] * E11");
     81 
     82  it.nextNode();
     83  checkseq(it, root, "root E E1 [E11] *");
     84 
     85  it.nextNode();
     86  checkseq(it, root, "root E E1 [E11] *");
     87 
     88  it.previousNode();
     89  it.previousNode();
     90  it.previousNode();
     91  it.previousNode();
     92  it.previousNode();
     93  checkseq(it, root, "root * [E] E1 E11");
     94 
     95  resetContent();
     96  it = document.createNodeIterator(E, NodeFilter.SHOW_ELEMENT,
     97                                   testNodeFilter);
     98  checkseq(it, root, "root B C D * [E] E1 E11");
     99 
    100  it.nextNode();
    101  it.nextNode();
    102  checkseq(it, root, "root B C D E [E1] * E11");
    103 
    104  it.previousNode();
    105  it.previousNode();
    106  checkseq(it, root, "root B C D * [E] E1 E11");
    107 
    108  removeNode(D);
    109  removeNode(B);
    110  checkseq(it, root, "root C * [E] E1 E11");
    111 
    112  n = makeSpan('n');
    113  root.insertBefore(n, E);
    114  checkseq(it, root, "root C n * [E] E1 E11");
    115 
    116  n2 = makeSpan('n2');
    117  root.insertBefore(n2, C);
    118  checkseq(it, root, "root n2 C n * [E] E1 E11");
    119 
    120  resetContent();
    121  it = document.createNodeIterator(E, NodeFilter.SHOW_ELEMENT,
    122                                   testNodeFilter);
    123  checkseq(it, root, "root B C D * [E] E1 E11");
    124 
    125  removeNode(root);
    126  checkseq(it, root, "root B C D * [E] E1 E11");
    127 
    128  removeNode(B);
    129  checkseq(it, root, "root C D * [E] E1 E11");
    130 
    131  removeNode(D);
    132  checkseq(it, root, "root C * [E] E1 E11");
    133 
    134  it.nextNode();
    135  it.nextNode();
    136  it.nextNode();
    137  checkseq(it, root, "root C E E1 [E11] *");
    138 
    139  removeNode(E1);
    140  checkseq(it, root, "root C [E] *");
    141  
    142  n = makeSpan('n');
    143  root.insertBefore(n, E);
    144  checkseq(it, root, "root C n [E] *");
    145  
    146  n2 = makeSpan('n2');
    147  E.appendChild(n2);
    148  checkseq(it, root, "root C n [E] * n2");
    149  
    150  it.nextNode();
    151  checkseq(it, root, "root C n E [n2] *");
    152 
    153  removeNode(E);
    154  checkseq(it, root, "root C n");
    155 
    156  
    157 </script>
    158 </pre>
    159 </body>
    160 </html>