@@ -14,8 +14,8 @@ import {
1414 xit ,
1515 SpyObject , proxy
1616} from 'angular2/test_lib' ;
17- import { IMPLEMENTS , isBlank } from 'angular2/src/facade/lang' ;
18- import { MapWrapper , ListWrapper } from 'angular2/src/facade/collection' ;
17+ import { IMPLEMENTS , isBlank , isPresent } from 'angular2/src/facade/lang' ;
18+ import { MapWrapper , ListWrapper , StringMapWrapper } from 'angular2/src/facade/collection' ;
1919
2020import { AppProtoView , AppView } from 'angular2/src/core/compiler/view' ;
2121import { Renderer , ViewRef } from 'angular2/src/render/api' ;
@@ -43,12 +43,13 @@ export function main() {
4343 return DirectiveBinding . createFromType ( meta . type , meta . annotation ) ;
4444 }
4545
46- function createElementInjector ( ) {
47- var res = new SpyElementInjector ( ) ;
48- res . spy ( 'isExportingComponent' ) . andCallFake ( ( ) => false ) ;
49- res . spy ( 'isExportingElement' ) . andCallFake ( ( ) => false ) ;
50- res . spy ( 'getEventEmitterAccessors' ) . andCallFake ( ( ) => [ ] ) ;
51- return res ;
46+ function createElementInjector ( overrides ) {
47+ return SpyObject . stub ( new SpyElementInjector ( ) , {
48+ 'isExportingComponent' : false ,
49+ 'isExportingElement' : false ,
50+ 'getEventEmitterAccessors' : [ ] ,
51+ 'getComponent' : null
52+ } , overrides ) ;
5253 }
5354
5455 function createEmptyElBinder ( ) {
@@ -86,13 +87,18 @@ export function main() {
8687 return view ;
8788 }
8889
89- function createHostView ( pv , shadowView , componentInstance ) {
90+ function createHostView ( pv , shadowView , componentInstance , elementInjectors = null ) {
9091 var view = new AppView ( renderer , null , null , pv , MapWrapper . create ( ) ) ;
9192 var changeDetector = new SpyChangeDetector ( ) ;
92- var eij = createElementInjector ( ) ;
93- eij . spy ( 'getComponent' ) . andCallFake ( ( ) => componentInstance ) ;
94- view . init ( changeDetector , [ eij ] , [ eij ] ,
95- [ null ] , [ shadowView ] ) ;
93+
94+ var eis ;
95+ if ( isPresent ( elementInjectors ) ) {
96+ eis = elementInjectors ;
97+ } else {
98+ eis = [ createElementInjector ( { 'getComponent' : componentInstance } ) ] ;
99+ }
100+
101+ view . init ( changeDetector , eis , eis , ListWrapper . createFixedSize ( eis . length ) , [ shadowView ] ) ;
96102 return view ;
97103 }
98104
@@ -128,9 +134,7 @@ export function main() {
128134 var pv = createHostProtoView ( null ) ;
129135 var shadowView = createEmptyView ( ) ;
130136 var view = createHostView ( pv , null , null ) ;
131- renderer . spy ( 'createDynamicComponentView' ) . andCallFake ( ( a , b , c ) => {
132- return [ new ViewRef ( ) , new ViewRef ( ) ] ;
133- } ) ;
137+ renderer . spy ( 'createDynamicComponentView' ) . andReturn ( [ new ViewRef ( ) , new ViewRef ( ) ] ) ;
134138 hydrator . hydrateDynamicComponentView ( view , 0 , shadowView , createDirectiveBinding ( SomeComponent ) , null ) ;
135139 expect (
136140 ( ) => hydrator . hydrateDynamicComponentView ( view , 0 , shadowView , null , null )
@@ -143,7 +147,7 @@ export function main() {
143147
144148 it ( 'should hydrate existing child components' , ( ) => {
145149 var hostPv = createHostProtoView ( createProtoView ( ) ) ;
146- var componentInstance = { } ;
150+ var componentInstance = new Object ( ) ;
147151 var shadowView = createEmptyView ( ) ;
148152 var hostView = createHostView ( hostPv , shadowView , componentInstance ) ;
149153 renderer . spy ( 'createInPlaceHostView' ) . andCallFake ( ( a , b , c ) => {
@@ -155,20 +159,47 @@ export function main() {
155159 expect ( shadowView . hydrated ( ) ) . toBe ( true ) ;
156160 } ) ;
157161
162+ it ( "should set up event listeners" , ( ) => {
163+ var dir = new Object ( ) ;
164+
165+ var hostPv = createProtoView ( [
166+ createComponentElBinder ( createDirectiveBinding ( SomeComponent ) ) ,
167+ createEmptyElBinder ( )
168+ ] ) ;
169+
170+ var spyEventAccessor1 = SpyObject . stub ( { "subscribe" : null } ) ;
171+ var ei1 = createElementInjector ( {
172+ 'getEventEmitterAccessors' : [ [ spyEventAccessor1 ] ] ,
173+ 'getDirectiveAtIndex' : dir
174+ } ) ;
175+
176+ var spyEventAccessor2 = SpyObject . stub ( { "subscribe" : null } ) ;
177+ var ei2 = createElementInjector ( {
178+ 'getEventEmitterAccessors' : [ [ spyEventAccessor2 ] ] ,
179+ 'getDirectiveAtIndex' : dir
180+ } ) ;
181+
182+ var shadowView = createEmptyView ( ) ;
183+ var hostView = createHostView ( hostPv , shadowView , null , [ ei1 , ei2 ] ) ;
184+ renderer . spy ( 'createInPlaceHostView' ) . andReturn ( [ new ViewRef ( ) , new ViewRef ( ) ] ) ;
185+
186+ hydrate ( hostView ) ;
187+
188+ expect ( spyEventAccessor1 . spy ( 'subscribe' ) ) . toHaveBeenCalledWith ( hostView , 0 , dir ) ;
189+ expect ( spyEventAccessor2 . spy ( 'subscribe' ) ) . toHaveBeenCalledWith ( hostView , 1 , dir ) ;
190+ } ) ;
158191 } ) ;
159192
160193 describe ( 'dehydrate... shared functionality' , ( ) => {
161194 var hostView ;
162195 var shadowView ;
163196
164197 function createAndHydrate ( nestedProtoView ) {
165- var componentInstance = { } ;
198+ var componentInstance = new Object ( ) ;
166199 shadowView = createEmptyView ( ) ;
167200 var hostPv = createHostProtoView ( nestedProtoView ) ;
168201 hostView = createHostView ( hostPv , shadowView , componentInstance ) ;
169- renderer . spy ( 'createInPlaceHostView' ) . andCallFake ( ( a , b , c ) => {
170- return [ new ViewRef ( ) , new ViewRef ( ) ] ;
171- } ) ;
202+ renderer . spy ( 'createInPlaceHostView' ) . andReturn ( [ new ViewRef ( ) , new ViewRef ( ) ] ) ;
172203
173204 hydrate ( hostView ) ;
174205 }
0 commit comments