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 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 when called before any event", |
| 348 () async { |
| 349 var cancelFuture = new Future.value(42); |
| 350 var controller = new StreamController(onCancel: () => cancelFuture); |
| 351 var events = new StreamQueue<int>(controller.stream); |
| 352 expect(await events.cancel(), 42); |
| 353 }); |
| 354 |
347 test("cancels underlying subscription, returns result", () async { | 355 test("cancels underlying subscription, returns result", () async { |
348 var cancelFuture = new Future.value(42); | 356 var cancelFuture = new Future.value(42); |
349 var controller = new StreamController(onCancel: () => cancelFuture); | 357 var controller = new StreamController(onCancel: () => cancelFuture); |
350 var events = new StreamQueue<int>(controller.stream); | 358 var events = new StreamQueue<int>(controller.stream); |
351 controller.add(1); | 359 controller.add(1); |
352 expect(await events.next, 1); | 360 expect(await events.next, 1); |
353 expect(await events.cancel(), 42); | 361 expect(await events.cancel(), 42); |
354 }); | 362 }); |
355 | 363 |
356 group("with immediate: true", () async { | 364 group("with immediate: true", () { |
357 test("closes the events, prevents any other operation", () async { | 365 test("closes the events, prevents any other operation", () async { |
358 var events = new StreamQueue<int>(createStream()); | 366 var events = new StreamQueue<int>(createStream()); |
359 await events.cancel(immediate: true); | 367 await events.cancel(immediate: true); |
360 expect(() => events.next, throwsStateError); | 368 expect(() => events.next, throwsStateError); |
361 expect(() => events.skip(1), throwsStateError); | 369 expect(() => events.skip(1), throwsStateError); |
362 expect(() => events.take(1), throwsStateError); | 370 expect(() => events.take(1), throwsStateError); |
363 expect(() => events.rest, throwsStateError); | 371 expect(() => events.rest, throwsStateError); |
364 expect(() => events.cancel(), throwsStateError); | 372 expect(() => events.cancel(), throwsStateError); |
365 }); | 373 }); |
366 | 374 |
367 test("cancels the underlying subscription immediately", () async { | 375 test("cancels the underlying subscription immediately", () async { |
368 var controller = new StreamController(); | 376 var controller = new StreamController(); |
369 controller.add(1); | 377 controller.add(1); |
370 | 378 |
371 var events = new StreamQueue<int>(controller.stream); | 379 var events = new StreamQueue<int>(controller.stream); |
372 expect(await events.next, 1); | 380 expect(await events.next, 1); |
373 expect(controller.hasListener, isTrue); | 381 expect(controller.hasListener, isTrue); |
374 | 382 |
375 events.cancel(immediate: true); | 383 events.cancel(immediate: true); |
376 await expect(controller.hasListener, isFalse); | 384 await expect(controller.hasListener, isFalse); |
377 }); | 385 }); |
378 | 386 |
| 387 test("cancels the underlying subscription when called before any event", |
| 388 () async { |
| 389 var cancelFuture = new Future.value(42); |
| 390 var controller = new StreamController(onCancel: () => cancelFuture); |
| 391 |
| 392 var events = new StreamQueue<int>(controller.stream); |
| 393 expect(await events.cancel(immediate: true), 42); |
| 394 }); |
| 395 |
379 test("closes pending requests", () async { | 396 test("closes pending requests", () async { |
380 var events = new StreamQueue<int>(createStream()); | 397 var events = new StreamQueue<int>(createStream()); |
381 expect(await events.next, 1); | 398 expect(await events.next, 1); |
382 expect(events.next, throwsStateError); | 399 expect(events.next, throwsStateError); |
383 expect(events.hasNext, completion(isFalse)); | 400 expect(events.hasNext, completion(isFalse)); |
384 | 401 |
385 await events.cancel(immediate: true); | 402 await events.cancel(immediate: true); |
386 }); | 403 }); |
387 | 404 |
388 test("returns the result of closing the underlying subscription", | 405 test("returns the result of closing the underlying subscription", |
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
677 controller.add(4); | 694 controller.add(4); |
678 await flushMicrotasks(); | 695 await flushMicrotasks(); |
679 controller.close(); | 696 controller.close(); |
680 }(); | 697 }(); |
681 return controller.stream; | 698 return controller.stream; |
682 } | 699 } |
683 | 700 |
684 Stream<int> createLongStream(int eventCount) async* { | 701 Stream<int> createLongStream(int eventCount) async* { |
685 for (int i = 0; i < eventCount; i++) yield i; | 702 for (int i = 0; i < eventCount; i++) yield i; |
686 } | 703 } |
OLD | NEW |