| /* |
| * 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 |
| * ]) |
| * ... |
| * If an isolate is paused more than once using the same capability, only one |
| * resume with that capability is needed to end the pause. |
| * |
| * @description Check that if an isolate is paused more than once using the |
| * same capability, only one resume with that capability is needed to end |
| * the pause. |
| * |
| * @author a.semenov@unipro.ru |
| */ |
| import "dart:async"; |
| import "dart:isolate"; |
| import "IsolateUtil.dart"; |
| import "../../../Utils/expect.dart"; |
| |
| Future test() async { |
| ReceivePort receivePort = new ReceivePort(); |
| Future<List> receivedData = receivePort.toList(); |
| EchoServer server = await EchoServer.spawn(receivePort.sendPort); |
| server.send("before pause"); |
| Capability resumeCapability = new Capability(); |
| server.isolate.pause(resumeCapability); |
| server.isolate.pause(resumeCapability); |
| server.isolate.pause(resumeCapability); |
| server.isolate.pause(resumeCapability); |
| server.send("paused"); |
| server.isolate.resume(resumeCapability); |
| server.send("resumed"); |
| await server.stop(); |
| receivePort.close(); |
| Expect.listEquals(["before pause", "paused", "resumed"], await receivedData); |
| asyncEnd(); |
| } |
| |
| main() { |
| asyncStart(); |
| test(); |
| } |