diff --git a/crates/web-sys/tests/wasm/blob.js b/crates/web-sys/tests/wasm/blob.js new file mode 100644 index 00000000000..9fdd18bf46c --- /dev/null +++ b/crates/web-sys/tests/wasm/blob.js @@ -0,0 +1,3 @@ +export function new_blob() { + return new Blob([ 1, 2, 3 ]); +} diff --git a/crates/web-sys/tests/wasm/blob.rs b/crates/web-sys/tests/wasm/blob.rs new file mode 100644 index 00000000000..f4881a73294 --- /dev/null +++ b/crates/web-sys/tests/wasm/blob.rs @@ -0,0 +1,65 @@ +use js_sys::{Array, ArrayBuffer}; +use wasm_bindgen::prelude::*; +use wasm_bindgen::JsCast; +use wasm_bindgen_futures::JsFuture; +use wasm_bindgen_test::*; +use web_sys::Blob; + +#[wasm_bindgen(module = "/tests/wasm/blob.js")] +extern "C" { + fn new_blob() -> Blob; +} + +#[wasm_bindgen_test] +fn test_blob_from_js() { + let blob = new_blob(); + assert!(blob.is_instance_of::()); + assert_eq!(blob.size(), 3.0); +} + +#[wasm_bindgen_test] +fn test_blob_from_bytes() { + let bytes = Array::new(); + bytes.push(&1.into()); + bytes.push(&2.into()); + bytes.push(&3.into()); + + let blob = Blob::new_with_u8_array_sequence(&bytes.into()).unwrap(); + assert!(blob.is_instance_of::()); + assert_eq!(blob.size(), 3.0); +} + +#[wasm_bindgen_test] +fn test_blob_empty() { + let blob = Blob::new().unwrap(); + assert!(blob.is_instance_of::()); + assert_eq!(blob.size(), 0.0); +} + +#[wasm_bindgen_test] +async fn test_blob_array_buffer() { + let bytes = Array::new(); + bytes.push(&1.into()); + bytes.push(&2.into()); + bytes.push(&3.into()); + + let blob = Blob::new_with_u8_array_sequence(&bytes.into()).unwrap(); + + let buffer: ArrayBuffer = JsFuture::from(blob.array_buffer()).await.unwrap().into(); + + assert!(blob.is_instance_of::()); + assert!(buffer.is_instance_of::()); + assert_eq!(blob.size(), buffer.byte_length() as f64); +} + +#[wasm_bindgen_test] +async fn test_blob_text() { + let strings = Array::new(); + strings.push(&"hello".into()); + + let blob = Blob::new_with_str_sequence(&strings.into()).unwrap(); + let string = JsFuture::from(blob.text()).await.unwrap(); + + assert!(blob.is_instance_of::()); + assert_eq!(string, "hello") +} diff --git a/crates/web-sys/tests/wasm/main.rs b/crates/web-sys/tests/wasm/main.rs index 3d0c125a381..92f5fcb8a9d 100644 --- a/crates/web-sys/tests/wasm/main.rs +++ b/crates/web-sys/tests/wasm/main.rs @@ -8,6 +8,7 @@ pub mod anchor_element; pub mod body_element; pub mod br_element; pub mod button_element; +pub mod blob; pub mod console; pub mod div_element; pub mod element; diff --git a/crates/web-sys/webidls/enabled/Blob.webidl b/crates/web-sys/webidls/enabled/Blob.webidl index 94812cd89c6..96dc7332087 100644 --- a/crates/web-sys/webidls/enabled/Blob.webidl +++ b/crates/web-sys/webidls/enabled/Blob.webidl @@ -28,6 +28,9 @@ interface Blob { Blob slice([Clamp] optional long long start, [Clamp] optional long long end, optional DOMString contentType); + + [NewObject] Promise text(); + [NewObject] Promise arrayBuffer(); }; enum EndingTypes { "transparent", "native" };