| Index: mojo/public/dart/third_party/test/lib/src/backend/outstanding_callback_counter.dart
|
| diff --git a/mojo/public/dart/third_party/test/lib/src/backend/outstanding_callback_counter.dart b/mojo/public/dart/third_party/test/lib/src/backend/outstanding_callback_counter.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ba4ba42c783b88b1968ad96b0a957defeca574d3
|
| --- /dev/null
|
| +++ b/mojo/public/dart/third_party/test/lib/src/backend/outstanding_callback_counter.dart
|
| @@ -0,0 +1,42 @@
|
| +// Copyright (c) 2015, 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.
|
| +
|
| +library test.backend.outstanding_callback_counter;
|
| +
|
| +import 'dart:async';
|
| +
|
| +/// A class that counts outstanding callbacks for a test and fires a future once
|
| +/// they reach zero.
|
| +///
|
| +/// The outstanding callback count automatically starts at 1.
|
| +class OutstandingCallbackCounter {
|
| + /// The number of outstanding callbacks.
|
| + var _count = 1;
|
| +
|
| + /// A future that fires when the oustanding callback count reaches 0.
|
| + Future get noOutstandingCallbacks => _completer.future;
|
| + final _completer = new Completer();
|
| +
|
| + /// Adds an outstanding callback.
|
| + void addOutstandingCallback() {
|
| + _count++;
|
| + }
|
| +
|
| + /// Removes an outstanding callback.
|
| + void removeOutstandingCallback() {
|
| + _count--;
|
| + if (_count != 0) return;
|
| + if (_completer.isCompleted) return;
|
| + _completer.complete();
|
| + }
|
| +
|
| + /// Removes all outstanding callbacks, forcing [noOutstandingCallbacks] to
|
| + /// fire.
|
| + ///
|
| + /// Future calls to [addOutstandingCallback] and [removeOutstandingCallback]
|
| + /// will be ignored.
|
| + void removeAllOutstandingCallbacks() {
|
| + if (!_completer.isCompleted) _completer.complete();
|
| + }
|
| +}
|
|
|