blob: 5bfe03cb6d0b12dcec40fa5c296c3036053e1a15 [file] [log] [blame]
// Copyright (c) 2024, 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:isolate' as isolate;
import 'package:vm_service/vm_service.dart';
import 'common/service_test_common.dart';
import 'common/test_helper.dart';
void child(message) {
print('Child got initial message');
message.send(null);
}
void testMain() {
final port = isolate.RawReceivePort();
port.handler = (message) {
print('Parent got response');
port.close();
};
isolate.Isolate.spawn(child, port.sendPort);
}
final tests = <IsolateTest>[
hasPausedAtStart,
(VmService service, IsolateRef isolateRef) async {
// Disabling these flags will result in any new isolates spawned not
// pausing on start or exit. However, existing isolates will maintain their
// existing flags and the main isolate should pause at exit.
await service.setFlag('pause_isolates_on_start', 'false');
await service.setFlag('pause_isolates_on_exit', 'false');
},
resumeIsolate,
// When the main isolate is resumed, we expect the child isolate to spawn and
// immediately exit after sending a message to the main isolate. The main
// isolate will only exit when `port` is closed after the message sent by the
// child is received.
hasStoppedAtExit,
];
void main([args = const <String>[]]) => runIsolateTests(
args,
tests,
'pause_on_start_and_exit_with_child_test.dart',
testeeConcurrent: testMain,
pauseOnStart: true,
pauseOnExit: true,
extraArgs: [
'--trace-service',
'--trace-service-verbose',
],
);