napi-rs/examples/napi-compat-mode/__tests__/function.spec.ts
LongYinan 4719caa643
feat(napi): support Return generic of ThreadsafeFunction (#1997)
* feat(napi): support to use tuple with either (#1993)

`Either` uses `ValidateNapiValue` + `TypeName` to validate and report error on value not being matched. So there's no way to remove these super traits from it. So I implemented these types to `Tuple` types.

* feat(napi): support `Return` generic of ThreadsafeFunction

* depracate JsFunction

* CalleeHandled tsfn should handle Result in callback

* Pass env to call_with_return_value callback

* Fix compile

* clippy fix

* Fix electron test

* Function args

---------

Co-authored-by: Hana <andywangsy@gmail.com>
2024-03-20 21:37:08 +08:00

44 lines
1 KiB
TypeScript

import test from 'ava'
const bindings = require('../index.node')
test('should call the function', (t) => {
bindings.testCallFunction((arg1: string, arg2: string) => {
t.is(`${arg1} ${arg2}`, 'hello world')
})
})
test('should call function with ref args', (t) => {
bindings.testCallFunctionWithRefArguments((arg1: string, arg2: string) => {
t.is(`${arg1} ${arg2}`, 'hello world')
})
})
test('should set "this" properly', (t) => {
const obj = {}
bindings.testCallFunctionWithThis.call(obj, function (this: typeof obj) {
t.is(this, obj)
})
})
test('should handle errors', (t) => {
bindings.testCallFunctionError(
() => {
throw new Error('Testing')
},
(err: Error) => {
t.is(err.message, 'Testing')
},
)
})
test('should be able to create function from closure', (t) => {
for (let i = 0; i < 100; i++) {
t.is(
bindings.testCreateFunctionFromClosure()(
...Array.from({ length: i }, (_, i) => i),
),
`arguments length: ${i}`,
)
}
})