Skip to content

Commit

Permalink
Merge pull request #7 from unshiftio/gh-6
Browse files Browse the repository at this point in the history
EventEmitter#eventNames() and Symbol support
  • Loading branch information
3rd-Eden authored Nov 17, 2016
2 parents 82799bc + 2f5497b commit e6c1c41
Show file tree
Hide file tree
Showing 3 changed files with 102 additions and 13 deletions.
19 changes: 14 additions & 5 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ Ultron.prototype.once = function once(event, fn, context) {
*/
Ultron.prototype.remove = function remove() {
var args = arguments
, ee = this.ee
, event;

//
Expand All @@ -76,15 +77,23 @@ Ultron.prototype.remove = function remove() {
if (args.length === 1 && 'string' === typeof args[0]) {
args = args[0].split(/[, ]+/);
} else if (!args.length) {
args = [];
if (ee.eventNames) {
args = ee.eventNames();
} else if (ee._events) {
args = [];

for (event in this.ee._events) {
if (has.call(this.ee._events, event)) args.push(event);
for (event in ee._events) {
if (has.call(ee._events, event)) args.push(event);
}

if (Object.getOwnPropertySymbols) {
args = args.concat(Object.getOwnPropertySymbols(ee._events));
}
}
}

for (var i = 0; i < args.length; i++) {
var listeners = this.ee.listeners(args[i]);
var listeners = ee.listeners(args[i]);

for (var j = 0; j < listeners.length; j++) {
event = listeners[j];
Expand All @@ -101,7 +110,7 @@ Ultron.prototype.remove = function remove() {
delete event.__ultron;
}

this.ee.removeListener(args[i], event);
ee.removeListener(args[i], event);
}
}

Expand Down
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@
"author": "Arnout Kazemier",
"license": "MIT",
"devDependencies": {
"assume": "1.3.x",
"eventemitter3": "1.1.x",
"assume": "1.4.x",
"eventemitter3": "1.2.x",
"istanbul": "0.4.x",
"mocha": "2.4.x",
"pre-commit": "1.1.x"
Expand Down
92 changes: 86 additions & 6 deletions test.js
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,7 @@ describe('Ultron', function () {
assume('__ultron' in once).is.false();
assume('__ultron' in on).is.false();

ee.removeAllListeners();
ultron.destroy();

ee = new EE();
Expand Down Expand Up @@ -215,14 +216,12 @@ describe('Ultron', function () {
ultron.remove('foo');
assume(ee.listeners('foo').length).equals(1);
assume(ee.listeners('foo')[0]).equals(foo);
});

it('removes only our assigned `once` listeners from regular EE', function () {
var ee = new EE()
, ultron = new Ultron(ee);
ee.removeAllListeners();
ultron.destroy();

function foo() {}
function bar() {}
ee = new EE();
ultron = new Ultron(ee);

ee.once('foo', foo);
ultron.once('foo', bar);
Expand All @@ -237,6 +236,27 @@ describe('Ultron', function () {
function foo() {}
function bar() {}

assume(ultron.remove()).equals(ultron);

ultron.on('foo', foo);
ultron.on('bar', bar);

assume(ee.listeners('foo').length).equals(1);
assume(ee.listeners('bar').length).equals(1);

ultron.remove();

assume(ee.listeners('foo').length).equals(0);
assume(ee.listeners('bar').length).equals(0);

ee.removeAllListeners();
ultron.destroy();

ee = new EE();
ultron = new Ultron(ee);

assume(ultron.remove()).equals(ultron);

ultron.on('foo', foo);
ultron.on('bar', bar);

Expand Down Expand Up @@ -288,6 +308,66 @@ describe('Ultron', function () {
assume(ee.listeners('bar').length).equals(0);
assume(ee.listeners('baz').length).equals(1);
});

if ('undefined' !== typeof Symbol) it('works with ES6 symbols', function () {
var s = Symbol('s');

function foo() {}
function bar() {}
function baz() {}

ee.on(s, foo);
ultron.on(s, bar);
assume(ee.listeners(s).length).equals(2);

ultron.remove(s);
assume(ee.listeners(s).length).equals(1);
assume(ee.listeners(s)[0]).equals(foo);

ultron.once(s, bar);
assume(ee.listeners(s).length).equals(2);

ultron.remove(s);
assume(ee.listeners(s).length).equals(1);
assume(ee.listeners(s)[0]).equals(foo);

ultron.on(s, bar);
ultron.on(s, baz);
assume(ee.listeners(s).length).equals(3);

ultron.remove();
assume(ee.listeners(s).length).equals(1);
assume(ee.listeners(s)[0]).equals(foo);

ee.removeAllListeners();
ultron.destroy();

ee = new EE();
ultron = new Ultron(ee);

ee.on(s, foo);
ultron.on(s, bar);
assume(ee.listeners(s).length).equals(2);

ultron.remove(s);
assume(ee.listeners(s).length).equals(1);
assume(ee.listeners(s)[0]).equals(foo);

ultron.once(s, bar);
assume(ee.listeners(s).length).equals(2);

ultron.remove(s);
assume(ee.listeners(s).length).equals(1);
assume(ee.listeners(s)[0]).equals(foo);

ultron.on(s, bar);
ultron.on(s, baz);
assume(ee.listeners(s).length).equals(3);

ultron.remove();
assume(ee.listeners(s).length).equals(1);
assume(ee.listeners(s)[0]).equals(foo);
});
});

describe('#destroy', function () {
Expand Down

0 comments on commit e6c1c41

Please sign in to comment.