bbop-registry
Version:
Generic lightweight listener/callback registry system.
82 lines (63 loc) • 2.27 kB
JavaScript
////
//// Some unit testing for package bbop-rest-manager.
////
var chai = require('chai');
chai.config.includeStack = true;
var assert = chai.assert;
var registry = require('..');
// Correct environment, ready testing.
var us = require('underscore');
var bbop = require('bbop-core');
///
/// Start unit testing.
///
describe('overall functionality', function(){
it('basics', function(){
// Absolute basics.
var reg = new registry(['start', 'stop', 'reset']);
assert.equal(us.keys(reg.callback_registry).length, 3, "3 categories");
assert.equal(us.keys(reg.callback_registry['reset']).length, 0,
"nothing in");
// Create testable environment.
var acc = 0;
function plus(plus_val){ acc = acc + plus_val; }
function mult(mult_val){ acc = acc * mult_val; }
function sum(val1, val2){ acc = val1 + val2; }
// Registration tests.
reg.register('reset', plus, 0, '0');
reg.register('reset', mult, 1, '1');
assert.equal(reg.get_callbacks('reset').length, 2, "2 callbacks");
reg.unregister('reset', '1');
assert.equal(reg.get_callbacks('reset').length, 1, "now 1 callback");
// Test apply.
acc = 0;
reg.register('start', plus, 0, '0');
reg.register('start', mult, 1, '1');
reg.apply_callbacks('start', [2]);
assert.equal(acc, 2, "higher priority goes first");
// Test apply and priority.
acc = 0;
reg.register('stop', plus, 1, '1');
reg.register('stop', mult, 0, '0');
reg.apply_callbacks('stop', [2]);
assert.equal(acc, 4, "apply test 2");
// Test multivalued apply.
acc = 0;
reg.unregister('stop', '0');
reg.unregister('stop', '1');
reg.register('stop', sum, -1, '-1');
reg.apply_callbacks('stop', [2, 3]);
assert.equal(acc, 5, "apply test 3");
// is_registered
assert.equal(null, reg.is_registered('foo', 'bar'), "is_r? test 1");
assert.isFalse(reg.is_registered('stop', 'bar'), "is_r? test 2");
assert.isTrue(reg.is_registered('stop', '-1'), "is_r? test 3");
});
it('implied ids work', function(){
var reg = new registry(['start', 'stop', 'reset']);
var rid = reg.register('start', function(){});
assert.isTrue(reg.is_registered('start', rid), "can see dynamic id");
reg.unregister('start', rid);
assert.isFalse(reg.is_registered('start', rid), "delete by dynamic id");
});
});