Index: tests/lib_strong/async/zone_future_schedule_microtask_test.dart |
diff --git a/tests/lib_strong/async/zone_future_schedule_microtask_test.dart b/tests/lib_strong/async/zone_future_schedule_microtask_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9d8f8bccd73933eb18db971981548170a3c3e285 |
--- /dev/null |
+++ b/tests/lib_strong/async/zone_future_schedule_microtask_test.dart |
@@ -0,0 +1,65 @@ |
+// Copyright (c) 2013, 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 "package:expect/expect.dart"; |
+import 'dart:async'; |
+import 'package:async_helper/async_helper.dart'; |
+import 'catch_errors.dart'; |
+ |
+main() { |
+ asyncStart(); |
+ Completer done = new Completer(); |
+ |
+ // Make sure that the zones use the scheduleMicrotask of their zones. |
+ int scheduleMicrotaskCount = 0; |
+ Completer completer; |
+ Completer completer2; |
+ Future future; |
+ Future future2; |
+ runZonedScheduleMicrotask(() { |
+ completer = new Completer(); |
+ completer.complete(499); |
+ completer2 = new Completer.sync(); |
+ completer2.complete(-499); |
+ future = new Future.value(42); |
+ future2 = new Future.error(11); |
+ }, onScheduleMicrotask: (f) { |
+ scheduleMicrotaskCount++; |
+ scheduleMicrotask(f); |
+ }); |
+ int openCallbackCount = 0; |
+ |
+ openCallbackCount++; |
+ completer.future.then((x) { |
+ Expect.equals(499, x); |
+ openCallbackCount--; |
+ if (openCallbackCount == 0) done.complete(); |
+ }); |
+ |
+ openCallbackCount++; |
+ completer2.future.then((x) { |
+ Expect.equals(-499, x); |
+ openCallbackCount--; |
+ if (openCallbackCount == 0) done.complete(); |
+ }); |
+ |
+ openCallbackCount++; |
+ future.then((x) { |
+ Expect.equals(42, x); |
+ openCallbackCount--; |
+ if (openCallbackCount == 0) done.complete(); |
+ }); |
+ |
+ openCallbackCount++; |
+ future2.catchError((x) { |
+ Expect.equals(11, x); |
+ openCallbackCount--; |
+ if (openCallbackCount == 0) done.complete(); |
+ }); |
+ |
+ done.future.whenComplete(() { |
+ Expect.equals(4, scheduleMicrotaskCount); |
+ asyncEnd(); |
+ }); |
+} |