// 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. // // Dart test program for testing error handling with dart:ffi functions. // // SharedObjects=ffi_test_functions import 'dart:ffi' as ffi; import 'dylib_utils.dart'; import "package:expect/expect.dart"; main() { testWrongArity(); testWrongTypes(); } ffi.DynamicLibrary ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions"); typedef NativeBinaryOp = ffi.Int32 Function(ffi.Int32, ffi.Int32); typedef BinaryOp = int Function(int, int); typedef NativeUnaryOp = ffi.Int64 Function(ffi.Pointer); typedef UnaryOp = int Function(ffi.Pointer); void testWrongArity() { { dynamic sumPlus42 = ffiTestFunctions.lookupFunction("SumPlus42"); Expect.throwsNoSuchMethodError(() => sumPlus42(10)); Expect.throwsNoSuchMethodError(() => sumPlus42(10, 11, 12)); Expect.throwsNoSuchMethodError(() => sumPlus42(10, 11, 12, y: 13)); } { Function sumPlus42 = ffiTestFunctions.lookupFunction("SumPlus42"); Expect.throwsNoSuchMethodError(() => sumPlus42(10)); Expect.throwsNoSuchMethodError(() => sumPlus42(10, 11, 12)); Expect.throwsNoSuchMethodError(() => sumPlus42(10, 11, 12, y: 13)); } } void testWrongTypes() { { dynamic sumPlus42 = ffiTestFunctions.lookupFunction("SumPlus42"); Expect.throwsTypeError(() => sumPlus42("abc", "def")); } { Function sumPlus42 = ffiTestFunctions.lookupFunction("SumPlus42"); Expect.throwsTypeError(() => sumPlus42("abc", "def")); } { dynamic pointerOp = ffiTestFunctions .lookupFunction("Assign1337Index1"); Expect.throwsTypeError(() => pointerOp(0)); } }