| 
									
										
										
										
											2015-05-15 11:46:34 -07:00
										 |  |  | /// This file contains tests that make sense only in Dart
 | 
					
						
							|  |  |  | library angular2.test.facade.async_dart_spec; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import 'package:angular2/test_lib.dart'; | 
					
						
							|  |  |  | import 'package:angular2/src/facade/async.dart'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-29 10:42:47 -07:00
										 |  |  | class MockException implements Error { | 
					
						
							|  |  |  |   var message; | 
					
						
							|  |  |  |   var stackTrace; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | class NonError { | 
					
						
							|  |  |  |   var message; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-05-15 11:46:34 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | void functionThatThrows() { | 
					
						
							| 
									
										
										
										
											2015-05-29 10:42:47 -07:00
										 |  |  |   try { | 
					
						
							|  |  |  |     throw new MockException(); | 
					
						
							|  |  |  |   } catch (e, stack) { | 
					
						
							| 
									
										
										
										
											2015-05-15 11:46:34 -07:00
										 |  |  |     // If we lose the stack trace the message will no longer match
 | 
					
						
							|  |  |  |     // the first line in the stack
 | 
					
						
							|  |  |  |     e.message = stack.toString().split('\n')[0]; | 
					
						
							|  |  |  |     e.stackTrace = stack; | 
					
						
							|  |  |  |     rethrow; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void functionThatThrowsNonError() { | 
					
						
							| 
									
										
										
										
											2015-05-29 10:42:47 -07:00
										 |  |  |   try { | 
					
						
							|  |  |  |     throw new NonError(); | 
					
						
							|  |  |  |   } catch (e, stack) { | 
					
						
							| 
									
										
										
										
											2015-05-19 12:48:00 -07:00
										 |  |  |     // If we lose the stack trace the message will no longer match
 | 
					
						
							|  |  |  |     // the first line in the stack
 | 
					
						
							|  |  |  |     e.message = stack.toString().split('\n')[0]; | 
					
						
							|  |  |  |     rethrow; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2015-05-15 11:46:34 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void expectFunctionThatThrowsWithStackTrace( | 
					
						
							|  |  |  |     Future future, AsyncTestCompleter async) { | 
					
						
							|  |  |  |   PromiseWrapper.catchError(future, (err, StackTrace stack) { | 
					
						
							|  |  |  |     expect(stack.toString().split('\n')[0]).toEqual(err.message); | 
					
						
							|  |  |  |     async.done(); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | main() { | 
					
						
							| 
									
										
										
										
											2015-05-19 12:48:00 -07:00
										 |  |  |   describe('async facade', () { | 
					
						
							|  |  |  |     describe('Completer', () { | 
					
						
							| 
									
										
										
										
											2015-05-29 10:42:47 -07:00
										 |  |  |       it('should preserve Error stack traces', inject([AsyncTestCompleter], | 
					
						
							|  |  |  |           (async) { | 
					
						
							| 
									
										
										
										
											2015-05-19 12:48:00 -07:00
										 |  |  |         var c = PromiseWrapper.completer(); | 
					
						
							| 
									
										
										
										
											2015-05-15 11:46:34 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-19 12:48:00 -07:00
										 |  |  |         expectFunctionThatThrowsWithStackTrace(c.promise, async); | 
					
						
							| 
									
										
										
										
											2015-05-15 11:46:34 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |         try { | 
					
						
							|  |  |  |           functionThatThrows(); | 
					
						
							| 
									
										
										
										
											2015-05-29 10:42:47 -07:00
										 |  |  |         } catch (e) { | 
					
						
							| 
									
										
										
										
											2015-05-19 12:48:00 -07:00
										 |  |  |           c.reject(e, null); | 
					
						
							| 
									
										
										
										
											2015-05-15 11:46:34 -07:00
										 |  |  |         } | 
					
						
							|  |  |  |       })); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-29 10:42:47 -07:00
										 |  |  |       it('should preserve error stack traces for non-Errors', inject( | 
					
						
							|  |  |  |           [AsyncTestCompleter], (async) { | 
					
						
							| 
									
										
										
										
											2015-05-19 12:48:00 -07:00
										 |  |  |         var c = PromiseWrapper.completer(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         expectFunctionThatThrowsWithStackTrace(c.promise, async); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-15 11:46:34 -07:00
										 |  |  |         try { | 
					
						
							|  |  |  |           functionThatThrowsNonError(); | 
					
						
							| 
									
										
										
										
											2015-05-29 10:42:47 -07:00
										 |  |  |         } catch (e, s) { | 
					
						
							| 
									
										
										
										
											2015-05-19 12:48:00 -07:00
										 |  |  |           c.reject(e, s); | 
					
						
							| 
									
										
										
										
											2015-05-15 11:46:34 -07:00
										 |  |  |         } | 
					
						
							|  |  |  |       })); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-19 12:48:00 -07:00
										 |  |  |     describe('PromiseWrapper', () { | 
					
						
							|  |  |  |       describe('reject', () { | 
					
						
							| 
									
										
										
										
											2015-05-29 10:42:47 -07:00
										 |  |  |         it('should preserve Error stack traces', inject([AsyncTestCompleter], | 
					
						
							|  |  |  |             (async) { | 
					
						
							| 
									
										
										
										
											2015-05-19 12:48:00 -07:00
										 |  |  |           try { | 
					
						
							|  |  |  |             functionThatThrows(); | 
					
						
							| 
									
										
										
										
											2015-05-29 10:42:47 -07:00
										 |  |  |           } catch (e) { | 
					
						
							| 
									
										
										
										
											2015-05-19 12:48:00 -07:00
										 |  |  |             var rejectedFuture = PromiseWrapper.reject(e, null); | 
					
						
							|  |  |  |             expectFunctionThatThrowsWithStackTrace(rejectedFuture, async); | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         })); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-29 10:42:47 -07:00
										 |  |  |         it('should preserve stack traces for non-Errors', inject( | 
					
						
							|  |  |  |             [AsyncTestCompleter], (async) { | 
					
						
							| 
									
										
										
										
											2015-05-19 12:48:00 -07:00
										 |  |  |           try { | 
					
						
							|  |  |  |             functionThatThrowsNonError(); | 
					
						
							| 
									
										
										
										
											2015-05-29 10:42:47 -07:00
										 |  |  |           } catch (e, s) { | 
					
						
							| 
									
										
										
										
											2015-05-19 12:48:00 -07:00
										 |  |  |             var rejectedFuture = PromiseWrapper.reject(e, s); | 
					
						
							|  |  |  |             expectFunctionThatThrowsWithStackTrace(rejectedFuture, async); | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         })); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2015-05-15 11:46:34 -07:00
										 |  |  |   }); | 
					
						
							|  |  |  | } |