Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(51)

Side by Side Diff: packages/async/test/cancelable_operation_test.dart

Issue 2989763002: Update charted to 0.4.8 and roll (Closed)
Patch Set: Removed Cutch from list of reviewers Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 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. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 import 'dart:async'; 5 import 'dart:async';
6 6
7 import 'package:async/async.dart'; 7 import 'package:async/async.dart';
8 import 'package:test/test.dart'; 8 import 'package:test/test.dart';
9 9
10 import 'utils.dart'; 10 import 'utils.dart';
11 11
12 void main() { 12 void main() {
13 group("without being canceled", () { 13 group("without being canceled", () {
14 var completer; 14 var completer;
15 setUp(() { 15 setUp(() {
16 completer = new CancelableCompleter( 16 completer =
17 onCancel: expectAsync(() {}, count: 0)); 17 new CancelableCompleter(onCancel: expectAsync0(() {}, count: 0));
18 }); 18 });
19 19
20 test("sends values to the future", () { 20 test("sends values to the future", () {
21 expect(completer.operation.value, completion(equals(1))); 21 expect(completer.operation.value, completion(equals(1)));
22 expect(completer.isCompleted, isFalse); 22 expect(completer.isCompleted, isFalse);
23 completer.complete(1); 23 completer.complete(1);
24 expect(completer.isCompleted, isTrue); 24 expect(completer.isCompleted, isTrue);
25 }); 25 });
26 26
27 test("sends errors to the future", () { 27 test("sends errors to the future", () {
(...skipping 10 matching lines...) Expand all
38 expect(completer.isCompleted, isTrue); 38 expect(completer.isCompleted, isTrue);
39 }); 39 });
40 40
41 test("sends errors in a future to the future", () { 41 test("sends errors in a future to the future", () {
42 expect(completer.operation.value, throwsA("error")); 42 expect(completer.operation.value, throwsA("error"));
43 expect(completer.isCompleted, isFalse); 43 expect(completer.isCompleted, isFalse);
44 completer.complete(new Future.error("error")); 44 completer.complete(new Future.error("error"));
45 expect(completer.isCompleted, isTrue); 45 expect(completer.isCompleted, isTrue);
46 }); 46 });
47 47
48 test("sends values to valueOrCancellation", () {
49 expect(completer.operation.valueOrCancellation(), completion(equals(1)));
50 completer.complete(1);
51 });
52
53 test("sends errors to valueOrCancellation", () {
54 expect(completer.operation.valueOrCancellation(), throwsA("error"));
55 completer.completeError("error");
56 });
57
48 group("throws a StateError if completed", () { 58 group("throws a StateError if completed", () {
49 test("successfully twice", () { 59 test("successfully twice", () {
50 completer.complete(1); 60 completer.complete(1);
51 expect(() => completer.complete(1), throwsStateError); 61 expect(() => completer.complete(1), throwsStateError);
52 }); 62 });
53 63
54 test("successfully then unsuccessfully", () { 64 test("successfully then unsuccessfully", () {
55 completer.complete(1); 65 completer.complete(1);
56 expect(() => completer.completeError("error"), throwsStateError); 66 expect(() => completer.completeError("error"), throwsStateError);
57 }); 67 });
58 68
59 test("unsuccessfully twice", () { 69 test("unsuccessfully twice", () {
60 expect(completer.operation.value, throwsA("error")); 70 expect(completer.operation.value, throwsA("error"));
61 completer.completeError("error"); 71 completer.completeError("error");
62 expect(() => completer.completeError("error"), throwsStateError); 72 expect(() => completer.completeError("error"), throwsStateError);
63 }); 73 });
64 74
65 test("successfully then with a future", () { 75 test("successfully then with a future", () {
66 completer.complete(1); 76 completer.complete(1);
67 expect(() => completer.complete(new Completer().future), 77 expect(
68 throwsStateError); 78 () => completer.complete(new Completer().future), throwsStateError);
69 }); 79 });
70 80
71 test("with a future then successfully", () { 81 test("with a future then successfully", () {
72 completer.complete(new Completer().future); 82 completer.complete(new Completer().future);
73 expect(() => completer.complete(1), throwsStateError); 83 expect(() => completer.complete(1), throwsStateError);
74 }); 84 });
75 85
76 test("with a future twice", () { 86 test("with a future twice", () {
77 completer.complete(new Completer().future); 87 completer.complete(new Completer().future);
78 expect(() => completer.complete(new Completer().future), 88 expect(
79 throwsStateError); 89 () => completer.complete(new Completer().future), throwsStateError);
80 }); 90 });
81 }); 91 });
82 92
83 group("CancelableOperation.fromFuture", () { 93 group("CancelableOperation.fromFuture", () {
84 test("forwards values", () { 94 test("forwards values", () {
85 var operation = new CancelableOperation.fromFuture(new Future.value(1)); 95 var operation = new CancelableOperation.fromFuture(new Future.value(1));
86 expect(operation.value, completion(equals(1))); 96 expect(operation.value, completion(equals(1)));
87 }); 97 });
88 98
89 test("forwards errors", () { 99 test("forwards errors", () {
90 var operation = new CancelableOperation.fromFuture( 100 var operation =
91 new Future.error("error")); 101 new CancelableOperation.fromFuture(new Future.error("error"));
92 expect(operation.value, throwsA("error")); 102 expect(operation.value, throwsA("error"));
93 }); 103 });
94 }); 104 });
95 }); 105 });
96 106
97 group("when canceled", () { 107 group("when canceled", () {
98 test("causes the future never to fire", () async { 108 test("causes the future never to fire", () async {
99 var completer = new CancelableCompleter(); 109 var completer = new CancelableCompleter();
100 completer.operation.value.whenComplete(expectAsync(() {}, count: 0)); 110 completer.operation.value.whenComplete(expectAsync0(() {}, count: 0));
101 completer.operation.cancel(); 111 completer.operation.cancel();
102 112
103 // Give the future plenty of time to fire if it's going to. 113 // Give the future plenty of time to fire if it's going to.
104 await flushMicrotasks(); 114 await flushMicrotasks();
105 completer.complete(); 115 completer.complete();
106 await flushMicrotasks(); 116 await flushMicrotasks();
107 }); 117 });
108 118
109 test("fires onCancel", () { 119 test("fires onCancel", () {
110 var canceled = false; 120 var canceled = false;
111 var completer; 121 var completer;
112 completer = new CancelableCompleter(onCancel: expectAsync(() { 122 completer = new CancelableCompleter(onCancel: expectAsync0(() {
113 expect(completer.isCanceled, isTrue); 123 expect(completer.isCanceled, isTrue);
114 canceled = true; 124 canceled = true;
115 })); 125 }));
116 126
117 expect(canceled, isFalse); 127 expect(canceled, isFalse);
118 expect(completer.isCanceled, isFalse); 128 expect(completer.isCanceled, isFalse);
119 expect(completer.isCompleted, isFalse); 129 expect(completer.isCompleted, isFalse);
120 completer.operation.cancel(); 130 completer.operation.cancel();
121 expect(canceled, isTrue); 131 expect(canceled, isTrue);
122 expect(completer.isCanceled, isTrue); 132 expect(completer.isCanceled, isTrue);
123 expect(completer.isCompleted, isFalse); 133 expect(completer.isCompleted, isFalse);
124 }); 134 });
125 135
126 test("returns the onCancel future each time cancel is called", () { 136 test("returns the onCancel future each time cancel is called", () {
127 var completer = new CancelableCompleter(onCancel: expectAsync(() { 137 var completer = new CancelableCompleter(onCancel: expectAsync0(() {
128 return new Future.value(1); 138 return new Future.value(1);
129 })); 139 }));
130 expect(completer.operation.cancel(), completion(equals(1))); 140 expect(completer.operation.cancel(), completion(equals(1)));
131 expect(completer.operation.cancel(), completion(equals(1))); 141 expect(completer.operation.cancel(), completion(equals(1)));
132 expect(completer.operation.cancel(), completion(equals(1))); 142 expect(completer.operation.cancel(), completion(equals(1)));
133 }); 143 });
134 144
135 test("returns a future even if onCancel doesn't", () { 145 test("returns a future even if onCancel doesn't", () {
136 var completer = new CancelableCompleter(onCancel: expectAsync(() {})); 146 var completer = new CancelableCompleter(onCancel: expectAsync0(() {}));
137 expect(completer.operation.cancel(), completes); 147 expect(completer.operation.cancel(), completes);
138 }); 148 });
139 149
140 test("doesn't call onCancel if the completer has completed", () { 150 test("doesn't call onCancel if the completer has completed", () {
141 var completer = new CancelableCompleter( 151 var completer =
142 onCancel: expectAsync(() {}, count: 0)); 152 new CancelableCompleter(onCancel: expectAsync0(() {}, count: 0));
143 completer.complete(1); 153 completer.complete(1);
144 expect(completer.operation.value, completion(equals(1))); 154 expect(completer.operation.value, completion(equals(1)));
145 expect(completer.operation.cancel(), completes); 155 expect(completer.operation.cancel(), completes);
146 }); 156 });
147 157
148 test("does call onCancel if the completer has completed to an unfired " 158 test(
159 "does call onCancel if the completer has completed to an unfired "
149 "Future", () { 160 "Future", () {
150 var completer = new CancelableCompleter(onCancel: expectAsync(() {})); 161 var completer = new CancelableCompleter(onCancel: expectAsync0(() {}));
151 completer.complete(new Completer().future); 162 completer.complete(new Completer().future);
152 expect(completer.operation.cancel(), completes); 163 expect(completer.operation.cancel(), completes);
153 }); 164 });
154 165
155 test("doesn't call onCancel if the completer has completed to a fired " 166 test(
167 "doesn't call onCancel if the completer has completed to a fired "
156 "Future", () async { 168 "Future", () async {
157 var completer = new CancelableCompleter( 169 var completer =
158 onCancel: expectAsync(() {}, count: 0)); 170 new CancelableCompleter(onCancel: expectAsync0(() {}, count: 0));
159 completer.complete(new Future.value(1)); 171 completer.complete(new Future.value(1));
160 await completer.operation.value; 172 await completer.operation.value;
161 expect(completer.operation.cancel(), completes); 173 expect(completer.operation.cancel(), completes);
162 }); 174 });
163 175
164 test("can be completed once after being canceled", () async { 176 test("can be completed once after being canceled", () async {
165 var completer = new CancelableCompleter(); 177 var completer = new CancelableCompleter();
166 completer.operation.value.whenComplete(expectAsync(() {}, count: 0)); 178 completer.operation.value.whenComplete(expectAsync0(() {}, count: 0));
167 await completer.operation.cancel(); 179 await completer.operation.cancel();
168 completer.complete(1); 180 completer.complete(1);
169 expect(() => completer.complete(1), throwsStateError); 181 expect(() => completer.complete(1), throwsStateError);
170 }); 182 });
183
184 test("fires valueOrCancellation with the given value", () {
185 var completer = new CancelableCompleter();
186 expect(completer.operation.valueOrCancellation(1), completion(equals(1)));
187 completer.operation.cancel();
188 });
189
190 test("pipes an error through valueOrCancellation", () {
191 var completer = new CancelableCompleter(onCancel: () {
192 throw "error";
193 });
194 expect(completer.operation.valueOrCancellation(1), throwsA("error"));
195 completer.operation.cancel();
196 });
197
198 test("valueOrCancellation waits on the onCancel future", () async {
199 var innerCompleter = new Completer();
200 var completer =
201 new CancelableCompleter(onCancel: () => innerCompleter.future);
202
203 var fired = false;
204 completer.operation.valueOrCancellation().then((_) {
205 fired = true;
206 });
207
208 completer.operation.cancel();
209 await flushMicrotasks();
210 expect(fired, isFalse);
211
212 innerCompleter.complete();
213 await flushMicrotasks();
214 expect(fired, isTrue);
215 });
171 }); 216 });
172 217
173 group("asStream()", () { 218 group("asStream()", () {
174 test("emits a value and then closes", () { 219 test("emits a value and then closes", () {
175 var completer = new CancelableCompleter(); 220 var completer = new CancelableCompleter();
176 expect(completer.operation.asStream().toList(), completion(equals([1]))); 221 expect(completer.operation.asStream().toList(), completion(equals([1])));
177 completer.complete(1); 222 completer.complete(1);
178 }); 223 });
179 224
180 test("emits an error and then closes", () { 225 test("emits an error and then closes", () {
181 var completer = new CancelableCompleter(); 226 var completer = new CancelableCompleter();
182 var queue = new StreamQueue(completer.operation.asStream()); 227 var queue = new StreamQueue(completer.operation.asStream());
183 expect(queue.next, throwsA("error")); 228 expect(queue.next, throwsA("error"));
184 expect(queue.hasNext, completion(isFalse)); 229 expect(queue.hasNext, completion(isFalse));
185 completer.completeError("error"); 230 completer.completeError("error");
186 }); 231 });
187 232
188 test("cancels the completer when the subscription is canceled", () { 233 test("cancels the completer when the subscription is canceled", () {
189 var completer = new CancelableCompleter(onCancel: expectAsync(() {})); 234 var completer = new CancelableCompleter(onCancel: expectAsync0(() {}));
190 var sub = completer.operation.asStream() 235 var sub =
191 .listen(expectAsync((_) {}, count: 0)); 236 completer.operation.asStream().listen(expectAsync1((_) {}, count: 0));
192 completer.operation.value.whenComplete(expectAsync(() {}, count: 0)); 237 completer.operation.value.whenComplete(expectAsync0(() {}, count: 0));
193 sub.cancel(); 238 sub.cancel();
194 expect(completer.isCanceled, isTrue); 239 expect(completer.isCanceled, isTrue);
195 }); 240 });
196 }); 241 });
197 } 242 }
OLDNEW
« no previous file with comments | « packages/async/test/byte_collection_test.dart ('k') | packages/async/test/future_group_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698