101 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| /// 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';
 | |
| 
 | |
| class MockException implements Error { var message; var stackTrace; }
 | |
| class NonError { var message; }
 | |
| 
 | |
| void functionThatThrows() {
 | |
|   try { throw new MockException(); }
 | |
|   catch(e, stack) {
 | |
|     // 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() {
 | |
|   try { throw new NonError(); }
 | |
|   catch(e, stack) {
 | |
|     // 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;
 | |
|   }
 | |
| }
 | |
| 
 | |
| void expectFunctionThatThrowsWithStackTrace(
 | |
|     Future future, AsyncTestCompleter async) {
 | |
|   PromiseWrapper.catchError(future, (err, StackTrace stack) {
 | |
|     expect(stack.toString().split('\n')[0]).toEqual(err.message);
 | |
|     async.done();
 | |
|   });
 | |
| }
 | |
| 
 | |
| main() {
 | |
|   describe('async facade', () {
 | |
|     describe('Completer', () {
 | |
| 
 | |
|       it('should preserve Error stack traces',
 | |
|           inject([AsyncTestCompleter], (async) {
 | |
|         var c = PromiseWrapper.completer();
 | |
| 
 | |
|         expectFunctionThatThrowsWithStackTrace(c.promise, async);
 | |
| 
 | |
|         try {
 | |
|           functionThatThrows();
 | |
|         } catch(e) {
 | |
|           c.reject(e, null);
 | |
|         }
 | |
|       }));
 | |
| 
 | |
|       it('should preserve error stack traces for non-Errors',
 | |
|           inject([AsyncTestCompleter], (async) {
 | |
|         var c = PromiseWrapper.completer();
 | |
| 
 | |
|         expectFunctionThatThrowsWithStackTrace(c.promise, async);
 | |
| 
 | |
|         try {
 | |
|           functionThatThrowsNonError();
 | |
|         } catch(e, s) {
 | |
|           c.reject(e, s);
 | |
|         }
 | |
|       }));
 | |
| 
 | |
|     });
 | |
| 
 | |
|     describe('PromiseWrapper', () {
 | |
| 
 | |
|       describe('reject', () {
 | |
| 
 | |
|         it('should preserve Error stack traces',
 | |
|             inject([AsyncTestCompleter], (async) {
 | |
|           try {
 | |
|             functionThatThrows();
 | |
|           } catch(e) {
 | |
|             var rejectedFuture = PromiseWrapper.reject(e, null);
 | |
|             expectFunctionThatThrowsWithStackTrace(rejectedFuture, async);
 | |
|           }
 | |
|         }));
 | |
| 
 | |
|         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);
 | |
|           }
 | |
|         }));
 | |
| 
 | |
|       });
 | |
| 
 | |
|     });
 | |
| 
 | |
|   });
 | |
| }
 |