// Copyright (c) 2012, 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.

// VMOptions=--enable-isolate-groups --experimental-enable-isolate-groups-jit
// VMOptions=--no-enable-isolate-groups

// Example of spawning an isolate from a function.
library spawn_tests;

import 'dart:isolate';
import 'package:async_helper/async_helper.dart';
import 'package:expect/expect.dart';

isolateEntryPoint(args) {
  var msg = args[0];
  var sendPort = args[1];
  sendPort.send('re: $msg');
}

Future<void> main([args, port]) async {
  // message - reply chain
  const String debugName = 'spawnedIsolate';

  ReceivePort port = new ReceivePort();
  asyncStart();
  port.listen((msg) {
    port.close();
    Expect.equals(msg, 're: hi');
    asyncEnd();
  });

  // Start new isolate; paused so it's alive till we read the debugName.
  // If the isolate runs to completion, the isolate might get cleaned up
  // and debugName might be null.
  final isolate = await Isolate.spawn(isolateEntryPoint, ['hi', port.sendPort],
      paused: true, debugName: debugName);

  Expect.equals(isolate.debugName, debugName);
  isolate.resume(isolate.pauseCapability!);
}
