Files
sdk/tests/language_2/vm/causal_async_exception_stack_test.dart
T
Sigmund Cherem fb29d0e96d Move async_minitest to package:async_helper.
This allows to break a circular dependency between package:expect and

package:async_helper, which will simplify the support for modular tests using
package:modular_test.
Change-Id: Ie48723d3f35d51a8fbe622e0158450e8104fe3f5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/102140
Reviewed-by: Johnni Winther <johnniwinther@google.com>
2019-05-10 19:43:58 +00:00

88 lines
2.0 KiB
Dart

// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:async_helper/async_minitest.dart';
import 'causal_async_exception_stack_helper.dart' as h;
thrower() async {
throw 'oops';
}
number() async {
return 4;
}
generator() async* {
yield await number();
yield await thrower();
}
foo() async {
await for (var i in generator()) {
print(i);
}
}
main() async {
// Test async and async*.
test('causal async exception stack', () async {
try {
await foo();
fail("Did not throw");
} catch (e, st) {
expect(
h.stringContainsInOrder(st.toString(), [
'thrower', '.dart:10', //
'<asynchronous suspension>', //
'generator', '.dart:19', //
'<asynchronous suspension>', //
'foo', '.dart:23', //
'<asynchronous suspension>', //
'main', //
]),
isTrue);
}
inner() async {
deep() async {
await thrower();
}
await deep();
}
// Test inner functions.
try {
await inner();
} catch (e, st) {
expect(
h.stringContainsInOrder(st.toString(), [
'thrower',
'<asynchronous suspension>',
'main.<anonymous closure>.inner.deep',
'<asynchronous suspension>',
'main.<anonymous closure>.inner',
'<asynchronous suspension>',
'main',
'<asynchronous suspension>',
]),
isTrue);
}
// Test for correct linkage.
try {
await thrower();
} catch (e, st) {
expect(
h.stringContainsInOrder(st.toString(), [
'thrower', '.dart:10', //
'<asynchronous suspension>', //
'main.<anonymous closure>', '.dart:76', //
]),
isTrue);
}
});
}