| 
									
										
										
										
											2016-08-02 07:38:14 -07:00
										 |  |  | /** | 
					
						
							|  |  |  |  * @license | 
					
						
							|  |  |  |  * Copyright Google Inc. All Rights Reserved. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Use of this source code is governed by an MIT-style license that can be | 
					
						
							|  |  |  |  * found in the LICENSE file at https://angular.io/license
 | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2016-08-02 07:54:14 -07:00
										 |  |  | import {APP_INITIALIZER, ApplicationInitStatus} from '../src/application_init'; | 
					
						
							| 
									
										
										
										
											2016-09-27 17:12:25 -07:00
										 |  |  | import {TestBed, async, inject} from '../testing'; | 
					
						
							| 
									
										
										
										
											2016-08-02 07:38:14 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | export function main() { | 
					
						
							| 
									
										
										
										
											2016-08-02 07:54:14 -07:00
										 |  |  |   describe('ApplicationInitStatus', () => { | 
					
						
							| 
									
										
										
										
											2016-08-02 07:38:14 -07:00
										 |  |  |     describe('no initializers', () => { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should return true for `done`', | 
					
						
							| 
									
										
										
										
											2016-08-19 12:10:53 -07:00
										 |  |  |          async(inject([ApplicationInitStatus], (status: ApplicationInitStatus) => { | 
					
						
							| 
									
										
										
										
											2016-08-02 07:54:14 -07:00
										 |  |  |            expect(status.done).toBe(true); | 
					
						
							| 
									
										
										
										
											2016-08-19 12:10:53 -07:00
										 |  |  |          }))); | 
					
						
							| 
									
										
										
										
											2016-08-02 07:38:14 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |       it('should return a promise that resolves immediately for `donePromise`', | 
					
						
							| 
									
										
										
										
											2016-08-02 07:54:14 -07:00
										 |  |  |          async(inject([ApplicationInitStatus], (status: ApplicationInitStatus) => { | 
					
						
							| 
									
										
										
										
											2016-08-02 07:38:14 -07:00
										 |  |  |            status.donePromise.then(() => { expect(status.done).toBe(true); }); | 
					
						
							|  |  |  |          }))); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     describe('with async initializers', () => { | 
					
						
							| 
									
										
										
										
											2016-08-02 15:53:34 -07:00
										 |  |  |       let resolve: (result: any) => void; | 
					
						
							|  |  |  |       let promise: Promise<any>; | 
					
						
							| 
									
										
										
										
											2016-08-02 07:38:14 -07:00
										 |  |  |       beforeEach(() => { | 
					
						
							| 
									
										
										
										
											2016-08-02 15:53:34 -07:00
										 |  |  |         promise = new Promise((res) => { resolve = res; }); | 
					
						
							|  |  |  |         TestBed.configureTestingModule( | 
					
						
							|  |  |  |             {providers: [{provide: APP_INITIALIZER, multi: true, useValue: () => promise}]}); | 
					
						
							| 
									
										
										
										
											2016-08-02 07:38:14 -07:00
										 |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-30 00:41:21 +07:00
										 |  |  |       it('should update the status once all async initializers are done', | 
					
						
							| 
									
										
										
										
											2016-08-02 07:54:14 -07:00
										 |  |  |          async(inject([ApplicationInitStatus], (status: ApplicationInitStatus) => { | 
					
						
							| 
									
										
										
										
											2016-08-02 07:38:14 -07:00
										 |  |  |            let completerResolver = false; | 
					
						
							|  |  |  |            setTimeout(() => { | 
					
						
							|  |  |  |              completerResolver = true; | 
					
						
							| 
									
										
										
										
											2016-08-02 15:53:34 -07:00
										 |  |  |              resolve(null); | 
					
						
							| 
									
										
										
										
											2016-08-02 07:38:14 -07:00
										 |  |  |            }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |            expect(status.done).toBe(false); | 
					
						
							|  |  |  |            status.donePromise.then(() => { | 
					
						
							|  |  |  |              expect(status.done).toBe(true); | 
					
						
							|  |  |  |              expect(completerResolver).toBe(true); | 
					
						
							|  |  |  |            }); | 
					
						
							|  |  |  |          }))); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2016-08-02 15:53:34 -07:00
										 |  |  | } |