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

Side by Side Diff: test/stream_completer_test.dart

Issue 1149563010: Add new features to package:async. (Closed) Base URL: https://github.com/dart-lang/async@master
Patch Set: more docs and tests. Created 5 years, 6 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
OLDNEW
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 library async.stream_completer_test;
nweiz 2015/06/12 01:24:27 Tests don't need library annotations.
6
7 import "dart:async";
8
9 import "package:async/async.dart" show StreamCompleter;
10 import "package:test/test.dart";
11
12 main() {
13 test("early link", () async {
nweiz 2015/06/12 01:24:27 Rather than "early" and "late" consider spelling o
Lasse Reichstein Nielsen 2015/06/15 15:46:24 Done.
14 var c = new StreamCompleter();
nweiz 2015/06/12 01:24:27 Use full words for variables.
Lasse Reichstein Nielsen 2015/06/15 15:46:24 Done.
15 var s = c.stream;
nweiz 2015/06/12 01:24:27 Pulling this out into a variable makes this harder
Lasse Reichstein Nielsen 2015/06/15 15:46:24 Done.
16 c.setSourceStream(createStream());
17 var r = [];
18 await s.listen(r.add).asFuture();
nweiz 2015/06/12 01:24:27 Consider just: expect(s.toList(), completion(
Lasse Reichstein Nielsen 2015/06/15 15:46:24 Done.
19 expect(r, [1, 2, 3, 4]);
20 });
21
22 test("later link", () async {
23 var c = new StreamCompleter();
24 var s = c.stream;
25 var r = [];
26 Future done = s.listen(r.add).asFuture();
27 await sleep(250);
nweiz 2015/06/12 01:24:27 Sleeping is a recipe for tests that are both slow
Lasse Reichstein Nielsen 2015/06/15 15:46:24 Switched to flushing microtasks (aka timer 0 futur
28 c.setSourceStream(createStream());
29 await done;
30 expect(r, [1, 2, 3, 4]);
31 });
32
33 test("early cancel", () async {
34 var c = new StreamCompleter();
35 var s = c.stream;
36 var sub = s.listen(null);
37 sub.pause(); // Should be ignored.
38 sub.cancel();
39 c.setSourceStream(new UnusableStream()); // Doesn't throw.
40 });
41
42 test("early pause", () async {
43 var c = new StreamCompleter();
44 var s = c.stream;
45 var r = [];
46 var sub = s.listen(r.add);
47 Future done = sub.asFuture();
48 sub.pause();
49 c.setSourceStream(createStream());
50 await sleep(250);
51 expect(r, []);
52 sub.resume();
53 await done;
54 expect(r, [1, 2, 3, 4]);
55 });
56
57 test("multi-pause", () async {
58 var c = new StreamCompleter();
59 var s = c.stream;
60 var r = [];
61 var sub = s.listen(r.add);
62 Future done = sub.asFuture();
63 sub.pause();
64 sub.pause();
65 sub.pause();
66 c.setSourceStream(createStream());
67 for (int i = 0; i < 3; i++) {
68 await sleep(50);
69 expect(r, []);
70 sub.resume();
71 }
72 await done;
73 expect(r, [1, 2, 3, 4]);
74 });
75 }
nweiz 2015/06/12 01:24:27 There's a bunch of publicly-visible behavior that
Lasse Reichstein Nielsen 2015/06/15 15:46:24 Good points. Many more tests added.
76
77 const MS = const Duration(milliseconds: 1);
78 Future sleep(int n) => new Future.delayed(MS * n);
79
80 Stream<int> createStream() async* {
81 yield 1;
82 await sleep(20);
83 yield 2;
84 await sleep(10);
85 yield 3;
86 await sleep(15);
87 yield 4;
88 }
89
90 class UnusableStream extends Stream {
91 listen(onData, {onError, onDone, cancelOnError}) {
92 throw new UnimplementedError("Gotcha!");
93 }
94 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698