whs.js/test/core/ModuleManager.js
Alexander Buzin 3fc51842ae Add "Ignored methods" explanation in tests
Former-commit-id: 9689e81a235bc330b95718a0d6c46f6804023b8f
2017-01-25 00:45:09 +02:00

89 lines
2.0 KiB
JavaScript

import test from 'ava';
import * as WHS from '../../build/whitestorm.js';
/*
* Ignored methods:
*
* - .publish() & .unpublish() - Aliases of .addDependency() and .removeDependency();
*
*/
const composition = {};
const testValue = {test: true};
const manager = new WHS.ModuleManager(composition);
const module = new WHS.app.SceneModule();
test('.setActiveModule()', t => {
manager.setActiveModule(module);
t.is(manager.currentModule, module);
});
test('.addDependency()', t => {
t.plan(2);
manager.addDependency('immutable', testValue, {immutable: true, alias: '$testkey'});
manager.addDependency('overwritable', testValue);
t.is(manager.store.immutable[0], testValue, 'value is set');
t.is(composition.$testkey, testValue, 'alias is set');
});
test('.get()', t => {
t.is(manager.get('immutable'), testValue);
});
test('.set()', t => {
t.plan(2);
t.throws(
() => {
manager.set('immutable', 'newValue');
},
'@ModuleManager: Dependency \'immutable\' is immutable and already used by another module',
'dependency is immutable'
);
manager.set('overwritable', 'newValue');
t.is(manager.store.overwritable[0], 'newValue', 'value is updated');
});
test('.onDependencyUpdate()', async t => {
const update = new Promise((resolve, reject) => {
manager.onDependencyUpdate({
overwritable: () => {
resolve(true);
}
});
setTimeout(reject, 1);
});
manager.set('overwritable', 'check update');
t.true(await update);
});
test('.has()', t => {
t.plan(2);
t.true(manager.has('immutable'), 'manager has \'immutable\' dependency');
t.false(manager.has('whatever'), 'manager doesn\'t have \'whatever\' dependency');
});
test('.removeDependency()', t => {
t.plan(2);
manager.removeDependency('immutable');
manager.removeDependency('overwritable');
t.is(manager.store.immutable, null);
t.is(manager.store.overwritable, null);
});
test('.reset()', t => {
manager.reset();
t.is(manager.currentModule, null);
});