| 
									
										
										
										
											2014-11-07 14:30:04 -08:00
										 |  |  | import {describe, ddescribe, it, iit, xit, xdescribe, expect, beforeEach} from 'test_lib/test_lib'; | 
					
						
							|  |  |  | import {bootstrap, appDocumentToken, appElementToken, documentDependentBindings} | 
					
						
							|  |  |  |     from 'core/application'; | 
					
						
							| 
									
										
										
										
											2014-11-21 21:19:23 -08:00
										 |  |  | import {Component} from 'core/annotations/annotations'; | 
					
						
							| 
									
										
										
										
											2014-11-07 14:30:04 -08:00
										 |  |  | import {DOM} from 'facade/dom'; | 
					
						
							|  |  |  | import {ListWrapper} from 'facade/collection'; | 
					
						
							|  |  |  | import {PromiseWrapper} from 'facade/async'; | 
					
						
							|  |  |  | import {bind} from 'di/di'; | 
					
						
							|  |  |  | import {TemplateConfig} from 'core/annotations/template_config'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @Component({ | 
					
						
							|  |  |  |   selector: 'hello-app', | 
					
						
							|  |  |  |   template: new TemplateConfig({ | 
					
						
							|  |  |  |     inline: '{{greeting}} world!', | 
					
						
							|  |  |  |     directives: [] | 
					
						
							|  |  |  |   }) | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | class HelloRootCmp { | 
					
						
							| 
									
										
										
										
											2014-11-21 21:19:23 -08:00
										 |  |  |   greeting:string; | 
					
						
							| 
									
										
										
										
											2014-11-07 14:30:04 -08:00
										 |  |  |   constructor() { | 
					
						
							|  |  |  |     this.greeting = 'hello'; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @Component({ | 
					
						
							|  |  |  |   selector: 'hello-app-2', | 
					
						
							|  |  |  |   template: new TemplateConfig({ | 
					
						
							|  |  |  |     inline: '{{greeting}} world, again!', | 
					
						
							|  |  |  |     directives: [] | 
					
						
							|  |  |  |   }) | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | class HelloRootCmp2 { | 
					
						
							| 
									
										
										
										
											2014-11-21 21:19:23 -08:00
										 |  |  |   greeting:string; | 
					
						
							| 
									
										
										
										
											2014-11-07 14:30:04 -08:00
										 |  |  |   constructor() { | 
					
						
							|  |  |  |     this.greeting = 'hello'; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export function main() { | 
					
						
							|  |  |  |   var fakeDoc, el, el2; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   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); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   function testBindings(appComponentType) { | 
					
						
							|  |  |  |     return ListWrapper.concat([bind(appDocumentToken).toValue(fakeDoc), | 
					
						
							|  |  |  |     ], documentDependentBindings(appComponentType)); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   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', () => { | 
					
						
							|  |  |  |       var injectorPromise = bootstrap(HelloRootCmp, testBindings(HelloRootCmp)); | 
					
						
							|  |  |  |       expect(injectorPromise).not.toBe(null); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should resolve an injector promise and contain bindings', (done) => { | 
					
						
							|  |  |  |       var injectorPromise = bootstrap(HelloRootCmp, testBindings(HelloRootCmp)); | 
					
						
							|  |  |  |       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) => { | 
					
						
							|  |  |  |       var injectorPromise = bootstrap(HelloRootCmp, testBindings(HelloRootCmp)); | 
					
						
							|  |  |  |       injectorPromise.then((injector) => { | 
					
						
							|  |  |  |         expect(injector.get(HelloRootCmp)).toBeAnInstanceOf(HelloRootCmp); | 
					
						
							|  |  |  |         done(); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-07 14:30:04 -08:00
										 |  |  |     it('should display hello world', (done) => { | 
					
						
							|  |  |  |       var injectorPromise = bootstrap(HelloRootCmp, testBindings(HelloRootCmp)); | 
					
						
							|  |  |  |       injectorPromise.then((injector) => { | 
					
						
							|  |  |  |         expect(injector.get(appElementToken) | 
					
						
							|  |  |  |             .shadowRoot.childNodes[0].nodeValue).toEqual('hello world!'); | 
					
						
							|  |  |  |         done(); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should support multiple calls to bootstrap', (done) => { | 
					
						
							|  |  |  |       var injectorPromise1 = bootstrap(HelloRootCmp, testBindings(HelloRootCmp)); | 
					
						
							|  |  |  |       var injectorPromise2 = bootstrap(HelloRootCmp2, testBindings(HelloRootCmp2)); | 
					
						
							|  |  |  |       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(); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | } |