| 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 d5eb9af41929f55e15741b14f3eecabd02325740..06064c5102a02c2848958e6bb1a7b7df2fcff555 100644
|
| --- a/pkg/scheduled_test/lib/src/schedule.dart
|
| +++ b/pkg/scheduled_test/lib/src/schedule.dart
|
| @@ -111,14 +111,6 @@ class Schedule {
|
| /// The timer for keeping track of task timeouts. This may be null.
|
| Timer _timeoutTimer;
|
|
|
| - /// If `true`, then new [Task]s will capture the current stack trace before
|
| - /// running. This can be set to `false` to speed up running tests since
|
| - /// capturing stack traces is currently quite slow. Even when set to `false`,
|
| - /// stack traces from *thrown* exceptions will be caught. This only disables
|
| - /// the eager collection of stack traces *before* an error occurs. Defaults
|
| - /// to `true`.
|
| - bool captureStackTraces = true;
|
| -
|
| /// Creates a new schedule with empty task queues.
|
| Schedule() {
|
| _tasks = new TaskQueue._("tasks", this);
|
| @@ -354,10 +346,6 @@ class TaskQueue {
|
| /// The name of the queue, for debugging purposes.
|
| final String name;
|
|
|
| - /// If `true`, then new [Task]s in this queue will capture the current stack
|
| - /// trace before running.
|
| - bool get captureStackTraces => _schedule.captureStackTraces;
|
| -
|
| /// The [Schedule] that created this queue.
|
| final Schedule _schedule;
|
|
|
| @@ -379,9 +367,9 @@ class TaskQueue {
|
|
|
| /// The descriptions of all callbacks that are blocking the completion of
|
| /// [this].
|
| - List<String> get pendingCallbacks =>
|
| - new UnmodifiableListView<String>(_pendingCallbacks);
|
| - final _pendingCallbacks = new Queue<String>();
|
| + List<PendingCallback> get pendingCallbacks =>
|
| + new UnmodifiableListView<PendingCallback>(_pendingCallbacks);
|
| + final _pendingCallbacks = new Queue<PendingCallback>();
|
|
|
| /// A completer that will be completed once [_pendingCallbacks] becomes empty
|
| /// after the queue finishes running its tasks.
|
| @@ -505,18 +493,19 @@ class TaskQueue {
|
| bool _timedOut() =>
|
| _schedule.currentQueue != this || pendingCallbacks.isEmpty;
|
|
|
| - if (description == null) {
|
| - description = "Out-of-band operation #${_totalCallbacks}";
|
| - }
|
| -
|
| - if (captureStackTraces) {
|
| - var stackString = prefixLines(terseTraceString(new Trace.current()));
|
| - description += "\n\nStack trace:\n$stackString";
|
| - }
|
| -
|
| _totalCallbacks++;
|
| + var trace = new Trace.current();
|
| + var pendingCallback = new PendingCallback._(() {
|
| + var fullDescription = description;
|
| + if (fullDescription == null) {
|
| + fullDescription = "Out-of-band operation #${_totalCallbacks}";
|
| + }
|
| +
|
| + var stackString = prefixLines(terseTraceString(trace));
|
| + fullDescription += "\n\nStack trace:\n$stackString";
|
| + });
|
| + _pendingCallbacks.add(pendingCallback);
|
|
|
| - _pendingCallbacks.add(description);
|
| return (arg) {
|
| try {
|
| return fn(arg);
|
| @@ -531,7 +520,7 @@ class TaskQueue {
|
| } finally {
|
| if (_timedOut()) return;
|
|
|
| - _pendingCallbacks.remove(description);
|
| + _pendingCallbacks.remove(pendingCallback);
|
| if (_pendingCallbacks.isEmpty && !isRunningTasks) {
|
| _noPendingCallbacksCompleter.complete();
|
| }
|
| @@ -605,3 +594,22 @@ class TaskQueue {
|
| }).join("\n");
|
| }
|
| }
|
| +
|
| +/// A thunk for lazily resolving the description of a [PendingCallback].
|
| +typedef String _DescriptionThunk();
|
| +
|
| +/// An identifier for an out-of-band callback running during a schedule.
|
| +class PendingCallback {
|
| + final _DescriptionThunk _thunk;
|
| + String _description;
|
| +
|
| + /// The string description of the callback.
|
| + String get description {
|
| + if (_description == null) _description = _thunk();
|
| + return _description;
|
| + }
|
| +
|
| + String toString() => description;
|
| +
|
| + PendingCallback._(this._thunk);
|
| +}
|
|
|