106 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| /// This file contains tests that make sense only in Dart
 | |
| library angular2.test.facade.async_dart_spec;
 | |
| 
 | |
| import 'package:angular2/testing_internal.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);
 | |
|               }
 | |
|             }));
 | |
|       });
 | |
|     });
 | |
|   });
 | |
| }
 |