OLD | NEW |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, 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 /** | 5 /** |
6 * A library for writing dart unit tests. | 6 * A library for writing dart unit tests. |
7 * | 7 * |
8 * To import this library, use the pub package manager. | 8 * To import this library, use the pub package manager. |
9 * Create a pubspec.yaml file in your project and add | 9 * Create a pubspec.yaml file in your project and add |
10 * a dependency on unittest with the following lines: | 10 * a dependency on unittest with the following lines: |
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
383 complete = true; | 383 complete = true; |
384 if (--testCase.callbackFunctionsOutstanding == 0 && | 384 if (--testCase.callbackFunctionsOutstanding == 0 && |
385 !testCase.isComplete) { | 385 !testCase.isComplete) { |
386 testCase.pass(); | 386 testCase.pass(); |
387 } | 387 } |
388 } | 388 } |
389 } | 389 } |
390 | 390 |
391 invoke([arg0 = sentinel, arg1 = sentinel, arg2 = sentinel, | 391 invoke([arg0 = sentinel, arg1 = sentinel, arg2 = sentinel, |
392 arg3 = sentinel, arg4 = sentinel]) { | 392 arg3 = sentinel, arg4 = sentinel]) { |
393 return guardAsync(() { | 393 return _guardAsync(() { |
394 if (!shouldCallBack()) { | 394 if (!shouldCallBack()) { |
395 return; | 395 return; |
396 } else if (arg0 == sentinel) { | 396 } else if (arg0 == sentinel) { |
397 return callback(); | 397 return callback(); |
398 } else if (arg1 == sentinel) { | 398 } else if (arg1 == sentinel) { |
399 return callback(arg0); | 399 return callback(arg0); |
400 } else if (arg2 == sentinel) { | 400 } else if (arg2 == sentinel) { |
401 return callback(arg0, arg1); | 401 return callback(arg0, arg1); |
402 } else if (arg3 == sentinel) { | 402 } else if (arg3 == sentinel) { |
403 return callback(arg0, arg1, arg2); | 403 return callback(arg0, arg1, arg2); |
404 } else if (arg4 == sentinel) { | 404 } else if (arg4 == sentinel) { |
405 return callback(arg0, arg1, arg2, arg3); | 405 return callback(arg0, arg1, arg2, arg3); |
406 } else { | 406 } else { |
407 testCase.error( | 407 testCase.error( |
408 'unittest lib does not support callbacks with more than' | 408 'unittest lib does not support callbacks with more than' |
409 ' 4 arguments.', | 409 ' 4 arguments.', |
410 ''); | 410 ''); |
411 } | 411 } |
412 }, | 412 }, |
413 after, testNum); | 413 after, testNum); |
414 } | 414 } |
415 | 415 |
416 invoke0() { | 416 invoke0() { |
417 return guardAsync( | 417 return _guardAsync( |
418 () { | 418 () { |
419 if (shouldCallBack()) { | 419 if (shouldCallBack()) { |
420 return callback(); | 420 return callback(); |
421 } | 421 } |
422 }, | 422 }, |
423 after, testNum); | 423 after, testNum); |
424 } | 424 } |
425 | 425 |
426 invoke1(arg1) { | 426 invoke1(arg1) { |
427 return guardAsync( | 427 return _guardAsync( |
428 () { | 428 () { |
429 if (shouldCallBack()) { | 429 if (shouldCallBack()) { |
430 return callback(arg1); | 430 return callback(arg1); |
431 } | 431 } |
432 }, | 432 }, |
433 after, testNum); | 433 after, testNum); |
434 } | 434 } |
435 | 435 |
436 invoke2(arg1, arg2) { | 436 invoke2(arg1, arg2) { |
437 return guardAsync( | 437 return _guardAsync( |
438 () { | 438 () { |
439 if (shouldCallBack()) { | 439 if (shouldCallBack()) { |
440 return callback(arg1, arg2); | 440 return callback(arg1, arg2); |
441 } | 441 } |
442 }, | 442 }, |
443 after, testNum); | 443 after, testNum); |
444 } | 444 } |
445 } | 445 } |
446 | 446 |
447 /** | 447 /** |
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
716 _testRunner(); | 716 _testRunner(); |
717 }); | 717 }); |
718 } | 718 } |
719 | 719 |
720 /** | 720 /** |
721 * Run [tryBody] guarded in a try-catch block. If an exception is thrown, it is | 721 * Run [tryBody] guarded in a try-catch block. If an exception is thrown, it is |
722 * passed to the corresponding test. | 722 * passed to the corresponding test. |
723 * | 723 * |
724 * The value returned by [tryBody] (if any) is returned by [guardAsync]. | 724 * The value returned by [tryBody] (if any) is returned by [guardAsync]. |
725 */ | 725 */ |
726 guardAsync(Function tryBody, [Function finallyBody, int testNum = -1]) { | 726 guardAsync(Function tryBody) { |
727 if (testNum < 0) testNum = _currentTest; | 727 return _guardAsync(tryBody, null, _currentTest); |
| 728 } |
| 729 |
| 730 _guardAsync(Function tryBody, Function finallyBody, int testNum) { |
| 731 assert(testNum >= 0); |
728 try { | 732 try { |
729 return tryBody(); | 733 return tryBody(); |
730 } catch (e, trace) { | 734 } catch (e, trace) { |
731 _registerException(testNum, e, trace); | 735 _registerException(testNum, e, trace); |
732 } finally { | 736 } finally { |
733 if (finallyBody != null) finallyBody(); | 737 if (finallyBody != null) finallyBody(); |
734 } | 738 } |
735 } | 739 } |
736 | 740 |
737 /** | 741 /** |
(...skipping 21 matching lines...) Expand all Loading... |
759 * running. Tests will resume executing when such asynchronous test calls | 763 * running. Tests will resume executing when such asynchronous test calls |
760 * [done] or if it fails with an exception. | 764 * [done] or if it fails with an exception. |
761 */ | 765 */ |
762 _nextBatch() { | 766 _nextBatch() { |
763 while (true) { | 767 while (true) { |
764 if (_currentTest >= _tests.length) { | 768 if (_currentTest >= _tests.length) { |
765 _completeTests(); | 769 _completeTests(); |
766 break; | 770 break; |
767 } | 771 } |
768 final testCase = _tests[_currentTest]; | 772 final testCase = _tests[_currentTest]; |
769 var f = guardAsync(testCase.run, null, _currentTest); | 773 var f = _guardAsync(testCase.run, null, _currentTest); |
770 if (f != null) { | 774 if (f != null) { |
771 f.whenComplete(() { | 775 f.whenComplete(() { |
772 _nextTestCase(); // Schedule the next test. | 776 _nextTestCase(); // Schedule the next test. |
773 }); | 777 }); |
774 break; | 778 break; |
775 } | 779 } |
776 _currentTest++; | 780 _currentTest++; |
777 } | 781 } |
778 } | 782 } |
779 | 783 |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
855 } | 859 } |
856 | 860 |
857 /** Enable a test by ID. */ | 861 /** Enable a test by ID. */ |
858 void enableTest(int testId) => _setTestEnabledState(testId, true); | 862 void enableTest(int testId) => _setTestEnabledState(testId, true); |
859 | 863 |
860 /** Disable a test by ID. */ | 864 /** Disable a test by ID. */ |
861 void disableTest(int testId) => _setTestEnabledState(testId, false); | 865 void disableTest(int testId) => _setTestEnabledState(testId, false); |
862 | 866 |
863 /** Signature for a test function. */ | 867 /** Signature for a test function. */ |
864 typedef dynamic TestFunction(); | 868 typedef dynamic TestFunction(); |
OLD | NEW |