blob: 2166e7d8d925aeed73124bf84c8e9aa06ba2e459 [file] [log] [blame]
// 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:developer';
import 'dart:io';
import 'dart:isolate';
import 'package:stream_channel/isolate_channel.dart';
import 'package:stream_channel/stream_channel.dart';
import 'package:test_core/src/runner/plugin/remote_platform_helpers.dart';
import 'package:test_core/src/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(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);
platformChannel.stream.forEach((message) {
assert(message == 'debug');
debugger(message: 'Paused by test runner');
platformChannel.sink.add('done');
});
}