chromium/third_party/blink/web_tests/fast/xpath/xpath-iterator-result-should-mark-its-nodeset.html

<html><head>
    <script src="../../resources/gc.js"></script>
    <script>
        if (window.testRunner)
            testRunner.dumpAsText();

        var types = [
                      XPathResult.ORDERED_NODE_ITERATOR_TYPE,
                      XPathResult.UNORDERED_NODE_ITERATOR_TYPE
                    ];

        function test(type)
        {
            var doc, result;
            function initialize() {
              doc = (new DOMParser).parseFromString("<html><body><span></span></body></html>", "text/xml");
              doc.getElementsByTagName("span")[0].foo = "PASS";
              result = doc.evaluate("//span", doc.documentElement, null, type, null);
              doc = 0;
            }

            // Do initialization work in an inner function to avoid references
            // to objects remaining live on this function's stack frame
            // (http://crbug.com/595672/).
            initialize();
            gc();
            var console = document.getElementById("console");
            console.appendChild(document.createTextNode(result.iterateNext().foo));
            console.appendChild(document.createElement("br"));
        }

        function tests()
        {
            while (types.length) {
                test(types.pop());
            }
        }
    </script>
</head>
<body onload="tests()">
<div> Test for bug <a href="https://bugs.webkit.org/show_bug.cgi?id=34231">34231</a>: Nodes in XPathResult 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>