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/lib/readline.js b/lib/readline.js index da533ebf0d564b..17794a7bfca319 100644 --- a/lib/readline.js +++ b/lib/readline.js @@ -145,7 +145,7 @@ Interface.prototype.question = function question(query, options, cb) { }; options.signal.addEventListener('abort', onAbort, { once: true }); const cleanup = () => { - options.signal.removeEventListener(onAbort); + options.signal.removeEventListener('abort', onAbort); }; const originalCb = cb; cb = typeof cb === 'function' ? (answer) => { 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' + }); +}