60 lines
1.4 KiB
HTML
60 lines
1.4 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
|
<html>
|
|
<head>
|
|
<script src="../../resources/js-test-pre.js"></script>
|
|
</head>
|
|
<body>
|
|
<script>
|
|
function TestMutation(remover, removee, result)
|
|
{
|
|
var report = [];
|
|
|
|
var node = document.createElement("button");
|
|
var eventType = "click";
|
|
document.body.appendChild(node);
|
|
|
|
var listeners = [
|
|
function() { mutateList(0); },
|
|
function() { mutateList(1); },
|
|
function() { mutateList(2); }
|
|
];
|
|
|
|
listeners.forEach(function(listener) { node.addEventListener(eventType, listener, false); });
|
|
|
|
node.click();
|
|
document.body.removeChild(node);
|
|
|
|
var log = "listener " + remover + " removing listener " + removee;
|
|
|
|
if (report.join(" ") == result)
|
|
testPassed(log);
|
|
else
|
|
testFailed(log);
|
|
|
|
function mutateList(me)
|
|
{
|
|
if (remover == me)
|
|
node.removeEventListener(eventType, listeners[removee], false);
|
|
report.push(me);
|
|
}
|
|
}
|
|
|
|
description("Tests that event list mutation preserves the order of event firing.");
|
|
|
|
debug("self-removal:");
|
|
TestMutation(0, 0, "0 1 2");
|
|
TestMutation(1, 1, "0 1 2");
|
|
TestMutation(2, 2, "0 1 2");
|
|
|
|
debug("successor removal:");
|
|
TestMutation(0, 1, "0 2");
|
|
TestMutation(0, 2, "0 1");
|
|
|
|
debug("predecessor removal:");
|
|
TestMutation(2, 0, "0 1 2");
|
|
TestMutation(2, 1, "0 1 2");
|
|
</script>
|
|
<script src="../../resources/js-test-post.js"></script>
|
|
</body>
|
|
</html>
|