diff --git a/packages/flutter_tools/lib/src/test/flutter_platform.dart b/packages/flutter_tools/lib/src/test/flutter_platform.dart index ee4ac588f9a..0bca68bdc49 100644 --- a/packages/flutter_tools/lib/src/test/flutter_platform.dart +++ b/packages/flutter_tools/lib/src/test/flutter_platform.dart @@ -21,7 +21,8 @@ import 'coverage_collector.dart'; final String _kSkyShell = Platform.environment['SKY_SHELL']; const String _kHost = '127.0.0.1'; -const String _kPath = '/runner'; +const String _kRunnerPath = '/runner'; +const String _kShutdownPath = '/shutdown'; String shellPath; @@ -33,20 +34,24 @@ void installHook() { class _ServerInfo { final String url; + final String shutdownUrl; final Future socket; final HttpServer server; - _ServerInfo(this.server, this.url, this.socket); + _ServerInfo(this.server, this.url, this.shutdownUrl, this.socket); } Future<_ServerInfo> _startServer() async { HttpServer server = await HttpServer.bind(_kHost, 0); Completer socket = new Completer(); server.listen((HttpRequest request) { - if (request.uri.path == _kPath) + if (request.uri.path == _kRunnerPath) socket.complete(WebSocketTransformer.upgrade(request)); + else if (!socket.isCompleted && request.uri.path == _kShutdownPath) + socket.completeError('Failed to start test'); }); - return new _ServerInfo(server, 'ws://$_kHost:${server.port}$_kPath', socket.future); + return new _ServerInfo(server, 'ws://$_kHost:${server.port}$_kRunnerPath', + 'ws://$_kHost:${server.port}$_kShutdownPath', socket.future); } Future _startProcess(String mainPath, { String packages, int observatoryPort }) { @@ -172,6 +177,10 @@ void main() { } } + process.exitCode.then((_) { + WebSocket.connect(info.shutdownUrl); + }); + try { WebSocket socket = await info.socket; StreamChannel channel = new StreamChannel(socket.map(JSON.decode), socket);