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