From 6860e135609a014fd6b062b33cdb13c668e0a073 Mon Sep 17 00:00:00 2001 From: Deokjin Kim Date: Tue, 29 Nov 2022 13:34:11 +0900 Subject: [PATCH 1/4] lib: check number of arguments in `EventTarget`'s function For now, addEventListener() only checks number of arguments. removeEventListener() and dispatchEvent() also need checking number of arguments. --- lib/internal/event_target.js | 4 ++++ test/parallel/test-eventtarget.js | 34 +++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/lib/internal/event_target.js b/lib/internal/event_target.js index c0347d79d6cd3e..863c1c6ea8bd01 100644 --- a/lib/internal/event_target.js +++ b/lib/internal/event_target.js @@ -636,6 +636,8 @@ class EventTarget { removeEventListener(type, listener, options = kEmptyObject) { if (!isEventTarget(this)) throw new ERR_INVALID_THIS('EventTarget'); + if (arguments.length < 2) + throw new ERR_MISSING_ARGS('type', 'listener'); if (!validateEventListener(listener)) return; @@ -666,6 +668,8 @@ class EventTarget { dispatchEvent(event) { if (!isEventTarget(this)) throw new ERR_INVALID_THIS('EventTarget'); + if (arguments.length < 1) + throw new ERR_MISSING_ARGS('event'); if (!(event instanceof Event)) throw new ERR_INVALID_ARG_TYPE('event', 'Event', event); diff --git a/test/parallel/test-eventtarget.js b/test/parallel/test-eventtarget.js index b7898391a793b5..e2e57b45b4fc40 100644 --- a/test/parallel/test-eventtarget.js +++ b/test/parallel/test-eventtarget.js @@ -685,3 +685,37 @@ let asyncTest = Promise.resolve(); et.dispatchEvent(new Event('foo')); }); } + +{ + const et = new EventTarget(); + + throws(() => et.addEventListener(), { + code: 'ERR_MISSING_ARGS', + name: 'TypeError', + message: 'The "type" and "listener" arguments must be specified' + }); + + throws(() => et.addEventListener('foo'), { + code: 'ERR_MISSING_ARGS', + name: 'TypeError', + message: 'The "type" and "listener" arguments must be specified' + }); + + throws(() => et.removeEventListener(), { + code: 'ERR_MISSING_ARGS', + name: 'TypeError', + message: 'The "type" and "listener" arguments must be specified' + }); + + throws(() => et.removeEventListener('foo'), { + code: 'ERR_MISSING_ARGS', + name: 'TypeError', + message: 'The "type" and "listener" arguments must be specified' + }); + + throws(() => et.dispatchEvent(), { + code: 'ERR_MISSING_ARGS', + name: 'TypeError', + message: 'The "event" argument must be specified' + }); +} From cc631b25487b5d4bc9e3cc1e655aa0850ceceb45 Mon Sep 17 00:00:00 2001 From: Deokjin Kim Date: Fri, 2 Dec 2022 00:34:42 +0900 Subject: [PATCH 2/4] remove validating error message in test case --- test/parallel/test-eventtarget.js | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/test/parallel/test-eventtarget.js b/test/parallel/test-eventtarget.js index e2e57b45b4fc40..6f1a4d0de277cc 100644 --- a/test/parallel/test-eventtarget.js +++ b/test/parallel/test-eventtarget.js @@ -691,31 +691,26 @@ let asyncTest = Promise.resolve(); throws(() => et.addEventListener(), { code: 'ERR_MISSING_ARGS', - name: 'TypeError', - message: 'The "type" and "listener" arguments must be specified' + name: 'TypeError' }); throws(() => et.addEventListener('foo'), { code: 'ERR_MISSING_ARGS', - name: 'TypeError', - message: 'The "type" and "listener" arguments must be specified' + name: 'TypeError' }); throws(() => et.removeEventListener(), { code: 'ERR_MISSING_ARGS', - name: 'TypeError', - message: 'The "type" and "listener" arguments must be specified' + name: 'TypeError' }); throws(() => et.removeEventListener('foo'), { code: 'ERR_MISSING_ARGS', - name: 'TypeError', - message: 'The "type" and "listener" arguments must be specified' + name: 'TypeError' }); throws(() => et.dispatchEvent(), { code: 'ERR_MISSING_ARGS', - name: 'TypeError', - message: 'The "event" argument must be specified' + name: 'TypeError' }); } From a53c721929324b528163f223ec7a48301d974505 Mon Sep 17 00:00:00 2001 From: Deokjin Kim Date: Fri, 2 Dec 2022 08:04:52 +0900 Subject: [PATCH 3/4] Update test/parallel/test-eventtarget.js Co-authored-by: Antoine du Hamel --- test/parallel/test-eventtarget.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-eventtarget.js b/test/parallel/test-eventtarget.js index 6f1a4d0de277cc..0ae4ead0f8823a 100644 --- a/test/parallel/test-eventtarget.js +++ b/test/parallel/test-eventtarget.js @@ -691,7 +691,7 @@ let asyncTest = Promise.resolve(); throws(() => et.addEventListener(), { code: 'ERR_MISSING_ARGS', - name: 'TypeError' + name: 'TypeError', }); throws(() => et.addEventListener('foo'), { From 6cdded5955ec08e26d80da73d4f28b3c20ecd362 Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Fri, 2 Dec 2022 00:06:46 +0100 Subject: [PATCH 4/4] Apply suggestions from code review --- test/parallel/test-eventtarget.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/parallel/test-eventtarget.js b/test/parallel/test-eventtarget.js index 0ae4ead0f8823a..f6208a3b8b8844 100644 --- a/test/parallel/test-eventtarget.js +++ b/test/parallel/test-eventtarget.js @@ -696,21 +696,21 @@ let asyncTest = Promise.resolve(); throws(() => et.addEventListener('foo'), { code: 'ERR_MISSING_ARGS', - name: 'TypeError' + name: 'TypeError', }); throws(() => et.removeEventListener(), { code: 'ERR_MISSING_ARGS', - name: 'TypeError' + name: 'TypeError', }); throws(() => et.removeEventListener('foo'), { code: 'ERR_MISSING_ARGS', - name: 'TypeError' + name: 'TypeError', }); throws(() => et.dispatchEvent(), { code: 'ERR_MISSING_ARGS', - name: 'TypeError' + name: 'TypeError', }); }