OLD | NEW |
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 // TODO(nweiz): Get rid of this when https://codereview.chromium.org/1241723003/ | 5 // TODO(nweiz): Get rid of this when https://codereview.chromium.org/1241723003/ |
6 // lands. | 6 // lands. |
7 | 7 |
8 import 'dart:async'; | 8 import 'dart:async'; |
9 | 9 |
10 import 'package:test/test.dart'; | 10 import 'package:test/test.dart'; |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
206 | 206 |
207 for (var i = 0; i < 4; i++) { | 207 for (var i = 0; i < 4; i++) { |
208 controller.add(i); | 208 controller.add(i); |
209 | 209 |
210 var queue1Fired = false; | 210 var queue1Fired = false; |
211 var queue2Fired = false; | 211 var queue2Fired = false; |
212 var queue3Fired = false; | 212 var queue3Fired = false; |
213 var queue4Fired = false; | 213 var queue4Fired = false; |
214 var queue5Fired = false; | 214 var queue5Fired = false; |
215 | 215 |
216 queue5.next.then(expectAsync((_) { | 216 queue5.next.then(expectAsync1((_) { |
217 queue5Fired = true; | 217 queue5Fired = true; |
218 expect(queue1Fired, isTrue); | 218 expect(queue1Fired, isTrue); |
219 expect(queue2Fired, isTrue); | 219 expect(queue2Fired, isTrue); |
220 expect(queue3Fired, isTrue); | 220 expect(queue3Fired, isTrue); |
221 expect(queue4Fired, isTrue); | 221 expect(queue4Fired, isTrue); |
222 })); | 222 })); |
223 | 223 |
224 queue1.next.then(expectAsync((_) { | 224 queue1.next.then(expectAsync1((_) { |
225 queue1Fired = true; | 225 queue1Fired = true; |
226 expect(queue2Fired, isFalse); | 226 expect(queue2Fired, isFalse); |
227 expect(queue3Fired, isFalse); | 227 expect(queue3Fired, isFalse); |
228 expect(queue4Fired, isFalse); | 228 expect(queue4Fired, isFalse); |
229 expect(queue5Fired, isFalse); | 229 expect(queue5Fired, isFalse); |
230 })); | 230 })); |
231 | 231 |
232 queue4.next.then(expectAsync((_) { | 232 queue4.next.then(expectAsync1((_) { |
233 queue4Fired = true; | 233 queue4Fired = true; |
234 expect(queue1Fired, isTrue); | 234 expect(queue1Fired, isTrue); |
235 expect(queue2Fired, isTrue); | 235 expect(queue2Fired, isTrue); |
236 expect(queue3Fired, isTrue); | 236 expect(queue3Fired, isTrue); |
237 expect(queue5Fired, isFalse); | 237 expect(queue5Fired, isFalse); |
238 })); | 238 })); |
239 | 239 |
240 queue2.next.then(expectAsync((_) { | 240 queue2.next.then(expectAsync1((_) { |
241 queue2Fired = true; | 241 queue2Fired = true; |
242 expect(queue1Fired, isTrue); | 242 expect(queue1Fired, isTrue); |
243 expect(queue3Fired, isFalse); | 243 expect(queue3Fired, isFalse); |
244 expect(queue4Fired, isFalse); | 244 expect(queue4Fired, isFalse); |
245 expect(queue5Fired, isFalse); | 245 expect(queue5Fired, isFalse); |
246 })); | 246 })); |
247 | 247 |
248 queue3.next.then(expectAsync((_) { | 248 queue3.next.then(expectAsync1((_) { |
249 queue3Fired = true; | 249 queue3Fired = true; |
250 expect(queue1Fired, isTrue); | 250 expect(queue1Fired, isTrue); |
251 expect(queue2Fired, isTrue); | 251 expect(queue2Fired, isTrue); |
252 expect(queue4Fired, isFalse); | 252 expect(queue4Fired, isFalse); |
253 expect(queue5Fired, isFalse); | 253 expect(queue5Fired, isFalse); |
254 })); | 254 })); |
255 } | 255 } |
256 }); | 256 }); |
257 | 257 |
258 test("pauses the source when all forks are paused and/or not listening", | 258 test("pauses the source when all forks are paused and/or not listening", |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 expect(controller.hasListener, isTrue); | 304 expect(controller.hasListener, isTrue); |
305 | 305 |
306 expect(fork4.listen(null).cancel(), completion(equals(42))); | 306 expect(fork4.listen(null).cancel(), completion(equals(42))); |
307 await flushMicrotasks(); | 307 await flushMicrotasks(); |
308 expect(controller.hasListener, isFalse); | 308 expect(controller.hasListener, isFalse); |
309 }); | 309 }); |
310 }); | 310 }); |
311 | 311 |
312 group("modification during dispatch:", () { | 312 group("modification during dispatch:", () { |
313 test("forking during onCancel", () { | 313 test("forking during onCancel", () { |
314 controller = new StreamController<int>(onCancel: expectAsync(() { | 314 controller = new StreamController<int>(onCancel: expectAsync0(() { |
315 expect(stream.fork().toList(), completion(isEmpty)); | 315 expect(stream.fork().toList(), completion(isEmpty)); |
316 })); | 316 })); |
317 stream = new ForkableStream<int>(controller.stream); | 317 stream = new ForkableStream<int>(controller.stream); |
318 | 318 |
319 stream.listen(null).cancel(); | 319 stream.listen(null).cancel(); |
320 }); | 320 }); |
321 | 321 |
322 test("forking during onPause", () { | 322 test("forking during onPause", () { |
323 controller = new StreamController<int>(onPause: expectAsync(() { | 323 controller = new StreamController<int>(onPause: expectAsync0(() { |
324 stream.fork().listen(null); | 324 stream.fork().listen(null); |
325 })); | 325 })); |
326 stream = new ForkableStream<int>(controller.stream); | 326 stream = new ForkableStream<int>(controller.stream); |
327 | 327 |
328 stream.listen(null).pause(); | 328 stream.listen(null).pause(); |
329 | 329 |
330 // The fork created in onPause should have resumed the stream. | 330 // The fork created in onPause should have resumed the stream. |
331 expect(controller.isPaused, isFalse); | 331 expect(controller.isPaused, isFalse); |
332 }); | 332 }); |
333 | 333 |
334 test("forking during onData", () { | 334 test("forking during onData", () { |
335 var sub; | 335 var sub; |
336 sub = stream.listen(expectAsync((value1) { | 336 sub = stream.listen(expectAsync1((value1) { |
337 expect(value1, equals(1)); | 337 expect(value1, equals(1)); |
338 stream.fork().listen(expectAsync((value2) { | 338 stream.fork().listen(expectAsync1((value2) { |
339 expect(value2, equals(2)); | 339 expect(value2, equals(2)); |
340 })); | 340 })); |
341 sub.cancel(); | 341 sub.cancel(); |
342 })); | 342 })); |
343 | 343 |
344 controller.add(1); | 344 controller.add(1); |
345 controller.add(2); | 345 controller.add(2); |
346 }); | 346 }); |
347 | 347 |
348 test("canceling a fork during onData", () { | 348 test("canceling a fork during onData", () { |
349 var fork = stream.fork(); | 349 var fork = stream.fork(); |
350 var forkSub = fork.listen(expectAsync((_) {}, count: 0)); | 350 var forkSub = fork.listen(expectAsync1((_) {}, count: 0)); |
351 | 351 |
352 stream.listen(expectAsync((_) => forkSub.cancel())); | 352 stream.listen(expectAsync1((_) => forkSub.cancel())); |
353 controller.add(null); | 353 controller.add(null); |
354 }); | 354 }); |
355 | 355 |
356 test("forking during onError", () { | 356 test("forking during onError", () { |
357 var sub; | 357 var sub; |
358 sub = stream.listen(null, onError: expectAsync((error1) { | 358 sub = stream.listen(null, onError: expectAsync1((error1) { |
359 expect(error1, equals("error 1")); | 359 expect(error1, equals("error 1")); |
360 stream.fork().listen(null, onError: expectAsync((error2) { | 360 stream.fork().listen(null, onError: expectAsync1((error2) { |
361 expect(error2, equals("error 2")); | 361 expect(error2, equals("error 2")); |
362 })); | 362 })); |
363 sub.cancel(); | 363 sub.cancel(); |
364 })); | 364 })); |
365 | 365 |
366 controller.addError("error 1"); | 366 controller.addError("error 1"); |
367 controller.addError("error 2"); | 367 controller.addError("error 2"); |
368 }); | 368 }); |
369 | 369 |
370 test("canceling a fork during onError", () { | 370 test("canceling a fork during onError", () { |
371 var fork = stream.fork(); | 371 var fork = stream.fork(); |
372 var forkSub = fork.listen(expectAsync((_) {}, count: 0)); | 372 var forkSub = fork.listen(expectAsync1((_) {}, count: 0)); |
373 | 373 |
374 stream.listen(null, onError: expectAsync((_) => forkSub.cancel())); | 374 stream.listen(null, onError: expectAsync1((_) => forkSub.cancel())); |
375 controller.addError("error"); | 375 controller.addError("error"); |
376 }); | 376 }); |
377 | 377 |
378 test("forking during onDone", () { | 378 test("forking during onDone", () { |
379 stream.listen(null, onDone: expectAsync(() { | 379 stream.listen(null, onDone: expectAsync0(() { |
380 expect(stream.fork().toList(), completion(isEmpty)); | 380 expect(stream.fork().toList(), completion(isEmpty)); |
381 })); | 381 })); |
382 | 382 |
383 controller.close(); | 383 controller.close(); |
384 }); | 384 }); |
385 | 385 |
386 test("canceling a fork during onDone", () { | 386 test("canceling a fork during onDone", () { |
387 var fork = stream.fork(); | 387 var fork = stream.fork(); |
388 var forkSub = fork.listen(null, onDone: expectAsync(() {}, count: 0)); | 388 var forkSub = fork.listen(null, onDone: expectAsync0(() {}, count: 0)); |
389 | 389 |
390 stream.listen(null, onDone: expectAsync(() => forkSub.cancel())); | 390 stream.listen(null, onDone: expectAsync0(() => forkSub.cancel())); |
391 controller.close(); | 391 controller.close(); |
392 }); | 392 }); |
393 }); | 393 }); |
394 | 394 |
395 group("throws an error when", () { | 395 group("throws an error when", () { |
396 test("a cancelled stream is forked", () { | 396 test("a cancelled stream is forked", () { |
397 stream.listen(null).cancel(); | 397 stream.listen(null).cancel(); |
398 expect(stream.fork().toList(), completion(isEmpty)); | 398 expect(stream.fork().toList(), completion(isEmpty)); |
399 }); | 399 }); |
400 | 400 |
401 test("a cancelled stream is forked even when other forks are alive", () { | 401 test("a cancelled stream is forked even when other forks are alive", () { |
402 stream.fork().listen(null); | 402 stream.fork().listen(null); |
403 stream.listen(null).cancel(); | 403 stream.listen(null).cancel(); |
404 | 404 |
405 expect(controller.hasListener, isTrue); | 405 expect(controller.hasListener, isTrue); |
406 expect(stream.fork().toList(), completion(isEmpty)); | 406 expect(stream.fork().toList(), completion(isEmpty)); |
407 }); | 407 }); |
408 | 408 |
409 test("a closed stream is forked", () async { | 409 test("a closed stream is forked", () async { |
410 controller.close(); | 410 controller.close(); |
411 await stream.listen(null).asFuture(); | 411 await stream.listen(null).asFuture(); |
412 expect(stream.fork().toList(), completion(isEmpty)); | 412 expect(stream.fork().toList(), completion(isEmpty)); |
413 }); | 413 }); |
414 }); | 414 }); |
415 } | 415 } |
416 | 416 |
417 Future flushMicrotasks() => new Future.delayed(Duration.ZERO); | 417 Future flushMicrotasks() => new Future.delayed(Duration.ZERO); |
OLD | NEW |