// Copyright (c) 2021, 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.

// Regression: https://github.com/dart-lang/sdk/issues/37953

import 'test_helper.dart';
import 'service_test_common.dart';

Future<void> throwAsync() async {
  await Future.delayed(const Duration(milliseconds: 100));
  throw 'Throw from throwAsync!';
}

testeeMain() async {
  await throwAsync().then((v) {
    print('Hello from then()!');
  }).catchError((e, st) {
    print('Caught in catchError: $e!');
  });
}

var tests = <IsolateTest>[
  // We shouldn't get any debugger breaks before exit as all exceptions are
  // caught (via `Future.catchError()`).
  hasStoppedAtExit,
];

main(args) => runIsolateTests(args, tests,
    pause_on_unhandled_exceptions: true,
    pause_on_exit: true,
    testeeConcurrent: testeeMain,
    extraArgs: extraDebuggingArgs);
