/*
 * Copyright (c) 2017, 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 ping(
 *      SendPort responsePort, {
 *      Object response,
 *      int priority: IMMEDIATE
 * })
 *    Request that the isolate send response on the responsePort.
 * ...
 *    If response cannot be sent to the isolate, then the request is ignored.
 * It is recommended to only use simple values that can be sent to all isolates,
 * like null, booleans, numbers or strings.
 *
 * @description Check that if response cannot be sent to the isolate, then error
 * occurs
 *
 * @issue #28094
 * @author a.semenov@unipro.ru
 */
import "dart:isolate";
import "../../../Utils/expect.dart";
import "dart:async";
import "IsolateUtil.dart";

test() async {
  ErrorServer server = await ErrorServer.spawn();
  // check
  ReceivePort pingPort = new ReceivePort();
  Expect.throws(() {
    server.isolate.ping(pingPort.sendPort, response: server.isolate);
  });
  Future pingResponse = pingPort.first.timeout(TWO_SECONDS, onTimeout: () {
    pingPort.close();
    return "timeout";
  });
  Expect.equals("timeout", await pingResponse);
  // clean up
  server.stop();
  asyncEnd();
}

main() {
  asyncStart();
  test();
}
