| // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| import 'dart:async'; | |
| import 'dart:developer'; | |
| import 'dart:io'; | |
| import 'dart:isolate'; | |
| import 'package:stream_channel/isolate_channel.dart'; | |
| import 'package:stream_channel/stream_channel.dart'; | |
| import '../runner/plugin/remote_platform_helpers.dart'; | |
| import '../runner/plugin/shared_platform_helpers.dart'; | |
| /// Bootstraps a vm test to communicate with the test runner over an isolate. | |
| void internalBootstrapVmTest(Function Function() getMain, SendPort sendPort) { | |
| var platformChannel = MultiChannel<Object?>( | |
| IsolateChannel<Object?>.connectSend(sendPort), | |
| ); | |
| var testControlChannel = platformChannel.virtualChannel() | |
| ..pipe(serializeSuite(getMain)); | |
| platformChannel.sink.add(testControlChannel.id); | |
| platformChannel.stream.forEach((message) { | |
| assert(message == 'debug'); | |
| debugger(message: 'Paused by test runner'); | |
| platformChannel.sink.add('done'); | |
| }); | |
| } | |
| /// Bootstraps a native executable test to communicate with the test runner over | |
| /// a socket. | |
| void internalBootstrapNativeTest( | |
| Function Function() getMain, | |
| List<String> args, | |
| ) async { | |
| if (args.length != 2) { | |
| throw StateError( | |
| 'Expected exactly two args, a host and a port, but got $args', | |
| ); | |
| } | |
| var socket = await Socket.connect(args[0], int.parse(args[1])); | |
| var platformChannel = MultiChannel<Object?>(jsonSocketStreamChannel(socket)); | |
| var testControlChannel = platformChannel.virtualChannel() | |
| ..pipe(serializeSuite(getMain)); | |
| platformChannel.sink.add(testControlChannel.id); | |
| unawaited( | |
| platformChannel.stream.forEach((message) { | |
| assert(message == 'debug'); | |
| debugger(message: 'Paused by test runner'); | |
| platformChannel.sink.add('done'); | |
| }), | |
| ); | |
| } |