<p>
This test verifies that DOM nodes are not garbage collected as long as a node in the
tree is referenced from JavaScript.
</p>
<pre id="console"></pre>
<script>
function log(s)
{
document.getElementById("console").appendChild(document.createTextNode(s + "\n"));
}
function shouldBeNode(a, aDescription)
{
if (!(a instanceof Node)) {
log("FAIL: " + aDescription + " should be a Node but instead is " + a + ".");
return;
}
log("PASS: " + aDescription + " should be a Node and is.");
}
(function () {
if (window.testRunner) {
testRunner.dumpAsText();
}
(function() {
// Try to create an orphan tree by removal.
var p = document.createElement("p");
document.body.appendChild(p);
p.innerHTML ='<div><span id="span"><br></span></div>';
var span = document.getElementById("span");
p.innerHTML = "";
gc();
shouldBeNode(span, "span");
shouldBeNode(span.parentNode, "span.parentNode");
shouldBeNode(span.firstChild, "span.firstChild");
})();
(function() {
// Try to create an orphan tree by insertion.
var p = document.createElement("p");
var span = document.createElement("span");
p.appendChild(span);
p = null;
gc();
shouldBeNode(span, "span");
shouldBeNode(span.parentNode, "span.parentNode");
})();
})();
</script>