mana-syringe
Version:
IoC library for mana, easily to use.
72 lines (69 loc) • 2.29 kB
text/typescript
import assert from 'assert';
import { injectable } from 'inversify';
import { toRegistryOption } from './register';
import { Syringe, Utils } from './core';
describe('register helper', () => {
describe('option parser', () => {
it('#simple class', () => {
()
class Foo {}
const parsed = toRegistryOption({
token: Foo,
useClass: Foo,
});
assert(parsed.token.length === 1);
assert(parsed.token.includes(Foo));
assert(parsed.useClass.length === 1);
assert(parsed.useClass.includes(Foo));
assert(parsed.lifecycle === Syringe.DefaultOption.lifecycle);
});
it('#simple token', () => {
()
class Foo {}
const parsed = toRegistryOption({
token: Foo,
lifecycle: Syringe.Lifecycle.singleton,
});
assert(parsed.token.length === 1);
assert(parsed.token.includes(Foo));
assert(parsed.lifecycle === Syringe.Lifecycle.singleton);
});
it('#multiple', () => {
()
class Foo {}
()
class Bar {}
const parsed = toRegistryOption({
token: Foo,
useClass: [Foo, Bar],
});
assert(parsed.token.length === 1);
assert(parsed.token.includes(Foo));
assert(parsed.useClass.length === 2);
assert(parsed.useClass.includes(Foo));
assert(parsed.useClass.includes(Bar));
});
it('#undefined value', () => {
const TokenSymbol = Symbol('UndefinedToken');
const parsed = toRegistryOption({ token: TokenSymbol, useValue: undefined });
assert(parsed.token.length === 1);
assert(parsed.token.includes(TokenSymbol));
assert(parsed.useValue === undefined);
assert('useValue' in parsed);
assert(parsed.lifecycle === Syringe.DefaultOption.lifecycle);
});
});
describe('error option', () => {
it('#Named token can not be service to other tokens', () => {
const named = 'named';
()
class Foo {}
const parsed = toRegistryOption({
token: { token: Foo, named },
});
assert(parsed.token.length === 1);
assert(parsed.token.find(item => Utils.isNamedToken(item)));
assert(parsed.lifecycle === Syringe.DefaultOption.lifecycle);
});
});
});