Add test: modifying event listeners during callback.
authorMichael Stillwell <mjs@beebo.org>
Tue, 9 Feb 2010 22:32:52 +0000 (22:32 +0000)
committerRyan Dahl <ry@tinyclouds.org>
Tue, 9 Feb 2010 22:47:37 +0000 (14:47 -0800)
test/mjsunit/test-event-emitter-modify-in-emit.js [new file with mode: 0644]

diff --git a/test/mjsunit/test-event-emitter-modify-in-emit.js b/test/mjsunit/test-event-emitter-modify-in-emit.js
new file mode 100644 (file)
index 0000000..7bb2eb3
--- /dev/null
@@ -0,0 +1,32 @@
+process.mixin(require("./common"));
+var events = require('events');
+
+var callbacks_called = [ ];
+
+var e = new events.EventEmitter();
+
+function callback1() {
+    callbacks_called.push("callback1");
+    e.addListener("foo", callback2);
+    e.removeListener("foo", callback1);
+}
+
+function callback2() {
+    callbacks_called.push("callback2");
+    e.removeListener("foo", callback2);
+}
+
+e.addListener("foo", callback1);
+assert.equal(1, e.listeners("foo").length);
+
+e.emit("foo");
+assert.equal(1, e.listeners("foo").length);
+assert.deepEqual(["callback1"], callbacks_called);
+
+e.emit("foo");
+assert.equal(0, e.listeners("foo").length);
+assert.deepEqual(["callback1", "callback2"], callbacks_called);
+
+e.emit("foo");
+assert.equal(0, e.listeners("foo").length);
+assert.deepEqual(["callback1", "callback2"], callbacks_called);