// Copyright (c) 2018, 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 'dart:async';

import '../backend/invoker.dart';

/// Runs [body] with special error-handling behavior.
///
/// Errors emitted [body] will still cause the current test to fail, but they
/// won't cause it to *stop*. In particular, they won't remove any outstanding
/// callbacks registered outside of [body].
///
/// This may only be called within a test.
Future errorsDontStopTest(dynamic Function() body) {
  var completer = Completer();

  Invoker.current!.addOutstandingCallback();
  Invoker.current!.waitForOutstandingCallbacks(() {
    Future.sync(body).whenComplete(completer.complete);
  }).then((_) => Invoker.current!.removeOutstandingCallback());

  return completer.future;
}
