// 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 Capability pause([
///    Capability resumeCapability
/// ])
///    Requests the isolate to pause.
///    When the isolate receives the pause command, it stops processing events
/// from the event loop queue. It may still add new events to the queue in
/// response to, e.g., timers or receive-port messages. When the isolate is
/// resumed, it handles the already enqueued events.
///
/// @description Check that paused isolate enqueue timer events and handles
/// them after resume. Parameter resumeCapability is specified.
///
/// @author a.semenov@unipro.ru

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

void entryPoint(SendPort sendPort) {
  new Future.delayed(ONE_SECOND, () { sendPort.send("timer 1"); });
  new Future.delayed(TWO_SECONDS, () { sendPort.send("timer 2"); });
  new Future.delayed(new Duration(milliseconds:100),
      () {
        sendPort.send("activated");
      }
  );
}

test() async {
  Isolate? isolate;
  List receivedData = [];
  Capability resumeCapability = new Capability();
  ReceivePort receivePort = new ReceivePort();
  receivePort.listen(
    (data){
      if ("activated"==data) {
        isolate?.pause(resumeCapability);
      }
      receivedData.add(data);
    }
  );
  ReceivePort onExit = new ReceivePort();
  isolate = await Isolate.spawn(
                                entryPoint,
                                receivePort.sendPort,
                                onExit:onExit.sendPort
                              );
  await new Future.delayed(THREE_SECONDS);
// clean up & check
  isolate.resume(resumeCapability);
  await onExit.first;
  receivePort.close();
  Expect.listEquals(["activated", "timer 1", "timer 2"], receivedData);
  asyncEnd();
}

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