| 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/invoker.dart'; | 8 import 'package:test/src/backend/invoker.dart'; |
| 9 import 'package:test/src/backend/suite.dart'; | 9 import 'package:test/src/backend/suite.dart'; |
| 10 import 'package:test/src/frontend/timeout.dart'; | 10 import 'package:test/src/frontend/timeout.dart'; |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 return new Future(() => setUpRun = true); | 72 return new Future(() => setUpRun = true); |
| 73 }); | 73 }); |
| 74 | 74 |
| 75 _declarer.test("description", expectAsync(() { | 75 _declarer.test("description", expectAsync(() { |
| 76 expect(setUpRun, isTrue); | 76 expect(setUpRun, isTrue); |
| 77 }, max: 1)); | 77 }, max: 1)); |
| 78 | 78 |
| 79 return _runTest(0); | 79 return _runTest(0); |
| 80 }); | 80 }); |
| 81 | 81 |
| 82 test("can't be called multiple times", () { | 82 test("runs in call order within a group", () async { |
| 83 _declarer.setUp(() {}); | 83 var firstSetUpRun = false; |
| 84 expect(() => _declarer.setUp(() {}), throwsStateError); | 84 var secondSetUpRun = false; |
| 85 var thirdSetUpRun = false; |
| 86 _declarer.setUp(expectAsync(() async { |
| 87 expect(secondSetUpRun, isFalse); |
| 88 expect(thirdSetUpRun, isFalse); |
| 89 firstSetUpRun = true; |
| 90 })); |
| 91 |
| 92 _declarer.setUp(expectAsync(() async { |
| 93 expect(firstSetUpRun, isTrue); |
| 94 expect(thirdSetUpRun, isFalse); |
| 95 secondSetUpRun = true; |
| 96 })); |
| 97 |
| 98 _declarer.setUp(expectAsync(() async { |
| 99 expect(firstSetUpRun, isTrue); |
| 100 expect(secondSetUpRun, isTrue); |
| 101 thirdSetUpRun = true; |
| 102 })); |
| 103 |
| 104 _declarer.test("description", expectAsync(() { |
| 105 expect(firstSetUpRun, isTrue); |
| 106 expect(secondSetUpRun, isTrue); |
| 107 expect(thirdSetUpRun, isTrue); |
| 108 })); |
| 109 |
| 110 await _runTest(0); |
| 85 }); | 111 }); |
| 86 }); | 112 }); |
| 87 | 113 |
| 88 group(".tearDown()", () { | 114 group(".tearDown()", () { |
| 89 test("is run after all tests", () async { | 115 test("is run after all tests", () async { |
| 90 var tearDownRun; | 116 var tearDownRun; |
| 91 _declarer.setUp(() => tearDownRun = false); | 117 _declarer.setUp(() => tearDownRun = false); |
| 92 _declarer.tearDown(() => tearDownRun = true); | 118 _declarer.tearDown(() => tearDownRun = true); |
| 93 | 119 |
| 94 _declarer.test("description 1", expectAsync(() { | 120 _declarer.test("description 1", expectAsync(() { |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 161 Invoker.current.removeOutstandingCallback(); | 187 Invoker.current.removeOutstandingCallback(); |
| 162 }); | 188 }); |
| 163 }); | 189 }); |
| 164 | 190 |
| 165 _declarer.test("description", () {}); | 191 _declarer.test("description", () {}); |
| 166 | 192 |
| 167 await _runTest(0); | 193 await _runTest(0); |
| 168 expect(outstandingCallbackRemoved, isTrue); | 194 expect(outstandingCallbackRemoved, isTrue); |
| 169 }); | 195 }); |
| 170 | 196 |
| 171 test("can't be called multiple times", () { | 197 test("runs in reverse call order within a group", () async { |
| 172 _declarer.tearDown(() {}); | 198 var firstTearDownRun = false; |
| 173 expect(() => _declarer.tearDown(() {}), throwsStateError); | 199 var secondTearDownRun = false; |
| 200 var thirdTearDownRun = false; |
| 201 _declarer.tearDown(expectAsync(() async { |
| 202 expect(secondTearDownRun, isTrue); |
| 203 expect(thirdTearDownRun, isTrue); |
| 204 firstTearDownRun = true; |
| 205 })); |
| 206 |
| 207 _declarer.tearDown(expectAsync(() async { |
| 208 expect(firstTearDownRun, isFalse); |
| 209 expect(thirdTearDownRun, isTrue); |
| 210 secondTearDownRun = true; |
| 211 })); |
| 212 |
| 213 _declarer.tearDown(expectAsync(() async { |
| 214 expect(firstTearDownRun, isFalse); |
| 215 expect(secondTearDownRun, isFalse); |
| 216 thirdTearDownRun = true; |
| 217 })); |
| 218 |
| 219 _declarer.test("description", expectAsync(() { |
| 220 expect(firstTearDownRun, isFalse); |
| 221 expect(secondTearDownRun, isFalse); |
| 222 expect(thirdTearDownRun, isFalse); |
| 223 }, max: 1)); |
| 224 |
| 225 await _runTest(0); |
| 226 }); |
| 227 |
| 228 test("runs further tearDowns in a group even if one fails", () async { |
| 229 _declarer.tearDown(expectAsync(() {})); |
| 230 |
| 231 _declarer.tearDown(() async { |
| 232 throw 'error'; |
| 233 }); |
| 234 |
| 235 _declarer.test("description", expectAsync(() {})); |
| 236 |
| 237 await _runTest(0, shouldFail: true); |
| 174 }); | 238 }); |
| 175 }); | 239 }); |
| 176 | 240 |
| 177 group("in a group,", () { | 241 group("in a group,", () { |
| 178 test("tests inherit the group's description", () { | 242 test("tests inherit the group's description", () { |
| 179 _declarer.group("group", () { | 243 _declarer.group("group", () { |
| 180 _declarer.test("description", () {}); | 244 _declarer.test("description", () {}); |
| 181 }); | 245 }); |
| 182 | 246 |
| 183 expect(_declarer.tests, hasLength(1)); | 247 expect(_declarer.tests, hasLength(1)); |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 287 }, max: 1)); | 351 }, max: 1)); |
| 288 | 352 |
| 289 _declarer.test("description", expectAsync(() { | 353 _declarer.test("description", expectAsync(() { |
| 290 expect(outerSetUpRun, isTrue); | 354 expect(outerSetUpRun, isTrue); |
| 291 expect(innerSetUpRun, isTrue); | 355 expect(innerSetUpRun, isTrue); |
| 292 }, max: 1)); | 356 }, max: 1)); |
| 293 }); | 357 }); |
| 294 | 358 |
| 295 return _runTest(0); | 359 return _runTest(0); |
| 296 }); | 360 }); |
| 297 | |
| 298 test("can't be called multiple times", () { | |
| 299 _declarer.group("group", () { | |
| 300 _declarer.setUp(() {}); | |
| 301 expect(() => _declarer.setUp(() {}), throwsStateError); | |
| 302 }); | |
| 303 }); | |
| 304 }); | 361 }); |
| 305 | 362 |
| 306 group(".tearDown()", () { | 363 group(".tearDown()", () { |
| 307 test("is scoped to the group", () async { | 364 test("is scoped to the group", () async { |
| 308 var tearDownRun; | 365 var tearDownRun; |
| 309 _declarer.setUp(() => tearDownRun = false); | 366 _declarer.setUp(() => tearDownRun = false); |
| 310 | 367 |
| 311 _declarer.group("group", () { | 368 _declarer.group("group", () { |
| 312 _declarer.tearDown(() => tearDownRun = true); | 369 _declarer.tearDown(() => tearDownRun = true); |
| 313 | 370 |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 401 }); | 458 }); |
| 402 | 459 |
| 403 _declarer.test("description", expectAsync(() { | 460 _declarer.test("description", expectAsync(() { |
| 404 expect(outerTearDownRun, isFalse); | 461 expect(outerTearDownRun, isFalse); |
| 405 }, max: 1)); | 462 }, max: 1)); |
| 406 }); | 463 }); |
| 407 | 464 |
| 408 await _runTest(0, shouldFail: true); | 465 await _runTest(0, shouldFail: true); |
| 409 expect(outerTearDownRun, isTrue); | 466 expect(outerTearDownRun, isTrue); |
| 410 }); | 467 }); |
| 411 | |
| 412 test("can't be called multiple times", () { | |
| 413 _declarer.group("group", () { | |
| 414 _declarer.tearDown(() {}); | |
| 415 expect(() => _declarer.tearDown(() {}), throwsStateError); | |
| 416 }); | |
| 417 }); | |
| 418 }); | 468 }); |
| 419 }); | 469 }); |
| 420 } | 470 } |
| 421 | 471 |
| 422 /// Runs the test at [index] defined on [_declarer]. | 472 /// Runs the test at [index] defined on [_declarer]. |
| 423 /// | 473 /// |
| 424 /// This automatically sets up an `onError` listener to ensure that the test | 474 /// This automatically sets up an `onError` listener to ensure that the test |
| 425 /// doesn't throw any invisible exceptions. | 475 /// doesn't throw any invisible exceptions. |
| 426 Future _runTest(int index, {bool shouldFail: false}) { | 476 Future _runTest(int index, {bool shouldFail: false}) { |
| 427 var liveTest = _declarer.tests[index].load(_suite); | 477 var liveTest = _declarer.tests[index].load(_suite); |
| 428 | 478 |
| 429 liveTest.onError.listen(shouldFail | 479 liveTest.onError.listen(shouldFail |
| 430 ? expectAsync((_) {}) | 480 ? expectAsync((_) {}) |
| 431 : expectAsync((_) {}, | 481 : (error) => registerException(error.error, error.stackTrace)); |
| 432 count: 0, reason: "No errors expected for test #$index.")); | |
| 433 | 482 |
| 434 return liveTest.run(); | 483 return liveTest.run(); |
| 435 } | 484 } |
| OLD | NEW |