// 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()
/// If the stream has already been canceled this method has no effect.
/// @description Checks multiple invocation of [close].
/// @author kaigorodov
/// @author a.semenov@unipro.ru

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

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

main() {
  asyncStart();
  ReceivePort receivePort = new ReceivePort();
  var sendPort = receivePort.sendPort;
  Future.wait([Isolate.spawn(iMain, sendPort), receivePort.first])
      .then((v) => receivePort.close())
      .then((v) => receivePort.close())
      .then((v) => receivePort.close())
      .then((v) => asyncEnd());
}
