• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright Joyent, Inc. and other Node contributors.
2//
3// Permission is hereby granted, free of charge, to any person obtaining a
4// copy of this software and associated documentation files (the
5// "Software"), to deal in the Software without restriction, including
6// without limitation the rights to use, copy, modify, merge, publish,
7// distribute, sublicense, and/or sell copies of the Software, and to permit
8// persons to whom the Software is furnished to do so, subject to the
9// following conditions:
10//
11// The above copyright notice and this permission notice shall be included
12// in all copies or substantial portions of the Software.
13//
14// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
17// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20// USE OR OTHER DEALINGS IN THE SOFTWARE.
21
22'use strict';
23
24require('../common');
25const assert = require('assert');
26const events = require('events');
27
28function listener() {}
29
30function listener2() {}
31
32function listener3() {
33  return 0;
34}
35
36function listener4() {
37  return 1;
38}
39
40{
41  const ee = new events.EventEmitter();
42  ee.on('foo', listener);
43  const fooListeners = ee.listeners('foo');
44  assert.deepStrictEqual(ee.listeners('foo'), [listener]);
45  ee.removeAllListeners('foo');
46  assert.deepStrictEqual(ee.listeners('foo'), []);
47  assert.deepStrictEqual(fooListeners, [listener]);
48}
49
50{
51  const ee = new events.EventEmitter();
52  ee.on('foo', listener);
53  const eeListenersCopy = ee.listeners('foo');
54  assert.deepStrictEqual(eeListenersCopy, [listener]);
55  assert.deepStrictEqual(ee.listeners('foo'), [listener]);
56  eeListenersCopy.push(listener2);
57  assert.deepStrictEqual(ee.listeners('foo'), [listener]);
58  assert.deepStrictEqual(eeListenersCopy, [listener, listener2]);
59}
60
61{
62  const ee = new events.EventEmitter();
63  ee.on('foo', listener);
64  const eeListenersCopy = ee.listeners('foo');
65  ee.on('foo', listener2);
66  assert.deepStrictEqual(ee.listeners('foo'), [listener, listener2]);
67  assert.deepStrictEqual(eeListenersCopy, [listener]);
68}
69
70{
71  const ee = new events.EventEmitter();
72  ee.once('foo', listener);
73  assert.deepStrictEqual(ee.listeners('foo'), [listener]);
74}
75
76{
77  const ee = new events.EventEmitter();
78  ee.on('foo', listener);
79  ee.once('foo', listener2);
80  assert.deepStrictEqual(ee.listeners('foo'), [listener, listener2]);
81}
82
83{
84  const ee = new events.EventEmitter();
85  ee._events = undefined;
86  assert.deepStrictEqual(ee.listeners('foo'), []);
87}
88
89{
90  class TestStream extends events.EventEmitter {}
91  const s = new TestStream();
92  assert.deepStrictEqual(s.listeners('foo'), []);
93}
94
95{
96  const ee = new events.EventEmitter();
97  ee.on('foo', listener);
98  const wrappedListener = ee.rawListeners('foo');
99  assert.strictEqual(wrappedListener.length, 1);
100  assert.strictEqual(wrappedListener[0], listener);
101  assert.notStrictEqual(wrappedListener, ee.rawListeners('foo'));
102  ee.once('foo', listener);
103  const wrappedListeners = ee.rawListeners('foo');
104  assert.strictEqual(wrappedListeners.length, 2);
105  assert.strictEqual(wrappedListeners[0], listener);
106  assert.notStrictEqual(wrappedListeners[1], listener);
107  assert.strictEqual(wrappedListeners[1].listener, listener);
108  assert.notStrictEqual(wrappedListeners, ee.rawListeners('foo'));
109  ee.emit('foo');
110  assert.strictEqual(wrappedListeners.length, 2);
111  assert.strictEqual(wrappedListeners[1].listener, listener);
112}
113
114{
115  const ee = new events.EventEmitter();
116  ee.once('foo', listener3);
117  ee.on('foo', listener4);
118  const rawListeners = ee.rawListeners('foo');
119  assert.strictEqual(rawListeners.length, 2);
120  assert.strictEqual(rawListeners[0](), 0);
121  const rawListener = ee.rawListeners('foo');
122  assert.strictEqual(rawListener.length, 1);
123  assert.strictEqual(rawListener[0](), 1);
124}
125