// 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) {
    int message = _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]}");
      }
    });
  });
}
