| 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 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 326 await flushMicrotasks(); | 326 await flushMicrotasks(); |
| 327 expect(lastEvent, 3); | 327 expect(lastEvent, 3); |
| 328 | 328 |
| 329 var cancelFuture = subscription.cancel(); | 329 var cancelFuture = subscription.cancel(); |
| 330 expect(controller.hasListener, isFalse); | 330 expect(controller.hasListener, isFalse); |
| 331 cancel.complete(42); | 331 cancel.complete(42); |
| 332 expect(cancelFuture, completion(42)); | 332 expect(cancelFuture, completion(42)); |
| 333 }); | 333 }); |
| 334 }); | 334 }); |
| 335 | 335 |
| 336 group("close operation", () { | 336 group("cancel operation", () { |
| 337 test("closes the events, prevents any other operation", () async { | 337 test("closes the events, prevents any other operation", () async { |
| 338 var events = new StreamQueue<int>(createStream()); | 338 var events = new StreamQueue<int>(createStream()); |
| 339 await events.cancel(); | 339 await events.cancel(); |
| 340 expect(() => events.next, throwsStateError); | 340 expect(() => events.next, throwsStateError); |
| 341 expect(() => events.skip(1), throwsStateError); | 341 expect(() => events.skip(1), throwsStateError); |
| 342 expect(() => events.take(1), throwsStateError); | 342 expect(() => events.take(1), throwsStateError); |
| 343 expect(() => events.rest, throwsStateError); | 343 expect(() => events.rest, throwsStateError); |
| 344 expect(() => events.cancel(), throwsStateError); | 344 expect(() => events.cancel(), throwsStateError); |
| 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 group("with immediate: true", () async { |
| 357 test("closes the events, prevents any other operation", () async { |
| 358 var events = new StreamQueue<int>(createStream()); |
| 359 await events.cancel(immediate: true); |
| 360 expect(() => events.next, throwsStateError); |
| 361 expect(() => events.skip(1), throwsStateError); |
| 362 expect(() => events.take(1), throwsStateError); |
| 363 expect(() => events.rest, throwsStateError); |
| 364 expect(() => events.cancel(), throwsStateError); |
| 365 }); |
| 366 |
| 367 test("cancels the underlying subscription immediately", () async { |
| 368 var controller = new StreamController(); |
| 369 controller.add(1); |
| 370 |
| 371 var events = new StreamQueue<int>(controller.stream); |
| 372 expect(await events.next, 1); |
| 373 expect(controller.hasListener, isTrue); |
| 374 |
| 375 events.cancel(immediate: true); |
| 376 await expect(controller.hasListener, isFalse); |
| 377 }); |
| 378 |
| 379 test("closes pending requests", () async { |
| 380 var events = new StreamQueue<int>(createStream()); |
| 381 expect(await events.next, 1); |
| 382 expect(events.next, throwsStateError); |
| 383 expect(events.hasNext, completion(isFalse)); |
| 384 |
| 385 await events.cancel(immediate: true); |
| 386 }); |
| 387 |
| 388 test("returns the result of closing the underlying subscription", |
| 389 () async { |
| 390 var controller = new StreamController( |
| 391 onCancel: () => new Future.value(42)); |
| 392 var events = new StreamQueue<int>(controller.stream); |
| 393 expect(await events.cancel(immediate: true), 42); |
| 394 }); |
| 395 |
| 396 test("listens and then cancels a stream that hasn't been listened to yet", |
| 397 () async { |
| 398 var wasListened = false; |
| 399 var controller = new StreamController( |
| 400 onListen: () => wasListened = true); |
| 401 var events = new StreamQueue<int>(controller.stream); |
| 402 expect(wasListened, isFalse); |
| 403 expect(controller.hasListener, isFalse); |
| 404 |
| 405 await events.cancel(immediate: true); |
| 406 expect(wasListened, isTrue); |
| 407 expect(controller.hasListener, isFalse); |
| 408 }); |
| 409 }); |
| 355 }); | 410 }); |
| 356 | 411 |
| 357 | |
| 358 group("hasNext operation", () { | 412 group("hasNext operation", () { |
| 359 test("true at start", () async { | 413 test("true at start", () async { |
| 360 var events = new StreamQueue<int>(createStream()); | 414 var events = new StreamQueue<int>(createStream()); |
| 361 expect(await events.hasNext, isTrue); | 415 expect(await events.hasNext, isTrue); |
| 362 }); | 416 }); |
| 363 | 417 |
| 364 test("true after start", () async { | 418 test("true after start", () async { |
| 365 var events = new StreamQueue<int>(createStream()); | 419 var events = new StreamQueue<int>(createStream()); |
| 366 expect(await events.next, 1); | 420 expect(await events.next, 1); |
| 367 expect(await events.hasNext, isTrue); | 421 expect(await events.hasNext, isTrue); |
| (...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 623 controller.add(4); | 677 controller.add(4); |
| 624 await flushMicrotasks(); | 678 await flushMicrotasks(); |
| 625 controller.close(); | 679 controller.close(); |
| 626 }(); | 680 }(); |
| 627 return controller.stream; | 681 return controller.stream; |
| 628 } | 682 } |
| 629 | 683 |
| 630 Stream<int> createLongStream(int eventCount) async* { | 684 Stream<int> createLongStream(int eventCount) async* { |
| 631 for (int i = 0; i < eventCount; i++) yield i; | 685 for (int i = 0; i < eventCount; i++) yield i; |
| 632 } | 686 } |
| OLD | NEW |