<html><head>
    <script>
        if (window.testRunner)
            testRunner.dumpAsText();

        // ANY_ORDERED_NODE_TYPE should be the last item in the array so that
        // there is only one node that can match (thus it does not tie us to any
        // specific ordering in the nodeset).
        var types = [ XPathResult.FIRST_ORDERED_NODE_TYPE, XPathResult.ANY_UNORDERED_NODE_TYPE ];

        function gc()
        {
            if (window.GCController)
                return GCController.collect();

            for (var i = 0; i < 10000; i++) { // > force garbage collection (FF requires about 9K allocations before a collect)
                var s = new String("abc");
            }
        }

        function test(type)
        {
            document.getElementsByTagName("span")[0].foo = "PASS";
            var result = document.evaluate("//span", document.documentElement, null, type, null);
            document.body.removeChild(document.getElementsByTagName("span")[0]);
            gc();
            var console = document.getElementById("console");
            console.appendChild(document.createTextNode(result.singleNodeValue.foo));
            console.appendChild(document.createElement("br"));
        }

        function tests()
        {
            while (types.length) {
                test(types.pop());
            }
        }
    </script>
</head>
<body onload="tests()">
<span></span>
<span></span>
<div> Test for bug <a href="https://bugs.webkit.org/show_bug.cgi?id=34231">34231</a>: Nodes in XPath result snapshots should keep JS wrappers alive.</div>
<div> For this test to PASS you should see 2 PASS below.</div><br>
<div id="console"></div>
</body></html>