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

Side by Side Diff: test/stream_events_test.dart

Issue 1149563010: Add new features to package:async. (Closed) Base URL: https://github.com/dart-lang/async@master
Patch Set: 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_events_test;
6
7 import "dart:async";
8
9 import "package:async/async.dart" show StreamEvents;
10 import "package:test/test.dart";
11
12 main() {
13 group("next", () {
14 test("simple", () async {
15 var e = new StreamEvents<int>(createStream());
16 for (int i = 1; i <= 4; i++) {
17 expect(await e.next, i);
18 }
19 expect(e.next, throws);
20 });
21
22 test("request mutiple", () async {
23 var e = new StreamEvents<int>(createStream());
24 var r = await Future.wait(new Iterable.generate(4, (n) => e.next));
25 expect(r, [1, 2, 3, 4]);
26 await e.close();
27 });
28
29 test("error", () async {
30 var e = new StreamEvents<int>(createErrorStream());
31 expect(await e.next, 1);
32 expect(await e.next, 2);
33 expect(e.next, throws);
34 expect(await e.next, 4);
35 await e.close();
36 });
37 });
38
39 group("skip", () {
40 test("simple-2", () async {
41 var e = new StreamEvents<int>(createStream());
42 expect(await e.next, 1);
43 expect(await e.skip(2), 0);
44 expect(await e.next, 4);
45 await e.close();
46 });
47
48 test("0 throws", () async {
49 var e = new StreamEvents<int>(createStream());
50 expect(() => e.skip(0), throws);
51 await e.close();
52 });
53
54 test("too large", () async {
55 var e = new StreamEvents<int>(createStream());
56 expect(await e.skip(6), 2);
57 await e.close();
58 });
59
60 test("too large later", () async {
61 var e = new StreamEvents<int>(createStream());
62 expect(await e.next, 1);
63 expect(await e.next, 2);
64 expect(await e.skip(6), 4);
65 await e.close();
66 });
67
68 test("error", () async {
69 var e = new StreamEvents<int>(createErrorStream());
70 expect(e.skip(4), throws);
71 expect(await e.next, 4);
72 await e.close();
73 });
74 });
75
76 group("take", () {
77 test("simple-2", () async {
78 var e = new StreamEvents<int>(createStream());
79 expect(await e.next, 1);
80 expect(await e.take(2), [2, 3]);
81 expect(await e.next, 4);
82 await e.close();
83 });
84
85 test("0 throws", () async {
86 var e = new StreamEvents<int>(createStream());
87 expect(() => e.take(0), throws);
88 await e.close();
89 });
90
91 test("too large", () async {
92 var e = new StreamEvents<int>(createStream());
93 expect(await e.take(6), [1, 2, 3, 4]);
94 await e.close();
95 });
96
97 test("too large later", () async {
98 var e = new StreamEvents<int>(createStream());
99 expect(await e.next, 1);
100 expect(await e.next, 2);
101 expect(await e.take(6), [3, 4]);
102 await e.close();
103 });
104
105 test("error", () async {
106 var e = new StreamEvents<int>(createErrorStream());
107 expect(e.take(4), throws);
108 expect(await e.next, 4);
109 await e.close();
110 });
111 });
112
113 group("rest", () {
114 test("simple", () async {
115 var e = new StreamEvents<int>(createStream());
116 expect(await e.next, 1);
117 expect(await e.rest.toList(), [2, 3, 4]);
118 });
119
120 test("at start", () async {
121 var e = new StreamEvents<int>(createStream());
122 expect(await e.rest.toList(), [1, 2, 3, 4]);
123 });
124
125 test("at end", () async {
126 var e = new StreamEvents<int>(createStream());
127 expect(await e.next, 1);
128 expect(await e.next, 2);
129 expect(await e.next, 3);
130 expect(await e.next, 4);
131 expect(await e.rest.toList(), []);
132 });
133
134 test("error", () async {
135 var e = new StreamEvents<int>(createErrorStream());
136 expect(await e.next, 1);
137 var r = e.rest;
138 var e2 = new StreamEvents(r);
139 expect(await e2.next, 2);
140 expect(e2.next, throws);
141 expect(await e2.next, 4);
142 });
143
144 test("closes", () async {
145 var e = new StreamEvents<int>(createStream());
146 var stream = e.rest;
147 expect(() => e.next, throws);
148 expect(() => e.skip(1), throws);
149 expect(() => e.take(1), throws);
150 expect(() => e.rest, throws);
151 expect(() => e.close(), throws);
152 });
153 });
154
155 group("close", () {
156 test("anything throws", () async {
157 var e = new StreamEvents<int>(createStream());
158 await e.close();
159 expect(() => e.next, throws);
160 expect(() => e.skip(1), throws);
161 expect(() => e.take(1), throws);
162 expect(() => e.rest, throws);
163 expect(() => e.close(), throws);
164 });
165 });
166
167 test("mixed", () async {
168 var e = new StreamEvents<int>(createLongStream());
169 nextTest(n) {
170 for (int i = 0; i < 10; i++) {
171 expect(e.next, completion(n + i));
172 }
173 }
174 skipTest(n) {
175 expect(e.skip(10), completion(0));
176 }
177 takeTest(n) {
178 expect(e.take(10), completion(new List.generate(10, (i) => n + i)));
179 }
180 var tests = [nextTest, skipTest, takeTest];
181 int counter = 0;
182 for (int i = 0; i < tests.length; i++) {
183 for (int j = 0; j < tests.length; j++) {
184 tests[i](counter);
185 tests[j](counter + 10);
186 counter += 20;
187 }
188 }
189 expect(e.rest.toList(),
190 completion(new List.generate(20, (i) => counter + i)));
191 });
192 }
193
194 const MS = const Duration(milliseconds: 1);
195 Future sleep(int n) => new Future.delayed(MS * n);
196
197 Stream<int> createStream() async* {
198 yield 1;
199 await sleep(20);
200 yield 2;
201 await sleep(10);
202 yield 3;
203 await sleep(15);
204 yield 4;
205 }
206
207 Stream<int> createErrorStream() {
208 StreamController controller = new StreamController<int>();
209 () async{
210 controller.add(1);
211 await sleep(20);
212 controller.add(2);
213 await sleep(10);
214 controller.addError("To err is divine!");
215 await sleep(15);
216 controller.add(4);
217 }();
218 return controller.stream;
219 }
220
221 Stream<int> createLongStream() async* {
222 for (int i = 0; i < 200; i++) yield i;
223 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698