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 filevents. | 3 // BSD-style license that can be found in the LICENSE filevents. |
4 | 4 |
5 import "dart:async"; | 5 import "dart:async"; |
6 | 6 |
7 import "package:async/async.dart" show StreamQueue; | 7 import "package:async/async.dart" show StreamQueue; |
8 import "package:test/test.dart"; | 8 import "package:test/test.dart"; |
9 | 9 |
10 import "utils.dart"; | 10 import "utils.dart"; |
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
345 }); | 345 }); |
346 | 346 |
347 test("cancels underlying subscription, returns result", () async { | 347 test("cancels underlying subscription, returns result", () async { |
348 var cancelFuture = new Future.value(42); | 348 var cancelFuture = new Future.value(42); |
349 var controller = new StreamController(onCancel: () => cancelFuture); | 349 var controller = new StreamController(onCancel: () => cancelFuture); |
350 var events = new StreamQueue<int>(controller.stream); | 350 var events = new StreamQueue<int>(controller.stream); |
351 controller.add(1); | 351 controller.add(1); |
352 expect(await events.next, 1); | 352 expect(await events.next, 1); |
353 expect(await events.cancel(), 42); | 353 expect(await events.cancel(), 42); |
354 }); | 354 }); |
355 }); | |
356 | 355 |
357 group("cancelImmediately()", () async { | 356 group("with immediate: true", () async { |
358 test("closes the events, prevents any other operation", () async { | 357 test("closes the events, prevents any other operation", () async { |
359 var events = new StreamQueue<int>(createStream()); | 358 var events = new StreamQueue<int>(createStream()); |
360 await events.cancelImmediately(); | 359 await events.cancel(immediate: true); |
361 expect(() => events.next, throwsStateError); | 360 expect(() => events.next, throwsStateError); |
362 expect(() => events.skip(1), throwsStateError); | 361 expect(() => events.skip(1), throwsStateError); |
363 expect(() => events.take(1), throwsStateError); | 362 expect(() => events.take(1), throwsStateError); |
364 expect(() => events.rest, throwsStateError); | 363 expect(() => events.rest, throwsStateError); |
365 expect(() => events.cancel(), throwsStateError); | 364 expect(() => events.cancel(), throwsStateError); |
366 }); | 365 }); |
367 | 366 |
368 test("cancels the underlying subscription immediately", () async { | 367 test("cancels the underlying subscription immediately", () async { |
369 var controller = new StreamController(); | 368 var controller = new StreamController(); |
370 controller.add(1); | 369 controller.add(1); |
371 | 370 |
372 var events = new StreamQueue<int>(controller.stream); | 371 var events = new StreamQueue<int>(controller.stream); |
373 expect(await events.next, 1); | 372 expect(await events.next, 1); |
374 expect(controller.hasListener, isTrue); | 373 expect(controller.hasListener, isTrue); |
375 | 374 |
376 events.cancelImmediately(); | 375 events.cancel(immediate: true); |
377 await expect(controller.hasListener, isFalse); | 376 await expect(controller.hasListener, isFalse); |
378 }); | 377 }); |
379 | 378 |
380 test("closes pending requests", () async { | 379 test("closes pending requests", () async { |
381 var events = new StreamQueue<int>(createStream()); | 380 var events = new StreamQueue<int>(createStream()); |
382 expect(await events.next, 1); | 381 expect(await events.next, 1); |
383 expect(events.next, throwsStateError); | 382 expect(events.next, throwsStateError); |
384 expect(events.hasNext, completion(isFalse)); | 383 expect(events.hasNext, completion(isFalse)); |
385 | 384 |
386 await events.cancelImmediately(); | 385 await events.cancel(immediate: true); |
387 }); | 386 }); |
388 | 387 |
389 test("returns the result of closing the underlying subscription", () async { | 388 test("returns the result of closing the underlying subscription", |
390 var controller = new StreamController( | 389 () async { |
391 onCancel: () => new Future.value(42)); | 390 var controller = new StreamController( |
392 var events = new StreamQueue<int>(controller.stream); | 391 onCancel: () => new Future.value(42)); |
393 expect(await events.cancelImmediately(), 42); | 392 var events = new StreamQueue<int>(controller.stream); |
394 }); | 393 expect(await events.cancel(immediate: true), 42); |
| 394 }); |
395 | 395 |
396 test("listens and then cancels a stream that hasn't been listened to yet", | 396 test("listens and then cancels a stream that hasn't been listened to yet", |
397 () async { | 397 () async { |
398 var wasListened = false; | 398 var wasListened = false; |
399 var controller = new StreamController( | 399 var controller = new StreamController( |
400 onListen: () => wasListened = true); | 400 onListen: () => wasListened = true); |
401 var events = new StreamQueue<int>(controller.stream); | 401 var events = new StreamQueue<int>(controller.stream); |
402 expect(wasListened, isFalse); | 402 expect(wasListened, isFalse); |
403 expect(controller.hasListener, isFalse); | 403 expect(controller.hasListener, isFalse); |
404 | 404 |
405 await events.cancelImmediately(); | 405 await events.cancel(immediate: true); |
406 expect(wasListened, isTrue); | 406 expect(wasListened, isTrue); |
407 expect(controller.hasListener, isFalse); | 407 expect(controller.hasListener, isFalse); |
| 408 }); |
408 }); | 409 }); |
409 }); | 410 }); |
410 | 411 |
411 group("hasNext operation", () { | 412 group("hasNext operation", () { |
412 test("true at start", () async { | 413 test("true at start", () async { |
413 var events = new StreamQueue<int>(createStream()); | 414 var events = new StreamQueue<int>(createStream()); |
414 expect(await events.hasNext, isTrue); | 415 expect(await events.hasNext, isTrue); |
415 }); | 416 }); |
416 | 417 |
417 test("true after start", () async { | 418 test("true after start", () async { |
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
676 controller.add(4); | 677 controller.add(4); |
677 await flushMicrotasks(); | 678 await flushMicrotasks(); |
678 controller.close(); | 679 controller.close(); |
679 }(); | 680 }(); |
680 return controller.stream; | 681 return controller.stream; |
681 } | 682 } |
682 | 683 |
683 Stream<int> createLongStream(int eventCount) async* { | 684 Stream<int> createLongStream(int eventCount) async* { |
684 for (int i = 0; i < eventCount; i++) yield i; | 685 for (int i = 0; i < eventCount; i++) yield i; |
685 } | 686 } |
OLD | NEW |