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

Side by Side Diff: lib/unittest/unittest.dart

Issue 10579008: Added test setup/teardown. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 6 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 | Annotate | Revision Log
OLDNEW
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, specify the relative path to 8 * To import this library, specify the relative path to
9 * lib/unittest/unittest.dart. 9 * lib/unittest/unittest.dart.
10 * 10 *
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 168
169 /** Tests executed in this suite. */ 169 /** Tests executed in this suite. */
170 List<TestCase> _tests; 170 List<TestCase> _tests;
171 171
172 /** 172 /**
173 * Callback used to run tests. Entrypoints can replace this with their own 173 * Callback used to run tests. Entrypoints can replace this with their own
174 * if they want. 174 * if they want.
175 */ 175 */
176 Function _testRunner; 176 Function _testRunner;
177 177
178 /** Setup function called before each test in a group */
179 Function _testSetup;
180
181 /** Teardown function called after each test in a group */
182 Function _testTeardown;
183
178 /** Current test being executed. */ 184 /** Current test being executed. */
179 int _currentTest = 0; 185 int _currentTest = 0;
180 186
181 /** Total number of callbacks that have been executed in the current test. */ 187 /** Total number of callbacks that have been executed in the current test. */
182 int _callbacksCalled = 0; 188 int _callbacksCalled = 0;
183 189
184 final _UNINITIALIZED = 0; 190 final _UNINITIALIZED = 0;
185 final _READY = 1; 191 final _READY = 1;
186 final _RUNNING_TEST = 2; 192 final _RUNNING_TEST = 2;
187 193
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after
497 */ 503 */
498 // TODO(sigmund): deprecate this API when issue 2706 is fixed. 504 // TODO(sigmund): deprecate this API when issue 2706 is fixed.
499 Function expectAsyncUntil2(Function callback, Function isDone) { 505 Function expectAsyncUntil2(Function callback, Function isDone) {
500 return new _SpreadArgsHelper.variableCallCount(callback, isDone).invoke2; 506 return new _SpreadArgsHelper.variableCallCount(callback, isDone).invoke2;
501 } 507 }
502 508
503 /** 509 /**
504 * Creates a new named group of tests. Calls to group() or test() within the 510 * Creates a new named group of tests. Calls to group() or test() within the
505 * body of the function passed to this will inherit this group's description. 511 * body of the function passed to this will inherit this group's description.
506 */ 512 */
507 void group(String description, void body()) { 513 void group(String description, void body(),
514 [Function setupTest, Function teardownTest]) {
Bob Nystrom 2012/06/19 23:38:33 Instead of taking these functions as arguments, ho
gram 2012/06/20 17:44:14 Done.
508 ensureInitialized(); 515 ensureInitialized();
509 516
510 // Concatenate the new group. 517 // Concatenate the new group.
511 final oldGroup = _currentGroup; 518 final parentGroup = _currentGroup;
512 if (_currentGroup != '') { 519 if (_currentGroup != '') {
513 // Add a space. 520 // Add a space.
514 _currentGroup = '$_currentGroup $description'; 521 _currentGroup = '$_currentGroup $description';
515 } else { 522 } else {
516 // The first group. 523 // The first group.
517 _currentGroup = description; 524 _currentGroup = description;
518 } 525 }
519 526
527 // Groups can be nested, so we need to preserve the current
528 // settings for test setup/teardown
Bob Nystrom 2012/06/19 23:38:33 .
gram 2012/06/20 17:44:14 Done.
529 Function parentSetup = _testSetup;
530 Function parentTeardown = _testTeardown;
531
520 try { 532 try {
533 _testSetup = setupTest;
534 _testTeardown = teardownTest;
521 body(); 535 body();
522 } finally { 536 } finally {
523 // Now that the group is over, restore the previous one. 537 // Now that the group is over, restore the previous one.
524 _currentGroup = oldGroup; 538 _currentGroup = parentGroup;
539 _testSetup = parentSetup;
540 _testTeardown = parentTeardown;
525 } 541 }
526 } 542 }
527 543
528 /** Called by subclasses to indicate that an asynchronous test completed. */ 544 /** Called by subclasses to indicate that an asynchronous test completed. */
529 void _handleAllCallbacksDone() { 545 void _handleAllCallbacksDone() {
530 // TODO (gram): we defer this to give the nextBatch recursive 546 // TODO (gram): we defer this to give the nextBatch recursive
531 // stack a chance to unwind. This is a temporary hack but 547 // stack a chance to unwind. This is a temporary hack but
532 // really a bunch of code here needs to be fixed. We have a 548 // really a bunch of code here needs to be fixed. We have a
533 // single array that is being iterated through by nextBatch(), 549 // single array that is being iterated through by nextBatch(),
534 // which is recursively invoked in the case of async tests that 550 // which is recursively invoked in the case of async tests that
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
641 * Runs a batch of tests, yielding whenever an asynchronous test starts 657 * Runs a batch of tests, yielding whenever an asynchronous test starts
642 * running. Tests will resume executing when such asynchronous test calls 658 * running. Tests will resume executing when such asynchronous test calls
643 * [done] or if it fails with an exception. 659 * [done] or if it fails with an exception.
644 */ 660 */
645 _nextBatch() { 661 _nextBatch() {
646 while (_currentTest < _tests.length) { 662 while (_currentTest < _tests.length) {
647 final testCase = _tests[_currentTest]; 663 final testCase = _tests[_currentTest];
648 guardAsync(() { 664 guardAsync(() {
649 _callbacksCalled = 0; 665 _callbacksCalled = 0;
650 _state = _RUNNING_TEST; 666 _state = _RUNNING_TEST;
651 testCase.test(); 667 testCase.run();
652 668
653 if (_state != _UNCAUGHT_ERROR) { 669 if (_state != _UNCAUGHT_ERROR) {
654 if (testCase.callbacks == _callbacksCalled) { 670 if (testCase.callbacks == _callbacksCalled) {
655 testCase.pass(); 671 testCase.pass();
656 } 672 }
657 } 673 }
658 }); 674 });
659 675
660 if (!testCase.isComplete && testCase.callbacks > 0) return; 676 if (!testCase.isComplete && testCase.callbacks > 0) return;
661 677
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
713 _config.onInit(); 729 _config.onInit();
714 730
715 // Immediately queue the suite up. It will run after a timeout (i.e. after 731 // Immediately queue the suite up. It will run after a timeout (i.e. after
716 // main() has returned). 732 // main() has returned).
717 _defer(_runTests); 733 _defer(_runTests);
718 } 734 }
719 735
720 /** Signature for a test function. */ 736 /** Signature for a test function. */
721 typedef void TestFunction(); 737 typedef void TestFunction();
722 738
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698