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

Side by Side Diff: test/stream_queue_test.dart

Issue 1221713005: Add an [immediate] argument to StreamQueue.cancel. (Closed) Base URL: git@github.com:dart-lang/async.git@master
Patch Set: 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
« lib/src/stream_queue.dart ('K') | « 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 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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 }
OLDNEW
« lib/src/stream_queue.dart ('K') | « lib/src/stream_queue.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698