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

Side by Side Diff: test/stream_queue_test.dart

Issue 1239543004: Fix a bug in StreamQueue.cancel(). (Closed) Base URL: git@github.com:dart-lang/async.git@master
Patch Set: Code review changes Created 5 years, 5 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
« no previous file with comments | « lib/src/stream_queue.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 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
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
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 }
OLDNEW
« no previous file with comments | « lib/src/stream_queue.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698