From 6c21ba05752c6d645c891fa8d90781f943f0f74c Mon Sep 17 00:00:00 2001 From: blairzhao111 Date: Tue, 9 Jun 2020 21:07:25 +0800 Subject: fix(std/node): emitter.removeAllListeners (#5583) When given a non-registered eventName to emitter.removeAllListeners(eventName), current code would remove all listeners instead of silently skip, which is not ideal. --- std/node/events_test.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'std/node/events_test.ts') 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 @@ -245,6 +245,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() { -- cgit v1.2.3