<!DOCTYPE HTML>
<html>
<!--
Test adapted from http://mxr.mozilla.org/mozilla-central/source/content/base/test/test_bug559526.html

https://bugzilla.mozilla.org/show_bug.cgi?id=559526
-->
<head>
  <title>Test for Bug 559526</title>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=559526">Mozilla Bug 559526</a>
<p id="display"></p>
<div id="content" style="display: none">
  
</div>
<pre id="test">
<div id="nodes" style="display:none">
  <div id="child1"></div>
  <div id="child2"></div>

  <div id="child3"></div>
  <div id="child4"></div>
  <div id="child5"></div>
  <div id="child6"></div>
  <div id="child7"></div>
  <div id="child8"></div>
</div>
<script type="application/javascript">

if (window.testRunner)
  testRunner.dumpAsText();

/** Test for Bug 559526 **/

var it;
var recurse = false;
var testCount = 0;
function filter(node) {
  if (node.id == "child3" && ! recurse) {
    recurse = true;
    var ex = null;
    try {
      var foo = it.nextNode();
    } catch(e) {
      ex = e;
    }
    ++testCount;
    console.log("Should have thrown an exception: " + ex);
    recurse = false;
  }
  return NodeFilter.FILTER_ACCEPT;
}

(function testNodeIterator() {

  it = document.createNodeIterator(
    document.getElementById("nodes"),
    NodeFilter.SHOW_ELEMENT,
    filter,
    false
  );
  while (it.nextNode());
})();

(function testTreeWalker() {
  it = document.createTreeWalker(
    document.getElementById("nodes"),
    NodeFilter.SHOW_ELEMENT,
    filter,
    false
  );
  while(it.nextNode());

  it = document.createTreeWalker(
    document.getElementById("nodes"),
    NodeFilter.SHOW_ELEMENT,
    filter,
    false
  );
  it.firstChild();
  while(it.nextSibling());

  it = document.createTreeWalker(
    document.getElementById("nodes"),
    NodeFilter.SHOW_ELEMENT,
    filter,
    false
  );
  it.lastChild();
  while(it.previousSibling());
})();

console.log("Should have tests 4 filter calls: " + testCount);
</script>
</pre>
</body>
</html>
