blob: 727b24232b26a86f88a3a29b97f479cef285c148 [file] [log] [blame]
// 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:expect/expect.dart";
import "package:async_helper/async_helper.dart";
void main() {
x() async {
print("Starting!");
try {
await runAsync();
} catch (e, st) {
print("Got exception and stacktrace:");
var stText = st.toString();
print(e);
print(stText);
// Stacktrace should be something like
// #0 runAsync.<runAsync_async_body> (this file)
// #1 Future.Future.microtask.<anonymous closure> (dart:async/future.dart:184)
// #2 _microtaskLoop (dart:async/schedule_microtask.dart:41)
// #3 _startMicrotaskLoop (dart:async/schedule_microtask.dart:50)
// #4 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:96)
// #5 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:149)
// if exception and stacktrace is rethrown correctly, NOT
// #0 main.<anonymous closure>.async_op (this file)
// #1 _asyncErrorWrapperHelper.<anonymous closure> (dart:async:134:33)
// #2 _RootZone.runBinary (dart:async/zone.dart:1410:54)
// #3 _FutureListener.handleError (dart:async/future_impl.dart:146:20)
// #4 _Future._propagateToListeners.handleError (dart:async/future_impl.dart:649:47)
// #5 _Future._propagateToListeners (dart:async/future_impl.dart:671:13)
// #6 _Future._completeError (dart:async/future_impl.dart:485:5)
// #7 _SyncCompleter._completeError (dart:async/future_impl.dart:56:12)
// #8 _Completer.completeError (dart:async/future_impl.dart:27:5)
// #9 runAsync.async_op (this file)
// #10 Future.Future.microtask.<anonymous closure> (dart:async/future.dart:184:26)
// #11 _microtaskLoop (dart:async/schedule_microtask.dart:41:5)
// #12 _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
// #13 _runPendingImmediateCallback (dart:isolate:1054:5)
// #14 _RawReceivePortImpl._handleMessage (dart:isolate:1104:5)
Expect.isFalse(stText.contains("propagateToListeners"));
Expect.isFalse(stText.contains("_completeError"));
}
print("Ending!");
}
asyncStart();
x().then((_) => asyncEnd());
}
runAsync() async {
throw 'oh no!';
}