// 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 abstract void close()
/// Closes this.
/// If the stream has not been canceled yet, adds a close-event to the event queue
/// and discards any further incoming messages.
/// @description Checks that messages are not processed when the port is closed.
/// @author kaigorodov
/// @author a.semenov@unipro.ru

import 'dart:async';
import "dart:isolate";
import "../../../Utils/expect.dart";

List receivedMessages = [];

void receiveHandler(var message) {
  receivedMessages.add(message);
}

void iMain(SendPort replyPort) {
  replyPort.send("message1");
  replyPort.send("message2");
}

main() {
  asyncStart();
  ReceivePort closedPort = new ReceivePort();
  SendPort sendPort = closedPort.sendPort;
  closedPort.listen(receiveHandler);
  closedPort.close();

  Isolate.spawn(iMain, sendPort).then(
      // give some time for messages to be delivered
      (v) => new Future.delayed(new Duration(milliseconds: 500))).then((v) {
    Expect.listEquals([], receivedMessages, 'Unexpected messages are received');
    asyncEnd();
  });
}
