Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
80529 views
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
var common = require('./common');
23
var assert = require('assert');
24
var events = require('../');
25
26
var after_checks = [];
27
after(function() {
28
for (var i=0 ; i<after_checks.length ; ++i) {
29
after_checks[i]();
30
}
31
});
32
33
function expect(expected) {
34
var actual = [];
35
after_checks.push(function() {
36
assert.deepEqual(actual.sort(), expected.sort());
37
});
38
39
function listener(name) {
40
actual.push(name)
41
}
42
return common.mustCall(listener, expected.length);
43
}
44
45
function listener() {}
46
47
var e1 = new events.EventEmitter();
48
e1.on('foo', listener);
49
e1.on('bar', listener);
50
e1.on('baz', listener);
51
e1.on('baz', listener);
52
var fooListeners = e1.listeners('foo');
53
var barListeners = e1.listeners('bar');
54
var bazListeners = e1.listeners('baz');
55
e1.on('removeListener', expect(['bar', 'baz', 'baz']));
56
e1.removeAllListeners('bar');
57
e1.removeAllListeners('baz');
58
assert.deepEqual(e1.listeners('foo'), [listener]);
59
assert.deepEqual(e1.listeners('bar'), []);
60
assert.deepEqual(e1.listeners('baz'), []);
61
// after calling removeAllListeners,
62
// the old listeners array should stay unchanged
63
assert.deepEqual(fooListeners, [listener]);
64
assert.deepEqual(barListeners, [listener]);
65
assert.deepEqual(bazListeners, [listener, listener]);
66
// after calling removeAllListeners,
67
// new listeners arrays are different from the old
68
assert.notEqual(e1.listeners('bar'), barListeners);
69
assert.notEqual(e1.listeners('baz'), bazListeners);
70
71
var e2 = new events.EventEmitter();
72
e2.on('foo', listener);
73
e2.on('bar', listener);
74
// expect LIFO order
75
e2.on('removeListener', expect(['foo', 'bar', 'removeListener']));
76
e2.on('removeListener', expect(['foo', 'bar']));
77
e2.removeAllListeners();
78
console.error(e2);
79
assert.deepEqual([], e2.listeners('foo'));
80
assert.deepEqual([], e2.listeners('bar'));
81
82