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