diff --git a/lib/internal/event_target.js b/lib/internal/event_target.js index a684c270ceba11..99988a3dcd6fc5 100644 --- a/lib/internal/event_target.js +++ b/lib/internal/event_target.js @@ -71,10 +71,10 @@ const isTrusted = ObjectGetOwnPropertyDescriptor({ }, 'isTrusted').get; class Event { - constructor(type, options) { + constructor(type, options = null) { if (arguments.length === 0) throw new ERR_MISSING_ARGS('type'); - if (options != null) + if (options !== null) validateObject(options, 'options'); const { cancelable, bubbles, composed } = { ...options }; this[kCancelable] = !!cancelable; diff --git a/test/parallel/test-eventtarget.js b/test/parallel/test-eventtarget.js index 786cbc65f3371b..accacb8a328c03 100644 --- a/test/parallel/test-eventtarget.js +++ b/test/parallel/test-eventtarget.js @@ -414,6 +414,7 @@ let asyncTest = Promise.resolve(); } { + // Event Statics strictEqual(Event.NONE, 0); strictEqual(Event.CAPTURING_PHASE, 1); strictEqual(Event.AT_TARGET, 2); @@ -424,6 +425,8 @@ let asyncTest = Promise.resolve(); strictEqual(e.eventPhase, Event.AT_TARGET); }), { once: true }); target.dispatchEvent(new Event('foo')); + // Event is a function + strictEqual(Event.length, 1); } { @@ -485,3 +488,32 @@ let asyncTest = Promise.resolve(); eventTarget.dispatchEvent(event); strictEqual(event.target, eventTarget); } +{ + // Event target exported keys + const eventTarget = new EventTarget(); + deepStrictEqual(Object.keys(eventTarget), []); + deepStrictEqual(Object.getOwnPropertyNames(eventTarget), []); + const parentKeys = Object.keys(Object.getPrototypeOf(eventTarget)).sort(); + const keys = ['addEventListener', 'dispatchEvent', 'removeEventListener']; + deepStrictEqual(parentKeys, keys); +} +{ + // Subclassing + class SubTarget extends EventTarget {} + const target = new SubTarget(); + target.addEventListener('foo', common.mustCall()); + target.dispatchEvent(new Event('foo')); +} +{ + // Test event order + const target = new EventTarget(); + let state = 0; + target.addEventListener('foo', common.mustCall(() => { + strictEqual(state, 0); + state++; + })); + target.addEventListener('foo', common.mustCall(() => { + strictEqual(state, 1); + })); + target.dispatchEvent(new Event('foo')); +}