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