• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Flags: --no-warnings --expose-internals --experimental-abortcontroller
2'use strict';
3const common = require('../common');
4const {
5  setMaxListeners,
6  EventEmitter
7} = require('events');
8const assert = require('assert');
9const { MessageChannel } = require('worker_threads');
10const { EventTarget } = require('internal/event_target');
11
12common.expectWarning({
13  MaxListenersExceededWarning: [
14    ['Possible EventTarget memory leak detected. 3 foo listeners added to ' +
15     'EventTarget. Use events.setMaxListeners() ' +
16     'to increase limit'],
17    ['Possible EventTarget memory leak detected. 3 foo listeners added to ' +
18     '[MessagePort [EventTarget]]. ' +
19     'Use events.setMaxListeners() to increase ' +
20     'limit'],
21    ['Possible EventTarget memory leak detected. 3 foo listeners added to ' +
22     '[MessagePort [EventTarget]]. ' +
23     'Use events.setMaxListeners() to increase ' +
24     'limit'],
25    ['Possible EventTarget memory leak detected. 3 foo listeners added to ' +
26     '[AbortSignal]. ' +
27     'Use events.setMaxListeners() to increase ' +
28     'limit'],
29  ],
30  ExperimentalWarning: [[
31    'AbortController is an experimental feature. This feature could change ' +
32    'at any time',
33  ]]
34});
35
36
37{
38  const et = new EventTarget();
39  setMaxListeners(2, et);
40  et.addEventListener('foo', () => {});
41  et.addEventListener('foo', () => {});
42  et.addEventListener('foo', () => {});
43}
44
45{
46  // No warning emitted because prior limit was only for that
47  // one EventTarget.
48  const et = new EventTarget();
49  et.addEventListener('foo', () => {});
50  et.addEventListener('foo', () => {});
51  et.addEventListener('foo', () => {});
52}
53
54{
55  const mc = new MessageChannel();
56  setMaxListeners(2, mc.port1);
57  mc.port1.addEventListener('foo', () => {});
58  mc.port1.addEventListener('foo', () => {});
59  mc.port1.addEventListener('foo', () => {});
60}
61
62{
63  // Set the default for newly created EventTargets
64  setMaxListeners(2);
65  const mc = new MessageChannel();
66  mc.port1.addEventListener('foo', () => {});
67  mc.port1.addEventListener('foo', () => {});
68  mc.port1.addEventListener('foo', () => {});
69
70  const ac = new AbortController();
71  ac.signal.addEventListener('foo', () => {});
72  ac.signal.addEventListener('foo', () => {});
73  ac.signal.addEventListener('foo', () => {});
74}
75
76{
77  // It works for EventEmitters also
78  const ee = new EventEmitter();
79  setMaxListeners(2, ee);
80  assert.strictEqual(ee.getMaxListeners(), 2);
81}
82