| // 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 isolate does not process events after pause() call |
| /// with given capability. |
| /// |
| /// @author a.semenov@unipro.ru |
| |
| import "dart:async"; |
| import "dart:isolate"; |
| import "../../../Utils/expect.dart"; |
| import "IsolateUtil.dart"; |
| |
| test() async { |
| ReceivePort receivePort = new ReceivePort(); |
| Future<List> receivedDataFuture = receivePort.toList(); |
| EchoServer server = await EchoServer.spawn(receivePort.sendPort); |
| server.send("hello"); |
| await new Future.delayed(new Duration(milliseconds:100)); |
| server.isolate.pause(new Capability()); |
| server.send("paused"); |
| server.send("server"); |
| await new Future.delayed(new Duration(milliseconds:200)); |
| // clean up & check |
| await server.kill(priority:Isolate.immediate); |
| receivePort.close(); |
| // first message "hello" may be blocked by pause call |
| List receivedData = await receivedDataFuture; |
| Expect.isTrue(receivedData.length==0 || |
| (receivedData.length==1 && "hello"==receivedData[0])); |
| asyncEnd(); |
| } |
| |
| main() { |
| asyncStart(); |
| test(); |
| } |