From 1cc38f5155bdc5605d74cd959660fa04f782ac63 Mon Sep 17 00:00:00 2001 From: Aaron O'Mullan Date: Thu, 20 Jan 2022 15:11:09 +0100 Subject: feat(serde_v8): deserialize ArrayBuffers (#13436) Previously we would only deserialize `ArrayBufferView`s as zero-copy bufs This avoids rewrapping `ArrayBuffers` in `ArrayBufferView`s when implementing APIs that take [BufferSource](https://webidl.spec.whatwg.org/#BufferSource) args passed through the op-layer --- serde_v8/tests/de.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'serde_v8/tests') diff --git a/serde_v8/tests/de.rs b/serde_v8/tests/de.rs index 2b85d8839..1253ea92b 100644 --- a/serde_v8/tests/de.rs +++ b/serde_v8/tests/de.rs @@ -2,6 +2,7 @@ use serde::Deserialize; use serde_v8::utils::{js_exec, v8_do}; +use serde_v8::Buffer; use serde_v8::Error; #[derive(Debug, Deserialize, PartialEq)] @@ -192,6 +193,29 @@ fn de_string_or_buffer() { ); } +#[test] +fn de_buffers() { + // ArrayBufferView + dedo("new Uint8Array([97])", |scope, v| { + let buf: Buffer = serde_v8::from_v8(scope, v).unwrap(); + assert_eq!(&*buf, &[97]); + }); + + // ArrayBuffer + dedo("(new Uint8Array([97])).buffer", |scope, v| { + let buf: Buffer = serde_v8::from_v8(scope, v).unwrap(); + assert_eq!(&*buf, &[97]); + }); + + dedo( + "(Uint8Array.from([0x68, 0x65, 0x6C, 0x6C, 0x6F]))", + |scope, v| { + let buf: Buffer = serde_v8::from_v8(scope, v).unwrap(); + assert_eq!(&*buf, &[0x68, 0x65, 0x6C, 0x6C, 0x6F]); + }, + ); +} + //// // JSON tests: serde_json::Value compatibility //// -- cgit v1.2.3