diff options
Diffstat (limited to 'vendor/web-sys/tests/wasm/response.rs')
-rw-r--r-- | vendor/web-sys/tests/wasm/response.rs | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/vendor/web-sys/tests/wasm/response.rs b/vendor/web-sys/tests/wasm/response.rs new file mode 100644 index 000000000..bd1727971 --- /dev/null +++ b/vendor/web-sys/tests/wasm/response.rs @@ -0,0 +1,68 @@ +use js_sys::{ArrayBuffer, DataView, Object, Promise, Reflect, WebAssembly}; +use wasm_bindgen::prelude::*; +use wasm_bindgen_futures::JsFuture; +use wasm_bindgen_test::*; +use web_sys::{Headers, Response, ResponseInit}; + +#[wasm_bindgen(module = "/tests/wasm/response.js")] +extern "C" { + fn new_response() -> Response; + fn get_wasm_imports() -> Object; +} + +#[wasm_bindgen_test] +fn test_response_from_js() { + let response = new_response(); + assert!(!response.ok()); + assert!(!response.redirected()); + assert_eq!(response.status(), 501); +} + +#[wasm_bindgen_test] +async fn test_response_from_bytes() { + let mut bytes: [u8; 3] = [1, 3, 5]; + let response = Response::new_with_opt_u8_array(Some(&mut bytes)).unwrap(); + assert!(response.ok()); + assert_eq!(response.status(), 200); + + let buf_promise = response.array_buffer().unwrap(); + let buf_val = JsFuture::from(buf_promise).await.unwrap(); + assert!(buf_val.is_instance_of::<ArrayBuffer>()); + let array_buf: ArrayBuffer = buf_val.dyn_into().unwrap(); + let data_view = DataView::new(&array_buf, 0, bytes.len()); + for (i, byte) in bytes.iter().enumerate() { + assert_eq!(&data_view.get_uint8(i), byte); + } +} + +#[wasm_bindgen_test] +async fn test_response_from_other_body() { + let input = "Hello, world!"; + let response_a = Response::new_with_opt_str(Some(input)).unwrap(); + let body = response_a.body(); + let response_b = Response::new_with_opt_readable_stream(body.as_ref()).unwrap(); + let output = JsFuture::from(response_b.text().unwrap()).await.unwrap(); + assert_eq!(JsValue::from_str(input), output); +} + +// Because it relies on `Response`, this can't go in `js-sys`, so put it here instead. +#[wasm_bindgen_test] +async fn wasm_instantiate_streaming() { + // Taken from `crates/js-sys/tests/wasm/WebAssembly.js`. + let mut wasm = *b"\x00asm\x01\x00\x00\x00\x01\x08\x02`\x01\x7f\x00`\x00\x00\x02\x19\x01\x07imports\rimported_func\x00\x00\x03\x02\x01\x01\x07\x11\x01\rexported_func\x00\x01\n\x08\x01\x06\x00A*\x10\x00\x0b"; + + let headers = Headers::new().unwrap(); + headers.append("Content-Type", "application/wasm").unwrap(); + let response = Response::new_with_opt_u8_array_and_init( + Some(&mut wasm), + ResponseInit::new().headers(&headers), + ) + .unwrap(); + let response = Promise::resolve(&response); + let imports = get_wasm_imports(); + let p = WebAssembly::instantiate_streaming(&response, &imports); + let obj = JsFuture::from(p).await.unwrap(); + assert!(Reflect::get(obj.as_ref(), &"instance".into()) + .unwrap() + .is_instance_of::<WebAssembly::Instance>()); +} |