| Index: packages/async/test/cancelable_operation_test.dart
|
| diff --git a/packages/async/test/cancelable_operation_test.dart b/packages/async/test/cancelable_operation_test.dart
|
| index 189c0738967e109e603f3e6ba0650a60803f3fb2..bded4025f752ee1cac72313a9426dc8c132e16f9 100644
|
| --- a/packages/async/test/cancelable_operation_test.dart
|
| +++ b/packages/async/test/cancelable_operation_test.dart
|
| @@ -13,8 +13,8 @@ void main() {
|
| group("without being canceled", () {
|
| var completer;
|
| setUp(() {
|
| - completer = new CancelableCompleter(
|
| - onCancel: expectAsync(() {}, count: 0));
|
| + completer =
|
| + new CancelableCompleter(onCancel: expectAsync0(() {}, count: 0));
|
| });
|
|
|
| test("sends values to the future", () {
|
| @@ -45,6 +45,16 @@ void main() {
|
| expect(completer.isCompleted, isTrue);
|
| });
|
|
|
| + test("sends values to valueOrCancellation", () {
|
| + expect(completer.operation.valueOrCancellation(), completion(equals(1)));
|
| + completer.complete(1);
|
| + });
|
| +
|
| + test("sends errors to valueOrCancellation", () {
|
| + expect(completer.operation.valueOrCancellation(), throwsA("error"));
|
| + completer.completeError("error");
|
| + });
|
| +
|
| group("throws a StateError if completed", () {
|
| test("successfully twice", () {
|
| completer.complete(1);
|
| @@ -64,8 +74,8 @@ void main() {
|
|
|
| test("successfully then with a future", () {
|
| completer.complete(1);
|
| - expect(() => completer.complete(new Completer().future),
|
| - throwsStateError);
|
| + expect(
|
| + () => completer.complete(new Completer().future), throwsStateError);
|
| });
|
|
|
| test("with a future then successfully", () {
|
| @@ -75,8 +85,8 @@ void main() {
|
|
|
| test("with a future twice", () {
|
| completer.complete(new Completer().future);
|
| - expect(() => completer.complete(new Completer().future),
|
| - throwsStateError);
|
| + expect(
|
| + () => completer.complete(new Completer().future), throwsStateError);
|
| });
|
| });
|
|
|
| @@ -87,8 +97,8 @@ void main() {
|
| });
|
|
|
| test("forwards errors", () {
|
| - var operation = new CancelableOperation.fromFuture(
|
| - new Future.error("error"));
|
| + var operation =
|
| + new CancelableOperation.fromFuture(new Future.error("error"));
|
| expect(operation.value, throwsA("error"));
|
| });
|
| });
|
| @@ -97,7 +107,7 @@ void main() {
|
| 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.
|
| @@ -109,7 +119,7 @@ void main() {
|
| test("fires onCancel", () {
|
| var canceled = false;
|
| var completer;
|
| - completer = new CancelableCompleter(onCancel: expectAsync(() {
|
| + completer = new CancelableCompleter(onCancel: expectAsync0(() {
|
| expect(completer.isCanceled, isTrue);
|
| canceled = true;
|
| }));
|
| @@ -124,7 +134,7 @@ void main() {
|
| });
|
|
|
| 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)));
|
| @@ -133,29 +143,31 @@ void main() {
|
| });
|
|
|
| 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));
|
| + var completer =
|
| + new CancelableCompleter(onCancel: expectAsync0(() {}, count: 0));
|
| completer.complete(1);
|
| expect(completer.operation.value, completion(equals(1)));
|
| expect(completer.operation.cancel(), completes);
|
| });
|
|
|
| - test("does call onCancel if the completer has completed to an unfired "
|
| + 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);
|
| });
|
|
|
| - test("doesn't call onCancel if the completer has completed to a fired "
|
| + test(
|
| + "doesn't call onCancel if the completer has completed to a fired "
|
| "Future", () async {
|
| - var completer = new CancelableCompleter(
|
| - onCancel: expectAsync(() {}, count: 0));
|
| + var completer =
|
| + new CancelableCompleter(onCancel: expectAsync0(() {}, count: 0));
|
| completer.complete(new Future.value(1));
|
| await completer.operation.value;
|
| expect(completer.operation.cancel(), completes);
|
| @@ -163,11 +175,44 @@ void main() {
|
|
|
| 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);
|
| });
|
| +
|
| + test("fires valueOrCancellation with the given value", () {
|
| + var completer = new CancelableCompleter();
|
| + expect(completer.operation.valueOrCancellation(1), completion(equals(1)));
|
| + completer.operation.cancel();
|
| + });
|
| +
|
| + test("pipes an error through valueOrCancellation", () {
|
| + var completer = new CancelableCompleter(onCancel: () {
|
| + throw "error";
|
| + });
|
| + expect(completer.operation.valueOrCancellation(1), throwsA("error"));
|
| + completer.operation.cancel();
|
| + });
|
| +
|
| + test("valueOrCancellation waits on the onCancel future", () async {
|
| + var innerCompleter = new Completer();
|
| + var completer =
|
| + new CancelableCompleter(onCancel: () => innerCompleter.future);
|
| +
|
| + var fired = false;
|
| + completer.operation.valueOrCancellation().then((_) {
|
| + fired = true;
|
| + });
|
| +
|
| + completer.operation.cancel();
|
| + await flushMicrotasks();
|
| + expect(fired, isFalse);
|
| +
|
| + innerCompleter.complete();
|
| + await flushMicrotasks();
|
| + expect(fired, isTrue);
|
| + });
|
| });
|
|
|
| group("asStream()", () {
|
| @@ -186,10 +231,10 @@ void main() {
|
| });
|
|
|
| test("cancels the completer when the subscription is canceled", () {
|
| - var completer = new CancelableCompleter(onCancel: expectAsync(() {}));
|
| - var sub = completer.operation.asStream()
|
| - .listen(expectAsync((_) {}, count: 0));
|
| - completer.operation.value.whenComplete(expectAsync(() {}, count: 0));
|
| + var completer = new CancelableCompleter(onCancel: expectAsync0(() {}));
|
| + var sub =
|
| + completer.operation.asStream().listen(expectAsync1((_) {}, count: 0));
|
| + completer.operation.value.whenComplete(expectAsync0(() {}, count: 0));
|
| sub.cancel();
|
| expect(completer.isCanceled, isTrue);
|
| });
|
|
|