| Index: lib/unittest/test_case.dart
 | 
| ===================================================================
 | 
| --- lib/unittest/test_case.dart	(revision 8828)
 | 
| +++ lib/unittest/test_case.dart	(working copy)
 | 
| @@ -7,7 +7,6 @@
 | 
|   * and assumes unittest defines the type [TestFunction].
 | 
|   */
 | 
|  
 | 
| -
 | 
|  /** Summarizes information about a single test case. */
 | 
|  class TestCase {
 | 
|    /** Identifier for this test. */
 | 
| @@ -16,6 +15,12 @@
 | 
|    /** A description of what the test is specifying. */
 | 
|    final String description;
 | 
|  
 | 
| +  /** The setup function to call before the test, if any. */
 | 
| +  final _setup;
 | 
| +
 | 
| +  /** The teardown function to call after the test, if any. */
 | 
| +  final _teardown;
 | 
| +
 | 
|    /** The body of the test case. */
 | 
|    final TestFunction test;
 | 
|  
 | 
| @@ -35,16 +40,31 @@
 | 
|  
 | 
|    /** The group (or groups) under which this test is running. */
 | 
|    final String currentGroup;
 | 
| - 
 | 
| +
 | 
|    Date startTime;
 | 
|  
 | 
|    Duration runningTime;
 | 
|  
 | 
|    TestCase(this.id, this.description, this.test, this.callbacks)
 | 
| -  : currentGroup = _currentGroup;
 | 
| +  : currentGroup = _currentGroup,
 | 
| +    _setup = _testSetup,
 | 
| +    _teardown = _testTeardown;
 | 
|  
 | 
|    bool get isComplete() => result != null;
 | 
|  
 | 
| +  void run() {
 | 
| +    if (_setup != null) {
 | 
| +      _setup();
 | 
| +    }
 | 
| +    try {
 | 
| +      test();
 | 
| +    } finally {
 | 
| +      if (_teardown != null) {
 | 
| +        _teardown();
 | 
| +      }
 | 
| +    }
 | 
| +  }
 | 
| +
 | 
|    void pass() {
 | 
|      result = _PASS;
 | 
|    }
 | 
| 
 |