| <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> |