| // 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 pauseCapability |
| * read-only |
| * Capability granting the ability to pause the isolate. |
| * This capability is used by pause. If the capability is not the correct |
| * pause capability of the isolate, including if the capability is null, |
| * then calls to pause will have no effect. |
| * If the isolate is started in a paused state, use this capability |
| * as argument to resume to resume the isolate. |
| * |
| * @description Check that if pauseCapability is not correct pause capability, |
| * call to resume() with pauseCapability as argument will not resume |
| * the isolate, which is 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"); |
| } |
| |
| Future test(Capability? pauseCapability) async { |
| ReceivePort receivePort = new ReceivePort(); |
| Future receiveFuture = receivePort.first; |
| Isolate isolate = await Isolate.spawn(entryPoint, |
| receivePort.sendPort, |
| paused:true); |
| |
| Isolate clone = new Isolate(isolate.controlPort, |
| pauseCapability: pauseCapability, |
| terminateCapability:null); |
| |
| var pc = clone.pauseCapability; |
| if (pc != null) { |
| clone.resume(pc); |
| } |
| |
| var timeout = receiveFuture.timeout(ONE_SECOND, onTimeout:() => "timeout"); |
| Expect.equals("timeout", await timeout); |
| |
| isolate.resume(isolate.pauseCapability!); |
| receivePort.close(); |
| return null; |
| } |
| |
| main() { |
| asyncStart(); |
| Future.wait( |
| [test(null), test(new Capability())] |
| ).then( |
| (_) => asyncEnd() |
| ); |
| } |