// 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.

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

import 'dart:isolate';

import 'package:expect/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!);
}
