test(napi): add test for multiple empty buffers

This commit is contained in:
Niklas Mischkulnig 2022-04-23 10:43:36 +02:00
parent 39e55a39c9
commit 0bdb722097
No known key found for this signature in database
GPG key ID: C029B9EB62230BB0
7 changed files with 57 additions and 0 deletions

View file

@ -33,6 +33,16 @@ test('should create borrowed buffer with finalize', (t) => {
) )
}) })
test('should create empty borrowed buffer with finalize', (t) => {
t.is(bindings.createEmptyBorrowedBufferWithFinalize().toString(), '')
t.is(bindings.createEmptyBorrowedBufferWithFinalize().toString(), '')
})
test('should create empty buffer', (t) => {
t.is(bindings.createEmptyBuffer().toString(), '')
t.is(bindings.createEmptyBuffer().toString(), '')
})
test('should be able to mutate buffer', (t) => { test('should be able to mutate buffer', (t) => {
const fixture = Buffer.from([0, 1]) const fixture = Buffer.from([0, 1])
bindings.mutateBuffer(fixture) bindings.mutateBuffer(fixture)

View file

@ -57,6 +57,35 @@ pub fn create_borrowed_buffer_with_finalize(env: Env) -> ContextlessResult<JsBuf
.map(|b| Some(b.into_raw())) .map(|b| Some(b.into_raw()))
} }
#[contextless_function]
pub fn create_empty_borrowed_buffer_with_finalize(env: Env) -> ContextlessResult<JsBuffer> {
let data = vec![];
let data_ptr = data.as_ptr();
let length = data.len();
let manually_drop = ManuallyDrop::new(data);
unsafe {
env.create_buffer_with_borrowed_data(
data_ptr,
length,
manually_drop,
|mut hint: ManuallyDrop<Vec<u8>>, _| {
ManuallyDrop::drop(&mut hint);
},
)
}
.map(|b| Some(b.into_raw()))
}
#[contextless_function]
pub fn create_empty_buffer(env: Env) -> ContextlessResult<JsBuffer> {
let data = vec![];
env
.create_buffer_with_data(data)
.map(|b| Some(b.into_raw()))
}
#[js_function(1)] #[js_function(1)]
fn mutate_buffer(ctx: CallContext) -> Result<JsUndefined> { fn mutate_buffer(ctx: CallContext) -> Result<JsUndefined> {
let buffer = &mut ctx.get::<JsBuffer>(0)?.into_value()?; let buffer = &mut ctx.get::<JsBuffer>(0)?.into_value()?;
@ -76,6 +105,11 @@ pub fn register_js(exports: &mut JsObject) -> Result<()> {
"createBorrowedBufferWithFinalize", "createBorrowedBufferWithFinalize",
create_borrowed_buffer_with_finalize, create_borrowed_buffer_with_finalize,
)?; )?;
exports.create_named_method(
"createEmptyBorrowedBufferWithFinalize",
create_empty_borrowed_buffer_with_finalize,
)?;
exports.create_named_method("createEmptyBuffer", create_empty_buffer)?;
exports.create_named_method("mutateBuffer", mutate_buffer)?; exports.create_named_method("mutateBuffer", mutate_buffer)?;
Ok(()) Ok(())
} }

View file

@ -168,6 +168,7 @@ Generated by [AVA](https://avajs.dev).
export function threadsafeFunctionFatalModeError(cb: (...args: any[]) => any): void␊ export function threadsafeFunctionFatalModeError(cb: (...args: any[]) => any): void␊
export function getBuffer(): Buffer␊ export function getBuffer(): Buffer␊
export function appendBuffer(buf: Buffer): Buffer␊ export function appendBuffer(buf: Buffer): Buffer␊
export function getEmptyBuffer(): Buffer␊
export function convertU32Array(input: Uint32Array): Array<number> export function convertU32Array(input: Uint32Array): Array<number>
export function createExternalTypedArray(): Uint32Array␊ export function createExternalTypedArray(): Uint32Array␊
export function mutateTypedArray(input: Float32Array): void␊ export function mutateTypedArray(input: Float32Array): void␊

View file

@ -33,6 +33,7 @@ import {
readPackageJson, readPackageJson,
getPackageJsonName, getPackageJsonName,
getBuffer, getBuffer,
getEmptyBuffer,
readFileAsync, readFileAsync,
eitherStringOrNumber, eitherStringOrNumber,
returnEither, returnEither,
@ -369,6 +370,11 @@ test('buffer', (t) => {
t.is(buf.toString('utf-8'), 'Hello world') t.is(buf.toString('utf-8'), 'Hello world')
buf = appendBuffer(buf) buf = appendBuffer(buf)
t.is(buf.toString('utf-8'), 'Hello world!') t.is(buf.toString('utf-8'), 'Hello world!')
const a = getEmptyBuffer()
const b = getEmptyBuffer()
t.is(a.toString(), '')
t.is(b.toString(), '')
}) })
test('convert typedarray to vec', (t) => { test('convert typedarray to vec', (t) => {

View file

@ -158,6 +158,7 @@ export function threadsafeFunctionFatalMode(cb: (...args: any[]) => any): void
export function threadsafeFunctionFatalModeError(cb: (...args: any[]) => any): void export function threadsafeFunctionFatalModeError(cb: (...args: any[]) => any): void
export function getBuffer(): Buffer export function getBuffer(): Buffer
export function appendBuffer(buf: Buffer): Buffer export function appendBuffer(buf: Buffer): Buffer
export function getEmptyBuffer(): Buffer
export function convertU32Array(input: Uint32Array): Array<number> export function convertU32Array(input: Uint32Array): Array<number>
export function createExternalTypedArray(): Uint32Array export function createExternalTypedArray(): Uint32Array
export function mutateTypedArray(input: Float32Array): void export function mutateTypedArray(input: Float32Array): void

View file

@ -12,6 +12,11 @@ fn append_buffer(buf: Buffer) -> Buffer {
buf.into() buf.into()
} }
#[napi]
fn get_empty_buffer() -> Buffer {
vec![].into()
}
#[napi] #[napi]
fn convert_u32_array(input: Uint32Array) -> Vec<u32> { fn convert_u32_array(input: Uint32Array) -> Vec<u32> {
input.to_vec() input.to_vec()