Chromium Code Reviews| Index: lib/src/backend/invoker.dart |
| diff --git a/lib/src/backend/invoker.dart b/lib/src/backend/invoker.dart |
| index 86b5a0c7728ce4f54aaf35aadefa2a580c717245..cc36defb18ce8cd3fba0548ec5153b2cedcffa1f 100644 |
| --- a/lib/src/backend/invoker.dart |
| +++ b/lib/src/backend/invoker.dart |
| @@ -27,16 +27,8 @@ class LocalTest implements Test { |
| /// The test body. |
| final AsyncFunction _body; |
| - /// The callback used to clean up after the test. |
| - /// |
| - /// This is separated out from [_body] because it needs to run once the test's |
| - /// asynchronous computation has finished, even if that's different from the |
| - /// completion of the main body of the test. |
| - final AsyncFunction _tearDown; |
| - |
| - LocalTest(this.name, this.metadata, body(), {tearDown()}) |
| - : _body = body, |
| - _tearDown = tearDown; |
| + LocalTest(this.name, this.metadata, body()) |
| + : _body = body; |
| /// Loads a single runnable instance of this test. |
| LiveTest load(Suite suite) { |
| @@ -48,7 +40,7 @@ class LocalTest implements Test { |
| if (name == name && metadata == this.metadata) return this; |
| if (name == null) name = this.name; |
| if (metadata == null) metadata = this.metadata; |
| - return new LocalTest(name, metadata, _body, tearDown: _tearDown); |
| + return new LocalTest(name, metadata, _body); |
| } |
| } |
| @@ -147,10 +139,14 @@ class Invoker { |
| /// transitively invokes have completed. |
| /// |
| /// If [fn] itself returns a future, this will automatically wait until that |
| - /// future completes as well. |
| + /// future completes as well. Note that outstanding callbacks registered |
| + /// within [fn] will *not* be registered as outstanding callback outside of |
| + /// [fn]. |
| /// |
| - /// Note that outstanding callbacks registered within [fn] will *not* be |
| - /// registered as outstanding callback outside of [fn]. |
| + /// If [fn] produces an unhandled error, this marks the current test as |
| + /// failed, removes all outstanding callbacks registered within [fn], and the |
| + /// completes returned future. It does not remove any outstanding callbacks |
|
Bob Nystrom
2015/09/24 16:05:02
"and the completes returned future" no has grammar
nweiz
2015/09/24 19:56:20
Done.
|
| + /// registered outside of [fn]. |
| Future waitForOutstandingCallbacks(fn()) { |
| heartbeat(); |
| @@ -158,7 +154,9 @@ class Invoker { |
| runZoned(() { |
| // TODO(nweiz): Use async/await here once issue 23497 has been fixed in |
| // two stable versions. |
| - new Future.sync(fn).then((_) => counter.removeOutstandingCallback()); |
| + runZoned(() { |
| + new Future.sync(fn).then((_) => counter.removeOutstandingCallback()); |
| + }, onError: _handleError); |
| }, zoneValues: { |
| // Use the invoker as a key so that multiple invokers can have different |
| // outstanding callback counters at once. |
| @@ -237,13 +235,6 @@ class Invoker { |
| .then((_) => removeOutstandingCallback()); |
| _outstandingCallbacks.noOutstandingCallbacks.then((_) { |
| - if (_test._tearDown == null) return null; |
| - |
| - // Reset the outstanding callback counter to wait for callbacks from |
| - // the test's `tearDown` to complete. |
| - return waitForOutstandingCallbacks(() => |
| - runZoned(_test._tearDown, onError: _handleError)); |
| - }).then((_) { |
| if (_timeoutTimer != null) _timeoutTimer.cancel(); |
| _controller.setState( |
| new State(Status.complete, liveTest.state.result)); |