<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title>DOM Traversal: NodeIterator: Removal of nodes that should have no effect</title>
  <!--
   This tests these cases that should have no effect:
    1. Remove a node unrelated to the reference node
    2. Remove an ancestor of the root node
    3. Remove the root node itself
    4. Remove descendant of reference node
  -->
  <script type="text/javascript"> <![CDATA[
    var errors = 0;
    var log = '';
    function doTest() {
      if (window.layoutTestController) layoutTestController.dumpAsText();
      var iterator = document.createNodeIterator(document.getElementById('root'), NodeFilter.SHOW_ALL, null, false);
      var root = document.getElementById('root');
      var A = document.getElementById('A');
      var B = document.getElementById('B');
      var C = document.getElementById('C');
      var D = document.getElementById('D');
      var E = document.getElementById('E');
      check(iterator.nextNode(), root);
      remove(document.getElementById('X'));
      check(iterator.nextNode(), A);
      remove(document.getElementById('Y'));
      check(iterator.nextNode(), B);
      remove(root);
      check(iterator.nextNode(), C);
      remove(E);
      check(iterator.nextNode(), D);
      if (errors)
        document.getElementById('result').firstChild.data = 'FAIL: ' + errors + ' errors:\n' + log;
      else
        document.getElementById('result').firstChild.data = 'PASS';
    }
    function check(a, b) {
      if (!a) {
        errors += 1;
        log += 'Found null but expected ' + b + ' (' + b.id + ').\n';
      } else if (a != b) {
        errors += 1;
        log += 'Found ' + a + ' (' + a.id + ') but expected ' + b + ' (' + b.id + ').\n';
      }
    }
    function remove(a) {
      if (!a) {
        errors += 1;
        log += 'Tried removing null node.\n';
      } else
      a.parentNode.removeChild(a);
    }
  ]]></script>
 </head>
 <body onload="doTest()">
  <pre id="result">FAIL: Script did not complete.</pre>
  <p><span id="X"></span><span id="Y"><span id="root"><span id="A"><span id="B"><span id="C"><span id="D"><span id="E"></span></span></span></span></span></span></span></p>
 </body>
</html>