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

// @dart = 2.9

// Example of spawning an isolate from a URI
library spawn_tests;

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

main() {
  test('isolate fromUri - send and reply', () async {
    const String debugName = 'spawnedIsolate';

    final exitPort = ReceivePort();

    final port = new ReceivePort();
    port.listen(expectAsync((msg) {
      expect(msg, equals('re: hi'));
      port.close();
    }));

    // 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.spawnUri(
        Uri.parse('spawn_uri_child_isolate.dart'), ['hi'], port.sendPort,
        paused: true, debugName: debugName, onExit: exitPort.sendPort);

    expect(isolate.debugName, debugName);

    isolate.resume(isolate.pauseCapability);

    // Explicitly await spawned isolate exit to enforce main isolate not
    // completing (and the stand-alone runtime exiting) before the spawned
    // isolate is done.
    await exitPort.first;
  });
}
