@difizen/mana-syringe
Version:
69 lines (61 loc) • 1.88 kB
text/typescript
import assert from 'assert';
import type { Contribution } from '..';
import { injectable, Module, GlobalContainer, Syringe, singleton, contrib } from '..';
describe('module', () => {
it('#load module', () => {
class Foo {}
class Bar {}
const module = Module().register(Foo, Bar);
GlobalContainer.load(module);
const foo = GlobalContainer.get(Foo);
assert(foo instanceof Foo);
});
it('#check module', () => {
class Foo {}
class Bar {}
const module = Module().register(Foo, Bar);
assert(Syringe.isModule(module));
assert(!Syringe.isModule({}));
});
it('#load module once', () => {
class Foo {}
const module = Module().register(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 {
public provider: Contribution.Provider<any>;
constructor( provider: Contribution.Provider<any>) {
this.provider = provider;
}
}
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));
});
});