summaryrefslogtreecommitdiff
path: root/test_ffi
diff options
context:
space:
mode:
author阿豪 <504595380@qq.com>2022-12-03 20:15:35 +0800
committerGitHub <noreply@github.com>2022-12-03 17:45:35 +0530
commit8b5b327b18b1cc6b0519e632d0e9b709af18820e (patch)
tree8f38b23887fc9b62bd4358e659ebd98ef6c13c53 /test_ffi
parent0169949c299f05c62e5964973361217af1432171 (diff)
feat(ext/ffi): better type hints for Deno.dlopen (#16874)
Diffstat (limited to 'test_ffi')
-rw-r--r--test_ffi/tests/ffi_types.ts36
1 files changed, 20 insertions, 16 deletions
diff --git a/test_ffi/tests/ffi_types.ts b/test_ffi/tests/ffi_types.ts
index e2054cfe1..a49224cfd 100644
--- a/test_ffi/tests/ffi_types.ts
+++ b/test_ffi/tests/ffi_types.ts
@@ -5,7 +5,7 @@
const remote = Deno.dlopen(
"dummy_lib.so",
{
- method1: { parameters: ["usize", "usize"], result: "void", callback: true },
+ method1: { parameters: ["usize", "bool"], result: "void", callback: true },
method2: { parameters: [], result: "void" },
method3: { parameters: ["usize"], result: "void" },
method4: { parameters: ["isize"], result: "void" },
@@ -61,16 +61,16 @@ const remote = Deno.dlopen(
static13: { type: "f32" },
static14: { type: "f64" },
static15: { type: "bool" },
- } as const,
+ },
);
Deno.dlopen(
"dummy_lib_2.so",
- // @ts-expect-error: Returning a function pointer
// is declared using "pointer" or "function" + UnsafeFnPointer
{
wrong_method1: {
parameters: [],
+ // @ts-expect-error not assignable to type 'NativeResultType'
result: {
function: {
parameters: [],
@@ -78,14 +78,18 @@ Deno.dlopen(
},
},
},
- } as const,
+ },
);
// @ts-expect-error: Invalid argument
remote.symbols.method1(0);
+// @ts-expect-error: Invalid argument
+remote.symbols.method1(0, 0);
+// @ts-expect-error: Invalid argument
+remote.symbols.method1(true, true);
// @ts-expect-error: Invalid return type
-<number> remote.symbols.method1(0, 0);
-<void> remote.symbols.method1(0n, 0n);
+<number> remote.symbols.method1(0, true);
+<void> remote.symbols.method1(0n, true);
// @ts-expect-error: Expected 0 arguments, but got 1.
remote.symbols.method2(null);
@@ -170,7 +174,7 @@ const fnptr = new Deno.UnsafeFnPointer(
{
parameters: ["u32", "pointer"],
result: "void",
- } as const,
+ },
);
// @ts-expect-error: Invalid argument
fnptr.call(null, null);
@@ -180,7 +184,7 @@ const unsafe_callback_wrong1 = new Deno.UnsafeCallback(
{
parameters: ["i8"],
result: "void",
- } as const,
+ },
// @ts-expect-error: i8 is not a pointer
(_: bigint) => {},
);
@@ -188,7 +192,7 @@ const unsafe_callback_wrong2 = new Deno.UnsafeCallback(
{
parameters: ["pointer"],
result: "u64",
- } as const,
+ },
// @ts-expect-error: must return a number or bigint
(_: Deno.UnsafePointer) => {},
);
@@ -196,7 +200,7 @@ const unsafe_callback_wrong3 = new Deno.UnsafeCallback(
{
parameters: [],
result: "void",
- } as const,
+ },
// @ts-expect-error: no parameters
(_: Deno.UnsafePointer) => {},
);
@@ -204,7 +208,7 @@ const unsafe_callback_wrong4 = new Deno.UnsafeCallback(
{
parameters: ["u64"],
result: "void",
- } as const,
+ },
// @ts-expect-error: Callback's 64bit parameters are either number or bigint
(_: number) => {},
);
@@ -212,21 +216,21 @@ const unsafe_callback_right1 = new Deno.UnsafeCallback(
{
parameters: ["u8", "u32", "pointer"],
result: "void",
- } as const,
+ },
(_1: number, _2: number, _3: Deno.PointerValue) => {},
);
const unsafe_callback_right2 = new Deno.UnsafeCallback(
{
parameters: [],
result: "u8",
- } as const,
+ },
() => 3,
);
const unsafe_callback_right3 = new Deno.UnsafeCallback(
{
parameters: [],
result: "function",
- } as const,
+ },
// Callbacks can return other callbacks' pointers, if really wanted.
() => unsafe_callback_right2.pointer,
);
@@ -234,14 +238,14 @@ const unsafe_callback_right4 = new Deno.UnsafeCallback(
{
parameters: ["u8", "u32", "pointer"],
result: "u8",
- } as const,
+ },
(_1: number, _2: number, _3: Deno.PointerValue) => 3,
);
const unsafe_callback_right5 = new Deno.UnsafeCallback(
{
parameters: ["u8", "i32", "pointer"],
result: "void",
- } as const,
+ },
(_1: number, _2: number, _3: Deno.PointerValue) => {},
);