| Index: pkg/unittest/lib/src/test_case.dart
 | 
| diff --git a/pkg/unittest/lib/src/test_case.dart b/pkg/unittest/lib/src/test_case.dart
 | 
| deleted file mode 100644
 | 
| index fc84ed7e7d03326f40604371ea788b3abc569808..0000000000000000000000000000000000000000
 | 
| --- a/pkg/unittest/lib/src/test_case.dart
 | 
| +++ /dev/null
 | 
| @@ -1,191 +0,0 @@
 | 
| -// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 | 
| -// for details. All rights reserved. Use of this source code is governed by a
 | 
| -// BSD-style license that can be found in the LICENSE file.
 | 
| -
 | 
| -part of unittest;
 | 
| -
 | 
| -/// Represents the state for an individual unit test.
 | 
| -///
 | 
| -/// Create by calling [test] or [solo_test].
 | 
| -class TestCase {
 | 
| -  /// Identifier for this test.
 | 
| -  final int id;
 | 
| -
 | 
| -  /// A description of what the test is specifying.
 | 
| -  final String description;
 | 
| -
 | 
| -  /// The setup function to call before the test, if any.
 | 
| -  Function _setUp;
 | 
| -
 | 
| -  /// The teardown function to call after the test, if any.
 | 
| -  Function _tearDown;
 | 
| -
 | 
| -  /// The body of the test case.
 | 
| -  TestFunction _testFunction;
 | 
| -
 | 
| -  /// Remaining number of callbacks functions that must reach a 'done' state
 | 
| -  /// to wait for before the test completes.
 | 
| -  int _callbackFunctionsOutstanding = 0;
 | 
| -
 | 
| -  String _message = '';
 | 
| -  /// Error or failure message.
 | 
| -  String get message => _message;
 | 
| -
 | 
| -  String _result;
 | 
| -  /// One of [PASS], [FAIL], [ERROR], or [:null:] if the test hasn't run yet.
 | 
| -  String get result => _result;
 | 
| -
 | 
| -  /// Returns whether this test case passed.
 | 
| -  bool get passed => _result == PASS;
 | 
| -
 | 
| -  StackTrace _stackTrace;
 | 
| -  /// Stack trace associated with this test, or [:null:] if it succeeded.
 | 
| -  StackTrace get stackTrace => _stackTrace;
 | 
| -
 | 
| -  /// The group (or groups) under which this test is running.
 | 
| -  final String currentGroup;
 | 
| -
 | 
| -  DateTime _startTime;
 | 
| -  DateTime get startTime => _startTime;
 | 
| -
 | 
| -  Duration _runningTime;
 | 
| -  Duration get runningTime => _runningTime;
 | 
| -
 | 
| -  bool _enabled = true;
 | 
| -
 | 
| -  bool get enabled => _enabled;
 | 
| -
 | 
| -  bool _doneTeardown = false;
 | 
| -
 | 
| -  Completer _testComplete;
 | 
| -
 | 
| -  TestCase._internal(this.id, this.description, this._testFunction)
 | 
| -      : currentGroup = _environment.currentContext.fullName,
 | 
| -        _setUp = _environment.currentContext.testSetup,
 | 
| -        _tearDown = _environment.currentContext.testTeardown;
 | 
| -
 | 
| -  bool get isComplete => !enabled || result != null;
 | 
| -
 | 
| -  Function _errorHandler(String stage) => (e, stack) {
 | 
| -    if (stack == null && e is Error) {
 | 
| -      stack = e.stackTrace;
 | 
| -    }
 | 
| -    if (result == null || result == PASS) {
 | 
| -      if (e is TestFailure) {
 | 
| -        _fail("$e", stack);
 | 
| -      } else {
 | 
| -        _error("$stage failed: Caught $e", stack);
 | 
| -      }
 | 
| -    }
 | 
| -  };
 | 
| -
 | 
| -  /// Perform any associated [_setUp] function and run the test. Returns
 | 
| -  /// a [Future] that can be used to schedule the next test. If the test runs
 | 
| -  /// to completion synchronously, or is disabled, null is returned, to
 | 
| -  /// tell unittest to schedule the next test immediately.
 | 
| -  Future _run() {
 | 
| -    if (!enabled) return new Future.value();
 | 
| -
 | 
| -    _result = _stackTrace = null;
 | 
| -    _message = '';
 | 
| -
 | 
| -    // Avoid calling [new Future] to avoid issue 11911.
 | 
| -    return new Future.value().then((_) {
 | 
| -      if (_setUp != null) return _setUp();
 | 
| -    }).catchError(_errorHandler('Setup')).then((_) {
 | 
| -      // Skip the test if setup failed.
 | 
| -      if (result != null) return new Future.value();
 | 
| -      _config.onTestStart(this);
 | 
| -      _startTime = new DateTime.now();
 | 
| -      _runningTime = null;
 | 
| -      ++_callbackFunctionsOutstanding;
 | 
| -      var testReturn = _testFunction();
 | 
| -      // If _testFunction() returned a future, we want to wait for it like we
 | 
| -      // would a callback, so if a failure occurs while waiting, we can abort.
 | 
| -      if (testReturn is Future) {
 | 
| -        ++_callbackFunctionsOutstanding;
 | 
| -        testReturn.catchError(_errorHandler('Test'))
 | 
| -            .whenComplete(_markCallbackComplete);
 | 
| -      }
 | 
| -    }).catchError(_errorHandler('Test')).then((_) {
 | 
| -      _markCallbackComplete();
 | 
| -      if (result == null) {
 | 
| -        // Outstanding callbacks exist; we need to return a Future.
 | 
| -        _testComplete = new Completer();
 | 
| -        return _testComplete.future.whenComplete(() {
 | 
| -          if (_tearDown != null) {
 | 
| -            return _tearDown();
 | 
| -          }
 | 
| -        }).catchError(_errorHandler('Teardown'));
 | 
| -      } else if (_tearDown != null) {
 | 
| -        return _tearDown();
 | 
| -      }
 | 
| -    }).catchError(_errorHandler('Teardown')).whenComplete(() {
 | 
| -      _setUp = null;
 | 
| -      _tearDown = null;
 | 
| -      _testFunction = null;
 | 
| -    });
 | 
| -  }
 | 
| -
 | 
| -  // Set the results, notify the config, and return true if this
 | 
| -  // is the first time the result is being set.
 | 
| -  void _setResult(String testResult, String messageText, StackTrace stack) {
 | 
| -    _message = messageText;
 | 
| -    _stackTrace = getTrace(stack, formatStacks, filterStacks);
 | 
| -    if (_stackTrace == null) _stackTrace = stack;
 | 
| -    if (result == null) {
 | 
| -      _result = testResult;
 | 
| -      _config.onTestResult(this);
 | 
| -    } else {
 | 
| -      _result = testResult;
 | 
| -      _config.onTestResultChanged(this);
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  void _complete(String testResult, [String messageText = '',
 | 
| -      StackTrace stack]) {
 | 
| -    if (runningTime == null) {
 | 
| -      // The startTime can be `null` if an error happened during setup. In this
 | 
| -      // case we simply report a running time of 0.
 | 
| -      if (startTime != null) {
 | 
| -        _runningTime = new DateTime.now().difference(startTime);
 | 
| -      } else {
 | 
| -        _runningTime = const Duration(seconds: 0);
 | 
| -      }
 | 
| -    }
 | 
| -    _setResult(testResult, messageText, stack);
 | 
| -    if (_testComplete != null) {
 | 
| -      var t = _testComplete;
 | 
| -      _testComplete = null;
 | 
| -      t.complete(this);
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  void _pass() {
 | 
| -    _complete(PASS);
 | 
| -  }
 | 
| -
 | 
| -  void _fail(String messageText, [StackTrace stack]) {
 | 
| -    if (result != null) {
 | 
| -      String newMessage = (result == PASS)
 | 
| -          ? 'Test failed after initially passing: $messageText'
 | 
| -          : 'Test failed more than once: $messageText';
 | 
| -      // TODO(gram): Should we combine the stack with the old one?
 | 
| -      _complete(ERROR, newMessage, stack);
 | 
| -    } else {
 | 
| -      _complete(FAIL, messageText, stack);
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  void _error(String messageText, [StackTrace stack]) {
 | 
| -    _complete(ERROR, messageText, stack);
 | 
| -  }
 | 
| -
 | 
| -  void _markCallbackComplete() {
 | 
| -    if (--_callbackFunctionsOutstanding == 0 && !isComplete) {
 | 
| -      _pass();
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  String toString() => _result != null ? "$description: $result" : description;
 | 
| -}
 | 
| 
 |