| // Copyright (c) 2019, 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. |
| |
| import 'dart:async'; |
| import 'dart:ffi'; |
| import 'dart:isolate'; |
| |
| import 'package:expect/expect.dart'; |
| |
| typedef Dart_PostIntegerNFT = IntPtr Function(Int64 port, Int64 message); |
| typedef Dart_PostIntegerFT = int Function(int port, int message); |
| |
| main() async { |
| const int message = 112344556677888; |
| |
| final completer = Completer(); |
| |
| final receivePort = |
| ReceivePort() |
| ..listen((receivedMessage) => completer.complete(receivedMessage)); |
| |
| final executableSymbols = DynamicLibrary.executable(); |
| |
| final postInteger = executableSymbols |
| .lookupFunction<Dart_PostIntegerNFT, Dart_PostIntegerFT>( |
| "Dart_PostInteger", |
| ); |
| |
| // Issue(dartbug.com/38545): The dart:ffi doesn't have a bool type yet. |
| final bool success = |
| postInteger(receivePort.sendPort.nativePort, message) != 0; |
| Expect.isTrue(success); |
| |
| final postedMessage = await completer.future; |
| Expect.equals(message, postedMessage); |
| |
| receivePort.close(); |
| } |