107 lines
2.5 KiB
HTML
107 lines
2.5 KiB
HTML
<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.testRunner)
|
|
testRunner.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, []);
|
|
}
|
|
];
|
|
|
|
for (var i = 0; i < tests.length; ++i)
|
|
tests[i]();
|
|
</script>
|