/*
 * 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 resume(
 *                    Capability resumeCapability
 *                    )
 *    Resumes a paused isolate.
 * ...
 *    The capability must be one returned by a call to pause on this isolate,
 * otherwise the resume call does nothing.
 *
 * @description Check that call to resume() with freshly created capability
 * does nothing on isolate that started in paused state
 *
 * @author a.semenov@unipro.ru
 */
import "dart:isolate";
import "dart:async";
import "../../../Utils/expect.dart";
import "IsolateUtil.dart";

void entryPoint(SendPort sendPort) {
  sendPort.send("hello");
}

test() async {
  ReceivePort receivePort = new ReceivePort();
  Future receiveFuture = receivePort.first;
  Isolate isolate =
      await Isolate.spawn(entryPoint, receivePort.sendPort, paused: true);
  isolate.resume(new Capability());
  Expect.equals("timeout",
      await receiveFuture.timeout(ONE_SECOND, onTimeout: () => "timeout"));
  receivePort.close();
  asyncEnd();
}

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