<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title>DOM Traversal: NodeIterator: Basics Backwards</title>
  <script type="text/javascript"> <![CDATA[
    function doTest() {
      if (window.testRunner) testRunner.dumpAsText();
      var iterator = document.createNodeIterator(document, NodeFilter.SHOW_ALL, null, false);
      var expected = new Array(9, // document
                               1, // html
                               3, 1, // head
                               3, 1, 3, // title
                               3, 1, 3, 4, // script and CDATA block
                               3, 3, 1, // body
                               3, 1, 3, // pre
                               3, // </body>
                               3, 8, // <!-- -->
                               3, 7, // <? ?>,
                               3, 4, 3); // CDATA
      var found = new Array();

      // walk document
      var node;
      while (node = iterator.nextNode());
      while (node = iterator.previousNode())
        found.unshift(node.nodeType);

      // check results
      var errors = 0;
      var s = '';
      var length = (found.length > expected.length) ? found.length : expected.length;
      s += 'EXPECTED  FOUND\n';
      for (var i = 0; i < length; i += 1) {
        s += '  ' + (expected[i] ? expected[i] : '-') +
      '         ' + (found[i] ? found[i] : '-');
        if (found[i] != expected[i]) {
          s += '      MISMATCH';
          errors += 1;
        }
        s += '\n';
      }
      var p = document.getElementsByTagNameNS('http://www.w3.org/1999/xhtml', 'pre')[0];
      if (errors)
        p.firstChild.data = 'FAIL: ' + errors + ' errors found:\n\n' + s;
      else
        p.firstChild.data = 'PASS';
    }
  ]]></script>
 </head>
 <body onload="doTest()">
  <pre id="result">FAIL: Script failed to run.</pre>
 </body>
 <!-- some more nodes to test this: -->
 <?test node?>
 <![CDATA[ ]]>
</html>