Chromium Code Reviews| Index: tests/lib/async/stream_subscription_cancel_test.dart |
| diff --git a/tests/lib/async/stream_subscription_cancel_test.dart b/tests/lib/async/stream_subscription_cancel_test.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..aa55d4aada666c7234477cff1ccbe3a736315529 |
| --- /dev/null |
| +++ b/tests/lib/async/stream_subscription_cancel_test.dart |
| @@ -0,0 +1,80 @@ |
| +// 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. |
| + |
| +// Test the StreamSubscription.cancel return Future. |
| +library stream_subscription_cancel; |
| + |
| +import 'dart:async'; |
| +import 'package:unittest/unittest.dart'; |
| + |
| +void main() { |
| + test('subscription.cancel', () { |
| + var completer = new Completer(); |
| + StreamController controller = new StreamController( |
| + onCancel: () => completer.future); |
| + |
| + bool done = false; |
| + expect(controller.stream.listen(null).cancel().then((_) => done), |
| + completion(equals(true))); |
| + |
| + new Timer(const Duration(milliseconds: 10), () { |
| + done = true; |
| + completer.complete(); |
| + }); |
| + }); |
| + |
| + test('subscription.cancel after close', () { |
| + var completer = new Completer(); |
| + StreamController controller = new StreamController( |
| + onCancel: completer.complete); |
| + |
| + controller.close(); |
| + |
| + var sub; |
| + void onDone() { |
| + expect(sub.cancel(), isNull); |
| + } |
| + |
| + sub = controller.stream.listen(null, onDone: onDone); |
| + expect(completer.future, completes); |
| + }); |
| + |
| + test('subscription.cancel after error', () { |
| + var completer = new Completer(); |
| + StreamController controller = new StreamController( |
| + onCancel: () => completer.future); |
| + |
| + controller.addError("error"); |
| + |
| + bool done = false; |
| + |
| + var subscription; |
| + var doneCompleter = new Completer(); |
| + void onError(e) { |
| + subscription.cancel().then((_) => doneCompleter.complete(done)); |
| + done = true; |
| + completer.complete(); |
| + } |
| + subscription = controller.stream.listen(null, onError: onError); |
| + expect(doneCompleter.future, completion(equals(true))); |
| + }); |
| + |
| + test('subscription.cancel after error (cancelOnError)', () { |
| + bool called = false; |
| + StreamController controller = new StreamController( |
| + onCancel: () { |
| + called = true; |
| + }); |
| + |
| + controller.addError("error"); |
| + |
| + var doneCompleter = new Completer(); |
| + void onError(e) { |
| + expect(called, equals(true)); |
| + doneCompleter.complete(true); |
| + } |
| + controller.stream.listen(null, onError: onError, cancelOnError: true); |
| + expect(doneCompleter.future, completion(equals(true))); |
| + }); |
|
floitsch
2013/10/12 18:53:57
Add test that a cancel after a cancelOnError will
Anders Johnsen
2013/10/16 11:52:21
Done.
|
| +} |