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

Side by Side Diff: packages/async/test/stream_completer_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" show StreamCompleter; 7 import "package:async/async.dart" show StreamCompleter;
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 main() { 12 main() {
13 test("a stream is linked before listening", () async { 13 test("a stream is linked before listening", () async {
14 var completer = new StreamCompleter(); 14 var completer = new StreamCompleter();
15 completer.setSourceStream(createStream()); 15 completer.setSourceStream(createStream());
16 expect(completer.stream.toList(), completion([1, 2, 3, 4])); 16 expect(completer.stream.toList(), completion([1, 2, 3, 4]));
17 }); 17 });
18 18
19 test("listened to before a stream is linked", () async { 19 test("listened to before a stream is linked", () async {
20 var completer = new StreamCompleter(); 20 var completer = new StreamCompleter();
21 var done = completer.stream.toList(); 21 var done = completer.stream.toList();
22 await flushMicrotasks(); 22 await flushMicrotasks();
23 completer.setSourceStream(createStream()); 23 completer.setSourceStream(createStream());
24 expect(done, completion([1, 2, 3, 4])); 24 expect(done, completion([1, 2, 3, 4]));
25 }); 25 });
26 26
27 test("cancel before linking a stream doesn't listen on stream", () async { 27 test("cancel before linking a stream doesn't listen on stream", () async {
28 var completer = new StreamCompleter(); 28 var completer = new StreamCompleter();
29 var subscription = completer.stream.listen(null); 29 var subscription = completer.stream.listen(null);
30 subscription.pause(); // Should be ignored. 30 subscription.pause(); // Should be ignored.
31 subscription.cancel(); 31 subscription.cancel();
32 completer.setSourceStream(new UnusableStream()); // Doesn't throw. 32 completer.setSourceStream(new UnusableStream()); // Doesn't throw.
33 }); 33 });
34 34
35 test("listen and pause before linking stream", () async { 35 test("listen and pause before linking stream", () async {
36 var controller = new StreamCompleter(); 36 var controller = new StreamCompleter();
37 var events = []; 37 var events = [];
38 var subscription = controller.stream.listen(events.add); 38 var subscription = controller.stream.listen(events.add);
39 var done = subscription.asFuture(); 39 var done = subscription.asFuture();
40 subscription.pause(); 40 subscription.pause();
41 var sourceController = new StreamController(); 41 var sourceController = new StreamController();
42 sourceController..add(1)..add(2)..add(3)..add(4); 42 sourceController..add(1)..add(2)..add(3)..add(4);
(...skipping 28 matching lines...) Expand all
71 } 71 }
72 await done; 72 await done;
73 expect(events, [1, 2, 3, 4]); 73 expect(events, [1, 2, 3, 4]);
74 }); 74 });
75 75
76 test("cancel new stream before source is done", () async { 76 test("cancel new stream before source is done", () async {
77 var completer = new StreamCompleter(); 77 var completer = new StreamCompleter();
78 var lastEvent = -1; 78 var lastEvent = -1;
79 var controller = new StreamController(); 79 var controller = new StreamController();
80 var subscription; 80 var subscription;
81 subscription = completer.stream.listen( 81 subscription = completer.stream.listen((value) {
82 (value) { 82 expect(value, lessThan(3));
83 expect(value, lessThan(3)); 83 lastEvent = value;
84 lastEvent = value; 84 if (value == 2) {
85 if (value == 2) { 85 subscription.cancel();
86 subscription.cancel(); 86 }
87 } 87 },
88 },
89 onError: unreachable("error"), 88 onError: unreachable("error"),
90 onDone: unreachable("done"), 89 onDone: unreachable("done"),
91 cancelOnError: true); 90 cancelOnError: true);
92 completer.setSourceStream(controller.stream); 91 completer.setSourceStream(controller.stream);
93 expect(controller.hasListener, isTrue); 92 expect(controller.hasListener, isTrue);
94 93
95 await flushMicrotasks(); 94 await flushMicrotasks();
96 expect(controller.hasListener, isTrue); 95 expect(controller.hasListener, isTrue);
97 controller.add(1); 96 controller.add(1);
98 97
99 await flushMicrotasks(); 98 await flushMicrotasks();
100 expect(lastEvent, 1); 99 expect(lastEvent, 1);
101 expect(controller.hasListener, isTrue); 100 expect(controller.hasListener, isTrue);
102 controller.add(2); 101 controller.add(2);
103 102
104 await flushMicrotasks(); 103 await flushMicrotasks();
105 expect(lastEvent, 2); 104 expect(lastEvent, 2);
106 expect(controller.hasListener, isFalse); 105 expect(controller.hasListener, isFalse);
107 }); 106 });
108 107
109 test("complete with setEmpty before listening", () async { 108 test("complete with setEmpty before listening", () async {
110 var completer = new StreamCompleter(); 109 var completer = new StreamCompleter();
111 completer.setEmpty(); 110 completer.setEmpty();
112 var done = new Completer(); 111 var done = new Completer();
113 completer.stream.listen( 112 completer.stream.listen(unreachable("data"),
114 unreachable("data"), 113 onError: unreachable("error"), onDone: done.complete);
115 onError: unreachable("error"),
116 onDone: done.complete);
117 await done.future; 114 await done.future;
118 }); 115 });
119 116
120 test("complete with setEmpty after listening", () async { 117 test("complete with setEmpty after listening", () async {
121 var completer = new StreamCompleter(); 118 var completer = new StreamCompleter();
122 var done = new Completer(); 119 var done = new Completer();
123 completer.stream.listen( 120 completer.stream.listen(unreachable("data"),
124 unreachable("data"), 121 onError: unreachable("error"), onDone: done.complete);
125 onError: unreachable("error"),
126 onDone: done.complete);
127 completer.setEmpty(); 122 completer.setEmpty();
128 await done.future; 123 await done.future;
129 }); 124 });
130 125
131 test("source stream isn't listened to until completer stream is", () async { 126 test("source stream isn't listened to until completer stream is", () async {
132 var completer = new StreamCompleter(); 127 var completer = new StreamCompleter();
133 var controller; 128 StreamController controller;
134 controller = new StreamController(onListen: () { 129 controller = new StreamController(onListen: () {
135 scheduleMicrotask(controller.close); 130 scheduleMicrotask(controller.close);
136 }); 131 });
137 132
138 completer.setSourceStream(controller.stream); 133 completer.setSourceStream(controller.stream);
139 await flushMicrotasks(); 134 await flushMicrotasks();
140 expect(controller.hasListener, isFalse); 135 expect(controller.hasListener, isFalse);
141 var subscription = completer.stream.listen(null); 136 var subscription = completer.stream.listen(null);
142 expect(controller.hasListener, isTrue); 137 expect(controller.hasListener, isTrue);
143 await subscription.asFuture(); 138 await subscription.asFuture();
144 }); 139 });
145 140
146 test("cancelOnError true when listening before linking stream", () async { 141 test("cancelOnError true when listening before linking stream", () async {
147 var completer = new StreamCompleter(); 142 var completer = new StreamCompleter();
148 var lastEvent = -1; 143 var lastEvent = -1;
149 var controller = new StreamController(); 144 var controller = new StreamController();
150 completer.stream.listen( 145 completer.stream.listen((value) {
151 (value) { 146 expect(value, lessThan(3));
152 expect(value, lessThan(3)); 147 lastEvent = value;
153 lastEvent = value; 148 }, onError: (value) {
154 }, 149 expect(value, "3");
155 onError: (value) { 150 lastEvent = value;
156 expect(value, "3"); 151 }, onDone: unreachable("done"), cancelOnError: true);
157 lastEvent = value;
158 },
159 onDone: unreachable("done"),
160 cancelOnError: true);
161 completer.setSourceStream(controller.stream); 152 completer.setSourceStream(controller.stream);
162 expect(controller.hasListener, isTrue); 153 expect(controller.hasListener, isTrue);
163 154
164 await flushMicrotasks(); 155 await flushMicrotasks();
165 expect(controller.hasListener, isTrue); 156 expect(controller.hasListener, isTrue);
166 controller.add(1); 157 controller.add(1);
167 158
168 await flushMicrotasks(); 159 await flushMicrotasks();
169 expect(lastEvent, 1); 160 expect(lastEvent, 1);
170 expect(controller.hasListener, isTrue); 161 expect(controller.hasListener, isTrue);
(...skipping 10 matching lines...) Expand all
181 }); 172 });
182 173
183 test("cancelOnError true when listening after linking stream", () async { 174 test("cancelOnError true when listening after linking stream", () async {
184 var completer = new StreamCompleter(); 175 var completer = new StreamCompleter();
185 var lastEvent = -1; 176 var lastEvent = -1;
186 var controller = new StreamController(); 177 var controller = new StreamController();
187 completer.setSourceStream(controller.stream); 178 completer.setSourceStream(controller.stream);
188 controller.add(1); 179 controller.add(1);
189 expect(controller.hasListener, isFalse); 180 expect(controller.hasListener, isFalse);
190 181
191 completer.stream.listen( 182 completer.stream.listen((value) {
192 (value) { 183 expect(value, lessThan(3));
193 expect(value, lessThan(3)); 184 lastEvent = value;
194 lastEvent = value; 185 }, onError: (value) {
195 }, 186 expect(value, "3");
196 onError: (value) { 187 lastEvent = value;
197 expect(value, "3"); 188 }, onDone: unreachable("done"), cancelOnError: true);
198 lastEvent = value;
199 },
200 onDone: unreachable("done"),
201 cancelOnError: true);
202 189
203 expect(controller.hasListener, isTrue); 190 expect(controller.hasListener, isTrue);
204 191
205 await flushMicrotasks(); 192 await flushMicrotasks();
206 expect(lastEvent, 1); 193 expect(lastEvent, 1);
207 expect(controller.hasListener, isTrue); 194 expect(controller.hasListener, isTrue);
208 controller.add(2); 195 controller.add(2);
209 196
210 await flushMicrotasks(); 197 await flushMicrotasks();
211 expect(lastEvent, 2); 198 expect(lastEvent, 2);
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 test("listening more than once before setting stream", () async { 261 test("listening more than once before setting stream", () async {
275 var completer = new StreamCompleter(); 262 var completer = new StreamCompleter();
276 completer.stream.toList(); 263 completer.stream.toList();
277 expect(() => completer.stream.toList(), throwsStateError); 264 expect(() => completer.stream.toList(), throwsStateError);
278 }); 265 });
279 266
280 test("setting onData etc. before and after setting stream", () async { 267 test("setting onData etc. before and after setting stream", () async {
281 var completer = new StreamCompleter(); 268 var completer = new StreamCompleter();
282 var controller = new StreamController(); 269 var controller = new StreamController();
283 var subscription = completer.stream.listen(null); 270 var subscription = completer.stream.listen(null);
284 var lastEvent = 0; 271 Object lastEvent = 0;
285 subscription.onData((value) => lastEvent = value); 272 subscription.onData((value) => lastEvent = value);
286 subscription.onError((value) => lastEvent = "$value"); 273 subscription.onError((value) => lastEvent = "$value");
287 subscription.onDone(() => lastEvent = -1); 274 subscription.onDone(() => lastEvent = -1);
288 completer.setSourceStream(controller.stream); 275 completer.setSourceStream(controller.stream);
289 await flushMicrotasks(); 276 await flushMicrotasks();
290 controller.add(1); 277 controller.add(1);
291 await flushMicrotasks(); 278 await flushMicrotasks();
292 expect(lastEvent, 1); 279 expect(lastEvent, 1);
293 controller.addError(2); 280 controller.addError(2);
294 await flushMicrotasks(); 281 await flushMicrotasks();
(...skipping 22 matching lines...) Expand all
317 resume.complete(); 304 resume.complete();
318 var events = []; 305 var events = [];
319 subscription.onData(events.add); 306 subscription.onData(events.add);
320 await subscription.asFuture(); 307 await subscription.asFuture();
321 expect(events, [1, 2, 3, 4]); 308 expect(events, [1, 2, 3, 4]);
322 }); 309 });
323 310
324 test("asFuture with error accross setting stream", () async { 311 test("asFuture with error accross setting stream", () async {
325 var completer = new StreamCompleter(); 312 var completer = new StreamCompleter();
326 var controller = new StreamController(); 313 var controller = new StreamController();
327 var subscription = completer.stream.listen(unreachable("data"), 314 var subscription =
328 cancelOnError: false); 315 completer.stream.listen(unreachable("data"), cancelOnError: false);
329 var done = subscription.asFuture(); 316 var done = subscription.asFuture();
330 expect(controller.hasListener, isFalse); 317 expect(controller.hasListener, isFalse);
331 completer.setSourceStream(controller.stream); 318 completer.setSourceStream(controller.stream);
332 await flushMicrotasks(); 319 await flushMicrotasks();
333 expect(controller.hasListener, isTrue); 320 expect(controller.hasListener, isTrue);
334 controller.addError(42); 321 controller.addError(42);
335 await done.then(unreachable("data"), onError: (error) { 322 await done.then(unreachable("data"), onError: (error) {
336 expect(error, 42); 323 expect(error, 42);
337 }); 324 });
338 expect(controller.hasListener, isFalse); 325 expect(controller.hasListener, isFalse);
339 }); 326 });
327
328 group("setError()", () {
329 test("produces a stream that emits a single error", () {
330 var completer = new StreamCompleter();
331 completer.stream.listen(unreachable("data"),
332 onError: expectAsync2((error, stackTrace) {
333 expect(error, equals("oh no"));
334 }), onDone: expectAsync0(() {}));
335
336 completer.setError("oh no");
337 });
338
339 test("produces a stream that emits a single error on a later listen",
340 () async {
341 var completer = new StreamCompleter();
342 completer.setError("oh no");
343 await flushMicrotasks();
344
345 completer.stream.listen(unreachable("data"),
346 onError: expectAsync2((error, stackTrace) {
347 expect(error, equals("oh no"));
348 }), onDone: expectAsync0(() {}));
349 });
350 });
340 } 351 }
341 352
342 Stream<int> createStream() async* { 353 Stream<int> createStream() async* {
343 yield 1; 354 yield 1;
344 await flushMicrotasks(); 355 await flushMicrotasks();
345 yield 2; 356 yield 2;
346 await flushMicrotasks(); 357 await flushMicrotasks();
347 yield 3; 358 yield 3;
348 await flushMicrotasks(); 359 await flushMicrotasks();
349 yield 4; 360 yield 4;
350 } 361 }
OLDNEW
« no previous file with comments | « packages/async/test/single_subscription_transformer_test.dart ('k') | packages/async/test/stream_group_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698