Add isCanceled/Completed to CancelableOperation (#79)
Closes #78
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c71ac91..3d543da 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,7 @@
## 2.1.0
* Fix `CancelableOperation.valueOrCancellation`'s type signature
+* Add `isCanceled` and `isCompleted` to `CancelableOperation`.
## 2.0.8
diff --git a/lib/src/cancelable_operation.dart b/lib/src/cancelable_operation.dart
index e6115cb..faf9076 100644
--- a/lib/src/cancelable_operation.dart
+++ b/lib/src/cancelable_operation.dart
@@ -80,6 +80,12 @@
/// This returns the [Future] returned by the [CancelableCompleter]'s
/// `onCancel` callback. Unlike [Stream.cancel], it never returns `null`.
Future cancel() => _completer._cancel();
+
+ /// Whether this operation has been canceled before it completed.
+ bool get isCanceled => _completer.isCanceled;
+
+ /// Whether this operation completed before being canceled.
+ bool get isCompleted => _completer.isCompleted;
}
/// A completer for a [CancelableOperation].
diff --git a/test/cancelable_operation_test.dart b/test/cancelable_operation_test.dart
index 4a23856..384a023 100644
--- a/test/cancelable_operation_test.dart
+++ b/test/cancelable_operation_test.dart
@@ -40,8 +40,10 @@
test("sends errors in a future to the future", () {
expect(completer.operation.value, throwsA("error"));
expect(completer.isCompleted, isFalse);
+ expect(completer.operation.isCompleted, isFalse);
completer.complete(Future.error("error"));
expect(completer.isCompleted, isTrue);
+ expect(completer.operation.isCompleted, isTrue);
});
test("sends values to valueOrCancellation", () {
@@ -122,11 +124,15 @@
expect(canceled, isFalse);
expect(completer.isCanceled, isFalse);
+ expect(completer.operation.isCanceled, isFalse);
expect(completer.isCompleted, isFalse);
+ expect(completer.operation.isCompleted, isFalse);
completer.operation.cancel();
expect(canceled, isTrue);
expect(completer.isCanceled, isTrue);
+ expect(completer.operation.isCanceled, isTrue);
expect(completer.isCompleted, isFalse);
+ expect(completer.operation.isCompleted, isFalse);
});
test("returns the onCancel future each time cancel is called", () {