| 
									
										
										
										
											2016-06-23 09:47:54 -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-04-26 13:06:50 -07:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Wraps a test function in an asynchronous test zone. The test will automatically | 
					
						
							|  |  |  |  * complete when all asynchronous calls within this zone are done. Can be used | 
					
						
							|  |  |  |  * to wrap an {@link inject} call. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Example: | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * ```
 | 
					
						
							|  |  |  |  * it('...', async(inject([AClass], (object) => { | 
					
						
							|  |  |  |  *   object.doSomething.then(() => { | 
					
						
							|  |  |  |  *     expect(...); | 
					
						
							|  |  |  |  *   }) | 
					
						
							|  |  |  |  * }); | 
					
						
							|  |  |  |  * ```
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | export function async(fn: Function): Function { | 
					
						
							| 
									
										
										
										
											2016-05-26 13:33:53 -07:00
										 |  |  |   return () => new Promise<void>((finishCallback, failCallback) => { | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |            var AsyncTestZoneSpec = (Zone as any /** TODO #9100 */)['AsyncTestZoneSpec']; | 
					
						
							| 
									
										
										
										
											2016-06-23 17:10:22 -07:00
										 |  |  |            if (AsyncTestZoneSpec === undefined) { | 
					
						
							|  |  |  |              throw new Error( | 
					
						
							|  |  |  |                  'AsyncTestZoneSpec is needed for the async() test helper but could not be found. ' + | 
					
						
							|  |  |  |                  'Please make sure that your environment includes zone.js/dist/async-test.js'); | 
					
						
							|  |  |  |            } | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |            var testZoneSpec = new AsyncTestZoneSpec(finishCallback, failCallback, 'test'); | 
					
						
							|  |  |  |            var testZone = Zone.current.fork(testZoneSpec); | 
					
						
							|  |  |  |            return testZone.run(fn); | 
					
						
							|  |  |  |          }); | 
					
						
							| 
									
										
										
										
											2016-04-26 13:06:50 -07:00
										 |  |  | } |