1- import { ddescribe , describe , it , iit , expect , beforeEach } from 'angular2/test_lib' ;
1+ import {
2+ AsyncTestCompleter ,
3+ beforeEach ,
4+ ddescribe ,
5+ xdescribe ,
6+ describe ,
7+ el ,
8+ dispatchEvent ,
9+ expect ,
10+ iit ,
11+ inject ,
12+ beforeEachBindings ,
13+ it ,
14+ xit ,
15+ SpyObject , proxy
16+ } from 'angular2/test_lib' ;
17+ import { IMPLEMENTS } from 'angular2/src/facade/lang' ;
18+ import { MapWrapper , ListWrapper } from 'angular2/src/facade/collection' ;
19+ import { Promise , PromiseWrapper } from 'angular2/src/facade/async' ;
220import { DirectiveMetadataReader } from 'angular2/src/core/compiler/directive_metadata_reader' ;
321import { DynamicComponentLoader } from 'angular2/src/core/compiler/dynamic_component_loader' ;
4- import { Decorator , Viewport } from 'angular2/src/core/annotations/annotations' ;
5-
6- @Decorator ( { selector : 'someDecorator' } )
7- class SomeDecorator { }
8-
9- @Viewport ( { selector : 'someViewport' } )
10- class SomeViewport { }
22+ import { Decorator , Viewport , Component } from 'angular2/src/core/annotations/annotations' ;
23+ import { ElementRef , ElementInjector , ProtoElementInjector , PreBuiltObjects } from 'angular2/src/core/compiler/element_injector' ;
24+ import { Compiler } from 'angular2/src/core/compiler/compiler' ;
25+ import { AppProtoView , AppView } from 'angular2/src/core/compiler/view' ;
26+ import { ViewFactory } from 'angular2/src/core/compiler/view_factory'
27+ import { Renderer } from 'angular2/src/render/api' ;
1128
1229export function main ( ) {
1330 describe ( "DynamicComponentLoader" , ( ) => {
31+ var compiler ;
32+ var viewFactory ;
33+ var directiveMetadataReader ;
34+ var renderer ;
1435 var loader ;
1536
16- beforeEach ( ( ) => {
17- loader = new DynamicComponentLoader ( null , new DirectiveMetadataReader ( ) , null , null ) ;
37+ beforeEach ( ( ) => {
38+ compiler = new SpyCompiler ( ) ;
39+ viewFactory = new SpyViewFactory ( ) ;
40+ renderer = new SpyRenderer ( ) ;
41+ directiveMetadataReader = new DirectiveMetadataReader ( ) ;
42+ loader = new DynamicComponentLoader ( compiler , directiveMetadataReader , renderer , viewFactory ) ; ;
1843 } ) ;
1944
45+ function createProtoView ( ) {
46+ return new AppProtoView ( null , null , null ) ;
47+ }
48+
49+ function createElementRef ( view , boundElementIndex ) {
50+ var peli = new ProtoElementInjector ( null , boundElementIndex , [ ] ) ;
51+ var eli = new ElementInjector ( peli , null ) ;
52+ var preBuiltObjects = new PreBuiltObjects ( view , null , null , null ) ;
53+ eli . instantiateDirectives ( null , null , null , preBuiltObjects ) ;
54+ return new ElementRef ( eli ) ;
55+ }
56+
2057 describe ( "loadIntoExistingLocation" , ( ) => {
2158 describe ( 'Load errors' , ( ) => {
2259 it ( 'should throw when trying to load a decorator' , ( ) => {
@@ -29,7 +66,55 @@ export function main() {
2966 . toThrowError ( "Could not load 'SomeViewport' because it is not a component." ) ;
3067 } ) ;
3168 } ) ;
69+
70+ it ( 'should add the child view into the host view' , inject ( [ AsyncTestCompleter ] , ( async ) => {
71+ var log = [ ] ;
72+ var hostView = new SpyAppView ( ) ;
73+ var childView = new SpyAppView ( ) ;
74+ hostView . spy ( 'setDynamicComponentChildView' ) . andCallFake ( ( boundElementIndex , childView ) => {
75+ ListWrapper . push ( log , [ 'setDynamicComponentChildView' , boundElementIndex , childView ] ) ;
76+ } ) ;
77+ childView . spy ( 'hydrate' ) . andCallFake ( ( appInjector , hostElementInjector , context , locals ) => {
78+ ListWrapper . push ( log , 'hydrate' ) ;
79+ } ) ;
80+ compiler . spy ( 'compile' ) . andCallFake ( ( _ ) => PromiseWrapper . resolve ( createProtoView ( ) ) ) ;
81+ viewFactory . spy ( 'getView' ) . andCallFake ( ( _ ) => childView ) ;
82+
83+ var elementRef = createElementRef ( hostView , 23 ) ;
84+ loader . loadIntoExistingLocation ( SomeComponent , elementRef ) . then ( ( componentRef ) => {
85+ expect ( log [ 0 ] ) . toEqual ( 'hydrate' ) ;
86+ expect ( log [ 1 ] ) . toEqual ( [ 'setDynamicComponentChildView' , 23 , childView ] ) ;
87+ async . done ( ) ;
88+ } ) ;
89+ } ) ) ;
90+
3291 } ) ;
3392
3493 } ) ;
3594}
95+
96+ @Decorator ( { selector : 'someDecorator' } )
97+ class SomeDecorator { }
98+
99+ @Viewport ( { selector : 'someViewport' } )
100+ class SomeViewport { }
101+
102+ @Component ( { selector : 'someComponent' } )
103+ class SomeComponent { }
104+
105+
106+ @proxy
107+ @IMPLEMENTS ( Compiler )
108+ class SpyCompiler extends SpyObject { noSuchMethod ( m ) { return super . noSuchMethod ( m ) } }
109+
110+ @proxy
111+ @IMPLEMENTS ( ViewFactory )
112+ class SpyViewFactory extends SpyObject { noSuchMethod ( m ) { return super . noSuchMethod ( m ) } }
113+
114+ @proxy
115+ @IMPLEMENTS ( Renderer )
116+ class SpyRenderer extends SpyObject { noSuchMethod ( m ) { return super . noSuchMethod ( m ) } }
117+
118+ @proxy
119+ @IMPLEMENTS ( AppView )
120+ class SpyAppView extends SpyObject { noSuchMethod ( m ) { return super . noSuchMethod ( m ) } }
0 commit comments