mirror of
https://github.com/denoland/deno.git
synced 2024-12-21 23:04:45 -05:00
fix(napi): improve napi_is_detached_arraybuffer (#17498)
This commit is contained in:
parent
2e1df62380
commit
b96bbc32c8
3 changed files with 45 additions and 5 deletions
|
@ -2106,13 +2106,22 @@ fn napi_is_date(
|
|||
|
||||
#[napi_sym::napi_sym]
|
||||
fn napi_is_detached_arraybuffer(
|
||||
_env: *mut Env,
|
||||
env: *mut Env,
|
||||
value: napi_value,
|
||||
result: *mut bool,
|
||||
) -> Result {
|
||||
check_env!(env);
|
||||
check_arg!(env, result);
|
||||
|
||||
let value = napi_value_unchecked(value);
|
||||
let _ab = v8::Local::<v8::ArrayBuffer>::try_from(value).unwrap();
|
||||
*result = _ab.was_detached();
|
||||
|
||||
*result = match v8::Local::<v8::ArrayBuffer>::try_from(value) {
|
||||
Ok(array_buffer) => array_buffer.was_detached(),
|
||||
Err(_) => false,
|
||||
};
|
||||
|
||||
napi_clear_last_error(env);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
|
||||
|
||||
import { assertEquals, loadTestLibrary } from "./common.js";
|
||||
import { assert, assertEquals, loadTestLibrary } from "./common.js";
|
||||
|
||||
const typedarray = loadTestLibrary();
|
||||
|
||||
|
@ -10,3 +10,15 @@ Deno.test("napi arraybuffer detach", function () {
|
|||
typedarray.test_detached(buf);
|
||||
assertEquals(buf.byteLength, 0);
|
||||
});
|
||||
|
||||
Deno.test("napi arraybuffer is detached", function () {
|
||||
const buf = new ArrayBuffer(5);
|
||||
assertEquals(buf.byteLength, 5);
|
||||
assert(!typedarray.is_detached(buf));
|
||||
typedarray.test_detached(buf);
|
||||
assert(typedarray.is_detached(buf));
|
||||
|
||||
[2, {}, "foo", null, undefined, new Uint8Array(10)].forEach((value) => {
|
||||
assert(!typedarray.is_detached(value));
|
||||
});
|
||||
});
|
||||
|
|
|
@ -21,8 +21,27 @@ extern "C" fn test_detached(
|
|||
args[0]
|
||||
}
|
||||
|
||||
extern "C" fn is_detached(
|
||||
env: napi_env,
|
||||
info: napi_callback_info,
|
||||
) -> napi_value {
|
||||
let (args, argc, _) = napi_get_callback_info!(env, info, 1);
|
||||
assert_eq!(argc, 1);
|
||||
|
||||
let mut value = false;
|
||||
assert_napi_ok!(napi_is_detached_arraybuffer(env, args[0], &mut value));
|
||||
|
||||
let mut result = std::ptr::null_mut();
|
||||
assert_napi_ok!(napi_get_boolean(env, value, &mut result));
|
||||
|
||||
result
|
||||
}
|
||||
|
||||
pub fn init(env: napi_env, exports: napi_value) {
|
||||
let properties = &[napi_new_property!(env, "test_detached", test_detached)];
|
||||
let properties = &[
|
||||
napi_new_property!(env, "test_detached", test_detached),
|
||||
napi_new_property!(env, "is_detached", is_detached),
|
||||
];
|
||||
|
||||
assert_napi_ok!(napi_define_properties(
|
||||
env,
|
||||
|
|
Loading…
Reference in a new issue