Skip to content

Commit 780606f

Browse files
vikermanmhevery
authored andcommitted
refactor(testing): Refactor test_component_builder to remove DOM dependency.
TestComponentBuilder now uses injected TestComponentRenderer which will be provided by the DOMTestComponentRenderer on platforms that provide some sort of DOM.
1 parent aab961d commit 780606f

File tree

6 files changed

+38
-14
lines changed

6 files changed

+38
-14
lines changed

modules/@angular/core-testing/browser_static.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ export const ADDITIONAL_TEST_BROWSER_PROVIDERS: Array<any /*Type | Provider | an
4646
{provide: NgZone, useClass: MockNgZone},
4747
{provide: LocationStrategy, useClass: MockLocationStrategy},
4848
{provide: AnimationBuilder, useClass: MockAnimationBuilder},
49+
{provide: TestComponentRenderer, useClass: DOMTestComponentRenderer},
4950
];
5051

5152
/**

modules/@angular/core/testing.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
export * from './testing/fake_async';
22
export * from './testing/lang_utils';
33
export * from './testing/logger';
4+
export * from './testing/regexp';
45
export * from './testing/test_component_builder';
56
export * from './testing/test_injector';
67
export * from './testing/testing';

modules/@angular/core/testing/fake_async.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export function fakeAsync(fn: Function | FunctionWithParamTokens): Function {
3535
}
3636
innerTestFn = () => { getTestInjector().execute(fn as FunctionWithParamTokens); };
3737
} else {
38-
innerTestFn = fn;
38+
innerTestFn = <Function>fn;
3939
}
4040

4141
return function(...args) {

modules/@angular/core/testing/test_component_builder.ts

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,14 @@ import {DirectiveResolver, ViewResolver} from '@angular/compiler';
1313
import {Type, isPresent} from '../src/facade/lang';
1414
import {PromiseWrapper} from '../src/facade/async';
1515
import {MapWrapper} from '../src/facade/collection';
16-
import {el} from '../src/utils';
17-
import {DOCUMENT} from '../.';
18-
import {getDOM} from '../platform_browser_private';
19-
import {tick} from '../src/fake_async';
16+
import {tick} from './fake_async';
17+
18+
/**
19+
* An abstract class for inserting the root test component element in a platform independent way.
20+
*/
21+
export class TestComponentRenderer {
22+
insertRootElement(rootElementId: string) {}
23+
}
2024

2125
/**
2226
* Fixture for debugging and testing a component.
@@ -236,16 +240,9 @@ export class TestComponentBuilder {
236240
this._viewBindingsOverrides.forEach(
237241
(bindings, type) => mockDirectiveResolver.setViewBindingsOverride(type, bindings));
238242

243+
var testComponentRenderer: TestComponentRenderer = this._injector.get(TestComponentRenderer);
239244
var rootElId = `root${_nextRootElementId++}`;
240-
var rootEl = el(`<div id="${rootElId}"></div>`);
241-
var doc = this._injector.get(DOCUMENT);
242-
243-
// TODO(juliemr): can/should this be optional?
244-
var oldRoots = getDOM().querySelectorAll(doc, '[id^=root]');
245-
for (var i = 0; i < oldRoots.length; i++) {
246-
getDOM().remove(oldRoots[i]);
247-
}
248-
getDOM().appendChild(doc.body, rootEl);
245+
testComponentRenderer.insertRootElement(rootElId);
249246

250247
var promise: Promise<ComponentRef> =
251248
this._injector.get(DynamicComponentLoader)
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import {Inject, Injectable} from 'angular2/src/core/di';
2+
import {DOCUMENT} from 'angular2/src/platform/dom/dom_tokens';
3+
import {DOM} from 'angular2/src/platform/dom/dom_adapter';
4+
import {TestComponentRenderer} from './test_component_builder';
5+
import {el} from './utils';
6+
7+
/**
8+
* A DOM based implementation of the TestComponentRenderer.
9+
*/
10+
@Injectable()
11+
export class DOMTestComponentRenderer extends TestComponentRenderer {
12+
constructor(@Inject(DOCUMENT) private _doc) { super(); }
13+
14+
insertRootElement(rootElementId: string) {
15+
var rootEl = el(`<div id="${rootElementId}"></div>`);
16+
17+
// TODO(juliemr): can/should this be optional?
18+
var oldRoots = DOM.querySelectorAll(this._doc, '[id^=root]');
19+
for (var i = 0; i < oldRoots.length; i++) {
20+
DOM.remove(oldRoots[i]);
21+
}
22+
DOM.appendChild(this._doc.body, rootEl);
23+
}
24+
}

modules/@angular/platform-server/testing/server.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,4 +86,5 @@ export const TEST_SERVER_APPLICATION_PROVIDERS: Array<any /*Type | Provider | an
8686
{provide: NgZone, useClass: MockNgZone},
8787
{provide: LocationStrategy, useClass: MockLocationStrategy},
8888
{provide: AnimationBuilder, useClass: MockAnimationBuilder},
89+
{provide: TestComponentRenderer, useClass: DOMTestComponentRenderer}
8990
];

0 commit comments

Comments
 (0)