| 
									
										
										
										
											2015-03-13 11:10:11 +01:00
										 |  |  | import { | 
					
						
							|  |  |  |   AsyncTestCompleter, | 
					
						
							|  |  |  |   beforeEach, | 
					
						
							|  |  |  |   ddescribe, | 
					
						
							|  |  |  |   describe, | 
					
						
							|  |  |  |   expect, | 
					
						
							|  |  |  |   iit, | 
					
						
							|  |  |  |   inject, | 
					
						
							|  |  |  |   it, | 
					
						
							|  |  |  |   xdescribe, | 
					
						
							|  |  |  |   xit, | 
					
						
							|  |  |  | } from 'angular2/test_lib'; | 
					
						
							| 
									
										
										
										
											2015-01-08 09:11:33 -08:00
										 |  |  | import {bootstrap, appDocumentToken, appElementToken} | 
					
						
							| 
									
										
										
										
											2015-02-05 13:08:05 -08:00
										 |  |  |     from 'angular2/src/core/application'; | 
					
						
							|  |  |  | import {Component} from 'angular2/src/core/annotations/annotations'; | 
					
						
							| 
									
										
										
										
											2015-02-27 14:50:06 -08:00
										 |  |  | import {DOM} from 'angular2/src/dom/dom_adapter'; | 
					
						
							| 
									
										
										
										
											2015-02-05 13:08:05 -08:00
										 |  |  | import {ListWrapper} from 'angular2/src/facade/collection'; | 
					
						
							|  |  |  | import {PromiseWrapper} from 'angular2/src/facade/async'; | 
					
						
							|  |  |  | import {bind, Inject} from 'angular2/di'; | 
					
						
							| 
									
										
										
										
											2015-02-12 14:44:59 +01:00
										 |  |  | import {Template} from 'angular2/src/core/annotations/template'; | 
					
						
							| 
									
										
										
										
											2015-02-03 17:05:29 -08:00
										 |  |  | import {LifeCycle} from 'angular2/src/core/life_cycle/life_cycle'; | 
					
						
							| 
									
										
										
										
											2014-11-07 14:30:04 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-12 14:44:59 +01:00
										 |  |  | @Component({selector: 'hello-app'}) | 
					
						
							|  |  |  | @Template({inline: '{{greeting}} world!'}) | 
					
						
							| 
									
										
										
										
											2014-11-07 14:30:04 -08:00
										 |  |  | class HelloRootCmp { | 
					
						
							| 
									
										
										
										
											2014-11-21 21:19:23 -08:00
										 |  |  |   greeting:string; | 
					
						
							| 
									
										
										
										
											2014-11-07 14:30:04 -08:00
										 |  |  |   constructor() { | 
					
						
							|  |  |  |     this.greeting = 'hello'; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-10 12:30:50 -07:00
										 |  |  | @Component({selector: 'hello-app'}) | 
					
						
							|  |  |  | @Template({inline: 'before: <content></content> after: done'}) | 
					
						
							|  |  |  | class HelloRootCmpContent { | 
					
						
							|  |  |  |   constructor() { } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-12 14:44:59 +01:00
										 |  |  | @Component({selector: 'hello-app-2'}) | 
					
						
							|  |  |  | @Template({inline: '{{greeting}} world, again!'}) | 
					
						
							| 
									
										
										
										
											2014-11-07 14:30:04 -08:00
										 |  |  | class HelloRootCmp2 { | 
					
						
							| 
									
										
										
										
											2014-11-21 21:19:23 -08:00
										 |  |  |   greeting:string; | 
					
						
							| 
									
										
										
										
											2014-11-07 14:30:04 -08:00
										 |  |  |   constructor() { | 
					
						
							|  |  |  |     this.greeting = 'hello'; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-12 14:44:59 +01:00
										 |  |  | @Component({selector: 'hello-app'}) | 
					
						
							|  |  |  | @Template({inline: ''}) | 
					
						
							| 
									
										
										
										
											2015-01-08 09:11:33 -08:00
										 |  |  | class HelloRootCmp3 { | 
					
						
							|  |  |  |   appBinding; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   constructor(@Inject("appBinding") appBinding) { | 
					
						
							|  |  |  |     this.appBinding = appBinding; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-12 14:44:59 +01:00
										 |  |  | @Component({selector: 'hello-app'}) | 
					
						
							|  |  |  | @Template({inline: ''}) | 
					
						
							| 
									
										
										
										
											2015-02-03 17:05:29 -08:00
										 |  |  | class HelloRootCmp4 { | 
					
						
							|  |  |  |   lc; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   constructor(@Inject(LifeCycle) lc) { | 
					
						
							|  |  |  |     this.lc = lc; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-07 14:30:04 -08:00
										 |  |  | export function main() { | 
					
						
							| 
									
										
										
										
											2015-03-10 12:30:50 -07:00
										 |  |  |   var fakeDoc, el, el2, testBindings, lightDom; | 
					
						
							| 
									
										
										
										
											2014-11-07 14:30:04 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   beforeEach(() => { | 
					
						
							|  |  |  |     fakeDoc = DOM.createHtmlDocument(); | 
					
						
							|  |  |  |     el = DOM.createElement('hello-app', fakeDoc); | 
					
						
							|  |  |  |     el2 = DOM.createElement('hello-app-2', fakeDoc); | 
					
						
							| 
									
										
										
										
											2015-03-10 12:30:50 -07:00
										 |  |  |     lightDom = DOM.createElement('light-dom-el', fakeDoc); | 
					
						
							| 
									
										
										
										
											2014-11-07 14:30:04 -08:00
										 |  |  |     DOM.appendChild(fakeDoc.body, el); | 
					
						
							|  |  |  |     DOM.appendChild(fakeDoc.body, el2); | 
					
						
							| 
									
										
										
										
											2015-03-10 12:30:50 -07:00
										 |  |  |     DOM.appendChild(el, lightDom); | 
					
						
							|  |  |  |     DOM.setText(lightDom, 'loading'); | 
					
						
							| 
									
										
										
										
											2015-01-08 09:11:33 -08:00
										 |  |  |     testBindings = [bind(appDocumentToken).toValue(fakeDoc)]; | 
					
						
							| 
									
										
										
										
											2014-11-07 14:30:04 -08:00
										 |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe('bootstrap factory method', () => { | 
					
						
							| 
									
										
										
										
											2015-03-13 11:10:11 +01:00
										 |  |  |     it('should throw if no element is found', inject([AsyncTestCompleter], (async) => { | 
					
						
							| 
									
										
										
										
											2014-12-11 11:36:05 -08:00
										 |  |  |       var injectorPromise = bootstrap(HelloRootCmp, [], (e,t) => {throw e;}); | 
					
						
							| 
									
										
										
										
											2014-11-07 14:30:04 -08:00
										 |  |  |       PromiseWrapper.then(injectorPromise, null, (reason) => { | 
					
						
							|  |  |  |         expect(reason.message).toContain( | 
					
						
							|  |  |  |             'The app selector "hello-app" did not match any elements'); | 
					
						
							| 
									
										
										
										
											2015-03-13 11:10:11 +01:00
										 |  |  |         async.done(); | 
					
						
							| 
									
										
										
										
											2014-11-07 14:30:04 -08:00
										 |  |  |       }); | 
					
						
							| 
									
										
										
										
											2015-03-13 11:10:11 +01:00
										 |  |  |     })); | 
					
						
							| 
									
										
										
										
											2014-11-07 14:30:04 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     it('should create an injector promise', () => { | 
					
						
							| 
									
										
										
										
											2015-01-08 09:11:33 -08:00
										 |  |  |       var injectorPromise = bootstrap(HelloRootCmp, testBindings); | 
					
						
							| 
									
										
										
										
											2014-11-07 14:30:04 -08:00
										 |  |  |       expect(injectorPromise).not.toBe(null); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-13 11:10:11 +01:00
										 |  |  |     it('should resolve an injector promise and contain bindings', inject([AsyncTestCompleter], (async) => { | 
					
						
							| 
									
										
										
										
											2015-01-08 09:11:33 -08:00
										 |  |  |       var injectorPromise = bootstrap(HelloRootCmp, testBindings); | 
					
						
							| 
									
										
										
										
											2014-11-07 14:30:04 -08:00
										 |  |  |       injectorPromise.then((injector) => { | 
					
						
							|  |  |  |         expect(injector.get(appElementToken)).toBe(el); | 
					
						
							| 
									
										
										
										
											2015-03-13 11:10:11 +01:00
										 |  |  |         async.done(); | 
					
						
							| 
									
										
										
										
											2014-11-07 14:30:04 -08:00
										 |  |  |       }); | 
					
						
							| 
									
										
										
										
											2015-03-13 11:10:11 +01:00
										 |  |  |     })); | 
					
						
							| 
									
										
										
										
											2014-11-07 14:30:04 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-13 11:10:11 +01:00
										 |  |  |     it('should provide the application component in the injector', inject([AsyncTestCompleter], (async) => { | 
					
						
							| 
									
										
										
										
											2015-01-08 09:11:33 -08:00
										 |  |  |       var injectorPromise = bootstrap(HelloRootCmp, testBindings); | 
					
						
							| 
									
										
										
										
											2014-12-08 10:54:43 -08:00
										 |  |  |       injectorPromise.then((injector) => { | 
					
						
							|  |  |  |         expect(injector.get(HelloRootCmp)).toBeAnInstanceOf(HelloRootCmp); | 
					
						
							| 
									
										
										
										
											2015-03-13 11:10:11 +01:00
										 |  |  |         async.done(); | 
					
						
							| 
									
										
										
										
											2014-12-08 10:54:43 -08:00
										 |  |  |       }); | 
					
						
							| 
									
										
										
										
											2015-03-13 11:10:11 +01:00
										 |  |  |     })); | 
					
						
							| 
									
										
										
										
											2014-12-08 10:54:43 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-13 11:10:11 +01:00
										 |  |  |     it('should display hello world', inject([AsyncTestCompleter], (async) => { | 
					
						
							| 
									
										
										
										
											2015-01-08 09:11:33 -08:00
										 |  |  |       var injectorPromise = bootstrap(HelloRootCmp, testBindings); | 
					
						
							| 
									
										
										
										
											2014-11-07 14:30:04 -08:00
										 |  |  |       injectorPromise.then((injector) => { | 
					
						
							| 
									
										
										
										
											2015-03-13 11:10:11 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-10 12:30:50 -07:00
										 |  |  |         expect(injector.get(appElementToken)).toHaveText('hello world!'); | 
					
						
							| 
									
										
										
										
											2015-03-13 11:10:11 +01:00
										 |  |  |         async.done(); | 
					
						
							| 
									
										
										
										
											2014-11-07 14:30:04 -08:00
										 |  |  |       }); | 
					
						
							| 
									
										
										
										
											2015-03-13 11:10:11 +01:00
										 |  |  |     })); | 
					
						
							| 
									
										
										
										
											2014-11-07 14:30:04 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-13 11:10:11 +01:00
										 |  |  |     it('should support multiple calls to bootstrap', inject([AsyncTestCompleter], (async) => { | 
					
						
							| 
									
										
										
										
											2015-01-08 09:11:33 -08:00
										 |  |  |       var injectorPromise1 = bootstrap(HelloRootCmp, testBindings); | 
					
						
							|  |  |  |       var injectorPromise2 = bootstrap(HelloRootCmp2, testBindings); | 
					
						
							| 
									
										
										
										
											2014-11-07 14:30:04 -08:00
										 |  |  |       PromiseWrapper.all([injectorPromise1, injectorPromise2]).then((injectors) => { | 
					
						
							| 
									
										
										
										
											2015-03-10 12:30:50 -07:00
										 |  |  |         expect(injectors[0].get(appElementToken)).toHaveText('hello world!'); | 
					
						
							|  |  |  |         expect(injectors[1].get(appElementToken)).toHaveText('hello world, again!'); | 
					
						
							| 
									
										
										
										
											2015-03-13 11:10:11 +01:00
										 |  |  |         async.done(); | 
					
						
							| 
									
										
										
										
											2014-11-07 14:30:04 -08:00
										 |  |  |       }); | 
					
						
							| 
									
										
										
										
											2015-03-13 11:10:11 +01:00
										 |  |  |     })); | 
					
						
							| 
									
										
										
										
											2015-01-08 09:11:33 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-13 11:10:11 +01:00
										 |  |  |     it("should make the provided bindings available to the application component", inject([AsyncTestCompleter], (async) => { | 
					
						
							| 
									
										
										
										
											2015-01-08 09:11:33 -08:00
										 |  |  |       var injectorPromise = bootstrap(HelloRootCmp3, [ | 
					
						
							|  |  |  |         testBindings, | 
					
						
							|  |  |  |         bind("appBinding").toValue("BoundValue") | 
					
						
							|  |  |  |       ]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       injectorPromise.then((injector) => { | 
					
						
							|  |  |  |         expect(injector.get(HelloRootCmp3).appBinding).toEqual("BoundValue"); | 
					
						
							| 
									
										
										
										
											2015-03-13 11:10:11 +01:00
										 |  |  |         async.done(); | 
					
						
							| 
									
										
										
										
											2015-01-08 09:11:33 -08:00
										 |  |  |       }); | 
					
						
							| 
									
										
										
										
											2015-03-13 11:10:11 +01:00
										 |  |  |     })); | 
					
						
							| 
									
										
										
										
											2015-02-03 17:05:29 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-13 11:10:11 +01:00
										 |  |  |     it("should avoid cyclic dependencies when root component requires Lifecycle through DI", inject([AsyncTestCompleter], (async) => { | 
					
						
							| 
									
										
										
										
											2015-02-03 17:05:29 -08:00
										 |  |  |       var injectorPromise = bootstrap(HelloRootCmp4, testBindings); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       injectorPromise.then((injector) => { | 
					
						
							|  |  |  |         expect(injector.get(HelloRootCmp4).lc).toBe(injector.get(LifeCycle)); | 
					
						
							| 
									
										
										
										
											2015-03-13 11:10:11 +01:00
										 |  |  |         async.done(); | 
					
						
							| 
									
										
										
										
											2015-02-03 17:05:29 -08:00
										 |  |  |       }); | 
					
						
							| 
									
										
										
										
											2015-03-13 11:10:11 +01:00
										 |  |  |     })); | 
					
						
							| 
									
										
										
										
											2015-03-10 12:30:50 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-13 11:10:11 +01:00
										 |  |  |     it("should support shadow dom content tag", inject([AsyncTestCompleter], (async) => { | 
					
						
							| 
									
										
										
										
											2015-03-10 12:30:50 -07:00
										 |  |  |       var injectorPromise = bootstrap(HelloRootCmpContent, testBindings); | 
					
						
							|  |  |  |       injectorPromise.then((injector) => { | 
					
						
							|  |  |  |         expect(injector.get(appElementToken)).toHaveText('before: loading after: done'); | 
					
						
							| 
									
										
										
										
											2015-03-13 11:10:11 +01:00
										 |  |  |         async.done(); | 
					
						
							| 
									
										
										
										
											2015-03-10 12:30:50 -07:00
										 |  |  |       }); | 
					
						
							| 
									
										
										
										
											2015-03-13 11:10:11 +01:00
										 |  |  |     })); | 
					
						
							| 
									
										
										
										
											2014-11-07 14:30:04 -08:00
										 |  |  |   }); | 
					
						
							|  |  |  | } |