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

Side by Side Diff: packages/async/test/future_group_test.dart

Issue 1400473008: Roll Observatory packages and add a roll script (Closed) Base URL: git@github.com:dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 years, 2 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 import 'dart:async';
6
7 import 'package:async/src/future_group.dart';
8 import 'package:test/test.dart';
9
10 import 'utils.dart';
11
12 void main() {
13 var futureGroup;
14 setUp(() {
15 futureGroup = new FutureGroup();
16 });
17
18 group("with no futures", () {
19 test("never completes if nothing happens", () async {
20 var completed = false;
21 futureGroup.future.then((_) => completed = true);
22
23 await flushMicrotasks();
24 expect(completed, isFalse);
25 });
26
27 test("completes once it's closed", () {
28 expect(futureGroup.future, completion(isEmpty));
29 futureGroup.close();
30 });
31 });
32
33 group("with a future that already completed", () {
34 test("never completes if nothing happens", () async {
35 futureGroup.add(new Future.value());
36 await flushMicrotasks();
37
38 var completed = false;
39 futureGroup.future.then((_) => completed = true);
40
41 await flushMicrotasks();
42 expect(completed, isFalse);
43 });
44
45 test("completes once it's closed", () async {
46 futureGroup.add(new Future.value());
47 await flushMicrotasks();
48
49 expect(futureGroup.future, completes);
50 futureGroup.close();
51 });
52
53 test("completes to that future's value", () {
54 futureGroup.add(new Future.value(1));
55 futureGroup.close();
56 expect(futureGroup.future, completion(equals([1])));
57 });
58
59 test("completes to that future's error, even if it's not closed", () {
60 futureGroup.add(new Future.error("error"));
61 expect(futureGroup.future, throwsA("error"));
62 });
63 });
64
65 test("completes once all contained futures complete", () async {
66 var completer1 = new Completer();
67 var completer2 = new Completer();
68 var completer3 = new Completer();
69
70 futureGroup.add(completer1.future);
71 futureGroup.add(completer2.future);
72 futureGroup.add(completer3.future);
73 futureGroup.close();
74
75 var completed = false;
76 futureGroup.future.then((_) => completed = true);
77
78 completer1.complete();
79 await flushMicrotasks();
80 expect(completed, isFalse);
81
82 completer2.complete();
83 await flushMicrotasks();
84 expect(completed, isFalse);
85
86 completer3.complete();
87 await flushMicrotasks();
88 expect(completed, isTrue);
89 });
90
91 test("completes to the values of the futures in order of addition", () {
92 var completer1 = new Completer();
93 var completer2 = new Completer();
94 var completer3 = new Completer();
95
96 futureGroup.add(completer1.future);
97 futureGroup.add(completer2.future);
98 futureGroup.add(completer3.future);
99 futureGroup.close();
100
101 // Complete the completers in reverse order to prove that that doesn't
102 // affect the result order.
103 completer3.complete(3);
104 completer2.complete(2);
105 completer1.complete(1);
106 expect(futureGroup.future, completion(equals([1, 2, 3])));
107 });
108
109 test("completes to the first error to be emitted, even if it's not closed",
110 () {
111 var completer1 = new Completer();
112 var completer2 = new Completer();
113 var completer3 = new Completer();
114
115 futureGroup.add(completer1.future);
116 futureGroup.add(completer2.future);
117 futureGroup.add(completer3.future);
118
119 completer2.completeError("error 2");
120 completer1.completeError("error 1");
121 expect(futureGroup.future, throwsA("error 2"));
122 });
123
124 group("onIdle:", () {
125 test("emits an event when the last pending future completes", () async {
126 var idle = false;
127 futureGroup.onIdle.listen((_) => idle = true);
128
129 var completer1 = new Completer();
130 var completer2 = new Completer();
131 var completer3 = new Completer();
132
133 futureGroup.add(completer1.future);
134 futureGroup.add(completer2.future);
135 futureGroup.add(completer3.future);
136
137 await flushMicrotasks();
138 expect(idle, isFalse);
139 expect(futureGroup.isIdle, isFalse);
140
141 completer1.complete();
142 await flushMicrotasks();
143 expect(idle, isFalse);
144 expect(futureGroup.isIdle, isFalse);
145
146 completer2.complete();
147 await flushMicrotasks();
148 expect(idle, isFalse);
149 expect(futureGroup.isIdle, isFalse);
150
151 completer3.complete();
152 await flushMicrotasks();
153 expect(idle, isTrue);
154 expect(futureGroup.isIdle, isTrue);
155 });
156
157 test("emits an event each time it becomes idle", () async {
158 var idle = false;
159 futureGroup.onIdle.listen((_) => idle = true);
160
161 var completer = new Completer();
162 futureGroup.add(completer.future);
163
164 completer.complete();
165 await flushMicrotasks();
166 expect(idle, isTrue);
167 expect(futureGroup.isIdle, isTrue);
168
169 idle = false;
170 completer = new Completer();
171 futureGroup.add(completer.future);
172
173 await flushMicrotasks();
174 expect(idle, isFalse);
175 expect(futureGroup.isIdle, isFalse);
176
177 completer.complete();
178 await flushMicrotasks();
179 expect(idle, isTrue);
180 expect(futureGroup.isIdle, isTrue);
181 });
182
183 test("emits an event when the group closes", () async {
184 // It's important that the order of events here stays consistent over
185 // time, since code may rely on it in subtle ways.
186 var idle = false;
187 var onIdleDone = false;
188 var futureFired = false;
189
190 futureGroup.onIdle.listen(expectAsync((_) {
191 expect(futureFired, isFalse);
192 idle = true;
193 }), onDone: expectAsync(() {
194 expect(idle, isTrue);
195 expect(futureFired, isFalse);
196 onIdleDone = true;
197 }));
198
199 futureGroup.future.then(expectAsync((_) {
200 expect(idle, isTrue);
201 expect(onIdleDone, isTrue);
202 futureFired = true;
203 }));
204
205 var completer = new Completer();
206 futureGroup.add(completer.future);
207 futureGroup.close();
208
209 await flushMicrotasks();
210 expect(idle, isFalse);
211 expect(futureGroup.isIdle, isFalse);
212
213 completer.complete();
214 await flushMicrotasks();
215 expect(idle, isTrue);
216 expect(futureGroup.isIdle, isTrue);
217 expect(futureFired, isTrue);
218 });
219 });
220 }
OLDNEW
« no previous file with comments | « packages/async/test/async_memoizer_test.dart ('k') | packages/async/test/result_future_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698