| Index: lib/src/runner/loader.dart
|
| diff --git a/lib/src/runner/loader.dart b/lib/src/runner/loader.dart
|
| index 4929792f3c8145a34c6ed42f61288fd3007661f2..56123f2353d3437fdf17fbac691f270b79306f93 100644
|
| --- a/lib/src/runner/loader.dart
|
| +++ b/lib/src/runner/loader.dart
|
| @@ -19,7 +19,6 @@ import '../backend/test_platform.dart';
|
| import '../util/async_thunk.dart';
|
| import '../util/dart.dart' as dart;
|
| import '../util/io.dart';
|
| -import '../util/isolate_wrapper.dart';
|
| import '../util/remote_exception.dart';
|
| import '../utils.dart';
|
| import 'browser/server.dart';
|
| @@ -54,8 +53,8 @@ class Loader {
|
| /// This is `null` if tests should be loaded from the filesystem.
|
| final Uri _pubServeUrl;
|
|
|
| - /// All isolates that have been spun up by the loader.
|
| - final _isolates = new Set<IsolateWrapper>();
|
| + /// All suites that have been created by the loader.
|
| + final _suites = new Set<Suite>();
|
|
|
| /// The server that serves browser test pages.
|
| ///
|
| @@ -240,18 +239,18 @@ void main(_, Map message) {
|
| await new Future.error(new LoadException(path, error), stackTrace);
|
| }
|
|
|
| - _isolates.add(isolate);
|
| -
|
| var completer = new Completer();
|
|
|
| var subscription = receivePort.listen((response) {
|
| if (response["type"] == "print") {
|
| print(response["line"]);
|
| } else if (response["type"] == "loadException") {
|
| + isolate.kill();
|
| completer.completeError(
|
| new LoadException(path, response["message"]),
|
| new Trace.current());
|
| } else if (response["type"] == "error") {
|
| + isolate.kill();
|
| var asyncError = RemoteException.deserialize(response["error"]);
|
| completer.completeError(
|
| new LoadException(path, asyncError.error),
|
| @@ -263,10 +262,16 @@ void main(_, Map message) {
|
| });
|
|
|
| try {
|
| - return new Suite((await completer.future).map((test) {
|
| + var suite = new Suite((await completer.future).map((test) {
|
| var testMetadata = new Metadata.deserialize(test['metadata']);
|
| return new IsolateTest(test['name'], testMetadata, test['sendPort']);
|
| - }), metadata: metadata, path: path, platform: "VM");
|
| + }),
|
| + metadata: metadata,
|
| + path: path,
|
| + platform: "VM",
|
| + onClose: isolate.kill);
|
| + _suites.add(suite);
|
| + return suite;
|
| } finally {
|
| subscription.cancel();
|
| }
|
| @@ -275,10 +280,8 @@ void main(_, Map message) {
|
| /// Closes the loader and releases all resources allocated by it.
|
| Future close() {
|
| return _closeThunk.run(() async {
|
| - for (var isolate in _isolates) {
|
| - isolate.kill();
|
| - }
|
| - _isolates.clear();
|
| + await Future.wait(_suites.map((suite) => suite.close()));
|
| + _suites.clear();
|
|
|
| if (!_browserServerThunk.hasRun) return;
|
| await (await _browserServer).close();
|
|
|