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