napi-rs/test_module/src/lib.rs

163 lines
5.7 KiB
Rust
Raw Normal View History

2018-04-28 17:26:38 +09:00
#[macro_use]
extern crate napi;
#[macro_use]
extern crate napi_derive;
2020-08-26 01:07:27 +09:00
#[macro_use]
extern crate serde_derive;
2018-04-28 17:26:38 +09:00
2020-08-24 17:04:03 +09:00
use napi::{CallContext, Error, JsBoolean, JsString, JsUnknown, Module, Result, Status};
#[cfg(napi4)]
mod libuv;
2020-07-08 01:59:09 +09:00
#[cfg(napi4)]
mod napi4;
#[cfg(napi5)]
mod napi5;
2020-07-10 20:14:32 +09:00
#[cfg(napi6)]
mod napi6;
2020-08-26 01:07:27 +09:00
#[cfg(napi4)]
mod tokio_rt;
2018-04-28 17:26:38 +09:00
mod buffer;
2020-08-03 00:31:22 +09:00
mod class;
2020-07-18 03:00:48 +09:00
mod either;
mod external;
2020-07-08 01:59:09 +09:00
mod function;
mod napi_version;
2020-08-26 01:07:27 +09:00
mod serde;
2020-08-03 15:34:58 +09:00
mod string;
mod symbol;
mod task;
2018-04-28 17:26:38 +09:00
use buffer::{buffer_to_string, get_buffer_length};
2020-07-18 03:00:48 +09:00
use either::{dynamic_argument_length, either_number_string};
use external::{create_external, get_external_count};
2020-07-08 01:59:09 +09:00
use function::{call_function, call_function_with_this};
#[cfg(napi4)]
use libuv::read_file::uv_read_file;
#[cfg(napi4)]
use napi4::{test_threadsafe_function, test_tokio_readfile, test_tsfn_error};
#[cfg(napi5)]
use napi5::is_date::test_object_is_date;
2020-08-26 01:07:27 +09:00
#[cfg(napi6)]
use napi6::bigint::{
2020-09-02 11:59:11 +09:00
test_create_bigint_from_i128, test_create_bigint_from_i64, test_create_bigint_from_u128,
test_create_bigint_from_u64, test_create_bigint_from_words, test_get_bigint_i64,
test_get_bigint_u64, test_get_bigint_words,
2020-08-26 01:07:27 +09:00
};
2020-07-08 01:59:09 +09:00
use napi_version::get_napi_version;
use symbol::{create_named_symbol, create_symbol_from_js_string, create_unnamed_symbol};
use task::test_spawn_thread;
#[cfg(napi4)]
2020-07-08 01:59:09 +09:00
use tokio_rt::{error_from_tokio_future, test_execute_tokio_readfile};
register_module!(test_module, init);
fn init(module: &mut Module) -> Result<()> {
2020-08-26 01:07:27 +09:00
serde::register_serde_func(module)?;
module.create_named_method("testThrow", test_throw)?;
module.create_named_method("testThrowWithReason", test_throw_with_reason)?;
module.create_named_method("testSpawnThread", test_spawn_thread)?;
module.create_named_method("createExternal", create_external)?;
module.create_named_method("getExternalCount", get_external_count)?;
module.create_named_method("getBufferLength", get_buffer_length)?;
module.create_named_method("bufferToString", buffer_to_string)?;
module.create_named_method("createNamedSymbol", create_named_symbol)?;
module.create_named_method("createUnnamedSymbol", create_unnamed_symbol)?;
module.create_named_method("createSymbolFromJsString", create_symbol_from_js_string)?;
module.create_named_method("getNapiVersion", get_napi_version)?;
module.create_named_method("testCallFunction", call_function)?;
module.create_named_method("testCallFunctionWithThis", call_function_with_this)?;
2020-07-18 03:00:48 +09:00
module.create_named_method("eitherNumberString", either_number_string)?;
module.create_named_method("dynamicArgumentLength", dynamic_argument_length)?;
2020-08-03 00:31:22 +09:00
module.create_named_method("createTestClass", class::create_test_class)?;
2020-08-03 15:34:58 +09:00
module.create_named_method("concatString", string::concat_string)?;
2020-08-24 17:04:03 +09:00
module.create_named_method("instanceof", instanceof)?;
module.create_named_method("isError", is_error)?;
module.create_named_method("isTypedarray", is_typedarray)?;
module.create_named_method("isDataview", is_dataview)?;
module.create_named_method("strictEquals", strict_equals)?;
#[cfg(napi4)]
2020-07-08 01:59:09 +09:00
module.create_named_method("testExecuteTokioReadfile", test_execute_tokio_readfile)?;
#[cfg(napi4)]
module.create_named_method("testTsfnError", test_tsfn_error)?;
#[cfg(napi4)]
module.create_named_method("testThreadsafeFunction", test_threadsafe_function)?;
#[cfg(napi4)]
module.create_named_method("testTokioReadfile", test_tokio_readfile)?;
#[cfg(napi4)]
2020-07-08 01:59:09 +09:00
module.create_named_method("testTokioError", error_from_tokio_future)?;
#[cfg(napi4)]
module.create_named_method("uvReadFile", uv_read_file)?;
#[cfg(napi5)]
module.create_named_method("testObjectIsDate", test_object_is_date)?;
2020-07-10 20:14:32 +09:00
#[cfg(napi6)]
module.create_named_method("testCreateBigintFromI64", test_create_bigint_from_i64)?;
#[cfg(napi6)]
module.create_named_method("testCreateBigintFromU64", test_create_bigint_from_u64)?;
#[cfg(napi6)]
2020-09-02 11:59:11 +09:00
module.create_named_method("testCreateBigintFromI128", test_create_bigint_from_i128)?;
#[cfg(napi6)]
module.create_named_method("testCreateBigintFromU128", test_create_bigint_from_u128)?;
#[cfg(napi6)]
2020-07-10 20:14:32 +09:00
module.create_named_method("testCreateBigintFromWords", test_create_bigint_from_words)?;
#[cfg(napi6)]
module.create_named_method("testGetBigintI64", test_get_bigint_i64)?;
#[cfg(napi6)]
module.create_named_method("testGetBigintU64", test_get_bigint_u64)?;
#[cfg(napi6)]
module.create_named_method("testGetBigintWords", test_get_bigint_words)?;
Ok(())
2018-04-28 17:26:38 +09:00
}
2020-04-21 01:20:35 +09:00
#[js_function]
fn test_throw(_ctx: CallContext) -> Result<JsUnknown> {
Err(Error::from_status(Status::GenericFailure))
2018-04-28 17:26:38 +09:00
}
2020-06-15 22:15:37 +09:00
#[js_function(1)]
fn test_throw_with_reason(ctx: CallContext) -> Result<JsUnknown> {
let reason = ctx.get::<JsString>(0)?;
Err(Error::new(
Status::GenericFailure,
reason.as_str()?.to_owned(),
))
}
2020-07-19 17:54:10 +09:00
#[js_function]
pub fn test_throw_with_panic(_ctx: CallContext) -> Result<JsUnknown> {
panic!("don't panic.");
}
2020-08-24 17:04:03 +09:00
#[js_function(2)]
pub fn instanceof(ctx: CallContext) -> Result<JsBoolean> {
let object = ctx.get::<JsUnknown>(0)?;
let constructor = ctx.get::<JsUnknown>(1)?;
ctx.env.get_boolean(object.instanceof(constructor)?)
}
#[js_function(1)]
pub fn is_error(ctx: CallContext) -> Result<JsBoolean> {
let js_value = ctx.get::<JsUnknown>(0)?;
ctx.env.get_boolean(js_value.is_error()?)
}
#[js_function(1)]
pub fn is_typedarray(ctx: CallContext) -> Result<JsBoolean> {
let js_value = ctx.get::<JsUnknown>(0)?;
ctx.env.get_boolean(js_value.is_typedarray()?)
}
#[js_function(1)]
pub fn is_dataview(ctx: CallContext) -> Result<JsBoolean> {
let js_value = ctx.get::<JsUnknown>(0)?;
ctx.env.get_boolean(js_value.is_dataview()?)
}
#[js_function(2)]
pub fn strict_equals(ctx: CallContext) -> Result<JsBoolean> {
let a: JsUnknown = ctx.get(0)?;
let b: JsUnknown = ctx.get(1)?;
ctx.env.get_boolean(ctx.env.strict_equals(a, b)?)
}