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);
 | 
						|
          }
 | 
						|
        }));
 | 
						|
 | 
						|
      });
 | 
						|
 | 
						|
    });
 | 
						|
 | 
						|
  });
 | 
						|
}
 |