// 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 CountTest;

import 'dart:isolate';
import 'package:unittest/unittest.dart';
import "remote_unittest_helper.dart";

void countMessages(replyTo) {
  int count = 0;
  var port = new ReceivePort();
  replyTo.send(["init", port.sendPort]);
  port.listen((message) {
    if (message == -1) {
      expect(count, 10);
      replyTo.send(["done"]);
      port.close();
      return;
    }
    count++;
    expect(message, count);
    replyTo.send(["count", message * 2]);
  });
}

void main([args, port]) {
  if (testRemote(main, port)) return;
  test("count 10 consecutive messages", () {
    ReceivePort local = new ReceivePort();
    Isolate.spawn(countMessages, local.sendPort);
    SendPort remote;
    int count = 0;
    var done = expectAsync(() {});
    local.listen((msg) {
      switch (msg[0]) {
        case "init":
          expect(remote, null);
          remote = msg[1];
          remote.send(++count);
          break;
        case "count":
          expect(msg[1], count * 2);
          if (count == 10) {
            remote.send(-1);
          } else {
            remote.send(++count);
          }
          break;
        case "done":
          expect(count, 10);
          local.close();
          done();
          break;
        default:
          fail("unreachable: ${msg[0]}");
      }
    });
  });
}
