OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. |
| 4 |
| 5 // Test the StreamSubscription.cancel return Future. |
| 6 library stream_subscription_cancel; |
| 7 |
| 8 import 'dart:async'; |
| 9 import 'package:unittest/unittest.dart'; |
| 10 |
| 11 void main() { |
| 12 test('subscription.cancel', () { |
| 13 var completer = new Completer(); |
| 14 StreamController controller = new StreamController( |
| 15 onCancel: () => completer.future); |
| 16 |
| 17 bool done = false; |
| 18 expect(controller.stream.listen(null).cancel().then((_) => done), |
| 19 completion(equals(true))); |
| 20 |
| 21 new Timer(const Duration(milliseconds: 10), () { |
| 22 done = true; |
| 23 completer.complete(); |
| 24 }); |
| 25 }); |
| 26 |
| 27 test('subscription.cancel after close', () { |
| 28 var completer = new Completer(); |
| 29 StreamController controller = new StreamController( |
| 30 onCancel: completer.complete); |
| 31 |
| 32 controller.close(); |
| 33 |
| 34 var sub; |
| 35 void onDone() { |
| 36 expect(sub.cancel(), isNull); |
| 37 } |
| 38 |
| 39 sub = controller.stream.listen(null, onDone: onDone); |
| 40 expect(completer.future, completes); |
| 41 }); |
| 42 |
| 43 test('subscription.cancel after error', () { |
| 44 var completer = new Completer(); |
| 45 StreamController controller = new StreamController( |
| 46 onCancel: () => completer.future); |
| 47 |
| 48 controller.addError("error"); |
| 49 |
| 50 bool done = false; |
| 51 |
| 52 var subscription; |
| 53 var doneCompleter = new Completer(); |
| 54 void onError(e) { |
| 55 subscription.cancel().then((_) => doneCompleter.complete(done)); |
| 56 done = true; |
| 57 completer.complete(); |
| 58 } |
| 59 subscription = controller.stream.listen(null, onError: onError); |
| 60 expect(doneCompleter.future, completion(equals(true))); |
| 61 }); |
| 62 |
| 63 test('subscription.cancel after error (cancelOnError)', () { |
| 64 bool called = false; |
| 65 StreamController controller = new StreamController( |
| 66 onCancel: () { |
| 67 called = true; |
| 68 }); |
| 69 |
| 70 controller.addError("error"); |
| 71 |
| 72 var doneCompleter = new Completer(); |
| 73 void onError(e) { |
| 74 expect(called, equals(true)); |
| 75 doneCompleter.complete(true); |
| 76 } |
| 77 controller.stream.listen(null, onError: onError, cancelOnError: true); |
| 78 expect(doneCompleter.future, completion(equals(true))); |
| 79 }); |
| 80 |
| 81 test('subscription.cancel before error (cancelOnError)', () { |
| 82 var doneCompleter = new Completer(); |
| 83 StreamController controller = new StreamController( |
| 84 onCancel: () { |
| 85 doneCompleter.complete(true); |
| 86 }); |
| 87 |
| 88 controller.addError("error"); |
| 89 |
| 90 void onError(e) { |
| 91 fail("onError is unexpected"); |
| 92 } |
| 93 controller.stream |
| 94 .listen(null, onError: onError, cancelOnError: true) |
| 95 .cancel(); |
| 96 expect(doneCompleter.future, completion(equals(true))); |
| 97 }); |
| 98 |
| 99 test('subscription.cancel on error (cancelOnError)', () { |
| 100 bool called = false; |
| 101 StreamController controller = new StreamController( |
| 102 onCancel: () { |
| 103 expect(called, isFalse); |
| 104 called = true; |
| 105 }); |
| 106 |
| 107 controller.addError("error"); |
| 108 |
| 109 var doneCompleter = new Completer(); |
| 110 var sub; |
| 111 void onError(e) { |
| 112 expect(called, equals(true)); |
| 113 sub.cancel(); |
| 114 doneCompleter.complete(true); |
| 115 } |
| 116 sub = controller.stream |
| 117 .listen(null, onError: onError, cancelOnError: true); |
| 118 expect(doneCompleter.future, completion(equals(true))); |
| 119 }); |
| 120 |
| 121 test('subscription.cancel before done', () { |
| 122 var doneCompleter = new Completer(); |
| 123 StreamController controller = new StreamController( |
| 124 onCancel: () { |
| 125 doneCompleter.complete(true); |
| 126 }); |
| 127 |
| 128 controller.close(); |
| 129 |
| 130 void onDone() { |
| 131 fail("onDone is unexpected"); |
| 132 } |
| 133 controller.stream |
| 134 .listen(null, onDone: onDone) |
| 135 .cancel(); |
| 136 expect(doneCompleter.future, completion(equals(true))); |
| 137 }); |
| 138 } |
OLD | NEW |