Skip to content

Commit 76332a0

Browse files
benjamingrdanielleadams
authored andcommitted
events: port some wpt tests
PR-URL: #33621 Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent 92bdfd1 commit 76332a0

File tree

1 file changed

+91
-0
lines changed

1 file changed

+91
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
// Flags: --expose-internals --no-warnings
2+
'use strict';
3+
4+
const common = require('../common');
5+
6+
const {
7+
Event,
8+
EventTarget,
9+
} = require('internal/event_target');
10+
11+
const {
12+
strictEqual,
13+
} = require('assert');
14+
15+
// Manually ported from: wpt@dom/events/AddEventListenerOptions-once.html
16+
{
17+
const document = new EventTarget();
18+
let invoked_once = false;
19+
let invoked_normal = false;
20+
function handler_once() {
21+
invoked_once = true;
22+
}
23+
24+
function handler_normal() {
25+
invoked_normal = true;
26+
}
27+
28+
document.addEventListener('test', handler_once, { once: true });
29+
document.addEventListener('test', handler_normal);
30+
document.dispatchEvent(new Event('test'));
31+
strictEqual(invoked_once, true, 'Once handler should be invoked');
32+
strictEqual(invoked_normal, true, 'Normal handler should be invoked');
33+
34+
invoked_once = false;
35+
invoked_normal = false;
36+
document.dispatchEvent(new Event('test'));
37+
strictEqual(invoked_once, false, 'Once handler shouldn\'t be invoked again');
38+
strictEqual(invoked_normal, true, 'Normal handler should be invoked again');
39+
document.removeEventListener('test', handler_normal);
40+
}
41+
42+
43+
{
44+
// Manually ported from AddEventListenerOptions-once.html
45+
const document = new EventTarget();
46+
let invoked_count = 0;
47+
function handler() {
48+
invoked_count++;
49+
}
50+
document.addEventListener('test', handler, { once: true });
51+
document.addEventListener('test', handler);
52+
document.dispatchEvent(new Event('test'));
53+
strictEqual(invoked_count, 1, 'The handler should only be added once');
54+
55+
invoked_count = 0;
56+
document.dispatchEvent(new Event('test'));
57+
strictEqual(invoked_count, 0, 'The handler was added as a once listener');
58+
59+
invoked_count = 0;
60+
document.addEventListener('test', handler, { once: true });
61+
document.removeEventListener('test', handler);
62+
document.dispatchEvent(new Event('test'));
63+
strictEqual(invoked_count, 0, 'The handler should have been removed');
64+
}
65+
66+
{
67+
// TODO(benjamingr) fix EventTarget recursion
68+
common.skip('EventTarget recursion is currently broken');
69+
const document = new EventTarget();
70+
let invoked_count = 0;
71+
function handler() {
72+
invoked_count++;
73+
if (invoked_count === 1)
74+
document.dispatchEvent(new Event('test'));
75+
}
76+
document.addEventListener('test', handler, { once: true });
77+
document.dispatchEvent(new Event('test'));
78+
strictEqual(invoked_count, 1, 'Once handler should only be invoked once');
79+
80+
invoked_count = 0;
81+
function handler2() {
82+
invoked_count++;
83+
if (invoked_count === 1)
84+
document.addEventListener('test', handler2, { once: true });
85+
if (invoked_count <= 2)
86+
document.dispatchEvent(new Event('test'));
87+
}
88+
document.addEventListener('test', handler2, { once: true });
89+
document.dispatchEvent(new Event('test'));
90+
strictEqual(invoked_count, 2, 'Once handler should only be invoked once');
91+
}

0 commit comments

Comments
 (0)