| Index: lib/src/live_test_controller.dart
|
| diff --git a/lib/src/live_test_controller.dart b/lib/src/live_test_controller.dart
|
| index d37e4fcc5d8a32ad71b50381b75a24a040875ef6..038894954a730838520a4d991fd581320168af70 100644
|
| --- a/lib/src/live_test_controller.dart
|
| +++ b/lib/src/live_test_controller.dart
|
| @@ -13,6 +13,7 @@ import 'live_test.dart';
|
| import 'state.dart';
|
| import 'suite.dart';
|
| import 'test.dart';
|
| +import 'utils.dart';
|
|
|
| /// An implementation of [LiveTest] that's controlled by a [LiveTestController].
|
| class _LiveTest extends LiveTest {
|
| @@ -35,6 +36,8 @@ class _LiveTest extends LiveTest {
|
|
|
| Future run() => _controller._run();
|
|
|
| + Future close() => _controller._close();
|
| +
|
| _LiveTest(this._controller);
|
| }
|
|
|
| @@ -61,6 +64,11 @@ class LiveTestController {
|
| /// The function that will actually start the test running.
|
| final Function _onRun;
|
|
|
| + /// A function to run when the test is closed.
|
| + ///
|
| + /// This may be `null`.
|
| + final AsyncFunction _onClose;
|
| +
|
| /// The list of errors caught by the test.
|
| final _errors = new List<AsyncError>();
|
|
|
| @@ -79,6 +87,9 @@ class LiveTestController {
|
| /// Whether [run] has been called.
|
| var _runCalled = false;
|
|
|
| + /// Whether [close] has been called.
|
| + bool get _isClosed => _onErrorController.isClosed;
|
| +
|
| /// Creates a new controller for a [LiveTest].
|
| ///
|
| /// [test] is the test being run; [suite] is the suite that contains it.
|
| @@ -87,8 +98,13 @@ class LiveTestController {
|
| /// start the test running. The controller takes care of ensuring that
|
| /// [LiveTest.run] isn't called more than once and that [LiveTest.onComplete]
|
| /// is returned.
|
| - LiveTestController(this._suite, this._test, void onRun())
|
| - : _onRun = onRun {
|
| + ///
|
| + /// If [onClose] is passed, it's called the first [LiveTest.close] is called.
|
| + /// It should clean up any resources that have been allocated for the test. It
|
| + /// may return a [Future].
|
| + LiveTestController(this._suite, this._test, void onRun(), {onClose()})
|
| + : _onRun = onRun,
|
| + _onClose = onClose {
|
| _liveTest = new _LiveTest(this);
|
| }
|
|
|
| @@ -125,4 +141,15 @@ class LiveTestController {
|
| _onRun();
|
| return liveTest.onComplete;
|
| }
|
| +
|
| + /// A wrapper for [_onClose] that ensures that all controllers are closed.
|
| + Future _close() {
|
| + if (_isClosed) return new Future.value();
|
| + _onStateChangeController.close();
|
| + _onErrorController.close();
|
| + if (!completer.isCompleted) completer.complete();
|
| +
|
| + if (_onClose != null) return new Future.sync(_onClose);
|
| + return new Future.value();
|
| + }
|
| }
|
|
|