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(); |
+ } |
+} |