| Index: lib/src/live_test_controller.dart
|
| diff --git a/lib/src/live_test_controller.dart b/lib/src/live_test_controller.dart
|
| deleted file mode 100644
|
| index 038894954a730838520a4d991fd581320168af70..0000000000000000000000000000000000000000
|
| --- a/lib/src/live_test_controller.dart
|
| +++ /dev/null
|
| @@ -1,155 +0,0 @@
|
| -// Copyright (c) 2015, 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.
|
| -
|
| -library unittest.live_test_controller;
|
| -
|
| -import 'dart:async';
|
| -import 'dart:collection';
|
| -
|
| -import 'package:stack_trace/stack_trace.dart';
|
| -
|
| -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 {
|
| - final LiveTestController _controller;
|
| -
|
| - Suite get suite => _controller._suite;
|
| -
|
| - Test get test => _controller._test;
|
| -
|
| - State get state => _controller._state;
|
| -
|
| - Stream<State> get onStateChange =>
|
| - _controller._onStateChangeController.stream;
|
| -
|
| - List<AsyncError> get errors => new UnmodifiableListView(_controller._errors);
|
| -
|
| - Stream<AsyncError> get onError => _controller._onErrorController.stream;
|
| -
|
| - Future get onComplete => _controller.completer.future;
|
| -
|
| - Future run() => _controller._run();
|
| -
|
| - Future close() => _controller._close();
|
| -
|
| - _LiveTest(this._controller);
|
| -}
|
| -
|
| -/// A controller that drives a [LiveTest].
|
| -///
|
| -/// This is a utility class to make it easier for implementors of [Test] to
|
| -/// create the [LiveTest] returned by [Test.load]. The [LiveTest] is accessible
|
| -/// through [LiveTestController.liveTest].
|
| -///
|
| -/// This automatically handles some of [LiveTest]'s guarantees, but for the most
|
| -/// part it's the caller's responsibility to make sure everything gets
|
| -/// dispatched in the correct order.
|
| -class LiveTestController {
|
| - /// The [LiveTest] controlled by [this].
|
| - LiveTest get liveTest => _liveTest;
|
| - LiveTest _liveTest;
|
| -
|
| - /// The test suite that's running [this].
|
| - final Suite _suite;
|
| -
|
| - /// The test that's being run.
|
| - final Test _test;
|
| -
|
| - /// 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>();
|
| -
|
| - /// The current state of the test.
|
| - var _state = const State(Status.pending, Result.success);
|
| -
|
| - /// The controller for [LiveTest.onStateChange].
|
| - final _onStateChangeController = new StreamController<State>.broadcast();
|
| -
|
| - /// The controller for [LiveTest.onError].
|
| - final _onErrorController = new StreamController<AsyncError>.broadcast();
|
| -
|
| - /// The completer for [LiveTest.onComplete];
|
| - final completer = new Completer();
|
| -
|
| - /// 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.
|
| - ///
|
| - /// [onRun] is a function that will be called from [LiveTest.run]. It should
|
| - /// 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.
|
| - ///
|
| - /// 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);
|
| - }
|
| -
|
| - /// Adds an error to the [LiveTest].
|
| - ///
|
| - /// This both adds the error to [LiveTest.errors] and emits it via
|
| - /// [LiveTest.onError]. [stackTrace] is automatically converted into a [Chain]
|
| - /// if it's not one already.
|
| - void addError(error, StackTrace stackTrace) {
|
| - var asyncError = new AsyncError(error, new Chain.forTrace(stackTrace));
|
| - _errors.add(asyncError);
|
| - _onErrorController.add(asyncError);
|
| - }
|
| -
|
| - /// Sets the current state of the [LiveTest] to [newState].
|
| - ///
|
| - /// If [newState] is different than the old state, this both sets
|
| - /// [LiveTest.state] and emits the new state via [LiveTest.onStateChanged]. If
|
| - /// it's not different, this does nothing.
|
| - void setState(State newState) {
|
| - if (_state == newState) return;
|
| - _state = newState;
|
| - _onStateChangeController.add(newState);
|
| - }
|
| -
|
| - /// A wrapper for [_onRun] that ensures that it follows the guarantees for
|
| - /// [LiveTest.run].
|
| - Future _run() {
|
| - if (_runCalled) {
|
| - throw new StateError("LiveTest.run() may not be called more than once.");
|
| - }
|
| - _runCalled = true;
|
| -
|
| - _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();
|
| - }
|
| -}
|
|
|