// Copyright (c) 2023, 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:ffi'; import 'dylib_utils.dart'; final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions"); typedef NativeAsyncCallbackTest = Void Function(Pointer); typedef NativeAsyncCallbackTestFn = void Function(Pointer); class AsyncCallbackTest { final String name; final Future Function() afterCallbackChecks; // Either a NativeCallable or a Pointer.fromFunction. final Object callback; AsyncCallbackTest(this.name, this.callback, this.afterCallbackChecks) {} Future run() async { final NativeAsyncCallbackTestFn tester = ffiTestFunctions .lookupFunction( "TestAsync$name", ); final cb = callback; tester(cb is NativeCallable ? cb.nativeFunction : cb as Pointer); await afterCallbackChecks(); if (cb is NativeCallable) { cb.close(); } } } void noChecks() {} Future noChecksAsync() async {}