blob: 9125cc3b371eb581b833acd37e3ba156d32e334d [file] [log] [blame]
<p>This page tests for a bogus invalidation of a node's event listeners. If the
test passes, you'll see a PASS message below.</p>
<pre id="console"></pre>
<div id="div"></div>
<script>
function $(id)
{
return document.getElementById(id);
}
function log(s)
{
$('console').appendChild(document.createTextNode(s + '\n'));
}
function shouldBe(aDescription, a, b)
{
if (a === b) {
log("PASS: " + aDescription + " should be " + b + " and is.");
return;
}
log("FAIL: " + aDescription + " should be " + b + " but instead is " + a);
}
function allocate() {
for (var i = 0; i < 5000; ++i)
new Object;
}
(function () {
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.waitUntilDone();
}
var listener = function () { return "click"; };
// Fill the heap with garbage...
var a = []
for (var i = 0; i < 5000; ++i)
a[a.length] = new Object;
// ...followed by a DOM node wrapper.
$("div");
a = null;
// Move the allocation pointer up to the DOM node wrapper.
allocate();
// Make a new DOM node wrapper, and add an event listener.
$("div").onclick = listener;
// Collect the original DOM node wrapper.
for (var i = 0; i < 3; ++i)
allocate();
// See if the listener is still registered.
shouldBe("div.onclick", div.onclick, listener);
if (window.testRunner)
testRunner.notifyDone();
})();
</script>