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