| 
									
										
										
										
											2015-02-05 13:08:05 -08:00
										 |  |  | import {describe, ddescribe, it, iit, xit, xdescribe, expect, beforeEach} 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-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-01-08 09:11:33 -08:00
										 |  |  |   var fakeDoc, el, el2, testBindings; | 
					
						
							| 
									
										
										
										
											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); | 
					
						
							|  |  |  |     DOM.appendChild(fakeDoc.body, el); | 
					
						
							|  |  |  |     DOM.appendChild(fakeDoc.body, el2); | 
					
						
							| 
									
										
										
										
											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', () => { | 
					
						
							|  |  |  |     it('should throw if no element is found', (done) => { | 
					
						
							| 
									
										
										
										
											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'); | 
					
						
							|  |  |  |         done(); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     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); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should resolve an injector promise and contain bindings', (done) => { | 
					
						
							| 
									
										
										
										
											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); | 
					
						
							|  |  |  |         done(); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-08 10:54:43 -08:00
										 |  |  |     it('should provide the application component in the injector', (done) => { | 
					
						
							| 
									
										
										
										
											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); | 
					
						
							|  |  |  |         done(); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-07 14:30:04 -08:00
										 |  |  |     it('should display hello world', (done) => { | 
					
						
							| 
									
										
										
										
											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) | 
					
						
							|  |  |  |             .shadowRoot.childNodes[0].nodeValue).toEqual('hello world!'); | 
					
						
							|  |  |  |         done(); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should support multiple calls to bootstrap', (done) => { | 
					
						
							| 
									
										
										
										
											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) => { | 
					
						
							|  |  |  |         expect(injectors[0].get(appElementToken) | 
					
						
							|  |  |  |             .shadowRoot.childNodes[0].nodeValue).toEqual('hello world!'); | 
					
						
							|  |  |  |         expect(injectors[1].get(appElementToken) | 
					
						
							|  |  |  |             .shadowRoot.childNodes[0].nodeValue).toEqual('hello world, again!'); | 
					
						
							|  |  |  |         done(); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2015-01-08 09:11:33 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-09 15:11:31 +01:00
										 |  |  |     it("should make the provided bindings available to the application component", (done) => { | 
					
						
							| 
									
										
										
										
											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"); | 
					
						
							|  |  |  |         done(); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2015-02-03 17:05:29 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     it("should avoid cyclic dependencies when root component requires Lifecycle through DI", (done) => { | 
					
						
							|  |  |  |       var injectorPromise = bootstrap(HelloRootCmp4, testBindings); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       injectorPromise.then((injector) => { | 
					
						
							|  |  |  |         expect(injector.get(HelloRootCmp4).lc).toBe(injector.get(LifeCycle)); | 
					
						
							|  |  |  |         done(); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2014-11-07 14:30:04 -08:00
										 |  |  |   }); | 
					
						
							|  |  |  | } |