summaryrefslogtreecommitdiffstats
path: root/vendor/web-sys/tests/wasm/response.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-18 02:49:50 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-18 02:49:50 +0000
commit9835e2ae736235810b4ea1c162ca5e65c547e770 (patch)
tree3fcebf40ed70e581d776a8a4c65923e8ec20e026 /vendor/web-sys/tests/wasm/response.rs
parentReleasing progress-linux version 1.70.0+dfsg2-1~progress7.99u1. (diff)
downloadrustc-9835e2ae736235810b4ea1c162ca5e65c547e770.tar.xz
rustc-9835e2ae736235810b4ea1c162ca5e65c547e770.zip
Merging upstream version 1.71.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/web-sys/tests/wasm/response.rs')
-rw-r--r--vendor/web-sys/tests/wasm/response.rs68
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>());
+}