| Index: lib/src/runner/load_suite.dart
|
| diff --git a/lib/src/runner/load_suite.dart b/lib/src/runner/load_suite.dart
|
| index a83177746f0ddd81202ef33bd62b0a1d644e6c34..cb84a0b5121ee73be5211249f04013de2bc69c7d 100644
|
| --- a/lib/src/runner/load_suite.dart
|
| +++ b/lib/src/runner/load_suite.dart
|
| @@ -39,7 +39,13 @@ class LoadSuite extends RunnerSuite {
|
| ///
|
| /// This will return `null` if the suite is unavailable for some reason (for
|
| /// example if an error occurred while loading it).
|
| - final Future<RunnerSuite> suite;
|
| + Future<RunnerSuite> get suite async => (await _suiteAndZone)?.first;
|
| +
|
| + /// A future that completes to a pair of [suite] and the load test's [Zone].
|
| + ///
|
| + /// This will return `null` if the suite is unavailable for some reason (for
|
| + /// example if an error occurred while loading it).
|
| + final Future<Pair<RunnerSuite, Zone>> _suiteAndZone;
|
|
|
| /// Returns the test that loads the suite.
|
| ///
|
| @@ -71,7 +77,7 @@ class LoadSuite extends RunnerSuite {
|
| return;
|
| }
|
|
|
| - completer.complete(suite);
|
| + completer.complete(new Pair(suite, Zone.current));
|
| invoker.removeOutstandingCallback();
|
| } catch (error, stackTrace) {
|
| registerException(error, stackTrace);
|
| @@ -107,7 +113,8 @@ class LoadSuite extends RunnerSuite {
|
| platform: suite.platform);
|
| }
|
|
|
| - LoadSuite._(String name, void body(), this.suite, {TestPlatform platform})
|
| + LoadSuite._(String name, void body(), this._suiteAndZone,
|
| + {TestPlatform platform})
|
| : super(const VMEnvironment(), new Group.root([
|
| new LocalTest(name,
|
| new Metadata(timeout: new Timeout(new Duration(minutes: 5))),
|
| @@ -115,17 +122,21 @@ class LoadSuite extends RunnerSuite {
|
| ]), platform: platform);
|
|
|
| /// A constructor used by [changeSuite].
|
| - LoadSuite._changeSuite(LoadSuite old, Future<RunnerSuite> this.suite)
|
| + LoadSuite._changeSuite(LoadSuite old, this._suiteAndZone)
|
| : super(const VMEnvironment(), old.group, platform: old.platform);
|
|
|
| /// Creates a new [LoadSuite] that's identical to this one, but that
|
| /// transforms [suite] once it's loaded.
|
| ///
|
| - /// If [suite] completes to `null`, [change] won't be run.
|
| + /// If [suite] completes to `null`, [change] won't be run. [change] is run
|
| + /// within the load test's zone, so any errors or prints it emits will be
|
| + /// associated with that test.
|
| LoadSuite changeSuite(RunnerSuite change(RunnerSuite suite)) {
|
| - return new LoadSuite._changeSuite(this, suite.then((loadedSuite) {
|
| - if (loadedSuite == null) return null;
|
| - return change(loadedSuite);
|
| + return new LoadSuite._changeSuite(this, _suiteAndZone.then((pair) {
|
| + if (pair == null) return null;
|
| +
|
| + var zone = pair.last;
|
| + return new Pair(zone.runUnaryGuarded(change, pair.first), zone);
|
| }));
|
| }
|
|
|
|
|