OLD | NEW |
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 file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 import 'dart:async'; | 5 import 'dart:async'; |
6 | 6 |
7 import 'package:test/src/backend/declarer.dart'; | 7 import 'package:test/src/backend/declarer.dart'; |
| 8 import 'package:test/src/backend/group.dart'; |
8 import 'package:test/src/backend/invoker.dart'; | 9 import 'package:test/src/backend/invoker.dart'; |
9 import 'package:test/src/backend/suite.dart'; | 10 import 'package:test/src/backend/suite.dart'; |
| 11 import 'package:test/src/backend/test.dart'; |
10 import 'package:test/src/frontend/timeout.dart'; | 12 import 'package:test/src/frontend/timeout.dart'; |
11 import 'package:test/test.dart'; | 13 import 'package:test/test.dart'; |
12 | 14 |
13 import '../utils.dart'; | 15 import '../utils.dart'; |
14 | 16 |
15 Declarer _declarer; | |
16 Suite _suite; | 17 Suite _suite; |
17 | 18 |
18 void main() { | 19 void main() { |
19 setUp(() { | 20 setUp(() { |
20 _declarer = new Declarer(); | |
21 _suite = new Suite([]); | 21 _suite = new Suite([]); |
22 }); | 22 }); |
23 | 23 |
24 group(".test()", () { | 24 group(".test()", () { |
25 test("declares a test with a description and body", () async { | 25 test("declares a test with a description and body", () async { |
26 var bodyRun = false; | 26 var bodyRun = false; |
27 _declarer.test("description", () { | 27 var tests = declare(() { |
28 bodyRun = true; | 28 test("description", () { |
29 }); | 29 bodyRun = true; |
30 | 30 }); |
31 expect(_declarer.tests, hasLength(1)); | 31 }); |
32 expect(_declarer.tests.single.name, equals("description")); | 32 |
33 | 33 expect(tests, hasLength(1)); |
34 await _runTest(0); | 34 expect(tests.single.name, equals("description")); |
| 35 |
| 36 await _runTest(tests[0]); |
35 expect(bodyRun, isTrue); | 37 expect(bodyRun, isTrue); |
36 }); | 38 }); |
37 | 39 |
38 test("declares multiple tests", () { | 40 test("declares multiple tests", () { |
39 _declarer.test("description 1", () {}); | 41 var tests = declare(() { |
40 _declarer.test("description 2", () {}); | 42 test("description 1", () {}); |
41 _declarer.test("description 3", () {}); | 43 test("description 2", () {}); |
42 | 44 test("description 3", () {}); |
43 expect(_declarer.tests, hasLength(3)); | 45 }); |
44 expect(_declarer.tests[0].name, equals("description 1")); | 46 |
45 expect(_declarer.tests[1].name, equals("description 2")); | 47 expect(tests, hasLength(3)); |
46 expect(_declarer.tests[2].name, equals("description 3")); | 48 expect(tests[0].name, equals("description 1")); |
| 49 expect(tests[1].name, equals("description 2")); |
| 50 expect(tests[2].name, equals("description 3")); |
47 }); | 51 }); |
48 }); | 52 }); |
49 | 53 |
50 group(".setUp()", () { | 54 group(".setUp()", () { |
51 test("is run before all tests", () async { | 55 test("is run before all tests", () async { |
52 var setUpRun = false; | 56 var setUpRun = false; |
53 _declarer.setUp(() => setUpRun = true); | 57 var tests = declare(() { |
54 | 58 setUp(() => setUpRun = true); |
55 _declarer.test("description 1", expectAsync(() { | 59 |
56 expect(setUpRun, isTrue); | 60 test("description 1", expectAsync(() { |
57 setUpRun = false; | 61 expect(setUpRun, isTrue); |
58 }, max: 1)); | 62 setUpRun = false; |
59 | 63 }, max: 1)); |
60 _declarer.test("description 2", expectAsync(() { | 64 |
61 expect(setUpRun, isTrue); | 65 test("description 2", expectAsync(() { |
62 setUpRun = false; | 66 expect(setUpRun, isTrue); |
63 }, max: 1)); | 67 setUpRun = false; |
64 | 68 }, max: 1)); |
65 await _runTest(0); | 69 }); |
66 await _runTest(1); | 70 |
| 71 await _runTest(tests[0]); |
| 72 await _runTest(tests[1]); |
67 }); | 73 }); |
68 | 74 |
69 test("can return a Future", () { | 75 test("can return a Future", () { |
70 var setUpRun = false; | 76 var setUpRun = false; |
71 _declarer.setUp(() { | 77 var tests = declare(() { |
72 return new Future(() => setUpRun = true); | 78 setUp(() { |
73 }); | 79 return new Future(() => setUpRun = true); |
74 | 80 }); |
75 _declarer.test("description", expectAsync(() { | 81 |
76 expect(setUpRun, isTrue); | 82 test("description", expectAsync(() { |
77 }, max: 1)); | 83 expect(setUpRun, isTrue); |
78 | 84 }, max: 1)); |
79 return _runTest(0); | 85 }); |
| 86 |
| 87 return _runTest(tests.single); |
80 }); | 88 }); |
81 | 89 |
82 test("runs in call order within a group", () async { | 90 test("runs in call order within a group", () async { |
83 var firstSetUpRun = false; | 91 var firstSetUpRun = false; |
84 var secondSetUpRun = false; | 92 var secondSetUpRun = false; |
85 var thirdSetUpRun = false; | 93 var thirdSetUpRun = false; |
86 _declarer.setUp(expectAsync(() async { | 94 var tests = declare(() { |
87 expect(secondSetUpRun, isFalse); | 95 setUp(expectAsync(() async { |
88 expect(thirdSetUpRun, isFalse); | 96 expect(secondSetUpRun, isFalse); |
89 firstSetUpRun = true; | 97 expect(thirdSetUpRun, isFalse); |
90 })); | 98 firstSetUpRun = true; |
91 | 99 })); |
92 _declarer.setUp(expectAsync(() async { | 100 |
93 expect(firstSetUpRun, isTrue); | 101 setUp(expectAsync(() async { |
94 expect(thirdSetUpRun, isFalse); | 102 expect(firstSetUpRun, isTrue); |
95 secondSetUpRun = true; | 103 expect(thirdSetUpRun, isFalse); |
96 })); | 104 secondSetUpRun = true; |
97 | 105 })); |
98 _declarer.setUp(expectAsync(() async { | 106 |
99 expect(firstSetUpRun, isTrue); | 107 setUp(expectAsync(() async { |
100 expect(secondSetUpRun, isTrue); | 108 expect(firstSetUpRun, isTrue); |
101 thirdSetUpRun = true; | 109 expect(secondSetUpRun, isTrue); |
102 })); | 110 thirdSetUpRun = true; |
103 | 111 })); |
104 _declarer.test("description", expectAsync(() { | 112 |
105 expect(firstSetUpRun, isTrue); | 113 test("description", expectAsync(() { |
106 expect(secondSetUpRun, isTrue); | 114 expect(firstSetUpRun, isTrue); |
107 expect(thirdSetUpRun, isTrue); | 115 expect(secondSetUpRun, isTrue); |
108 })); | 116 expect(thirdSetUpRun, isTrue); |
109 | 117 })); |
110 await _runTest(0); | 118 }); |
| 119 |
| 120 await _runTest(tests.single); |
111 }); | 121 }); |
112 }); | 122 }); |
113 | 123 |
114 group(".tearDown()", () { | 124 group(".tearDown()", () { |
115 test("is run after all tests", () async { | 125 test("is run after all tests", () async { |
116 var tearDownRun; | 126 var tearDownRun; |
117 _declarer.setUp(() => tearDownRun = false); | 127 var tests = declare(() { |
118 _declarer.tearDown(() => tearDownRun = true); | 128 setUp(() => tearDownRun = false); |
119 | 129 tearDown(() => tearDownRun = true); |
120 _declarer.test("description 1", expectAsync(() { | 130 |
121 expect(tearDownRun, isFalse); | 131 test("description 1", expectAsync(() { |
122 }, max: 1)); | 132 expect(tearDownRun, isFalse); |
123 | 133 }, max: 1)); |
124 _declarer.test("description 2", expectAsync(() { | 134 |
125 expect(tearDownRun, isFalse); | 135 test("description 2", expectAsync(() { |
126 }, max: 1)); | 136 expect(tearDownRun, isFalse); |
127 | 137 }, max: 1)); |
128 await _runTest(0); | 138 }); |
129 expect(tearDownRun, isTrue); | 139 |
130 await _runTest(1); | 140 await _runTest(tests[0]); |
| 141 expect(tearDownRun, isTrue); |
| 142 await _runTest(tests[1]); |
131 expect(tearDownRun, isTrue); | 143 expect(tearDownRun, isTrue); |
132 }); | 144 }); |
133 | 145 |
134 test("is run after an out-of-band failure", () async { | 146 test("is run after an out-of-band failure", () async { |
135 var tearDownRun; | 147 var tearDownRun; |
136 _declarer.setUp(() => tearDownRun = false); | 148 var tests = declare(() { |
137 _declarer.tearDown(() => tearDownRun = true); | 149 setUp(() => tearDownRun = false); |
138 | 150 tearDown(() => tearDownRun = true); |
139 _declarer.test("description 1", expectAsync(() { | 151 |
140 Invoker.current.addOutstandingCallback(); | 152 test("description 1", expectAsync(() { |
141 new Future(() => throw new TestFailure("oh no")); | 153 Invoker.current.addOutstandingCallback(); |
142 }, max: 1)); | 154 new Future(() => throw new TestFailure("oh no")); |
143 | 155 }, max: 1)); |
144 await _runTest(0, shouldFail: true); | 156 }); |
| 157 |
| 158 await _runTest(tests.single, shouldFail: true); |
145 expect(tearDownRun, isTrue); | 159 expect(tearDownRun, isTrue); |
146 }); | 160 }); |
147 | 161 |
148 test("can return a Future", () async { | 162 test("can return a Future", () async { |
149 var tearDownRun = false; | 163 var tearDownRun = false; |
150 _declarer.tearDown(() { | 164 var tests = declare(() { |
151 return new Future(() => tearDownRun = true); | 165 tearDown(() { |
152 }); | 166 return new Future(() => tearDownRun = true); |
153 | 167 }); |
154 _declarer.test("description", expectAsync(() { | 168 |
155 expect(tearDownRun, isFalse); | 169 test("description", expectAsync(() { |
156 }, max: 1)); | 170 expect(tearDownRun, isFalse); |
157 | 171 }, max: 1)); |
158 await _runTest(0); | 172 }); |
| 173 |
| 174 await _runTest(tests.single); |
159 expect(tearDownRun, isTrue); | 175 expect(tearDownRun, isTrue); |
160 }); | 176 }); |
161 | 177 |
162 test("isn't run until there are no outstanding callbacks", () async { | 178 test("isn't run until there are no outstanding callbacks", () async { |
163 var outstandingCallbackRemoved = false; | 179 var outstandingCallbackRemoved = false; |
164 var outstandingCallbackRemovedBeforeTeardown = false; | 180 var outstandingCallbackRemovedBeforeTeardown = false; |
165 _declarer.tearDown(() { | 181 var tests = declare(() { |
166 outstandingCallbackRemovedBeforeTeardown = outstandingCallbackRemoved; | 182 tearDown(() { |
167 }); | 183 outstandingCallbackRemovedBeforeTeardown = outstandingCallbackRemoved; |
168 | 184 }); |
169 _declarer.test("description", () { | 185 |
170 Invoker.current.addOutstandingCallback(); | 186 test("description", () { |
171 pumpEventQueue().then((_) { | 187 Invoker.current.addOutstandingCallback(); |
172 outstandingCallbackRemoved = true; | 188 pumpEventQueue().then((_) { |
173 Invoker.current.removeOutstandingCallback(); | 189 outstandingCallbackRemoved = true; |
174 }); | 190 Invoker.current.removeOutstandingCallback(); |
175 }); | 191 }); |
176 | 192 }); |
177 await _runTest(0); | 193 }); |
| 194 |
| 195 await _runTest(tests.single); |
178 expect(outstandingCallbackRemovedBeforeTeardown, isTrue); | 196 expect(outstandingCallbackRemovedBeforeTeardown, isTrue); |
179 }); | 197 }); |
180 | 198 |
181 test("doesn't complete until there are no outstanding callbacks", () async { | 199 test("doesn't complete until there are no outstanding callbacks", () async { |
182 var outstandingCallbackRemoved = false; | 200 var outstandingCallbackRemoved = false; |
183 _declarer.tearDown(() { | 201 var tests = declare(() { |
184 Invoker.current.addOutstandingCallback(); | 202 tearDown(() { |
185 pumpEventQueue().then((_) { | 203 Invoker.current.addOutstandingCallback(); |
186 outstandingCallbackRemoved = true; | 204 pumpEventQueue().then((_) { |
187 Invoker.current.removeOutstandingCallback(); | 205 outstandingCallbackRemoved = true; |
188 }); | 206 Invoker.current.removeOutstandingCallback(); |
189 }); | 207 }); |
190 | 208 }); |
191 _declarer.test("description", () {}); | 209 |
192 | 210 test("description", () {}); |
193 await _runTest(0); | 211 }); |
| 212 |
| 213 await _runTest(tests.single); |
194 expect(outstandingCallbackRemoved, isTrue); | 214 expect(outstandingCallbackRemoved, isTrue); |
195 }); | 215 }); |
196 | 216 |
197 test("runs in reverse call order within a group", () async { | 217 test("runs in reverse call order within a group", () async { |
198 var firstTearDownRun = false; | 218 var firstTearDownRun = false; |
199 var secondTearDownRun = false; | 219 var secondTearDownRun = false; |
200 var thirdTearDownRun = false; | 220 var thirdTearDownRun = false; |
201 _declarer.tearDown(expectAsync(() async { | 221 var tests = declare(() { |
202 expect(secondTearDownRun, isTrue); | 222 tearDown(expectAsync(() async { |
203 expect(thirdTearDownRun, isTrue); | 223 expect(secondTearDownRun, isTrue); |
204 firstTearDownRun = true; | 224 expect(thirdTearDownRun, isTrue); |
205 })); | 225 firstTearDownRun = true; |
206 | 226 })); |
207 _declarer.tearDown(expectAsync(() async { | 227 |
208 expect(firstTearDownRun, isFalse); | 228 tearDown(expectAsync(() async { |
209 expect(thirdTearDownRun, isTrue); | 229 expect(firstTearDownRun, isFalse); |
210 secondTearDownRun = true; | 230 expect(thirdTearDownRun, isTrue); |
211 })); | 231 secondTearDownRun = true; |
212 | 232 })); |
213 _declarer.tearDown(expectAsync(() async { | 233 |
214 expect(firstTearDownRun, isFalse); | 234 tearDown(expectAsync(() async { |
215 expect(secondTearDownRun, isFalse); | 235 expect(firstTearDownRun, isFalse); |
216 thirdTearDownRun = true; | 236 expect(secondTearDownRun, isFalse); |
217 })); | 237 thirdTearDownRun = true; |
218 | 238 })); |
219 _declarer.test("description", expectAsync(() { | 239 |
220 expect(firstTearDownRun, isFalse); | 240 test("description", expectAsync(() { |
221 expect(secondTearDownRun, isFalse); | 241 expect(firstTearDownRun, isFalse); |
222 expect(thirdTearDownRun, isFalse); | 242 expect(secondTearDownRun, isFalse); |
223 }, max: 1)); | 243 expect(thirdTearDownRun, isFalse); |
224 | 244 }, max: 1)); |
225 await _runTest(0); | 245 }); |
| 246 |
| 247 await _runTest(tests.single); |
226 }); | 248 }); |
227 | 249 |
228 test("runs further tearDowns in a group even if one fails", () async { | 250 test("runs further tearDowns in a group even if one fails", () async { |
229 _declarer.tearDown(expectAsync(() {})); | 251 var tests = declare(() { |
230 | 252 tearDown(expectAsync(() {})); |
231 _declarer.tearDown(() async { | 253 |
232 throw 'error'; | 254 tearDown(() async { |
233 }); | 255 throw 'error'; |
234 | 256 }); |
235 _declarer.test("description", expectAsync(() {})); | 257 |
236 | 258 test("description", expectAsync(() {})); |
237 await _runTest(0, shouldFail: true); | 259 }); |
| 260 |
| 261 await _runTest(tests.single, shouldFail: true); |
238 }); | 262 }); |
239 }); | 263 }); |
240 | 264 |
241 group("in a group,", () { | 265 group("in a group,", () { |
242 test("tests inherit the group's description", () { | 266 test("tests inherit the group's description", () { |
243 _declarer.group("group", () { | 267 var entries = declare(() { |
244 _declarer.test("description", () {}); | 268 group("group", () { |
245 }); | 269 test("description", () {}); |
246 | 270 }); |
247 expect(_declarer.tests, hasLength(1)); | 271 }); |
248 expect(_declarer.tests.single.name, "group description"); | 272 |
| 273 expect(entries, hasLength(1)); |
| 274 expect(entries.single, new isInstanceOf<Group>()); |
| 275 expect(entries.single.name, equals("group")); |
| 276 expect(entries.single.entries, hasLength(1)); |
| 277 expect(entries.single.entries.single, new isInstanceOf<Test>()); |
| 278 expect(entries.single.entries.single.name, "group description"); |
249 }); | 279 }); |
250 | 280 |
251 test("a test's timeout factor is applied to the group's", () { | 281 test("a test's timeout factor is applied to the group's", () { |
252 _declarer.group("group", () { | 282 var entries = declare(() { |
253 _declarer.test("test", () {}, | 283 group("group", () { |
254 timeout: new Timeout.factor(3)); | 284 test("test", () {}, |
255 }, timeout: new Timeout.factor(2)); | 285 timeout: new Timeout.factor(3)); |
256 | 286 }, timeout: new Timeout.factor(2)); |
257 expect(_declarer.tests, hasLength(1)); | 287 }); |
258 expect(_declarer.tests.single.metadata.timeout.scaleFactor, equals(6)); | 288 |
| 289 expect(entries, hasLength(1)); |
| 290 expect(entries.single, new isInstanceOf<Group>()); |
| 291 expect(entries.single.metadata.timeout.scaleFactor, equals(2)); |
| 292 expect(entries.single.entries, hasLength(1)); |
| 293 expect(entries.single.entries.single, new isInstanceOf<Test>()); |
| 294 expect(entries.single.entries.single.metadata.timeout.scaleFactor, |
| 295 equals(6)); |
259 }); | 296 }); |
260 | 297 |
261 test("a test's timeout factor is applied to the group's duration", () { | 298 test("a test's timeout factor is applied to the group's duration", () { |
262 _declarer.group("group", () { | 299 var entries = declare(() { |
263 _declarer.test("test", () {}, | 300 group("group", () { |
264 timeout: new Timeout.factor(2)); | 301 test("test", () {}, |
265 }, timeout: new Timeout(new Duration(seconds: 10))); | 302 timeout: new Timeout.factor(2)); |
266 | 303 }, timeout: new Timeout(new Duration(seconds: 10))); |
267 expect(_declarer.tests, hasLength(1)); | 304 }); |
268 expect(_declarer.tests.single.metadata.timeout.duration, | 305 |
| 306 expect(entries, hasLength(1)); |
| 307 expect(entries.single, new isInstanceOf<Group>()); |
| 308 expect(entries.single.metadata.timeout.duration, |
| 309 equals(new Duration(seconds: 10))); |
| 310 expect(entries.single.entries, hasLength(1)); |
| 311 expect(entries.single.entries.single, new isInstanceOf<Test>()); |
| 312 expect(entries.single.entries.single.metadata.timeout.duration, |
269 equals(new Duration(seconds: 20))); | 313 equals(new Duration(seconds: 20))); |
270 }); | 314 }); |
271 | 315 |
272 test("a test's timeout duration is applied over the group's", () { | 316 test("a test's timeout duration is applied over the group's", () { |
273 _declarer.group("group", () { | 317 var entries = declare(() { |
274 _declarer.test("test", () {}, | 318 group("group", () { |
275 timeout: new Timeout(new Duration(seconds: 15))); | 319 test("test", () {}, |
276 }, timeout: new Timeout(new Duration(seconds: 10))); | 320 timeout: new Timeout(new Duration(seconds: 15))); |
277 | 321 }, timeout: new Timeout(new Duration(seconds: 10))); |
278 expect(_declarer.tests, hasLength(1)); | 322 }); |
279 expect(_declarer.tests.single.metadata.timeout.duration, | 323 |
| 324 expect(entries, hasLength(1)); |
| 325 expect(entries.single, new isInstanceOf<Group>()); |
| 326 expect(entries.single.metadata.timeout.duration, |
| 327 equals(new Duration(seconds: 10))); |
| 328 expect(entries.single.entries, hasLength(1)); |
| 329 expect(entries.single.entries.single, new isInstanceOf<Test>()); |
| 330 expect(entries.single.entries.single.metadata.timeout.duration, |
280 equals(new Duration(seconds: 15))); | 331 equals(new Duration(seconds: 15))); |
281 }); | 332 }); |
282 | 333 |
283 group(".setUp()", () { | 334 group(".setUp()", () { |
284 test("is scoped to the group", () async { | 335 test("is scoped to the group", () async { |
285 var setUpRun = false; | 336 var setUpRun = false; |
286 _declarer.group("group", () { | 337 var entries = declare(() { |
287 _declarer.setUp(() => setUpRun = true); | 338 group("group", () { |
288 | 339 setUp(() => setUpRun = true); |
289 _declarer.test("description 1", expectAsync(() { | 340 |
290 expect(setUpRun, isTrue); | 341 test("description 1", expectAsync(() { |
| 342 expect(setUpRun, isTrue); |
| 343 setUpRun = false; |
| 344 }, max: 1)); |
| 345 }); |
| 346 |
| 347 test("description 2", expectAsync(() { |
| 348 expect(setUpRun, isFalse); |
291 setUpRun = false; | 349 setUpRun = false; |
292 }, max: 1)); | 350 }, max: 1)); |
293 }); | 351 }); |
294 | 352 |
295 _declarer.test("description 2", expectAsync(() { | 353 await _runTest(entries[0].entries.single); |
296 expect(setUpRun, isFalse); | 354 await _runTest(entries[1]); |
297 setUpRun = false; | |
298 }, max: 1)); | |
299 | |
300 await _runTest(0); | |
301 await _runTest(1); | |
302 }); | 355 }); |
303 | 356 |
304 test("runs from the outside in", () { | 357 test("runs from the outside in", () { |
305 var outerSetUpRun = false; | 358 var outerSetUpRun = false; |
306 var middleSetUpRun = false; | 359 var middleSetUpRun = false; |
307 var innerSetUpRun = false; | 360 var innerSetUpRun = false; |
308 _declarer.setUp(expectAsync(() { | 361 var entries = declare(() { |
309 expect(middleSetUpRun, isFalse); | 362 setUp(expectAsync(() { |
310 expect(innerSetUpRun, isFalse); | 363 expect(middleSetUpRun, isFalse); |
311 outerSetUpRun = true; | |
312 }, max: 1)); | |
313 | |
314 _declarer.group("middle", () { | |
315 _declarer.setUp(expectAsync(() { | |
316 expect(outerSetUpRun, isTrue); | |
317 expect(innerSetUpRun, isFalse); | 364 expect(innerSetUpRun, isFalse); |
318 middleSetUpRun = true; | 365 outerSetUpRun = true; |
319 }, max: 1)); | 366 }, max: 1)); |
320 | 367 |
321 _declarer.group("inner", () { | 368 group("middle", () { |
322 _declarer.setUp(expectAsync(() { | 369 setUp(expectAsync(() { |
323 expect(outerSetUpRun, isTrue); | 370 expect(outerSetUpRun, isTrue); |
324 expect(middleSetUpRun, isTrue); | 371 expect(innerSetUpRun, isFalse); |
325 innerSetUpRun = true; | 372 middleSetUpRun = true; |
326 }, max: 1)); | 373 }, max: 1)); |
327 | 374 |
328 _declarer.test("description", expectAsync(() { | 375 group("inner", () { |
329 expect(outerSetUpRun, isTrue); | 376 setUp(expectAsync(() { |
330 expect(middleSetUpRun, isTrue); | 377 expect(outerSetUpRun, isTrue); |
331 expect(innerSetUpRun, isTrue); | 378 expect(middleSetUpRun, isTrue); |
332 }, max: 1)); | 379 innerSetUpRun = true; |
333 }); | 380 }, max: 1)); |
334 }); | 381 |
335 | 382 test("description", expectAsync(() { |
336 return _runTest(0); | 383 expect(outerSetUpRun, isTrue); |
| 384 expect(middleSetUpRun, isTrue); |
| 385 expect(innerSetUpRun, isTrue); |
| 386 }, max: 1)); |
| 387 }); |
| 388 }); |
| 389 }); |
| 390 |
| 391 return _runTest(entries.single.entries.single.entries.single); |
337 }); | 392 }); |
338 | 393 |
339 test("handles Futures when chained", () { | 394 test("handles Futures when chained", () { |
340 var outerSetUpRun = false; | 395 var outerSetUpRun = false; |
341 var innerSetUpRun = false; | 396 var innerSetUpRun = false; |
342 _declarer.setUp(expectAsync(() { | 397 var entries = declare(() { |
343 expect(innerSetUpRun, isFalse); | 398 setUp(expectAsync(() { |
344 return new Future(() => outerSetUpRun = true); | 399 expect(innerSetUpRun, isFalse); |
345 }, max: 1)); | 400 return new Future(() => outerSetUpRun = true); |
346 | 401 }, max: 1)); |
347 _declarer.group("inner", () { | 402 |
348 _declarer.setUp(expectAsync(() { | 403 group("inner", () { |
349 expect(outerSetUpRun, isTrue); | 404 setUp(expectAsync(() { |
350 return new Future(() => innerSetUpRun = true); | 405 expect(outerSetUpRun, isTrue); |
351 }, max: 1)); | 406 return new Future(() => innerSetUpRun = true); |
352 | 407 }, max: 1)); |
353 _declarer.test("description", expectAsync(() { | 408 |
354 expect(outerSetUpRun, isTrue); | 409 test("description", expectAsync(() { |
355 expect(innerSetUpRun, isTrue); | 410 expect(outerSetUpRun, isTrue); |
356 }, max: 1)); | 411 expect(innerSetUpRun, isTrue); |
357 }); | 412 }, max: 1)); |
358 | 413 }); |
359 return _runTest(0); | 414 }); |
| 415 |
| 416 return _runTest(entries.single.entries.single); |
360 }); | 417 }); |
361 }); | 418 }); |
362 | 419 |
363 group(".tearDown()", () { | 420 group(".tearDown()", () { |
364 test("is scoped to the group", () async { | 421 test("is scoped to the group", () async { |
365 var tearDownRun; | 422 var tearDownRun; |
366 _declarer.setUp(() => tearDownRun = false); | 423 var entries = declare(() { |
367 | 424 setUp(() => tearDownRun = false); |
368 _declarer.group("group", () { | 425 |
369 _declarer.tearDown(() => tearDownRun = true); | 426 group("group", () { |
370 | 427 tearDown(() => tearDownRun = true); |
371 _declarer.test("description 1", expectAsync(() { | 428 |
| 429 test("description 1", expectAsync(() { |
| 430 expect(tearDownRun, isFalse); |
| 431 }, max: 1)); |
| 432 }); |
| 433 |
| 434 test("description 2", expectAsync(() { |
372 expect(tearDownRun, isFalse); | 435 expect(tearDownRun, isFalse); |
373 }, max: 1)); | 436 }, max: 1)); |
374 }); | 437 }); |
375 | 438 |
376 _declarer.test("description 2", expectAsync(() { | 439 await _runTest(entries[0].entries.single); |
377 expect(tearDownRun, isFalse); | |
378 }, max: 1)); | |
379 | |
380 await _runTest(0); | |
381 expect(tearDownRun, isTrue); | 440 expect(tearDownRun, isTrue); |
382 await _runTest(1); | 441 await _runTest(entries[1]); |
383 expect(tearDownRun, isFalse); | 442 expect(tearDownRun, isFalse); |
384 }); | 443 }); |
385 | 444 |
386 test("runs from the inside out", () async { | 445 test("runs from the inside out", () async { |
387 var innerTearDownRun = false; | 446 var innerTearDownRun = false; |
388 var middleTearDownRun = false; | 447 var middleTearDownRun = false; |
389 var outerTearDownRun = false; | 448 var outerTearDownRun = false; |
390 _declarer.tearDown(expectAsync(() { | 449 var entries = declare(() { |
391 expect(innerTearDownRun, isTrue); | 450 tearDown(expectAsync(() { |
392 expect(middleTearDownRun, isTrue); | |
393 outerTearDownRun = true; | |
394 }, max: 1)); | |
395 | |
396 _declarer.group("middle", () { | |
397 _declarer.tearDown(expectAsync(() { | |
398 expect(innerTearDownRun, isTrue); | 451 expect(innerTearDownRun, isTrue); |
399 expect(outerTearDownRun, isFalse); | 452 expect(middleTearDownRun, isTrue); |
400 middleTearDownRun = true; | 453 outerTearDownRun = true; |
401 }, max: 1)); | 454 }, max: 1)); |
402 | 455 |
403 _declarer.group("inner", () { | 456 group("middle", () { |
404 _declarer.tearDown(expectAsync(() { | 457 tearDown(expectAsync(() { |
| 458 expect(innerTearDownRun, isTrue); |
405 expect(outerTearDownRun, isFalse); | 459 expect(outerTearDownRun, isFalse); |
406 expect(middleTearDownRun, isFalse); | 460 middleTearDownRun = true; |
407 innerTearDownRun = true; | |
408 }, max: 1)); | 461 }, max: 1)); |
409 | 462 |
410 _declarer.test("description", expectAsync(() { | 463 group("inner", () { |
411 expect(outerTearDownRun, isFalse); | 464 tearDown(expectAsync(() { |
412 expect(middleTearDownRun, isFalse); | 465 expect(outerTearDownRun, isFalse); |
413 expect(innerTearDownRun, isFalse); | 466 expect(middleTearDownRun, isFalse); |
414 }, max: 1)); | 467 innerTearDownRun = true; |
| 468 }, max: 1)); |
| 469 |
| 470 test("description", expectAsync(() { |
| 471 expect(outerTearDownRun, isFalse); |
| 472 expect(middleTearDownRun, isFalse); |
| 473 expect(innerTearDownRun, isFalse); |
| 474 }, max: 1)); |
| 475 }); |
415 }); | 476 }); |
416 }); | 477 }); |
417 | 478 |
418 await _runTest(0); | 479 await _runTest(entries.single.entries.single.entries.single); |
419 expect(innerTearDownRun, isTrue); | 480 expect(innerTearDownRun, isTrue); |
420 expect(middleTearDownRun, isTrue); | 481 expect(middleTearDownRun, isTrue); |
421 expect(outerTearDownRun, isTrue); | 482 expect(outerTearDownRun, isTrue); |
422 }); | 483 }); |
423 | 484 |
424 test("handles Futures when chained", () async { | 485 test("handles Futures when chained", () async { |
425 var outerTearDownRun = false; | 486 var outerTearDownRun = false; |
426 var innerTearDownRun = false; | 487 var innerTearDownRun = false; |
427 _declarer.tearDown(expectAsync(() { | 488 var entries = declare(() { |
428 expect(innerTearDownRun, isTrue); | 489 tearDown(expectAsync(() { |
429 return new Future(() => outerTearDownRun = true); | 490 expect(innerTearDownRun, isTrue); |
430 }, max: 1)); | 491 return new Future(() => outerTearDownRun = true); |
431 | |
432 _declarer.group("inner", () { | |
433 _declarer.tearDown(expectAsync(() { | |
434 expect(outerTearDownRun, isFalse); | |
435 return new Future(() => innerTearDownRun = true); | |
436 }, max: 1)); | 492 }, max: 1)); |
437 | 493 |
438 _declarer.test("description", expectAsync(() { | 494 group("inner", () { |
439 expect(outerTearDownRun, isFalse); | 495 tearDown(expectAsync(() { |
440 expect(innerTearDownRun, isFalse); | 496 expect(outerTearDownRun, isFalse); |
441 }, max: 1)); | 497 return new Future(() => innerTearDownRun = true); |
| 498 }, max: 1)); |
| 499 |
| 500 test("description", expectAsync(() { |
| 501 expect(outerTearDownRun, isFalse); |
| 502 expect(innerTearDownRun, isFalse); |
| 503 }, max: 1)); |
| 504 }); |
442 }); | 505 }); |
443 | 506 |
444 await _runTest(0); | 507 await _runTest(entries.single.entries.single); |
445 expect(innerTearDownRun, isTrue); | 508 expect(innerTearDownRun, isTrue); |
446 expect(outerTearDownRun, isTrue); | 509 expect(outerTearDownRun, isTrue); |
447 }); | 510 }); |
448 | 511 |
449 test("runs outer callbacks even when inner ones fail", () async { | 512 test("runs outer callbacks even when inner ones fail", () async { |
450 var outerTearDownRun = false; | 513 var outerTearDownRun = false; |
451 _declarer.tearDown(() { | 514 var entries = declare(() { |
452 return new Future(() => outerTearDownRun = true); | 515 tearDown(() { |
| 516 return new Future(() => outerTearDownRun = true); |
| 517 }); |
| 518 |
| 519 group("inner", () { |
| 520 tearDown(() { |
| 521 throw 'inner error'; |
| 522 }); |
| 523 |
| 524 test("description", expectAsync(() { |
| 525 expect(outerTearDownRun, isFalse); |
| 526 }, max: 1)); |
| 527 }); |
453 }); | 528 }); |
454 | 529 |
455 _declarer.group("inner", () { | 530 await _runTest(entries.single.entries.single, shouldFail: true); |
456 _declarer.tearDown(() { | |
457 throw 'inner error'; | |
458 }); | |
459 | |
460 _declarer.test("description", expectAsync(() { | |
461 expect(outerTearDownRun, isFalse); | |
462 }, max: 1)); | |
463 }); | |
464 | |
465 await _runTest(0, shouldFail: true); | |
466 expect(outerTearDownRun, isTrue); | 531 expect(outerTearDownRun, isTrue); |
467 }); | 532 }); |
468 }); | 533 }); |
469 }); | 534 }); |
470 } | 535 } |
471 | 536 |
472 /// Runs the test at [index] defined on [_declarer]. | 537 /// Runs [test]. |
473 /// | 538 /// |
474 /// This automatically sets up an `onError` listener to ensure that the test | 539 /// This automatically sets up an `onError` listener to ensure that the test |
475 /// doesn't throw any invisible exceptions. | 540 /// doesn't throw any invisible exceptions. |
476 Future _runTest(int index, {bool shouldFail: false}) { | 541 Future _runTest(Test test, {bool shouldFail: false}) { |
477 var liveTest = _declarer.tests[index].load(_suite); | 542 var liveTest = test.load(_suite); |
478 | 543 |
479 liveTest.onError.listen(shouldFail | 544 liveTest.onError.listen(shouldFail |
480 ? expectAsync((_) {}) | 545 ? expectAsync((_) {}) |
481 : (error) => registerException(error.error, error.stackTrace)); | 546 : (error) => registerException(error.error, error.stackTrace)); |
482 | 547 |
483 return liveTest.run(); | 548 return liveTest.run(); |
484 } | 549 } |
OLD | NEW |