// 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 void close()
/// Closes the port.
/// After a call to this method any incoming message is silently dropped.
///
/// @description Checks that after closing, messages are dropped silently.
///
/// @author kaigorodov
/// @author a.semenov@unipro.ru

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

List receivedMessages = [];

RawReceivePort receivePort = new RawReceivePort(receiveHandler);

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

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

main() {
  asyncStart();
  SendPort sendPort = receivePort.sendPort;
  receivePort.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();
      }
  );
}
