runTearDowns method

Future<void> runTearDowns(
  1. List<FutureOr<void> Function()> tearDowns
)

Run tearDowns in reverse order.

An exception thrown in a tearDown callback will cause the test to fail, if it isn't already failing, but it won't prevent the remaining callbacks from running. This invoker will not be closeable within the zone that the teardowns are running in.

Implementation

Future<void> runTearDowns(List<FutureOr<void> Function()> tearDowns) {
  heartbeat();
  return runZoned(() async {
    while (tearDowns.isNotEmpty) {
      var completer = Completer<void>();

      addOutstandingCallback();
      _waitForOutstandingCallbacks(() {
        Future.sync(tearDowns.removeLast()).whenComplete(completer.complete);
      }).then((_) => removeOutstandingCallback()).unawaited;

      await completer.future;
    }
  }, zoneValues: {_forceOpenForTearDownKey: true});
}