refactor(testing): move common testing logic into test_injector
Before, all test framework wrappers (internal for dart and js/ts, angular2_test for dart and testing for js/ts) had similar logic to keep track of current global test injector and test provider list. This change wraps that logic into one class managed by the test injector. Closes #5920
This commit is contained in:
@ -23,7 +23,7 @@ import {
|
||||
defaultKeyValueDiffers,
|
||||
ChangeDetectorGenConfig
|
||||
} from 'angular2/src/core/change_detection/change_detection';
|
||||
import {ExceptionHandler} from 'angular2/src/facade/exceptions';
|
||||
import {BaseException, ExceptionHandler} from 'angular2/src/facade/exceptions';
|
||||
import {PipeResolver} from 'angular2/src/core/linker/pipe_resolver';
|
||||
import {XHR} from 'angular2/src/compiler/xhr';
|
||||
|
||||
@ -131,11 +131,62 @@ function _runtimeCompilerBindings() {
|
||||
];
|
||||
}
|
||||
|
||||
export class TestInjector {
|
||||
private _instantiated: boolean = false;
|
||||
|
||||
private _injector: Injector = null;
|
||||
|
||||
private _providers: Array<Type | Provider | any[]> = [];
|
||||
|
||||
reset() {
|
||||
this._injector = null;
|
||||
this._providers = [];
|
||||
this._instantiated = false;
|
||||
}
|
||||
|
||||
addProviders(providers: Array<Type | Provider | any[]>) {
|
||||
if (this._instantiated) {
|
||||
throw new BaseException('Cannot add providers after test injector is instantiated');
|
||||
}
|
||||
this._providers = ListWrapper.concat(this._providers, providers);
|
||||
}
|
||||
|
||||
createInjector() {
|
||||
var rootInjector = Injector.resolveAndCreate(_getRootProviders());
|
||||
this._injector = rootInjector.resolveAndCreateChild(ListWrapper.concat(
|
||||
ListWrapper.concat(_getAppBindings(), _runtimeCompilerBindings()), this._providers));
|
||||
this._instantiated = true;
|
||||
return this._injector;
|
||||
}
|
||||
|
||||
execute(fn: FunctionWithParamTokens): any {
|
||||
if (!this._instantiated) {
|
||||
this.createInjector();
|
||||
}
|
||||
return fn.execute(this._injector);
|
||||
}
|
||||
}
|
||||
|
||||
var _testInjector: TestInjector = null;
|
||||
|
||||
export function getTestInjector() {
|
||||
if (_testInjector == null) {
|
||||
_testInjector = new TestInjector();
|
||||
}
|
||||
return _testInjector;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated Use TestInjector#createInjector() instead.
|
||||
*/
|
||||
export function createTestInjector(providers: Array<Type | Provider | any[]>): Injector {
|
||||
var rootInjector = Injector.resolveAndCreate(_getRootProviders());
|
||||
return rootInjector.resolveAndCreateChild(ListWrapper.concat(_getAppBindings(), providers));
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated Use TestInjector#createInjector() instead.
|
||||
*/
|
||||
export function createTestInjectorWithRuntimeCompiler(
|
||||
providers: Array<Type | Provider | any[]>): Injector {
|
||||
return createTestInjector(ListWrapper.concat(_runtimeCompilerBindings(), providers));
|
||||
@ -159,7 +210,8 @@ export function createTestInjectorWithRuntimeCompiler(
|
||||
* ```
|
||||
*
|
||||
* Notes:
|
||||
* - inject is currently a function because of some Traceur limitation the syntax should eventually
|
||||
* - inject is currently a function because of some Traceur limitation the syntax should
|
||||
* eventually
|
||||
* becomes `it('...', @Inject (object: AClass, async: AsyncTestCompleter) => { ... });`
|
||||
*
|
||||
* @param {Array} tokens
|
||||
|
Reference in New Issue
Block a user