| <p>This page tests event listener fire order for a few objects that had it wrong in the past.</p> |
| <p>If the test passes, you'll see a series of PASS messages below.</p> |
| |
| <pre id="console"></pre> |
| |
| <div id="div"></div> |
| |
| <script> |
| if (window.layoutTestController) |
| layoutTestController.dumpAsText(); |
| |
| function log(s) |
| { |
| document.getElementById("console").appendChild(document.createTextNode(s + "\n")); |
| } |
| |
| var result; |
| |
| function reset() |
| { |
| result = [ ]; |
| } |
| |
| function f1() |
| { |
| result.push("f1"); |
| } |
| |
| function f2(event) |
| { |
| result.push("f2"); |
| event.target.removeEventListener(event.type, f3, false); // Removed: should not fire. |
| event.target.addEventListener(event.type, f4, false); // Added after dispatch began: should not fire. |
| } |
| |
| function f3() |
| { |
| result.push("f3"); |
| } |
| |
| function f4() |
| { |
| result.push("f4"); |
| } |
| |
| function reportResult(name, expected) |
| { |
| var passed = true; |
| var end = result.length > expected.length ? result.length : expected.length; |
| for (var i = 0; i < end; ++i) { |
| if (result[i] != expected[i]) { |
| log("FAIL: " + name + " result[" + i + "] should be " + expected[i] + " but instead is " + result[i] + "."); |
| passed = false; |
| } |
| } |
| if (passed) |
| log("PASS: result should be " + expected + " and is."); |
| } |
| |
| var tests = [ |
| function testDiv() |
| { |
| reset(); |
| var x = document.getElementById("div"); |
| x.addEventListener("click", f1, false); |
| x.onclick = f2; |
| x.addEventListener("click", f3, false); |
| |
| var event = document.createEvent("MouseEvent"); |
| event.initMouseEvent("click", true, true, document.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, document); |
| x.dispatchEvent(event); |
| |
| reportResult(arguments.callee.name, [ "f1", "f2" ]); |
| }, |
| |
| function testXHR() |
| { |
| reset(); |
| var x = new XMLHttpRequest; |
| x.addEventListener("readystatechange", f1, false); |
| x.onreadystatechange = f2; |
| x.addEventListener("readystatechange", f3, false); |
| |
| x.open("GET", "resources/does-not-exist"); |
| |
| reportResult(arguments.callee.name, [ "f1", "f2" ]); |
| }, |
| |
| function testXHRUpload() |
| { |
| reset(); |
| var x = new XMLHttpRequest; |
| x.upload.addEventListener("abort", f1, false); |
| x.upload.onabort = f2; |
| x.upload.addEventListener("abort", f3, false); |
| |
| x.open("POST", "resources/does-not-exist"); |
| x.abort(); |
| |
| reportResult(arguments.callee.name, [ "f1", "f2" ]); |
| } |
| ]; |
| |
| for (var i = 0; i < tests.length; ++i) |
| tests[i](); |
| </script> |