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 index 0000000000..7bb2eb3292 --- /dev/null +++ b/test/mjsunit/test-event-emitter-modify-in-emit.js @@ -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);