Additional strong-mode fixes (down to 0 after this PR) (#13)

* Additional strong-mode fixes

* Revert infererred types
diff --git a/test/cancelable_operation_test.dart b/test/cancelable_operation_test.dart
index 4d8c295..f30c134 100644
--- a/test/cancelable_operation_test.dart
+++ b/test/cancelable_operation_test.dart
@@ -14,7 +14,7 @@
     var completer;
     setUp(() {
       completer = new CancelableCompleter(
-          onCancel: expectAsync(() {}, count: 0));
+          onCancel: expectAsync0(() {}, count: 0));
     });
 
     test("sends values to the future", () {
@@ -107,7 +107,7 @@
   group("when canceled", () {
     test("causes the future never to fire", () async {
       var completer = new CancelableCompleter();
-      completer.operation.value.whenComplete(expectAsync(() {}, count: 0));
+      completer.operation.value.whenComplete(expectAsync0(() {}, count: 0));
       completer.operation.cancel();
 
       // Give the future plenty of time to fire if it's going to.
@@ -119,7 +119,7 @@
     test("fires onCancel", () {
       var canceled = false;
       var completer;
-      completer = new CancelableCompleter(onCancel: expectAsync(() {
+      completer = new CancelableCompleter(onCancel: expectAsync0(() {
         expect(completer.isCanceled, isTrue);
         canceled = true;
       }));
@@ -134,7 +134,7 @@
     });
 
     test("returns the onCancel future each time cancel is called", () {
-      var completer = new CancelableCompleter(onCancel: expectAsync(() {
+      var completer = new CancelableCompleter(onCancel: expectAsync0(() {
         return new Future.value(1);
       }));
       expect(completer.operation.cancel(), completion(equals(1)));
@@ -143,13 +143,13 @@
     });
 
     test("returns a future even if onCancel doesn't", () {
-      var completer = new CancelableCompleter(onCancel: expectAsync(() {}));
+      var completer = new CancelableCompleter(onCancel: expectAsync0(() {}));
       expect(completer.operation.cancel(), completes);
     });
 
     test("doesn't call onCancel if the completer has completed", () {
       var completer = new CancelableCompleter(
-          onCancel: expectAsync(() {}, count: 0));
+          onCancel: expectAsync0(() {}, count: 0));
       completer.complete(1);
       expect(completer.operation.value, completion(equals(1)));
       expect(completer.operation.cancel(), completes);
@@ -157,7 +157,7 @@
 
     test("does call onCancel if the completer has completed to an unfired "
         "Future", () {
-      var completer = new CancelableCompleter(onCancel: expectAsync(() {}));
+      var completer = new CancelableCompleter(onCancel: expectAsync0(() {}));
       completer.complete(new Completer().future);
       expect(completer.operation.cancel(), completes);
     });
@@ -165,7 +165,7 @@
     test("doesn't call onCancel if the completer has completed to a fired "
         "Future", () async {
       var completer = new CancelableCompleter(
-          onCancel: expectAsync(() {}, count: 0));
+          onCancel: expectAsync0(() {}, count: 0));
       completer.complete(new Future.value(1));
       await completer.operation.value;
       expect(completer.operation.cancel(), completes);
@@ -173,7 +173,7 @@
 
     test("can be completed once after being canceled", () async {
       var completer = new CancelableCompleter();
-      completer.operation.value.whenComplete(expectAsync(() {}, count: 0));
+      completer.operation.value.whenComplete(expectAsync0(() {}, count: 0));
       await completer.operation.cancel();
       completer.complete(1);
       expect(() => completer.complete(1), throwsStateError);
@@ -228,10 +228,10 @@
     });
 
     test("cancels the completer when the subscription is canceled", () {
-      var completer = new CancelableCompleter(onCancel: expectAsync(() {}));
+      var completer = new CancelableCompleter(onCancel: expectAsync0(() {}));
       var sub = completer.operation.asStream()
-          .listen(expectAsync((_) {}, count: 0));
-      completer.operation.value.whenComplete(expectAsync(() {}, count: 0));
+          .listen(expectAsync1((_) {}, count: 0));
+      completer.operation.value.whenComplete(expectAsync0(() {}, count: 0));
       sub.cancel();
       expect(completer.isCanceled, isTrue);
     });
diff --git a/test/future_group_test.dart b/test/future_group_test.dart
index 09ea29a..af04799 100644
--- a/test/future_group_test.dart
+++ b/test/future_group_test.dart
@@ -187,16 +187,16 @@
       var onIdleDone = false;
       var futureFired = false;
 
-      futureGroup.onIdle.listen(expectAsync((_) {
+      futureGroup.onIdle.listen(expectAsync1((_) {
         expect(futureFired, isFalse);
         idle = true;
-      }), onDone: expectAsync(() {
+      }), onDone: expectAsync0(() {
         expect(idle, isTrue);
         expect(futureFired, isFalse);
         onIdleDone = true;
       }));
 
-      futureGroup.future.then(expectAsync((_) {
+      futureGroup.future.then(expectAsync1((_) {
         expect(idle, isTrue);
         expect(onIdleDone, isTrue);
         futureFired = true;
diff --git a/test/lazy_stream_test.dart b/test/lazy_stream_test.dart
index 63f2a19..8da1366 100644
--- a/test/lazy_stream_test.dart
+++ b/test/lazy_stream_test.dart
@@ -16,7 +16,7 @@
 
   test("calls the callback when the stream is listened", () async {
     var callbackCalled = false;
-    var stream = new LazyStream(expectAsync(() {
+    var stream = new LazyStream(expectAsync0(() {
       callbackCalled = true;
       return new Stream.empty();
     }));
@@ -30,7 +30,7 @@
 
   test("calls the callback when the stream is listened", () async {
     var callbackCalled = false;
-    var stream = new LazyStream(expectAsync(() {
+    var stream = new LazyStream(expectAsync0(() {
       callbackCalled = true;
       return new Stream.empty();
     }));
@@ -44,7 +44,7 @@
 
   test("forwards to a synchronously-provided stream", () async {
     var controller = new StreamController<int>();
-    var stream = new LazyStream(expectAsync(() => controller.stream));
+    var stream = new LazyStream(expectAsync0(() => controller.stream));
 
     var events = [];
     stream.listen(events.add);
@@ -66,7 +66,7 @@
 
   test("forwards to an asynchronously-provided stream", () async {
     var controller = new StreamController<int>();
-    var stream = new LazyStream(expectAsync(() async => controller.stream));
+    var stream = new LazyStream(expectAsync0(() async => controller.stream));
 
     var events = [];
     stream.listen(events.add);
@@ -87,7 +87,7 @@
   });
 
   test("a lazy stream can't be listened to multiple times", () {
-    var stream = new LazyStream(expectAsync(() => new Stream.empty()));
+    var stream = new LazyStream(expectAsync0(() => new Stream.empty()));
     expect(stream.isBroadcast, isFalse);
 
     stream.listen(null);
@@ -97,7 +97,7 @@
 
   test("a lazy stream can't be listened to from within its callback", () {
     var stream;
-    stream = new LazyStream(expectAsync(() {
+    stream = new LazyStream(expectAsync0(() {
       expect(() => stream.listen(null), throwsStateError);
       return new Stream.empty();
     }));
diff --git a/test/restartable_timer_test.dart b/test/restartable_timer_test.dart
index f1c53fc..b612f6e 100644
--- a/test/restartable_timer_test.dart
+++ b/test/restartable_timer_test.dart
@@ -101,7 +101,7 @@
     new FakeAsync().run((async) {
       new RestartableTimer(
           new Duration(seconds: 5),
-          expectAsync(() {}, count: 1));
+          expectAsync0(() {}, count: 1));
       async.elapse(new Duration(seconds: 10));
     });
   });
diff --git a/test/result_test.dart b/test/result_test.dart
index 1c5f335..21e251c 100644
--- a/test/result_test.dart
+++ b/test/result_test.dart
@@ -58,7 +58,7 @@
   test("complete with value", () {
     Result<int> result = new ValueResult<int>(42);
     var c = new Completer<int>();
-    c.future.then(expectAsync((int v) { expect(v, equals(42)); }),
+    c.future.then(expectAsync1((int v) { expect(v, equals(42)); }),
                   onError: (e, s) { fail("Unexpected error"); });
     result.complete(c);
   });
@@ -67,7 +67,7 @@
     Result<bool> result = new ErrorResult("BAD", stack);
     var c = new Completer<bool>();
     c.future.then((bool v) { fail("Unexpected value $v"); },
-                  onError: expectAsync((e, s) {
+                  onError: expectAsync2((e, s) {
                     expect(e, equals("BAD"));
                     expect(s, same(stack));
                   }));
@@ -77,7 +77,7 @@
   test("add sink value", () {
     var result = new ValueResult<int>(42);
     EventSink<int> sink = new TestSink(
-        onData: expectAsync((v) { expect(v, equals(42)); })
+        onData: expectAsync1((v) { expect(v, equals(42)); })
     );
     result.addTo(sink);
   });
@@ -85,7 +85,7 @@
   test("add sink error", () {
     Result<bool> result = new ErrorResult("BAD", stack);
     EventSink<bool> sink = new TestSink(
-        onError: expectAsync((e, s) {
+        onError: expectAsync2((e, s) {
           expect(e, equals("BAD"));
           expect(s, same(stack));
         })
@@ -95,14 +95,14 @@
 
   test("value as future", () {
     Result<int> result = new ValueResult<int>(42);
-    result.asFuture.then(expectAsync((int v) { expect(v, equals(42)); }),
+    result.asFuture.then(expectAsync1((int v) { expect(v, equals(42)); }),
                          onError: (e, s) { fail("Unexpected error"); });
   });
 
   test("error as future", () {
     Result<bool> result = new ErrorResult("BAD", stack);
     result.asFuture.then((bool v) { fail("Unexpected value $v"); },
-                         onError: expectAsync((e, s) {
+                         onError: expectAsync2((e, s) {
                            expect(e, equals("BAD"));
                            expect(s, same(stack));
                          }));
@@ -110,7 +110,7 @@
 
   test("capture future value", () {
     Future<int> value = new Future<int>.value(42);
-    Result.capture(value).then(expectAsync((Result result) {
+    Result.capture(value).then(expectAsync1((Result result) {
       expect(result.isValue, isTrue);
       expect(result.isError, isFalse);
       ValueResult value = result.asValue;
@@ -122,7 +122,7 @@
 
   test("capture future error", () {
     Future<bool> value = new Future<bool>.error("BAD", stack);
-    Result.capture(value).then(expectAsync((Result result) {
+    Result.capture(value).then(expectAsync1((Result result) {
       expect(result.isValue, isFalse);
       expect(result.isError, isTrue);
       ErrorResult error = result.asError;
@@ -136,7 +136,7 @@
   test("release future value", () {
     Future<Result<int>> future =
         new Future<Result<int>>.value(new Result<int>.value(42));
-    Result.release(future).then(expectAsync((v) {
+    Result.release(future).then(expectAsync1((v) {
       expect(v, equals(42));
     }), onError: (e, s) {
       fail("Unexpected error: $e");
@@ -149,7 +149,7 @@
         new Future<Result<bool>>.value(new Result<bool>.error("BAD", stack));
     Result.release(future).then((v) {
       fail("Unexpected value: $v");
-    }, onError: expectAsync((e, s) {
+    }, onError: expectAsync2((e, s) {
       expect(e, equals("BAD"));
       expect(s, same(stack));
     }));
@@ -160,7 +160,7 @@
     Future<Result<bool>> future = new Future<Result<bool>>.error("BAD", stack);
     Result.release(future).then((v) {
       fail("Unexpected value: $v");
-    }, onError: expectAsync((e, s) {
+    }, onError: expectAsync2((e, s) {
       expect(e, equals("BAD"));
       expect(s, same(stack));
     }));
@@ -176,9 +176,9 @@
       expect(expectedList.isEmpty, isFalse);
       expectResult(actual, expectedList.removeFirst());
     }
-    stream.listen(expectAsync(listener, count: 3),
+    stream.listen(expectAsync1(listener, count: 3),
                   onError: (e, s) { fail("Unexpected error: $e"); },
-                  onDone: expectAsync((){}),
+                  onDone: expectAsync0((){}),
                   cancelOnError: true);
     c.add(42);
     c.addError("BAD", stack);
@@ -211,9 +211,9 @@
       expect(stackTrace, same(expected.asError.stackTrace));
     }
 
-    stream.listen(expectAsync(dataListener, count: 2),
-                  onError: expectAsync(errorListener, count: 2),
-                  onDone: expectAsync((){}));
+    stream.listen(expectAsync1(dataListener, count: 2),
+                  onError: expectAsync2(errorListener, count: 2),
+                  onDone: expectAsync0((){}));
     for (Result<int> result in events) {
       c.add(result);  // Result value or error in data line.
     }
@@ -224,8 +224,8 @@
   test("release stream cancel on error", () {
     StreamController<Result<int>> c = new StreamController<Result<int>>();
     Stream<int> stream = Result.releaseStream(c.stream);
-    stream.listen(expectAsync((v) { expect(v, equals(42)); }),
-                  onError: expectAsync((e, s) {
+    stream.listen(expectAsync1((v) { expect(v, equals(42)); }),
+                  onError: expectAsync2((e, s) {
                     expect(e, equals("BAD"));
                     expect(s, same(stack));
                   }),
@@ -259,7 +259,7 @@
   });
 
   test("handle unary", () {
-    var result = new Result.error("error", stack);
+    ErrorResult result = new Result.error("error", stack);
     bool called = false;
     result.handle((error) {
       called = true;
@@ -269,7 +269,7 @@
   });
 
   test("handle binary", () {
-    var result = new Result.error("error", stack);
+    ErrorResult result = new Result.error("error", stack);
     bool called = false;
     result.handle((error, stackTrace) {
       called = true;
@@ -280,7 +280,7 @@
   });
 
   test("handle unary and binary", () {
-    var result = new Result.error("error", stack);
+    ErrorResult result = new Result.error("error", stack);
     bool called = false;
     result.handle((error, [stackTrace]) {
       called = true;
@@ -291,7 +291,7 @@
   });
 
   test("handle neither unary nor binary", () {
-    var result = new Result.error("error", stack);
+    ErrorResult result = new Result.error("error", stack);
     expect(() => result.handle(() => fail("unreachable")),
            throws);
     expect(() => result.handle((a, b, c) => fail("unreachable")),
diff --git a/test/stream_completer_test.dart b/test/stream_completer_test.dart
index 6eb5138..dea73d7 100644
--- a/test/stream_completer_test.dart
+++ b/test/stream_completer_test.dart
@@ -343,10 +343,10 @@
       var completer = new StreamCompleter();
       completer.stream.listen(
           unreachable("data"),
-          onError: expectAsync((error, stackTrace) {
+          onError: expectAsync2((error, stackTrace) {
             expect(error, equals("oh no"));
           }),
-          onDone: expectAsync(() {}));
+          onDone: expectAsync0(() {}));
 
       completer.setError("oh no");
     });
@@ -359,10 +359,10 @@
 
       completer.stream.listen(
           unreachable("data"),
-          onError: expectAsync((error, stackTrace) {
+          onError: expectAsync2((error, stackTrace) {
             expect(error, equals("oh no"));
           }),
-          onDone: expectAsync(() {}));
+          onDone: expectAsync0(() {}));
     });
   });
 }
diff --git a/test/stream_group_test.dart b/test/stream_group_test.dart
index 76b69b9..078dc3c 100644
--- a/test/stream_group_test.dart
+++ b/test/stream_group_test.dart
@@ -211,7 +211,7 @@
         var canceled = false;
         var controller = new StreamController<String>(onListen: () {
           listened = true;
-        }, onCancel: expectAsync(() {
+        }, onCancel: expectAsync0(() {
           expect(listened, isTrue);
           canceled = true;
         }));
@@ -357,7 +357,7 @@
       var subscription = streamGroup.stream.listen(null);
 
       var controller = new StreamController<String>(
-          onCancel: expectAsync(() {}, count: 0));
+          onCancel: expectAsync0(() {}, count: 0));
 
       streamGroup.add(controller.stream);
       await flushMicrotasks();
diff --git a/test/stream_queue_test.dart b/test/stream_queue_test.dart
index 5140890..54d470d 100644
--- a/test/stream_queue_test.dart
+++ b/test/stream_queue_test.dart
@@ -150,7 +150,7 @@
       var skip4 = events.skip(1);
       var index = 0;
       // Check that futures complete in order.
-      sequence(expectedValue, sequenceIndex) => (value) {
+      Func1Required<int> sequence(expectedValue, sequenceIndex) => (value) {
         expect(value, expectedValue);
         expect(index, sequenceIndex);
         index++;
@@ -672,6 +672,8 @@
   });
 }
 
+typedef T Func1Required<T>(T value);
+
 Stream<int> createStream() async* {
   yield 1;
   await flushMicrotasks();
diff --git a/test/stream_sink_completer_test.dart b/test/stream_sink_completer_test.dart
index 82393fc..c7ce1ea 100644
--- a/test/stream_sink_completer_test.dart
+++ b/test/stream_sink_completer_test.dart
@@ -73,7 +73,7 @@
       completer.setDestinationSink(sink);
 
       var closeCompleted = false;
-      completer.sink.close().then(expectAsync((_) {
+      completer.sink.close().then(expectAsync1((_) {
         closeCompleted = true;
       }));
 
@@ -174,7 +174,7 @@
 
     test("the future from the inner close() is returned", () async {
       var closeCompleted = false;
-      completer.sink.close().then(expectAsync((_) {
+      completer.sink.close().then(expectAsync1((_) {
         closeCompleted = true;
       }));
       await flushMicrotasks();
@@ -247,7 +247,7 @@
 
   group("fromFuture()", () {
     test("with a successful completion", () async {
-      var futureCompleter = new Completer();
+      var futureCompleter = new Completer<StreamSink>();
       var sink = StreamSinkCompleter.fromFuture(futureCompleter.future);
       sink.add(1);
       sink.add(2);
@@ -264,7 +264,7 @@
     });
 
     test("with an error", () async {
-      var futureCompleter = new Completer();
+      var futureCompleter = new Completer<StreamSink>();
       var sink = StreamSinkCompleter.fromFuture(futureCompleter.future);
       expect(sink.done, throwsA("oh no"));
       futureCompleter.completeError("oh no");
diff --git a/test/stream_sink_transformer_test.dart b/test/stream_sink_transformer_test.dart
index 70e7e6c..6be9f9e 100644
--- a/test/stream_sink_transformer_test.dart
+++ b/test/stream_sink_transformer_test.dart
@@ -24,7 +24,7 @@
       var sink = transformer.bind(controller.sink);
 
       var results = [];
-      controller.stream.listen(results.add, onDone: expectAsync(() {
+      controller.stream.listen(results.add, onDone: expectAsync0(() {
         expect(results, equals([2, 4, 6]));
       }));
 
@@ -38,16 +38,16 @@
       var transformer = new StreamSinkTransformer.fromStreamTransformer(
           new StreamTransformer.fromHandlers(
               handleError: (i, stackTrace, sink) {
-                sink.addError(i * 2, stackTrace);
+                sink.addError((i as num) * 2, stackTrace);
               }));
       var sink = transformer.bind(controller.sink);
 
       var results = [];
-      controller.stream.listen(expectAsync((_) {}, count: 0),
+      controller.stream.listen(expectAsync1((_) {}, count: 0),
           onError: (error, stackTrace) {
             results.add(error);
           },
-          onDone: expectAsync(() {
+          onDone: expectAsync0(() {
             expect(results, equals([2, 4, 6]));
           }));
 
@@ -67,7 +67,7 @@
       var sink = transformer.bind(controller.sink);
 
       var results = [];
-      controller.stream.listen(results.add, onDone: expectAsync(() {
+      controller.stream.listen(results.add, onDone: expectAsync0(() {
         expect(results, equals([1]));
       }));
 
@@ -126,7 +126,7 @@
       var sink = transformer.bind(controller.sink);
 
       var results = [];
-      controller.stream.listen(results.add, onDone: expectAsync(() {
+      controller.stream.listen(results.add, onDone: expectAsync0(() {
         expect(results, equals([2, 4, 6]));
       }));
 
@@ -139,16 +139,16 @@
     test("transforms error events", () {
       var transformer = new StreamSinkTransformer.fromHandlers(
           handleError: (i, stackTrace, sink) {
-            sink.addError(i * 2, stackTrace);
+            sink.addError((i as num) * 2, stackTrace);
           });
       var sink = transformer.bind(controller.sink);
 
       var results = [];
-      controller.stream.listen(expectAsync((_) {}, count: 0),
+      controller.stream.listen(expectAsync1((_) {}, count: 0),
           onError: (error, stackTrace) {
             results.add(error);
           },
-          onDone: expectAsync(() {
+          onDone: expectAsync0(() {
             expect(results, equals([2, 4, 6]));
           }));
 
@@ -167,7 +167,7 @@
       var sink = transformer.bind(controller.sink);
 
       var results = [];
-      controller.stream.listen(results.add, onDone: expectAsync(() {
+      controller.stream.listen(results.add, onDone: expectAsync0(() {
         expect(results, equals([1]));
       }));
 
diff --git a/test/stream_splitter_test.dart b/test/stream_splitter_test.dart
index 077ba22..c562305 100644
--- a/test/stream_splitter_test.dart
+++ b/test/stream_splitter_test.dart
@@ -47,15 +47,15 @@
     controller.close();
 
     var count = 0;
-    branch.listen(expectAsync((value) {
+    branch.listen(expectAsync1((value) {
       expect(count, anyOf(0, 2));
       expect(value, equals(count + 1));
       count++;
-    }, count: 2), onError: expectAsync((error) {
+    }, count: 2), onError: expectAsync1((error) {
       expect(count, equals(1));
       expect(error, equals("error"));
       count++;
-    }), onDone: expectAsync(() {
+    }), onDone: expectAsync0(() {
       expect(count, equals(3));
     }));
   });
diff --git a/test/stream_zip_test.dart b/test/stream_zip_test.dart
index a00d8bd..958d1f2 100644
--- a/test/stream_zip_test.dart
+++ b/test/stream_zip_test.dart
@@ -39,7 +39,7 @@
   testZip(Iterable<Stream> streams, Iterable expectedData) {
     List data = [];
     Stream zip = new StreamZip(streams);
-    zip.listen(data.add, onDone: expectAsync(() {
+    zip.listen(data.add, onDone: expectAsync0(() {
       expect(data, equals(expectedData));
     }));
   }
@@ -174,7 +174,7 @@
         sc2p--;
       });
 
-    var done = expectAsync((){
+    var done = expectAsync0((){
       expect(sc1p, equals(1));
       expect(sc2p, equals(0));
     });  // Call to complete test.
@@ -220,7 +220,7 @@
     var sz = new StreamZip([s1, s2]);
     int ctr = 0;
     var sub;
-    sub = sz.listen(expectAsync((v) {
+    sub = sz.listen(expectAsync1((v) {
       expect(v, equals([ctr * 2, ctr * 2 + 1]));
       if (ctr == 1) {
         sub.pause(new Future.delayed(const Duration(milliseconds: 25)));
diff --git a/test/stream_zip_zone_test.dart b/test/stream_zip_zone_test.dart
index 47957a9..af4d94a 100644
--- a/test/stream_zip_zone_test.dart
+++ b/test/stream_zip_zone_test.dart
@@ -33,15 +33,15 @@
     runZoned(() {
       Zone newZone1 = Zone.current;
       StreamSubscription sub;
-      sub = stream.listen(expectAsync((v) {
+      sub = stream.listen(expectAsync1((v) {
         expect(v, 42);
         expect(Zone.current, newZone1);
         outer.run(() {
-          sub.onData(expectAsync((v) {
+          sub.onData(expectAsync1((v) {
             expect(v, 37);
             expect(Zone.current, newZone1);
             runZoned(() {
-              sub.onData(expectAsync((v) {
+              sub.onData(expectAsync1((v) {
                 expect(v, 87);
                 expect(Zone.current, newZone1);
               }));
diff --git a/test/typed_wrapper/future_test.dart b/test/typed_wrapper/future_test.dart
index b3ff0a7..b928e05 100644
--- a/test/typed_wrapper/future_test.dart
+++ b/test/typed_wrapper/future_test.dart
@@ -28,14 +28,14 @@
 
     test("catchError()", () {
       expect(
-          wrapper.catchError(expectAsync((_) {}, count: 0),
-              test: expectAsync((_) {}, count: 0)),
+          wrapper.catchError(expectAsync1((_) {}, count: 0),
+              test: expectAsync1((_) {}, count: 0)),
           completion(equals(12)));
 
-      expect(errorWrapper.catchError(expectAsync((error) {
+      expect(errorWrapper.catchError(expectAsync1((error) {
         expect(error, equals("oh no"));
         return 42;
-      }), test: expectAsync((error) {
+      }), test: expectAsync1((error) {
         expect(error, equals("oh no"));
         return true;
       })), completion(equals(42)));
@@ -44,13 +44,13 @@
     test("then()", () {
       expect(wrapper.then((value) => value.toString()),
           completion(equals("12")));
-      expect(errorWrapper.then(expectAsync((_) {}, count: 0)),
+      expect(errorWrapper.then(expectAsync1((_) {}, count: 0)),
           throwsA("oh no"));
     });
 
     test("whenComplete()", () {
-      expect(wrapper.whenComplete(expectAsync(() {})), completion(equals(12)));
-      expect(errorWrapper.whenComplete(expectAsync(() {})), throwsA("oh no"));
+      expect(wrapper.whenComplete(expectAsync0(() {})), completion(equals(12)));
+      expect(errorWrapper.whenComplete(expectAsync0(() {})), throwsA("oh no"));
     });
 
     test("timeout()", () {
@@ -64,7 +64,7 @@
 
       expect(
           new TypeSafeFuture<int>(new Completer<Object>().future)
-              .timeout(Duration.ZERO, onTimeout: expectAsync(() => 15)),
+              .timeout(Duration.ZERO, onTimeout: expectAsync0(() => 15)),
           completion(equals(15)));
     });
   });
@@ -82,13 +82,13 @@
 
       test("then()", () {
         expect(
-            wrapper.then(expectAsync((_) {}, count: 0),
-                onError: expectAsync((_) {}, count: 0)),
+            wrapper.then(expectAsync1((_) {}, count: 0),
+                onError: expectAsync1((_) {}, count: 0)),
             throwsCastError);
       });
 
       test("whenComplete()", () {
-        expect(wrapper.whenComplete(expectAsync(() {})).then((_) {}),
+        expect(wrapper.whenComplete(expectAsync0(() {})).then((_) {}),
             throwsCastError);
       });
 
@@ -98,7 +98,7 @@
 
       expect(
           new TypeSafeFuture<int>(new Completer<Object>().future)
-              .timeout(Duration.ZERO, onTimeout: expectAsync(() => "foo"))
+              .timeout(Duration.ZERO, onTimeout: expectAsync0(() => "foo"))
               .then((_) {}),
           throwsCastError);
       });
diff --git a/test/typed_wrapper/stream_subscription_test.dart b/test/typed_wrapper/stream_subscription_test.dart
index ca2ba86..07a8bd2 100644
--- a/test/typed_wrapper/stream_subscription_test.dart
+++ b/test/typed_wrapper/stream_subscription_test.dart
@@ -23,21 +23,21 @@
     });
 
     test("onData()", () {
-      wrapper.onData(expectAsync((data) {
+      wrapper.onData(expectAsync1((data) {
         expect(data, equals(1));
       }));
       controller.add(1);
     });
 
     test("onError()", () {
-      wrapper.onError(expectAsync((error) {
+      wrapper.onError(expectAsync1((error) {
         expect(error, equals("oh no"));
       }));
       controller.addError("oh no");
     });
 
     test("onDone()", () {
-      wrapper.onDone(expectAsync(() {}));
+      wrapper.onDone(expectAsync0(() {}));
       controller.close();
     });
 
@@ -88,7 +88,7 @@
           wrapper = new TypeSafeStreamSubscription<int>(
               controller.stream.listen(null));
 
-          wrapper.onData(expectAsync((_) {}, count: 0));
+          wrapper.onData(expectAsync1((_) {}, count: 0));
           controller.add("foo");
         }, throwsZonedCastError);
       });
@@ -96,7 +96,7 @@
 
     group("doesn't throw a CastError for", () {
       test("onError()", () {
-        wrapper.onError(expectAsync((error) {
+        wrapper.onError(expectAsync1((error) {
           expect(error, equals("oh no"));
         }));
         controller.add("foo");
@@ -104,7 +104,7 @@
       });
 
       test("onDone()", () {
-        wrapper.onDone(expectAsync(() {}));
+        wrapper.onDone(expectAsync0(() {}));
         controller.add("foo");
         controller.close();
       });
diff --git a/test/typed_wrapper/stream_test.dart b/test/typed_wrapper/stream_test.dart
index 05cde3a..12a130a 100644
--- a/test/typed_wrapper/stream_test.dart
+++ b/test/typed_wrapper/stream_test.dart
@@ -71,7 +71,7 @@
 
       test("with onListen", () {
         var broadcast = wrapper.asBroadcastStream(
-            onListen: expectAsync((subscription) {
+            onListen: expectAsync1((subscription) {
           expect(subscription, new isInstanceOf<StreamSubscription<int>>());
           subscription.pause();
         }));
@@ -82,7 +82,7 @@
 
       test("with onCancel", () {
         var broadcast = wrapper.asBroadcastStream(
-            onCancel: expectAsync((subscription) {
+            onCancel: expectAsync1((subscription) {
           expect(subscription, new isInstanceOf<StreamSubscription<int>>());
           subscription.pause();
         }));
@@ -188,7 +188,7 @@
     });
 
     test("forEach()", () async {
-      emptyWrapper.forEach(expectAsync((_) {}, count: 0));
+      emptyWrapper.forEach(expectAsync1((_) {}, count: 0));
 
       var results = [];
       await wrapper.forEach(results.add);
@@ -197,23 +197,23 @@
 
     group("handleError()", () {
       test("without a test", () {
-        expect(errorWrapper.handleError(expectAsync((error) {
+        expect(errorWrapper.handleError(expectAsync1((error) {
           expect(error, equals("oh no"));
         })).toList(), completion(isEmpty));
       });
 
       test("with a matching test", () {
-        expect(errorWrapper.handleError(expectAsync((error) {
+        expect(errorWrapper.handleError(expectAsync1((error) {
           expect(error, equals("oh no"));
-        }), test: expectAsync((error) {
+        }), test: expectAsync1((error) {
           expect(error, equals("oh no"));
           return true;
         })).toList(), completion(isEmpty));
       });
 
       test("with a matching test", () {
-        expect(errorWrapper.handleError(expectAsync((_) {}, count: 0),
-            test: expectAsync((error) {
+        expect(errorWrapper.handleError(expectAsync1((_) {}, count: 0),
+            test: expectAsync1((error) {
           expect(error, equals("oh no"));
           return false;
         })).toList(), throwsA("oh no"));
@@ -223,10 +223,10 @@
     group("listen()", () {
       test("with a callback", () {
         var subscription;
-        subscription = wrapper.listen(expectAsync((data) {
+        subscription = wrapper.listen(expectAsync1((data) {
           expect(data, equals(1));
 
-          subscription.onData(expectAsync((data) {
+          subscription.onData(expectAsync1((data) {
             expect(data, equals(2));
             subscription.cancel();
           }));
@@ -408,12 +408,12 @@
       });
 
       test("asyncExpand()", () {
-        expect(wrapper.asyncExpand(expectAsync((_) {}, count: 0)).first,
+        expect(wrapper.asyncExpand(expectAsync1((_) {}, count: 0)).first,
             throwsCastError);
       });
 
       test("asyncMap()", () {
-        expect(wrapper.asyncMap(expectAsync((_) {}, count: 0)).first,
+        expect(wrapper.asyncMap(expectAsync1((_) {}, count: 0)).first,
             throwsCastError);
       });
 
@@ -423,67 +423,67 @@
         });
 
         test("with equals", () {
-          expect(wrapper.distinct(expectAsync((_, __) {}, count: 0)).first,
+          expect(wrapper.distinct(expectAsync2((_, __) {}, count: 0)).first,
               throwsCastError);
         });
       });
 
       test("expand()", () {
-        expect(wrapper.expand(expectAsync((_) {}, count: 0)).first,
+        expect(wrapper.expand(expectAsync1((_) {}, count: 0)).first,
             throwsCastError);
       });
 
       test("firstWhere()", () {
-        expect(wrapper.firstWhere(expectAsync((_) {}, count: 0)),
+        expect(wrapper.firstWhere(expectAsync1((_) {}, count: 0)),
             throwsCastError);
       });
 
       test("lastWhere()", () {
-        expect(wrapper.lastWhere(expectAsync((_) {}, count: 0)),
+        expect(wrapper.lastWhere(expectAsync1((_) {}, count: 0)),
             throwsCastError);
       });
 
       test("singleWhere()", () {
-        expect(wrapper.singleWhere(expectAsync((_) {}, count: 0)),
+        expect(wrapper.singleWhere(expectAsync1((_) {}, count: 0)),
             throwsCastError);
       });
 
       test("fold()", () {
-        expect(wrapper.fold("foo", expectAsync((_, __) {}, count: 0)),
+        expect(wrapper.fold("foo", expectAsync2((_, __) {}, count: 0)),
             throwsCastError);
       });
 
       test("forEach()", () async {
-        expect(wrapper.forEach(expectAsync((_) {}, count: 0)), throwsCastError);
+        expect(wrapper.forEach(expectAsync1((_) {}, count: 0)), throwsCastError);
       });
 
       test("handleError()", () {
-        expect(wrapper.handleError(expectAsync((_) {}, count: 0)).first,
+        expect(wrapper.handleError(expectAsync1((_) {}, count: 0)).first,
             throwsCastError);
       });
 
       test("listen()", () {
-        expect(() => wrapper.take(1).listen(expectAsync((_) {}, count: 0)),
+        expect(() => wrapper.take(1).listen(expectAsync1((_) {}, count: 0)),
             throwsZonedCastError);
       });
 
       test("map()", () {
-        expect(wrapper.map(expectAsync((_) {}, count: 0)).first,
+        expect(wrapper.map(expectAsync1((_) {}, count: 0)).first,
             throwsCastError);
       });
 
       test("reduce()", () {
-        expect(wrapper.reduce(expectAsync((_, __) {}, count: 0)),
+        expect(wrapper.reduce(expectAsync2((_, __) {}, count: 0)),
             throwsCastError);
       });
 
       test("skipWhile()", () {
-        expect(wrapper.skipWhile(expectAsync((_) {}, count: 0)).first,
+        expect(wrapper.skipWhile(expectAsync1((_) {}, count: 0)).first,
             throwsCastError);
       });
 
       test("takeWhile()", () {
-        expect(wrapper.takeWhile(expectAsync((_) {}, count: 0)).first,
+        expect(wrapper.takeWhile(expectAsync1((_) {}, count: 0)).first,
             throwsCastError);
       });
 
@@ -498,16 +498,16 @@
       }, skip: "Re-enable this when test can run DDC (test#414).");
 
       test("where()", () {
-        expect(wrapper.where(expectAsync((_) {}, count: 0)).first,
+        expect(wrapper.where(expectAsync1((_) {}, count: 0)).first,
             throwsCastError);
       });
 
       test("any()", () {
-        expect(wrapper.any(expectAsync((_) {}, count: 0)), throwsCastError);
+        expect(wrapper.any(expectAsync1((_) {}, count: 0)), throwsCastError);
       });
 
       test("every()", () {
-        expect(wrapper.every(expectAsync((_) {}, count: 0)), throwsCastError);
+        expect(wrapper.every(expectAsync1((_) {}, count: 0)), throwsCastError);
       });
 
       test("skip()", () {
diff --git a/test/utils.dart b/test/utils.dart
index 50e106b..8499eb2 100644
--- a/test/utils.dart
+++ b/test/utils.dart
@@ -24,7 +24,7 @@
 /// emits an error that matches [matcher].
 Matcher throwsZoned(matcher) => predicate((callback) {
   var firstError = true;
-  runZoned(callback, onError: expectAsync((error, stackTrace) {
+  runZoned(callback, onError: expectAsync2((error, stackTrace) {
     if (firstError) {
       expect(error, matcher);
       firstError = false;