// Copyright (c) 2011, 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.

/**
 * @assertion factory ReceivePort()
 * Opens a long-lived port for receiving messages.
 * A ReceivePort is a non-broadcast stream.
 * This means that it buffers incoming messages until a listener is registered.
 * Only one listener can receive messages.
 * See Stream.asBroadcastStream for transforming the port to a broadcast stream.
 * A receive port is closed by canceling its subscription.
 * @description Checks that incoming messages are buffered until a listener is registered..
 * @author kaigorodov
 */
import "dart:isolate";
import "../../../Utils/expect.dart";

var counter = 10;

void main() {
  ReceivePort rPort = new ReceivePort();
  SendPort sPort = rPort.sendPort;
  for (int k = counter; k > 0; k--) {
    sPort.send(k);
  }
  rPort.listen((message) {
    Expect.equals(counter, message);
    if (message > 1) {
      counter--;
    } else {
      rPort.close();
    }
  });
}
