Updated script that can be controled by Nodejs web app
This commit is contained in:
3
node_modules/ultron/.npmignore
generated
vendored
Normal file
3
node_modules/ultron/.npmignore
generated
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
node_modules
|
||||
coverage
|
||||
.tern-port
|
21
node_modules/ultron/.travis.yml
generated
vendored
Normal file
21
node_modules/ultron/.travis.yml
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
sudo: false
|
||||
language: node_js
|
||||
node_js:
|
||||
- "0.12"
|
||||
- "0.10"
|
||||
- "0.8"
|
||||
- "iojs"
|
||||
before_install:
|
||||
- 'if [ "${TRAVIS_NODE_VERSION}" == "0.8" ]; then npm install -g npm@2.11.1; fi'
|
||||
script:
|
||||
- "npm run test-travis"
|
||||
after_script:
|
||||
- "npm install coveralls@2.11.x && cat coverage/lcov.info | coveralls"
|
||||
matrix:
|
||||
fast_finish: true
|
||||
notifications:
|
||||
irc:
|
||||
channels:
|
||||
- "irc.freenode.org#unshift"
|
||||
on_success: change
|
||||
on_failure: change
|
22
node_modules/ultron/LICENSE
generated
vendored
Normal file
22
node_modules/ultron/LICENSE
generated
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
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.
|
||||
|
97
node_modules/ultron/README.md
generated
vendored
Normal file
97
node_modules/ultron/README.md
generated
vendored
Normal file
@ -0,0 +1,97 @@
|
||||
# Ultron
|
||||
|
||||
[](http://unshift.io)[](http://browsenpm.org/package/ultron)[](https://travis-ci.org/unshiftio/ultron)[](https://david-dm.org/unshiftio/ultron)[](https://coveralls.io/r/unshiftio/ultron?branch=master)[](http://webchat.freenode.net/?channels=unshift)
|
||||
|
||||
Ultron is a high-intelligence robot. It gathers intelligence so it can start
|
||||
improving upon his rudimentary design. It will learn your event emitting
|
||||
patterns and find ways to exterminate them. Allowing you to remove only the
|
||||
event emitters that **you** assigned and not the ones that your users or
|
||||
developers assigned. This can prevent race conditions, memory leaks and even file
|
||||
descriptor leaks from ever happening as you won't remove clean up processes.
|
||||
|
||||
## Installation
|
||||
|
||||
The module is designed to be used in browsers using browserify and in Node.js.
|
||||
You can install the module through the public npm registry by running the
|
||||
following command in CLI:
|
||||
|
||||
```
|
||||
npm install --save ultron
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
In all examples we assume that you've required the library as following:
|
||||
|
||||
```js
|
||||
'use strict';
|
||||
|
||||
var Ultron = require('ultron');
|
||||
```
|
||||
|
||||
Now that we've required the library we can construct our first `Ultron` instance.
|
||||
The constructor requires one argument which should be the `EventEmitter`
|
||||
instance that we need to operate upon. This can be the `EventEmitter` module
|
||||
that ships with Node.js or `EventEmitter3` or anything else as long as it
|
||||
follow the same API and internal structure as these 2. So with that in mind we
|
||||
can create the instance:
|
||||
|
||||
```js
|
||||
//
|
||||
// For the sake of this example we're going to construct an empty EventEmitter
|
||||
//
|
||||
var EventEmitter = require('events').EventEmitter; // or require('eventmitter3');
|
||||
var events = new EventEmitter();
|
||||
|
||||
var ultron = new Ultron(events);
|
||||
```
|
||||
|
||||
You can now use the following API's from the Ultron instance:
|
||||
|
||||
### Ultron.on
|
||||
|
||||
Register a new event listener for the given event. It follows the exact same API
|
||||
as `EventEmitter.on` but it will return itself instead of returning the
|
||||
EventEmitter instance. If you are using EventEmitter3 it also supports the
|
||||
context param:
|
||||
|
||||
```js
|
||||
ultron.on('event-name', handler, { custom: 'function context' });
|
||||
```
|
||||
|
||||
### Ultron.once
|
||||
|
||||
Exactly the same as the [Ultron.on](#ultronon) but it only allows the execution
|
||||
once.
|
||||
|
||||
### Ultron.remove
|
||||
|
||||
This is where all the magic happens and the safe removal starts. This function
|
||||
accepts different argument styles:
|
||||
|
||||
- No arguments, assume that all events need to be removed so it will work as
|
||||
`removeAllListeners()` API.
|
||||
- 1 argument, when it's a string it will be split on ` ` and `,` to create a
|
||||
list of events that need to be cleared.
|
||||
- Multiple arguments, we assume that they are all names of events that need to
|
||||
be cleared.
|
||||
|
||||
```js
|
||||
ultron.remove('foo, bar baz'); // Removes foo, bar and baz.
|
||||
ultron.remove('foo', 'bar', 'baz'); // Removes foo, bar and baz.
|
||||
ultron.remove(); // Removes everything.
|
||||
```
|
||||
|
||||
If you just want to remove a single event listener using a function reference
|
||||
you can still use the EventEmitter's `removeListener(event, fn)` API:
|
||||
|
||||
```js
|
||||
function foo() {}
|
||||
|
||||
ulton.on('foo', foo);
|
||||
events.removeListener('foo', foo);
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
129
node_modules/ultron/index.js
generated
vendored
Normal file
129
node_modules/ultron/index.js
generated
vendored
Normal file
@ -0,0 +1,129 @@
|
||||
'use strict';
|
||||
|
||||
var has = Object.prototype.hasOwnProperty;
|
||||
|
||||
/**
|
||||
* An auto incrementing id which we can use to create "unique" Ultron instances
|
||||
* so we can track the event emitters that are added through the Ultron
|
||||
* interface.
|
||||
*
|
||||
* @type {Number}
|
||||
* @private
|
||||
*/
|
||||
var id = 0;
|
||||
|
||||
/**
|
||||
* Ultron is high-intelligence robot. It gathers intelligence so it can start improving
|
||||
* upon his rudimentary design. It will learn from your EventEmitting patterns
|
||||
* and exterminate them.
|
||||
*
|
||||
* @constructor
|
||||
* @param {EventEmitter} ee EventEmitter instance we need to wrap.
|
||||
* @api public
|
||||
*/
|
||||
function Ultron(ee) {
|
||||
if (!(this instanceof Ultron)) return new Ultron(ee);
|
||||
|
||||
this.id = id++;
|
||||
this.ee = ee;
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a new EventListener for the given event.
|
||||
*
|
||||
* @param {String} event Name of the event.
|
||||
* @param {Functon} fn Callback function.
|
||||
* @param {Mixed} context The context of the function.
|
||||
* @returns {Ultron}
|
||||
* @api public
|
||||
*/
|
||||
Ultron.prototype.on = function on(event, fn, context) {
|
||||
fn.__ultron = this.id;
|
||||
this.ee.on(event, fn, context);
|
||||
|
||||
return this;
|
||||
};
|
||||
/**
|
||||
* Add an EventListener that's only called once.
|
||||
*
|
||||
* @param {String} event Name of the event.
|
||||
* @param {Function} fn Callback function.
|
||||
* @param {Mixed} context The context of the function.
|
||||
* @returns {Ultron}
|
||||
* @api public
|
||||
*/
|
||||
Ultron.prototype.once = function once(event, fn, context) {
|
||||
fn.__ultron = this.id;
|
||||
this.ee.once(event, fn, context);
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Remove the listeners we assigned for the given event.
|
||||
*
|
||||
* @returns {Ultron}
|
||||
* @api public
|
||||
*/
|
||||
Ultron.prototype.remove = function remove() {
|
||||
var args = arguments
|
||||
, event;
|
||||
|
||||
//
|
||||
// When no event names are provided we assume that we need to clear all the
|
||||
// events that were assigned through us.
|
||||
//
|
||||
if (args.length === 1 && 'string' === typeof args[0]) {
|
||||
args = args[0].split(/[, ]+/);
|
||||
} else if (!args.length) {
|
||||
args = [];
|
||||
|
||||
for (event in this.ee._events) {
|
||||
if (has.call(this.ee._events, event)) args.push(event);
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = 0; i < args.length; i++) {
|
||||
var listeners = this.ee.listeners(args[i]);
|
||||
|
||||
for (var j = 0; j < listeners.length; j++) {
|
||||
event = listeners[j];
|
||||
|
||||
//
|
||||
// Once listeners have a `listener` property that stores the real listener
|
||||
// in the EventEmitter that ships with Node.js.
|
||||
//
|
||||
if (event.listener) {
|
||||
if (event.listener.__ultron !== this.id) continue;
|
||||
delete event.listener.__ultron;
|
||||
} else {
|
||||
if (event.__ultron !== this.id) continue;
|
||||
delete event.__ultron;
|
||||
}
|
||||
|
||||
this.ee.removeListener(args[i], event);
|
||||
}
|
||||
}
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Destroy the Ultron instance, remove all listeners and release all references.
|
||||
*
|
||||
* @returns {Boolean}
|
||||
* @api public
|
||||
*/
|
||||
Ultron.prototype.destroy = function destroy() {
|
||||
if (!this.ee) return false;
|
||||
|
||||
this.remove();
|
||||
this.ee = null;
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
//
|
||||
// Expose the module.
|
||||
//
|
||||
module.exports = Ultron;
|
41
node_modules/ultron/package.json
generated
vendored
Normal file
41
node_modules/ultron/package.json
generated
vendored
Normal file
@ -0,0 +1,41 @@
|
||||
{
|
||||
"name": "ultron",
|
||||
"version": "1.0.2",
|
||||
"description": "Ultron is high-intelligence robot. It gathers intel so it can start improving upon his rudimentary design",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"100%": "istanbul check-coverage --statements 100 --functions 100 --lines 100 --branches 100",
|
||||
"test": "mocha test.js",
|
||||
"watch": "mocha --watch test.js",
|
||||
"coverage": "istanbul cover ./node_modules/.bin/_mocha -- test.js",
|
||||
"test-travis": "istanbul cover node_modules/.bin/_mocha --report lcovonly -- test.js"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/unshiftio/ultron"
|
||||
},
|
||||
"keywords": [
|
||||
"Ultron",
|
||||
"robot",
|
||||
"gather",
|
||||
"intelligence",
|
||||
"event",
|
||||
"events",
|
||||
"eventemitter",
|
||||
"emitter",
|
||||
"cleanup"
|
||||
],
|
||||
"author": "Arnout Kazemier",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"assume": "1.2.x",
|
||||
"eventemitter3": "1.1.x",
|
||||
"istanbul": "0.3.x",
|
||||
"mocha": "2.2.x",
|
||||
"pre-commit": "1.0.x"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/unshiftio/ultron/issues"
|
||||
},
|
||||
"homepage": "https://github.com/unshiftio/ultron"
|
||||
}
|
327
node_modules/ultron/test.js
generated
vendored
Normal file
327
node_modules/ultron/test.js
generated
vendored
Normal file
@ -0,0 +1,327 @@
|
||||
/* 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();
|
||||
|
||||
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);
|
||||
});
|
||||
|
||||
it('removes only our assigned `once` listeners from regular EE', function () {
|
||||
var ee = new EE()
|
||||
, ultron = new Ultron(ee);
|
||||
|
||||
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].listener).equals(foo);
|
||||
});
|
||||
|
||||
it('removes all assigned events if called without args', function () {
|
||||
function foo() {}
|
||||
function bar() {}
|
||||
|
||||
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);
|
||||
});
|
||||
});
|
||||
|
||||
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();
|
||||
});
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user