| // 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() |
| ); |
| } |