Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 76332a0

Browse filesBrowse 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
Copy full SHA for 76332a0

File tree

Expand file treeCollapse file tree

1 file changed

+91
-0
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

1 file changed

+91
-0
lines changed
Open diff view settings
Collapse file
+91Lines changed: 91 additions & 0 deletions
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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.