events: improve Event compatibility

This fixes `Event` constructor to improve `Event Web API`
compatibility.

The test added was written by referring to
`wpt@dom/events/Event-constructors.any.js`.

Signed-off-by: Daeyeon Jeong daeyeon.dev@gmail.com

PR-URL: https://github.com/nodejs/node/pull/43461
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: LiviaMedeiros <livia@cirno.name>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
Daeyeon Jeong
2022-07-08 17:12:13 +09:00
committed by GitHub
parent 141052d15e
commit 3f7f62f6bc
2 changed files with 32 additions and 5 deletions

View File

@@ -95,13 +95,11 @@ class Event {
* composed?: boolean,
* }} [options]
*/
constructor(type, options = null) {
constructor(type, options = kEmptyObject) {
if (arguments.length === 0)
throw new ERR_MISSING_ARGS('type');
validateObject(options, 'options', {
allowArray: true, allowFunction: true, nullable: true,
});
const { cancelable, bubbles, composed } = { ...options };
validateObject(options, 'options');
const { bubbles, cancelable, composed } = options;
this.#cancelable = !!cancelable;
this.#bubbles = !!bubbles;
this.#composed = !!composed;

View File

@@ -0,0 +1,29 @@
'use strict';
require('../common');
const { test, assert_equals, assert_array_equals } =
require('../common/wpt').harness;
// Source: https://github.com/web-platform-tests/wpt/blob/6cef1d2087d6a07d7cc6cee8cf207eec92e27c5f/dom/events/Event-constructors.any.js#L91-L112
test(function() {
const called = [];
const ev = new Event('Xx', {
get cancelable() {
called.push('cancelable');
return false;
},
get bubbles() {
called.push('bubbles');
return true;
},
get sweet() {
called.push('sweet');
return 'x';
},
});
assert_array_equals(called, ['bubbles', 'cancelable']);
assert_equals(ev.type, 'Xx');
assert_equals(ev.bubbles, true);
assert_equals(ev.cancelable, false);
assert_equals(ev.sweet, undefined);
});