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

Side by Side Diff: test/stream_queue_test.dart

Issue 2649033006: Add `peek` and `lookAhead` to `StreamQueue`. (Closed)
Patch Set: Created 3 years, 11 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"; 7 import "package:async/async.dart";
8 import "package:test/test.dart"; 8 import "package:test/test.dart";
9 9
10 import "utils.dart"; 10 import "utils.dart";
(...skipping 24 matching lines...) Expand all
35 35
36 expect(await next, 2); 36 expect(await next, 2);
37 expect(controller.hasListener, isTrue); 37 expect(controller.hasListener, isTrue);
38 expect(controller.isPaused, isTrue); 38 expect(controller.isPaused, isTrue);
39 39
40 events.cancel(); 40 events.cancel();
41 expect(controller.hasListener, isFalse); 41 expect(controller.hasListener, isFalse);
42 }); 42 });
43 }); 43 });
44 44
45 group("lookAhead operation", () {
46 test("as simple list of events", () async {
47 var events = new StreamQueue<int>(createStream());
48 expect(await events.lookAhead(4), [1, 2, 3, 4]);
49 expect(await events.next, 1);
50 expect(await events.lookAhead(2), [2, 3]);
51 expect(await events.take(2), [2, 3]);
52 expect(await events.next, 4);
53 await events.cancel();
54 });
55
56 test("of 0 events", () async {
57 var events = new StreamQueue<int>(createStream());
58 expect(events.lookAhead(0), completion([]));
59 expect(events.next, completion(1));
60 expect(events.lookAhead(0), completion([]));
61 expect(events.next, completion(2));
62 expect(events.lookAhead(0), completion([]));
63 expect(events.next, completion(3));
64 expect(events.lookAhead(0), completion([]));
65 expect(events.next, completion(4));
66 expect(events.lookAhead(0), completion([]));
67 expect(events.lookAhead(5), completion([]));
68 expect(events.next, throwsStateError);
69 await events.cancel();
70 });
71
72 test("with bad arguments throws", () async {
73 var events = new StreamQueue<int>(createStream());
74 expect(() => events.lookAhead(-1), throwsArgumentError);
75 expect(await events.next, 1); // Did not consume event.
76 expect(() => events.lookAhead(-1), throwsArgumentError);
77 expect(await events.next, 2); // Did not consume event.
78 await events.cancel();
79 });
80
81 test("of too many arguments", () async {
82 var events = new StreamQueue<int>(createStream());
83 expect(await events.lookAhead(6), [1, 2, 3, 4]);
84 await events.cancel();
85 });
86
87 test("too large later", () async {
88 var events = new StreamQueue<int>(createStream());
89 expect(await events.next, 1);
90 expect(await events.next, 2);
91 expect(await events.lookAhead(6), [3, 4]);
92 await events.cancel();
93 });
94
95 test("error", () async {
96 var events = new StreamQueue<int>(createErrorStream());
97 expect(events.lookAhead(4), throwsA("To err is divine!"));
98 expect(events.take(4), throwsA("To err is divine!"));
99 expect(await events.next, 4);
100 await events.cancel();
101 });
102 });
103
45 group("next operation", () { 104 group("next operation", () {
46 test("simple sequence of requests", () async { 105 test("simple sequence of requests", () async {
47 var events = new StreamQueue<int>(createStream()); 106 var events = new StreamQueue<int>(createStream());
48 for (int i = 1; i <= 4; i++) { 107 for (int i = 1; i <= 4; i++) {
49 expect(await events.next, i); 108 expect(await events.next, i);
50 } 109 }
51 expect(events.next, throwsStateError); 110 expect(events.next, throwsStateError);
52 }); 111 });
53 112
54 test("multiple requests at the same time", () async { 113 test("multiple requests at the same time", () async {
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 await flushMicrotasks(); 385 await flushMicrotasks();
327 expect(lastEvent, 3); 386 expect(lastEvent, 3);
328 387
329 var cancelFuture = subscription.cancel(); 388 var cancelFuture = subscription.cancel();
330 expect(controller.hasListener, isFalse); 389 expect(controller.hasListener, isFalse);
331 cancel.complete(42); 390 cancel.complete(42);
332 expect(cancelFuture, completion(42)); 391 expect(cancelFuture, completion(42));
333 }); 392 });
334 }); 393 });
335 394
395 group("peek operation", () {
396 test("peeks one event", () async {
397 var events = new StreamQueue<int>(createStream());
398 expect(await events.peek, 1);
399 expect(await events.next, 1);
400 expect(await events.peek, 2);
401 expect(await events.take(2), [2, 3]);
402 expect(await events.peek, 4);
403 expect(await events.next, 4);
404 // Throws at end.
405 expect(events.peek, throws);
406 await events.cancel();
407 });
408 test("multiple requests at the same time", () async {
409 var events = new StreamQueue<int>(createStream());
410 var result = await Future.wait(
411 [events.peek, events.peek, events.next, events.peek, events.peek]);
412 expect(result, [1, 1, 1, 2, 2]);
413 await events.cancel();
414 });
415 test("sequence of requests with error", () async {
416 var events = new StreamQueue<int>(createErrorStream());
417 expect(await events.next, 1);
418 expect(await events.next, 2);
419 expect(events.peek, throwsA("To err is divine!"));
420 // Error stays in queue.
421 expect(events.peek, throwsA("To err is divine!"));
422 expect(events.next, throwsA("To err is divine!"));
423 expect(await events.next, 4);
424 await events.cancel();
425 });
426 });
427
336 group("cancel operation", () { 428 group("cancel operation", () {
337 test("closes the events, prevents any other operation", () async { 429 test("closes the events, prevents any other operation", () async {
338 var events = new StreamQueue<int>(createStream()); 430 var events = new StreamQueue<int>(createStream());
339 await events.cancel(); 431 await events.cancel();
432 expect(() => events.lookAhead(1), throwsStateError);
340 expect(() => events.next, throwsStateError); 433 expect(() => events.next, throwsStateError);
434 expect(() => events.peek, throwsStateError);
341 expect(() => events.skip(1), throwsStateError); 435 expect(() => events.skip(1), throwsStateError);
342 expect(() => events.take(1), throwsStateError); 436 expect(() => events.take(1), throwsStateError);
343 expect(() => events.rest, throwsStateError); 437 expect(() => events.rest, throwsStateError);
344 expect(() => events.cancel(), throwsStateError); 438 expect(() => events.cancel(), throwsStateError);
345 }); 439 });
346 440
347 test("cancels underlying subscription when called before any event", 441 test("cancels underlying subscription when called before any event",
348 () async { 442 () async {
349 var cancelFuture = new Future.value(42); 443 var cancelFuture = new Future.value(42);
350 var controller = new StreamController<int>(onCancel: () => cancelFuture); 444 var controller = new StreamController<int>(onCancel: () => cancelFuture);
(...skipping 616 matching lines...) Expand 10 before | Expand all | Expand 10 after
967 controller.add(4); 1061 controller.add(4);
968 await flushMicrotasks(); 1062 await flushMicrotasks();
969 controller.close(); 1063 controller.close();
970 }(); 1064 }();
971 return controller.stream; 1065 return controller.stream;
972 } 1066 }
973 1067
974 Stream<int> createLongStream(int eventCount) async* { 1068 Stream<int> createLongStream(int eventCount) async* {
975 for (int i = 0; i < eventCount; i++) yield i; 1069 for (int i = 0; i < eventCount; i++) yield i;
976 } 1070 }
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