mana-syringe
Version:
IoC library for mana, easily to use.
70 lines (63 loc) • 1.83 kB
text/typescript
import assert from 'assert';
import { injectable, Module, GlobalContainer, Syringe, singleton, contrib, Contribution } from '..';
describe('module', () => {
it('#load module', () => {
class Foo {}
class Bar {}
const module = Module(reg => {
reg(Foo);
}).register(Bar);
GlobalContainer.load(module);
const foo = GlobalContainer.get(Foo);
assert(foo instanceof Foo);
});
it('#check module', () => {
class Foo {}
class Bar {}
const module = Module(reg => {
reg(Foo);
}).register(Bar);
assert(Syringe.isModule(module));
assert(!Syringe.isModule({}));
});
it('#load module once', () => {
class Foo {}
const module = Module(reg => {
reg(Foo);
});
GlobalContainer.load(module);
GlobalContainer.load(module);
const foo = GlobalContainer.get(Foo);
assert(foo instanceof Foo);
});
it('#force load module twice', () => {
class Foo {}
const module = Module().register(Foo);
GlobalContainer.load(module);
GlobalContainer.load(module, true);
try {
GlobalContainer.get(Foo);
} catch (ex) {
assert(ex);
}
});
it('#register contribution in module', () => {
const FooContribution = Syringe.defineToken('FooContribution');
class Foo {}
class Bar {
constructor( public provider: Contribution.Provider<any>) {}
}
const module = Module().contribution(FooContribution).register(Foo, Bar);
GlobalContainer.load(module);
const bar = GlobalContainer.get(Bar);
const list = bar.provider.getContributions();
assert(list.length === 1);
assert(list.find(item => item instanceof Foo));
});
});