diff --git a/.gitignore b/.gitignore index ae460fb..753bbcd 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /ultron-1.0.1.tgz +/ultron-1.1.0.tgz diff --git a/nodejs-ultron-LICENSE b/nodejs-ultron-LICENSE deleted file mode 100644 index 322fd61..0000000 --- a/nodejs-ultron-LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Unshift.io, Arnout Kazemier, the Contributors. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/nodejs-ultron.spec b/nodejs-ultron.spec index 90299b0..c40d116 100644 --- a/nodejs-ultron.spec +++ b/nodejs-ultron.spec @@ -7,14 +7,14 @@ Summary: Ultron is a high-intelligence robot Name: nodejs-%{npm_name} -Version: 1.0.1 -Release: 7%{?dist} +Version: 1.1.0 +Release: 1%{?dist} License: MIT URL: https://github.com/unshiftio/ultron Source0: http://registry.npmjs.org/%{npm_name}/-/%{npm_name}-%{version}.tgz -# Upstream licence file, will be in next release -# https://github.com/unshiftio/ultron/blob/master/LICENSE -Source1: nodejs-ultron-LICENSE +Source1: https://raw.githubusercontent.com/unshiftio/ultron/%{version}/test.js +Source2: https://raw.githubusercontent.com/unshiftio/ultron/%{version}/README.md + BuildRequires: nodejs-devel %if 0%{?enable_tests} BuildRequires: npm(assume) @@ -38,7 +38,10 @@ up processes. %prep %setup -q -n package -cp %{SOURCE1} LICENSE +# Copy test.js +cp -ap %{SOURCE1} . +# Copy README.md +cp -ap %{SOURCE2} . %build @@ -58,6 +61,9 @@ mocha --reporter spec --ui bdd test.js %{nodejs_sitelib}/%{npm_name} %changelog +* Tue Sep 19 2017 Jared Smith - 1.1.0-1 +- Update to upstream 1.1.0 release + * Thu Jul 27 2017 Fedora Release Engineering - 1.0.1-7 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild diff --git a/sources b/sources index 4c174e4..a199c5b 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -90b286dc4c4bcf17d71bb77a1465c8f0 ultron-1.0.1.tgz +SHA512 (ultron-1.1.0.tgz) = a23dba415670d5df6e306ec516c5a1f99c7f7cffa0794d36fa9799017776050e0084b23043ea0b9e78f2760b31c3b2fea182a9300589618d02e338ffc9bf2ae4 diff --git a/test.js b/test.js new file mode 100644 index 0000000..bb38826 --- /dev/null +++ b/test.js @@ -0,0 +1,407 @@ +/* istanbul ignore next */ +describe('Ultron', function () { + 'use strict'; + + var EventEmitter = require('eventemitter3') + , EE = require('events').EventEmitter + , assume = require('assume') + , Ultron = require('./') + , ultron + , ee; + + beforeEach(function () { + ee = new EventEmitter(); + ultron = new Ultron(ee); + }); + + afterEach(function () { + ultron.destroy(); + ee.removeAllListeners(); + }); + + it('is exposed as a function', function () { + assume(Ultron).is.a('function'); + }); + + it('can be initialized without the new keyword', function () { + assume(Ultron(ee)).is.instanceOf(Ultron); + }); + + it('assigns a unique id to every instance', function () { + for (var i = 0; i < 100; i++) { + assume(ultron.id).does.not.equal((new Ultron()).id); + } + }); + + it('allows removal through the event emitter', function () { + function foo() {} + function bar() {} + + ultron.on('foo', foo); + ultron.once('foo', bar); + + assume(foo.__ultron).equals(ultron.id); + assume(bar.__ultron).equals(ultron.id); + assume(ee.listeners('foo').length).equals(2); + + ee.removeListener('foo', foo); + assume(ee.listeners('foo').length).equals(1); + + ee.removeListener('foo', bar); + assume(ee.listeners('foo').length).equals(0); + }); + + describe('#on', function () { + it('assigns a listener', function () { + assume(ee.listeners('foo').length).equals(0); + + function foo() {} + + ultron.on('foo', foo); + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('foo')[0]).equals(foo); + }); + + it('tags the assigned function', function () { + assume(ee.listeners('foo').length).equals(0); + + ultron.on('foo', function () {}); + assume(ee.listeners('foo')[0].__ultron).equals(ultron.id); + }); + + it('also passes in the context', function (next) { + var context = 1313; + + ultron.on('foo', function (a, b, c) { + assume(a).equals('a'); + assume(b).equals('b'); + assume(c).equals('c'); + + assume(this).equals(context); + + next(); + }, context); + + ee.emit('foo', 'a', 'b', 'c'); + }); + + it('works with regular eventemitters as well', function (next) { + var ee = new EE() + , ultron = new Ultron(ee); + + ultron.on('foo', function (a, b, c) { + assume(a).equals('a'); + assume(b).equals('b'); + assume(c).equals('c'); + + next(); + }); + + ee.emit('foo', 'a', 'b', 'c'); + }); + }); + + describe('#once', function () { + it('assigns a listener', function () { + assume(ee.listeners('foo').length).equals(0); + + function foo() {} + ultron.once('foo', foo); + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('foo')[0]).equals(foo); + }); + + it('tags the assigned function', function () { + assume(ee.listeners('foo').length).equals(0); + + ultron.once('foo', function () {}); + assume(ee.listeners('foo')[0].__ultron).equals(ultron.id); + }); + + it('also passes in the context', function (next) { + var context = 1313; + + ultron.once('foo', function (a, b, c) { + assume(a).equals('a'); + assume(b).equals('b'); + assume(c).equals('c'); + + assume(this).equals(context); + + next(); + }, context); + + ee.emit('foo', 'a', 'b', 'c'); + ee.emit('foo', 'a', 'b', 'c'); // Ensure that we don't double execute + }); + + it('works with regular eventemitters as well', function (next) { + var ee = new EE() + , ultron = new Ultron(ee); + + ultron.once('foo', function (a, b, c) { + assume(a).equals('a'); + assume(b).equals('b'); + assume(c).equals('c'); + + next(); + }); + + ee.emit('foo', 'a', 'b', 'c'); + ee.emit('foo', 'a', 'b', 'c'); // Ensure that we don't double execute + }); + }); + + describe('#remove', function () { + it('removes only our assigned `on` listeners', function () { + function foo() {} + function bar() {} + + ee.on('foo', foo); + ultron.on('foo', bar); + assume(ee.listeners('foo').length).equals(2); + + ultron.remove('foo'); + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('foo')[0]).equals(foo); + }); + + it('removes our private __ultron references', function () { + function once() {} + function on() {} + + assume('__ultron' in once).is.false(); + assume('__ultron' in on).is.false(); + + ultron.on('foo', on); + ultron.once('bar', once); + + assume('__ultron' in once).is.true(); + assume('__ultron' in on).is.true(); + + ultron.remove('foo, bar'); + + assume('__ultron' in once).is.false(); + assume('__ultron' in on).is.false(); + + ee.removeAllListeners(); + ultron.destroy(); + + ee = new EE(); + ultron = new Ultron(ee); + + assume('__ultron' in once).is.false(); + assume('__ultron' in on).is.false(); + + ultron.on('foo', on); + ultron.once('bar', once); + + assume('__ultron' in once).is.true(); + assume('__ultron' in on).is.true(); + + ultron.remove('foo, bar'); + + assume('__ultron' in once).is.false(); + assume('__ultron' in on).is.false(); + }); + + it('removes only our assigned `once` listeners', function () { + function foo() {} + function bar() {} + + ee.once('foo', foo); + ultron.once('foo', bar); + assume(ee.listeners('foo').length).equals(2); + + ultron.remove('foo'); + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('foo')[0]).equals(foo); + + ee.removeAllListeners(); + ultron.destroy(); + + ee = new EE(); + ultron = new Ultron(ee); + + ee.once('foo', foo); + ultron.once('foo', bar); + assume(ee.listeners('foo').length).equals(2); + + ultron.remove('foo'); + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('foo')[0].listener).equals(foo); + }); + + it('removes all assigned events if called without args', 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); + + 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); + }); + + it('removes multiple listeners based on args', function () { + function foo() {} + function bar() {} + function baz() {} + + ultron.on('foo', foo); + ultron.on('bar', bar); + ultron.on('baz', baz); + + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('bar').length).equals(1); + assume(ee.listeners('baz').length).equals(1); + + ultron.remove('foo', 'bar'); + + assume(ee.listeners('foo').length).equals(0); + assume(ee.listeners('bar').length).equals(0); + assume(ee.listeners('baz').length).equals(1); + }); + + it('removes multiple listeners if first arg is seperated string', function () { + function foo() {} + function bar() {} + function baz() {} + + ultron.on('foo', foo); + ultron.on('bar', bar); + ultron.on('baz', baz); + + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('bar').length).equals(1); + assume(ee.listeners('baz').length).equals(1); + + ultron.remove('foo, bar'); + + assume(ee.listeners('foo').length).equals(0); + 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 () { + it('removes all listeners', function () { + function foo() {} + function bar() {} + function baz() {} + + ultron.on('foo', foo); + ultron.on('bar', bar); + ultron.on('baz', baz); + + assume(ee.listeners('foo').length).equals(1); + assume(ee.listeners('bar').length).equals(1); + assume(ee.listeners('baz').length).equals(1); + + ultron.destroy(); + + assume(ee.listeners('foo').length).equals(0); + assume(ee.listeners('bar').length).equals(0); + assume(ee.listeners('baz').length).equals(0); + }); + + it('removes the .ee reference', function () { + assume(ultron.ee).equals(ee); + ultron.destroy(); + assume(ultron.ee).equals(null); + }); + + it('returns booleans for state indication', function () { + assume(ultron.destroy()).is.true(); + assume(ultron.destroy()).is.false(); + assume(ultron.destroy()).is.false(); + assume(ultron.destroy()).is.false(); + }); + }); +});