summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--std/node/events.ts16
-rw-r--r--std/node/events_test.ts19
2 files changed, 28 insertions, 7 deletions
diff --git a/std/node/events.ts b/std/node/events.ts
index cb9acb0f5..fee715f0c 100644
--- a/std/node/events.ts
+++ b/std/node/events.ts
@@ -279,13 +279,15 @@ export default class EventEmitter {
return this;
}
- if (eventName && this._events.has(eventName)) {
- const listeners = (this._events.get(eventName) as Array<
- Function | WrappedFunction
- >).slice(); // Create a copy; We use it AFTER it's deleted.
- this._events.delete(eventName);
- for (const listener of listeners) {
- this.emit("removeListener", eventName, listener);
+ if (eventName) {
+ if (this._events.has(eventName)) {
+ const listeners = (this._events.get(eventName) as Array<
+ Function | WrappedFunction
+ >).slice(); // Create a copy; We use it AFTER it's deleted.
+ this._events.delete(eventName);
+ for (const listener of listeners) {
+ this.emit("removeListener", eventName, listener);
+ }
}
} else {
const eventList: [string | symbol] = this.eventNames();
diff --git a/std/node/events_test.ts b/std/node/events_test.ts
index 3c3628e3a..4b47686f4 100644
--- a/std/node/events_test.ts
+++ b/std/node/events_test.ts
@@ -246,6 +246,25 @@ test({
});
test({
+ name: "Provide a non-existent event to removeAllListeners will do nothing",
+ fn() {
+ const testEmitter = new EventEmitter();
+ testEmitter.on("event", shouldNeverBeEmitted);
+ testEmitter.on("event", shouldNeverBeEmitted);
+ testEmitter.on("other event", shouldNeverBeEmitted);
+ testEmitter.on("other event", shouldNeverBeEmitted);
+ testEmitter.once("other event", shouldNeverBeEmitted);
+ assertEquals(testEmitter.listenerCount("event"), 2);
+ assertEquals(testEmitter.listenerCount("other event"), 3);
+
+ testEmitter.removeAllListeners("non-existent");
+
+ assertEquals(testEmitter.listenerCount("event"), 2);
+ assertEquals(testEmitter.listenerCount("other event"), 3);
+ },
+});
+
+test({
name: "Remove individual listeners, which can also be chained",
fn() {
const testEmitter = new EventEmitter();