| Index: pkg/scheduled_test/lib/src/schedule.dart
|
| diff --git a/pkg/scheduled_test/lib/src/schedule.dart b/pkg/scheduled_test/lib/src/schedule.dart
|
| index d1f5ea340334b53d4c17877011e4a05c6f1e5e66..dd9e6d3a776d09ca31c854bab4d73029717cf046 100644
|
| --- a/pkg/scheduled_test/lib/src/schedule.dart
|
| +++ b/pkg/scheduled_test/lib/src/schedule.dart
|
| @@ -22,7 +22,7 @@ class Schedule {
|
| TaskQueue _tasks;
|
|
|
| /// The queue of tasks to run if an error is caught while running [tasks]. The
|
| - /// error will be available in [errors]. These tasks won't be run if no error
|
| + /// error will be available via [error]. These tasks won't be run if no error
|
| /// occurs. Note that expectation failures count as errors.
|
| ///
|
| /// This queue runs before [onComplete], and errors in [onComplete] will not
|
| @@ -35,12 +35,12 @@ class Schedule {
|
|
|
| /// The queue of tasks to run after [tasks] and possibly [onException] have
|
| /// run. This queue will run whether or not an error occurred. If one did, it
|
| - /// will be available in [errors]. Note that expectation failures count as
|
| + /// will be available via [error]. Note that expectation failures count as
|
| /// errors.
|
| ///
|
| /// This queue runs after [onException]. If an error occurs while running
|
| - /// [onException], that error will be available in [errors] after the original
|
| - /// error.
|
| + /// [onException], that error will be available via [error] in place of the
|
| + /// original error.
|
| ///
|
| /// If an error occurs in a task in this queue, all further tasks will be
|
| /// skipped.
|
| @@ -59,20 +59,11 @@ class Schedule {
|
| bool get done => _done;
|
| bool _done = false;
|
|
|
| - // TODO(nweiz): make this a read-only view once issue 8321 is fixed.
|
| -
|
| - /// Errors thrown by the task queues.
|
| - ///
|
| - /// When running tasks in [tasks], this will always be empty. If an error
|
| - /// occurs in [tasks], it will be added to this list and then [onException]
|
| - /// will be run. If an error occurs there as well, it will be added to this
|
| - /// list and [onComplete] will be run. Errors thrown during [onComplete] will
|
| - /// also be added to this list, although no scheduled tasks will be run
|
| - /// afterwards.
|
| - ///
|
| - /// Any out-of-band callbacks that throw errors will also have those errors
|
| - /// added to this list.
|
| - final errors = <ScheduleError>[];
|
| + /// The error thrown by the task queue. This will only be set while running
|
| + /// [onException] and [onComplete], since an error in [tasks] will cause it to
|
| + /// terminate immediately.
|
| + ScheduleError get error => _error;
|
| + ScheduleError _error;
|
|
|
| /// The task queue that's currently being run, or `null` if there is no such
|
| /// queue. One of [tasks], [onException], or [onComplete]. This will be `null`
|
| @@ -108,27 +99,11 @@ class Schedule {
|
|
|
| return tasks._run();
|
| }).catchError((e) {
|
| - errors.add(e);
|
| - return onException._run().catchError((innerError) {
|
| - // If an error occurs in a task in the onException queue, make sure it's
|
| - // registered in the error list and re-throw it. We could also re-throw
|
| - // `e`; ultimately, all the errors will be shown to the user if any
|
| - // ScheduleError is thrown.
|
| - errors.add(innerError);
|
| - throw innerError;
|
| - }).then((_) {
|
| - // If there are no errors in the onException queue, re-throw the
|
| - // original error that caused it to run.
|
| + _error = e;
|
| + return onException._run().then((_) {
|
| throw e;
|
| });
|
| - }).whenComplete(() {
|
| - return onComplete._run().catchError((e) {
|
| - // If an error occurs in a task in the onComplete queue, make sure it's
|
| - // registered in the error list and re-throw it.
|
| - errors.add(e);
|
| - throw e;
|
| - });
|
| - }).whenComplete(() {
|
| + }).whenComplete(() => onComplete._run()).whenComplete(() {
|
| _done = true;
|
| });
|
| }
|
| @@ -141,11 +116,10 @@ class Schedule {
|
| var scheduleError = new ScheduleError.from(this, error,
|
| stackTrace: stackTrace, task: currentTask);
|
| if (_done) {
|
| - errors.add(scheduleError);
|
| throw new StateError(
|
| "An out-of-band error was signaled outside of wrapAsync after the "
|
| - "schedule finished running.\n"
|
| - "${errorString()}");
|
| + "schedule finished running:"
|
| + "${prefixLines(scheduleError.toString())}");
|
| } else if (currentQueue == null) {
|
| // If we're not done but there's no current queue, that means we haven't
|
| // started yet and thus we're in setUp or the synchronous body of the
|
| @@ -186,15 +160,6 @@ class Schedule {
|
| };
|
| }
|
|
|
| - /// Returns a string representation of all errors registered on this schedule.
|
| - String errorString() {
|
| - if (errors.isEmpty) return "The schedule had no errors.";
|
| - if (errors.length == 1) return errors.first.toString();
|
| - var errorStrings = errors.map((e) => e.toString()).join("\n================"
|
| - "================================================================\n");
|
| - return "The schedule had ${errors.length} errors:\n$errorStrings";
|
| - }
|
| -
|
| /// Returns a [Future] that will complete once there are no pending
|
| /// out-of-band callbacks.
|
| Future _awaitNoPendingCallbacks() {
|
| @@ -247,7 +212,6 @@ class TaskQueue {
|
| _schedule._currentTask = task;
|
| if (_error != null) throw _error;
|
| return task.fn().catchError((e) {
|
| - if (_error != null) _schedule.errors.add(_error);
|
| throw new ScheduleError.from(_schedule, e, task: task);
|
| });
|
| }).whenComplete(() {
|
| @@ -261,9 +225,6 @@ class TaskQueue {
|
| /// Signals that an out-of-band error has been detected and the queue should
|
| /// stop running as soon as possible.
|
| void _signalError(ScheduleError error) {
|
| - // If multiple errors are detected while a task is running, make sure the
|
| - // earlier ones are recorded in the schedule.
|
| - if (_error != null) _schedule.errors.add(_error);
|
| _error = error;
|
| }
|
|
|
|
|