refactor(render): use render layer fully
Introduces angular2/src/core/compiler/ViewFactory which extracts ProtoView.instantiate and replaces ViewPool. Note: This is a work in progress commit to unblock other commits. There will be follow ups to add unit tests, remove TODOs, …
This commit is contained in:
29
modules/angular2/src/test_lib/test_bed.js
vendored
29
modules/angular2/src/test_lib/test_bed.js
vendored
@ -1,4 +1,4 @@
|
||||
import {Injector} from 'angular2/di';
|
||||
import {Injector, bind} from 'angular2/di';
|
||||
|
||||
import {Type, isPresent, BaseException} from 'angular2/src/facade/lang';
|
||||
import {Promise} from 'angular2/src/facade/async';
|
||||
@ -10,12 +10,15 @@ import {Template} from 'angular2/src/core/annotations/template';
|
||||
import {TemplateResolver} from 'angular2/src/core/compiler/template_resolver';
|
||||
import {Compiler} from 'angular2/src/core/compiler/compiler';
|
||||
import {View} from 'angular2/src/core/compiler/view';
|
||||
import {ViewFactory} from 'angular2/src/core/compiler/view_factory';
|
||||
|
||||
import {EventManager} from 'angular2/src/render/dom/events/event_manager';
|
||||
import {DirectiveBinding} from 'angular2/src/core/compiler/element_injector';
|
||||
import {DirectiveMetadataReader} from 'angular2/src/core/compiler/directive_metadata_reader';
|
||||
|
||||
import {queryView} from './utils';
|
||||
import {queryView, viewRootNodes, el} from './utils';
|
||||
import {instantiateType, getTypeOf} from './lang_utils';
|
||||
|
||||
|
||||
export class TestBed {
|
||||
_injector: Injector;
|
||||
|
||||
@ -85,11 +88,17 @@ export class TestBed {
|
||||
this.setInlineTemplate(component, html);
|
||||
}
|
||||
|
||||
return this._injector.get(Compiler).compile(component).then((pv) => {
|
||||
var eventManager = this._injector.get(EventManager);
|
||||
var view = pv.instantiate(null, eventManager);
|
||||
view.hydrate(this._injector, null, null, context, null);
|
||||
return new ViewProxy(view);
|
||||
var rootEl = el('<div></div>');
|
||||
var metadataReader = this._injector.get(DirectiveMetadataReader);
|
||||
var componentBinding = DirectiveBinding.createFromBinding(
|
||||
bind(component).toValue(context),
|
||||
metadataReader.read(component).annotation
|
||||
);
|
||||
return this._injector.get(Compiler).compileRoot(rootEl, componentBinding).then((pv) => {
|
||||
var viewFactory = this._injector.get(ViewFactory);
|
||||
var view = viewFactory.getView(pv);
|
||||
view.hydrate(this._injector, null, context, null);
|
||||
return new ViewProxy(view.componentChildViews[0]);
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -108,8 +117,8 @@ export class ViewProxy {
|
||||
return this._view.context;
|
||||
}
|
||||
|
||||
get nodes(): List {
|
||||
return this._view.nodes;
|
||||
get rootNodes(): List {
|
||||
return viewRootNodes(this._view);
|
||||
}
|
||||
|
||||
detectChanges(): void {
|
||||
|
19
modules/angular2/src/test_lib/test_injector.js
vendored
19
modules/angular2/src/test_lib/test_injector.js
vendored
@ -7,13 +7,15 @@ import {ExceptionHandler} from 'angular2/src/core/exception_handler';
|
||||
import {TemplateLoader} from 'angular2/src/render/dom/compiler/template_loader';
|
||||
import {TemplateResolver} from 'angular2/src/core/compiler/template_resolver';
|
||||
import {DirectiveMetadataReader} from 'angular2/src/core/compiler/directive_metadata_reader';
|
||||
import {ShadowDomStrategy, EmulatedUnscopedShadowDomStrategy} from 'angular2/src/core/compiler/shadow_dom_strategy';
|
||||
import {ShadowDomStrategy} from 'angular2/src/render/dom/shadow_dom/shadow_dom_strategy';
|
||||
import {EmulatedUnscopedShadowDomStrategy} from 'angular2/src/render/dom/shadow_dom/emulated_unscoped_shadow_dom_strategy';
|
||||
import {XHR} from 'angular2/src/services/xhr';
|
||||
import {ComponentUrlMapper} from 'angular2/src/core/compiler/component_url_mapper';
|
||||
import {UrlResolver} from 'angular2/src/services/url_resolver';
|
||||
import {StyleUrlResolver} from 'angular2/src/render/dom/shadow_dom/style_url_resolver';
|
||||
import {StyleInliner} from 'angular2/src/render/dom/shadow_dom/style_inliner';
|
||||
import {VmTurnZone} from 'angular2/src/core/zone/vm_turn_zone';
|
||||
import {PrivateComponentLoader} from 'angular2/src/core/compiler/private_component_loader';
|
||||
|
||||
import {DOM} from 'angular2/src/dom/dom_adapter';
|
||||
|
||||
@ -32,6 +34,13 @@ import {Injector} from 'angular2/di';
|
||||
import {List, ListWrapper} from 'angular2/src/facade/collection';
|
||||
import {FunctionWrapper} from 'angular2/src/facade/lang';
|
||||
|
||||
import {ViewFactory, VIEW_POOL_CAPACITY} from 'angular2/src/core/compiler/view_factory';
|
||||
import {ProtoViewFactory} from 'angular2/src/core/compiler/proto_view_factory';
|
||||
import {Renderer} from 'angular2/src/render/api';
|
||||
import {DirectDomRenderer} from 'angular2/src/render/dom/direct_dom_renderer';
|
||||
import * as rc from 'angular2/src/render/dom/compiler/compiler';
|
||||
import * as rvf from 'angular2/src/render/dom/view/view_factory';
|
||||
|
||||
/**
|
||||
* Returns the root injector bindings.
|
||||
*
|
||||
@ -67,11 +76,19 @@ function _getAppBindings() {
|
||||
bind(ShadowDomStrategy).toFactory(
|
||||
(styleUrlResolver, doc) => new EmulatedUnscopedShadowDomStrategy(styleUrlResolver, doc.head),
|
||||
[StyleUrlResolver, appDocumentToken]),
|
||||
bind(Renderer).toClass(DirectDomRenderer),
|
||||
bind(rc.Compiler).toClass(rc.DefaultCompiler),
|
||||
rvf.ViewFactory,
|
||||
bind(rvf.VIEW_POOL_CAPACITY).toValue(500),
|
||||
ProtoViewFactory,
|
||||
ViewFactory,
|
||||
bind(VIEW_POOL_CAPACITY).toValue(500),
|
||||
Compiler,
|
||||
CompilerCache,
|
||||
bind(TemplateResolver).toClass(MockTemplateResolver),
|
||||
bind(ChangeDetection).toValue(dynamicChangeDetection),
|
||||
TemplateLoader,
|
||||
PrivateComponentLoader,
|
||||
DirectiveMetadataReader,
|
||||
Parser,
|
||||
Lexer,
|
||||
|
9
modules/angular2/src/test_lib/utils.js
vendored
9
modules/angular2/src/test_lib/utils.js
vendored
@ -24,9 +24,14 @@ export class Log {
|
||||
}
|
||||
}
|
||||
|
||||
export function viewRootNodes(view) {
|
||||
return view.render.delegate.rootNodes;
|
||||
}
|
||||
|
||||
export function queryView(view, selector) {
|
||||
for (var i = 0; i < view.nodes.length; ++i) {
|
||||
var res = DOM.querySelector(view.nodes[i], selector);
|
||||
var rootNodes = viewRootNodes(view);
|
||||
for (var i = 0; i < rootNodes.length; ++i) {
|
||||
var res = DOM.querySelector(rootNodes[i], selector);
|
||||
if (isPresent(res)) {
|
||||
return res;
|
||||
}
|
||||
|
Reference in New Issue
Block a user