| 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 371 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 382 expect(outerTearDownRun, isFalse); | 382 expect(outerTearDownRun, isFalse); |
| 383 expect(innerTearDownRun, isFalse); | 383 expect(innerTearDownRun, isFalse); |
| 384 }, max: 1)); | 384 }, max: 1)); |
| 385 }); | 385 }); |
| 386 | 386 |
| 387 await _runTest(0); | 387 await _runTest(0); |
| 388 expect(innerTearDownRun, isTrue); | 388 expect(innerTearDownRun, isTrue); |
| 389 expect(outerTearDownRun, isTrue); | 389 expect(outerTearDownRun, isTrue); |
| 390 }); | 390 }); |
| 391 | 391 |
| 392 test("runs outer callbacks even when inner ones fail", () async { |
| 393 var outerTearDownRun = false; |
| 394 _declarer.tearDown(() { |
| 395 return new Future(() => outerTearDownRun = true); |
| 396 }); |
| 397 |
| 398 _declarer.group("inner", () { |
| 399 _declarer.tearDown(() { |
| 400 throw 'inner error'; |
| 401 }); |
| 402 |
| 403 _declarer.test("description", expectAsync(() { |
| 404 expect(outerTearDownRun, isFalse); |
| 405 }, max: 1)); |
| 406 }); |
| 407 |
| 408 await _runTest(0, shouldFail: true); |
| 409 expect(outerTearDownRun, isTrue); |
| 410 }); |
| 411 |
| 392 test("can't be called multiple times", () { | 412 test("can't be called multiple times", () { |
| 393 _declarer.group("group", () { | 413 _declarer.group("group", () { |
| 394 _declarer.tearDown(() {}); | 414 _declarer.tearDown(() {}); |
| 395 expect(() => _declarer.tearDown(() {}), throwsStateError); | 415 expect(() => _declarer.tearDown(() {}), throwsStateError); |
| 396 }); | 416 }); |
| 397 }); | 417 }); |
| 398 }); | 418 }); |
| 399 }); | 419 }); |
| 400 } | 420 } |
| 401 | 421 |
| 402 /// Runs the test at [index] defined on [_declarer]. | 422 /// Runs the test at [index] defined on [_declarer]. |
| 403 /// | 423 /// |
| 404 /// This automatically sets up an `onError` listener to ensure that the test | 424 /// This automatically sets up an `onError` listener to ensure that the test |
| 405 /// doesn't throw any invisible exceptions. | 425 /// doesn't throw any invisible exceptions. |
| 406 Future _runTest(int index, {bool shouldFail: false}) { | 426 Future _runTest(int index, {bool shouldFail: false}) { |
| 407 var liveTest = _declarer.tests[index].load(_suite); | 427 var liveTest = _declarer.tests[index].load(_suite); |
| 408 | 428 |
| 409 liveTest.onError.listen(shouldFail | 429 liveTest.onError.listen(shouldFail |
| 410 ? expectAsync((_) {}) | 430 ? expectAsync((_) {}) |
| 411 : expectAsync((_) {}, | 431 : expectAsync((_) {}, |
| 412 count: 0, reason: "No errors expected for test #$index.")); | 432 count: 0, reason: "No errors expected for test #$index.")); |
| 413 | 433 |
| 414 return liveTest.run(); | 434 return liveTest.run(); |
| 415 } | 435 } |
| OLD | NEW |