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

// spawns multiple isolates and sends unresolved ports between them.
library unresolved_ports;
import 'dart:isolate';
import '../../pkg/unittest/lib/unittest.dart';

// This test does the following:
//  - main spawns two isolates: 'tim' and 'beth'
//  - 'tim' spawns an isolate: 'bob'
//  - main starts a message chain:
//       main -> beth -> tim -> bob -> main
//    by giving 'beth' a send-port to 'tim'.

bethIsolate() {
  // TODO(sigmund): use expectAsync2 when it is OK to use it within an isolate
  // (issue #6856)
  port.receive((msg, reply) => msg[1].send(
        '${msg[0]}\nBeth says: Tim are you coming? And Bob?', reply));
}

timIsolate() {
  SendPort bob = spawnFunction(bobIsolate);
  port.receive((msg, reply) => bob.send(
        '$msg\nTim says: Can you tell "main" that we are all coming?', reply));
}

bobIsolate() {
  port.receive((msg, reply) => reply.send(
        '$msg\nBob says: we are all coming!'));
}

baseTest({bool failForNegativeTest: false}) {
  test('Message chain with unresolved ports', () {
    ReceivePort port = new ReceivePort();
    port.receive(expectAsync2((msg, _) {
      expect(msg, equals('main says: Beth, find out if Tim is coming.'
        '\nBeth says: Tim are you coming? And Bob?'
        '\nTim says: Can you tell "main" that we are all coming?'
        '\nBob says: we are all coming!'));
      expect(failForNegativeTest, isFalse);
      port.close();
    }));

    SendPort tim = spawnFunction(timIsolate);
    SendPort beth = spawnFunction(bethIsolate);

    beth.send(
        // because tim is created asynchronously, here we are sending an
        // unresolved port:
        ['main says: Beth, find out if Tim is coming.', tim],
        port.toSendPort());
  });
}

main() => baseTest();
