<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test.js"></script>
</head>
<body>
<script>
var testCases = [["div0", "div1", "div2"],
["div0", "div2", "div1"],
["div1", "div0", "div2"],
["div1", "div2", "div0"],
["div2", "div0", "div1"],
["div2", "div1", "div0"]];
var rootDiv = document.createElement("div");
document.body.appendChild(rootDiv);
var testHtml = "<div id='div0-parent'><div id='div0'><div id='div0-child'></div></div><div id='div1-parent'><div id='div1'><div id='div1-child'></div></div><div id='div2-parent'><div id='div2'><div id='div2-child'></div></div></div></div></div>";
testCases.forEach(function (test) {
var divX, divY, divZ;
debug("=== Initial state ===");
rootDiv.innerHTML = testHtml;
divX = document.getElementById(test[0]);
divY = document.getElementById(test[1]);
divZ = document.getElementById(test[2]);
checkParentAndChildAlive(divX, test[0]);
checkParentAndChildAlive(divY, test[1]);
checkParentAndChildAlive(divZ, test[2]);
debug("=== After clearing innerHTML ===");
rootDiv.innerHTML = testHtml;
divX = document.getElementById(test[0]);
divY = document.getElementById(test[1]);
divZ = document.getElementById(test[2]);
rootDiv.innerHTML = "";
checkParentAndChildAlive(divX, test[0]);
checkParentAndChildAlive(divY, test[1]);
checkParentAndChildAlive(divZ, test[2]);
debug("=== After clearing innerHTML and divX ===");
rootDiv.innerHTML = testHtml;
divX = document.getElementById(test[0]);
divY = document.getElementById(test[1]);
divZ = document.getElementById(test[2]);
rootDiv.innerHTML = "";
divX = null;
gc();
checkParentAndChildAlive(divY, test[1]);
checkParentAndChildAlive(divZ, test[2]);
debug("=== After clearing innerHTML, divX and divY ===");
rootDiv.innerHTML = testHtml;
divX = document.getElementById(test[0]);
divY = document.getElementById(test[1]);
divZ = document.getElementById(test[2]);
rootDiv.innerHTML = "";
divX = null;
divY = null;
gc();
checkParentAndChildAlive(divZ, test[2]);
debug("=== After clearing innerHTML, divX, divY and divZ ===");
rootDiv.innerHTML = testHtml;
divX = document.getElementById(test[0]);
divY = document.getElementById(test[1]);
divZ = document.getElementById(test[2]);
rootDiv.innerHTML = "";
divX = null;
divY = null;
divZ = null;
});
function checkParentAndChildAlive(div, name) {
globalDiv = div;
shouldBeEqualToString('globalDiv.id', name);
shouldBeEqualToString('globalDiv.parentNode.id', name + "-parent");
shouldBeEqualToString('globalDiv.firstChild.id', name + "-child");
globalDiv = null;
gc();
}
var successfullyParsed = true;
</script>
</body>
</html>