Index: test/util/cancelable_future_test.dart |
diff --git a/test/util/cancelable_future_test.dart b/test/util/cancelable_future_test.dart |
deleted file mode 100644 |
index 9bed0ba63147b349f3fe38c77ec1fda24e365b5f..0000000000000000000000000000000000000000 |
--- a/test/util/cancelable_future_test.dart |
+++ /dev/null |
@@ -1,255 +0,0 @@ |
-// 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. |
- |
-import 'dart:async'; |
- |
-import 'package:async/async.dart'; |
-import 'package:test/src/util/cancelable_future.dart'; |
-import 'package:test/test.dart'; |
- |
-void main() { |
- group("without being canceled", () { |
- var completer; |
- setUp(() { |
- completer = new CancelableCompleter(expectAsync(() {}, count: 0)); |
- }); |
- |
- test("sends values to the future", () { |
- expect(completer.future, completion(equals(1))); |
- expect(completer.isCompleted, isFalse); |
- completer.complete(1); |
- expect(completer.isCompleted, isTrue); |
- }); |
- |
- test("sends errors to the future", () { |
- expect(completer.future, throwsA("error")); |
- expect(completer.isCompleted, isFalse); |
- completer.completeError("error"); |
- expect(completer.isCompleted, isTrue); |
- }); |
- |
- test("sends values in a future to the future", () { |
- expect(completer.future, completion(equals(1))); |
- expect(completer.isCompleted, isFalse); |
- completer.complete(new Future.value(1)); |
- expect(completer.isCompleted, isTrue); |
- }); |
- |
- test("sends errors in a future to the future", () { |
- expect(completer.future, throwsA("error")); |
- expect(completer.isCompleted, isFalse); |
- completer.complete(new Future.error("error")); |
- expect(completer.isCompleted, isTrue); |
- }); |
- |
- group("throws a StateError if completed", () { |
- test("successfully twice", () { |
- completer.complete(1); |
- expect(() => completer.complete(1), throwsStateError); |
- }); |
- |
- test("successfully then unsuccessfully", () { |
- completer.complete(1); |
- expect(() => completer.completeError("error"), throwsStateError); |
- }); |
- |
- test("unsuccessfully twice", () { |
- expect(completer.future, throwsA("error")); |
- completer.completeError("error"); |
- expect(() => completer.completeError("error"), throwsStateError); |
- }); |
- |
- test("successfully then with a future", () { |
- completer.complete(1); |
- expect(() => completer.complete(new Completer().future), |
- throwsStateError); |
- }); |
- |
- test("with a future then successfully", () { |
- completer.complete(new Completer().future); |
- expect(() => completer.complete(1), throwsStateError); |
- }); |
- |
- test("with a future twice", () { |
- completer.complete(new Completer().future); |
- expect(() => completer.complete(new Completer().future), |
- throwsStateError); |
- }); |
- }); |
- |
- group("CancelableFuture.fromFuture", () { |
- test("forwards values", () { |
- expect(new CancelableFuture.fromFuture(new Future.value(1)), |
- completion(equals(1))); |
- }); |
- |
- test("forwards errors", () { |
- expect(new CancelableFuture.fromFuture(new Future.error("error")), |
- throwsA("error")); |
- }); |
- }); |
- }); |
- |
- group("when canceled", () { |
- test("causes the future never to fire", () async { |
- var completer = new CancelableCompleter(); |
- completer.future.whenComplete(expectAsync(() {}, count: 0)); |
- completer.future.cancel(); |
- |
- // Give the future plenty of time to fire if it's going to. |
- await flushMicrotasks(); |
- completer.complete(); |
- await flushMicrotasks(); |
- }); |
- |
- test("fires onCancel", () { |
- var canceled = false; |
- var completer; |
- completer = new CancelableCompleter(expectAsync(() { |
- expect(completer.isCanceled, isTrue); |
- canceled = true; |
- })); |
- |
- expect(canceled, isFalse); |
- expect(completer.isCanceled, isFalse); |
- expect(completer.isCompleted, isFalse); |
- completer.future.cancel(); |
- expect(canceled, isTrue); |
- expect(completer.isCanceled, isTrue); |
- expect(completer.isCompleted, isFalse); |
- }); |
- |
- test("returns the onCancel future each time cancel is called", () { |
- var completer = new CancelableCompleter(expectAsync(() { |
- return new Future.value(1); |
- })); |
- expect(completer.future.cancel(), completion(equals(1))); |
- expect(completer.future.cancel(), completion(equals(1))); |
- expect(completer.future.cancel(), completion(equals(1))); |
- }); |
- |
- test("returns a future even if onCancel doesn't", () { |
- var completer = new CancelableCompleter(expectAsync(() {})); |
- expect(completer.future.cancel(), completes); |
- }); |
- |
- test("doesn't call onCancel if the completer has completed", () { |
- var completer = new CancelableCompleter(expectAsync(() {}, count: 0)); |
- completer.complete(1); |
- completer.future.whenComplete(expectAsync(() {}, count: 0)); |
- expect(completer.future.cancel(), completes); |
- }); |
- |
- test("does call onCancel if the completer has completed to an unfired " |
- "Future", () { |
- var completer = new CancelableCompleter(expectAsync(() {})); |
- completer.complete(new Completer().future); |
- expect(completer.future.cancel(), completes); |
- }); |
- |
- test("doesn't call onCancel if the completer has completed to a fired " |
- "Future", () async { |
- var completer = new CancelableCompleter(expectAsync(() {}, count: 0)); |
- completer.complete(new Future.value(1)); |
- await completer.future; |
- expect(completer.future.cancel(), completes); |
- }); |
- |
- test("can be completed once after being canceled", () async { |
- var completer = new CancelableCompleter(); |
- completer.future.whenComplete(expectAsync(() {}, count: 0)); |
- await completer.future.cancel(); |
- completer.complete(1); |
- expect(() => completer.complete(1), throwsStateError); |
- }); |
- |
- test("throws a CancelException along non-canceled branches", () { |
- var completer = new CancelableCompleter(); |
- expect(completer.future.then((_) {}), throwsCancelException); |
- completer.future.then((_) {}).cancel(); |
- }); |
- |
- test("doesn't throw a CancelException further along the canceled chain", |
- () async { |
- var completer = new CancelableCompleter(); |
- completer.future.then((_) {}).whenComplete(expectAsync((_) {}, count: 0)); |
- completer.future.cancel(); |
- await flushMicrotasks(); |
- }); |
- }); |
- |
- group("asStream()", () { |
- test("emits a value and then closes", () { |
- var completer = new CancelableCompleter(); |
- expect(completer.future.asStream().toList(), completion(equals([1]))); |
- completer.complete(1); |
- }); |
- |
- test("emits an error and then closes", () { |
- var completer = new CancelableCompleter(); |
- var queue = new StreamQueue(completer.future.asStream()); |
- expect(queue.next, throwsA("error")); |
- expect(queue.hasNext, completion(isFalse)); |
- completer.completeError("error"); |
- }); |
- |
- test("cancels the completer when the subscription is canceled", () { |
- var completer = new CancelableCompleter(expectAsync(() {})); |
- var sub = completer.future.asStream() |
- .listen(expectAsync((_) {}, count: 0)); |
- expect(completer.future, throwsCancelException); |
- sub.cancel(); |
- expect(completer.isCanceled, isTrue); |
- }); |
- }); |
- |
- group("timeout()", () { |
- test("emits a value if one arrives before timeout", () { |
- var completer = new CancelableCompleter(); |
- expect( |
- completer.future.timeout( |
- new Duration(hours: 1), |
- onTimeout: expectAsync(() {}, count: 0)), |
- completion(equals(1))); |
- completer.complete(1); |
- }); |
- |
- test("emits an error if one arrives before timeout", () { |
- var completer = new CancelableCompleter(); |
- expect( |
- completer.future.timeout( |
- new Duration(hours: 1), |
- onTimeout: expectAsync(() {}, count: 0)), |
- throwsA("error")); |
- completer.completeError("error"); |
- }); |
- |
- test("cancels the completer when the future times out", () async { |
- var completer = new CancelableCompleter(expectAsync(() {})); |
- expect(completer.future.timeout(Duration.ZERO), |
- throwsA(new isInstanceOf<TimeoutException>())); |
- expect(completer.future, throwsCancelException); |
- await flushMicrotasks(); |
- expect(completer.isCanceled, isTrue); |
- }); |
- |
- test("runs the user's onTimeout function when the future times out", |
- () async { |
- var completer = new CancelableCompleter(expectAsync(() {})); |
- expect( |
- completer.future.timeout( |
- Duration.ZERO, |
- onTimeout: expectAsync(() => 1)), |
- completion(equals(1))); |
- expect(completer.future, throwsCancelException); |
- await flushMicrotasks(); |
- expect(completer.isCanceled, isTrue); |
- }); |
- }); |
-} |
- |
-const Matcher throwsCancelException = |
- const Throws(const isInstanceOf<CancelException>()); |
- |
-Future flushMicrotasks() => new Future.delayed(Duration.ZERO); |