// 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 test program for testing that isolates can spawn other isolates.

#library('NestedSpawnTest');
#import("dart:isolate");
#import('../../pkg/unittest/unittest.dart');

void isolateA() {
  port.receive((msg, replyTo) {
    Expect.equals("launch nested!", msg);
    SendPort p = spawnFunction(isolateB);
    p.call("alive?").then((msg) {
      Expect.equals("and kicking", msg);
      replyTo.send(499, null);
      port.close();
    });
  });
}

void isolateB() {
  port.receive((msg, replyTo) {
    Expect.equals("alive?", msg);
    replyTo.send("and kicking", null);
    port.close();
  });
}


main() {
  test("spawned isolates can spawn nested isolates", () {
    SendPort port = spawnFunction(isolateA);
    port.call("launch nested!").then(expectAsync1((msg) {
      Expect.equals(499, msg);
    }));
  });
}
