<html>
<head>
<script language="JavaScript">
if (window.testRunner)
    testRunner.dumpAsText();

function log(message) {
    var console = document.getElementById("console");
    var li = document.createElement("li");
    var text = document.createTextNode(message);
    li.appendChild(text);
    console.appendChild(li);
}

function iteratorTest() {
    log("NodeIterator: testing nextNode() (5 should be null)");
    var iterator = document.createNodeIterator(divB, NodeFilter.SHOW_ELEMENT, null, false);
    iterator.root = divB;
    for (i=0; i < 4; i++)
        log(iterator.nextNode());

    log("NodeIterator: testing previousNode() (7 should be null)");
    iterator = document.createNodeIterator(divB, NodeFilter.SHOW_ELEMENT, null, false);
    log(iterator.previousNode());
    
    log("TreeWalker: testing nextNode() (11 should be null)");
    iterator = document.createTreeWalker(divB, NodeFilter.SHOW_ELEMENT, null, false);
    for (i=0; i < 3; i++)
        log(iterator.nextNode());

    log("TreeWalker: testing previousNode() (13 should be null)");
    iterator = document.createTreeWalker(divB, NodeFilter.SHOW_ELEMENT, null, false);
    log(iterator.previousNode());
}
</script>
</head>

<body>
<div id="divA">
This test checks that the NodeIterator and TreeWalker functions do not go past the root element that they are supposed to stay within.
<div id="divB">
<div id="divC">
</div>
<div id="divD">
</div>

</div>
</div>

<ol id="console" > </ol>

<script>
iteratorTest();
</script>

</body>

</html>
