Chromium Code Reviews| Index: lib/src/backend/outstanding_callback_counter.dart |
| diff --git a/lib/src/backend/outstanding_callback_counter.dart b/lib/src/backend/outstanding_callback_counter.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..ba4ba42c783b88b1968ad96b0a957defeca574d3 |
| --- /dev/null |
| +++ b/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; |
|
kevmoo
2015/04/28 18:44:49
int!
nweiz
2015/04/28 18:56:18
It's private and its type is obvious from its init
|
| + |
| + /// 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(); |
| + } |
| +} |