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

library package_isolate_test;

import 'packages/shared.dart' as shared;
import 'dart:isolate';
import '../../../pkg/async_helper/lib/async_helper.dart';
import '../../../pkg/expect/lib/expect.dart';

expectResponse() {
  asyncStart();
  var receivePort = new ReceivePort();
  receivePort.first.then((msg) {
    Expect.equals('isolate', msg);
    Expect.equals('main', shared.output);
    asyncEnd();
  });
  return receivePort;
}

void main() {
  {
    var replyPort = expectResponse().sendPort;
    shared.output = 'main';
    Isolate.spawn(isolate_main, replyPort);
  }

  {
    // Package in spawnUri() of sibling file.
    var replyPort = expectResponse().sendPort;
    shared.output = 'main';
    Isolate.spawnUri(Uri.parse('sibling_isolate.dart'), [], replyPort);
  }

  {
    // Package in spawnUri() of file in folder.
    var replyPort = expectResponse().sendPort;
    shared.output = 'main';
    Isolate.spawnUri(
        Uri.parse('test_folder/folder_isolate.dart'), [], replyPort);
  }
}

void isolate_main(SendPort replyTo) {
  shared.output = 'isolate';
  replyTo.send(shared.output);
}
