| /* |
| * 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. |
| * Sends a message to an isolate requesting that it ends a pause that was |
| * requested using the resumeCapability. |
| * When all active pause requests have been cancelled, the isolate will |
| * continue processing events and handling normal messages. |
| * |
| * @description Check that isolate continue processing events only after |
| * all pause requests are canceled by call to resume() |
| * |
| * @author a.semenov@unipro.ru |
| */ |
| import "dart:isolate"; |
| import "dart:async"; |
| import "../../../Utils/expect.dart"; |
| import "IsolateUtil.dart"; |
| |
| Duration _500MS = new Duration(milliseconds:500); |
| |
| Future test(List<int> resumePermutation) async { |
| ReceivePort receivePort = new ReceivePort(); |
| EchoServer server = await EchoServer.spawn(receivePort.sendPort); |
| |
| Expect.equals("hello", await server.ping("hello")); |
| |
| List<Capability> resumeCapability = []; |
| resumeCapability.add(server.isolate.pause()); |
| Expect.equals("timeout", await server.ping("paused0", _500MS, "timeout")); |
| |
| for (int i=1; i<resumePermutation.length; i++) { |
| resumeCapability.add(server.isolate.pause(new Capability())); |
| Expect.equals("timeout", await server.ping("paused$i", _500MS, "timeout")); |
| } |
| |
| int i = 0; |
| while (i<resumePermutation.length-1) { |
| server.isolate.resume(resumeCapability[resumePermutation[i]]); |
| Expect.equals("timeout", await server.ping("resume$i", _500MS, "timeout")); |
| i++; |
| } |
| server.isolate.resume(resumeCapability[resumePermutation[i]]); |
| Expect.equals("resume", await server.ping("resume", _500MS, "timeout")); |
| |
| Expect.equals("server", await server.ping("server")); |
| |
| await server.stop(); |
| receivePort.close(); |
| } |
| |
| main() { |
| asyncStart(); |
| Future.wait([ |
| test([0,1,2,3,4]), |
| test([4,3,2,1,0]), |
| test([3,2,0,1,4]), |
| test([2,0,3,4,1]) |
| ]).then( (_) => asyncEnd() ); |
| } |