| 
									
										
										
										
											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; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-13 00:29:13 -07:00
										 |  |  | import 'package:angular2/testing_internal.dart'; | 
					
						
							| 
									
										
										
										
											2015-11-06 17:34:07 -08:00
										 |  |  | import 'package:angular2/src/facade/async.dart'; | 
					
						
							| 
									
										
										
										
											2015-05-15 11:46:34 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-29 10:42:47 -07:00
										 |  |  | class MockException implements Error { | 
					
						
							|  |  |  |   var message; | 
					
						
							|  |  |  |   var stackTrace; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-08-04 12:05:30 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-29 10:42:47 -07:00
										 |  |  | 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-08-04 12:05:30 -07:00
										 |  |  |       it( | 
					
						
							|  |  |  |           'should preserve Error stack traces', | 
					
						
							|  |  |  |           inject([AsyncTestCompleter], (async) { | 
					
						
							|  |  |  |             var c = PromiseWrapper.completer(); | 
					
						
							| 
									
										
										
										
											2015-05-15 11:46:34 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-04 12:05:30 -07:00
										 |  |  |             expectFunctionThatThrowsWithStackTrace(c.promise, async); | 
					
						
							| 
									
										
										
										
											2015-05-15 11:46:34 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-04 12:05:30 -07:00
										 |  |  |             try { | 
					
						
							|  |  |  |               functionThatThrows(); | 
					
						
							|  |  |  |             } catch (e) { | 
					
						
							|  |  |  |               c.reject(e, null); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |           })); | 
					
						
							| 
									
										
										
										
											2015-05-15 11:46:34 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-04 12:05:30 -07:00
										 |  |  |       it( | 
					
						
							|  |  |  |           'should preserve error stack traces for non-Errors', | 
					
						
							|  |  |  |           inject([AsyncTestCompleter], (async) { | 
					
						
							|  |  |  |             var c = PromiseWrapper.completer(); | 
					
						
							| 
									
										
										
										
											2015-05-19 12:48:00 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-04 12:05:30 -07:00
										 |  |  |             expectFunctionThatThrowsWithStackTrace(c.promise, async); | 
					
						
							| 
									
										
										
										
											2015-05-19 12:48:00 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-04 12:05:30 -07:00
										 |  |  |             try { | 
					
						
							|  |  |  |               functionThatThrowsNonError(); | 
					
						
							|  |  |  |             } catch (e, s) { | 
					
						
							|  |  |  |               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-08-04 12:05:30 -07:00
										 |  |  |         it( | 
					
						
							|  |  |  |             'should preserve Error stack traces', | 
					
						
							|  |  |  |             inject([AsyncTestCompleter], (async) { | 
					
						
							|  |  |  |               try { | 
					
						
							|  |  |  |                 functionThatThrows(); | 
					
						
							|  |  |  |               } catch (e) { | 
					
						
							|  |  |  |                 var rejectedFuture = PromiseWrapper.reject(e, null); | 
					
						
							|  |  |  |                 expectFunctionThatThrowsWithStackTrace(rejectedFuture, async); | 
					
						
							|  |  |  |               } | 
					
						
							|  |  |  |             })); | 
					
						
							| 
									
										
										
										
											2015-05-19 12:48:00 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-04 12:05:30 -07:00
										 |  |  |         it( | 
					
						
							|  |  |  |             'should preserve stack traces for non-Errors', | 
					
						
							|  |  |  |             inject([AsyncTestCompleter], (async) { | 
					
						
							|  |  |  |               try { | 
					
						
							|  |  |  |                 functionThatThrowsNonError(); | 
					
						
							|  |  |  |               } catch (e, s) { | 
					
						
							|  |  |  |                 var rejectedFuture = PromiseWrapper.reject(e, s); | 
					
						
							|  |  |  |                 expectFunctionThatThrowsWithStackTrace(rejectedFuture, async); | 
					
						
							|  |  |  |               } | 
					
						
							|  |  |  |             })); | 
					
						
							| 
									
										
										
										
											2015-05-19 12:48:00 -07:00
										 |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2015-05-15 11:46:34 -07:00
										 |  |  |   }); | 
					
						
							|  |  |  | } |