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

        var types = [ XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
                      XPathResult.ORDERED_NODE_SNAPSHOT_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)
        {
            var result = document.evaluate("//div", document.documentElement, null, type, null);
            result.snapshotItem(0).foo = "PASS";
            document.body.removeChild(result.snapshotItem(0));
            gc();
            var console = document.getElementById("console");
            console.appendChild(document.createTextNode(result.snapshotItem(0).foo));
            console.appendChild(document.createElement("br"));
        }

        function tests()
        {
            while (types.length) {
                test(types.pop());
            }
        }
    </script>
</head>
<body onload="tests()">
<div></div>
<div></div>
<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>
