diff options
Diffstat (limited to 'vendor/wasm-bindgen/tests/wasm/futures.rs')
-rw-r--r-- | vendor/wasm-bindgen/tests/wasm/futures.rs | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/vendor/wasm-bindgen/tests/wasm/futures.rs b/vendor/wasm-bindgen/tests/wasm/futures.rs new file mode 100644 index 000000000..ad2be0f71 --- /dev/null +++ b/vendor/wasm-bindgen/tests/wasm/futures.rs @@ -0,0 +1,166 @@ +use wasm_bindgen::prelude::*; +use wasm_bindgen_test::*; + +#[rustfmt::skip] +#[wasm_bindgen(module = "tests/wasm/futures.js")] +extern "C" { + #[wasm_bindgen(catch)] + async fn call_exports() -> Result<JsValue, JsValue>; + + async fn call_promise() -> JsValue; + #[wasm_bindgen(catch)] + async fn call_promise_ok() -> Result<JsValue, JsValue>; + #[wasm_bindgen(catch)] + async fn call_promise_err() -> Result<JsValue, JsValue>; + + #[wasm_bindgen] + async fn call_promise_unit(); + #[wasm_bindgen(catch)] + async fn call_promise_ok_unit() -> Result<(), JsValue>; + #[wasm_bindgen(catch)] + async fn call_promise_err_unit() -> Result<(), JsValue>; +} + +#[wasm_bindgen_test] +async fn smoke() { + call_exports().await.unwrap(); +} + +#[wasm_bindgen] +pub async fn async_do_nothing() {} + +#[wasm_bindgen] +pub async fn async_return_1() -> JsValue { + 1.into() +} + +#[wasm_bindgen] +pub async fn async_return_2() -> u32 { + 2 +} + +#[wasm_bindgen] +pub async fn async_nothing_again() -> Result<(), JsValue> { + Ok(()) +} + +#[wasm_bindgen] +pub async fn async_return_3() -> Result<u32, JsValue> { + Ok(3) +} + +#[wasm_bindgen] +pub async fn async_return_4() -> Result<JsValue, JsValue> { + Ok(4.into()) +} + +#[wasm_bindgen] +pub struct AsyncCustomReturn { + pub val: u32, +} + +#[wasm_bindgen] +pub async fn async_return_5() -> AsyncCustomReturn { + AsyncCustomReturn { val: 5 } +} + +#[wasm_bindgen] +pub async fn async_return_6() -> Result<AsyncCustomReturn, JsValue> { + Ok(AsyncCustomReturn { val: 6 }) +} + +#[wasm_bindgen] +pub async fn async_throw_7() -> Result<AsyncCustomReturn, JsValue> { + Err(7.into()) +} + +#[wasm_bindgen] +pub async fn async_throw_custom() -> Result<AsyncCustomReturn, JsValue> { + Err(AsyncCustomReturn { val: 8 }.into()) +} + +#[wasm_bindgen] +pub async fn async_throw_message() -> Result<(), JsValue> { + Err(js_sys::Error::new("async message").into()) +} + +#[wasm_bindgen] +pub async fn async_throw_jserror() -> Result<AsyncCustomReturn, JsError> { + Err(JsError::new("async message")) +} + +pub struct AsyncCustomError { + pub val: JsValue, +} + +impl Into<JsValue> for AsyncCustomError { + fn into(self) -> JsValue { + self.val + } +} + +#[wasm_bindgen] +pub async fn async_throw_custom_error() -> Result<AsyncCustomReturn, AsyncCustomError> { + Err(AsyncCustomError { + val: JsValue::from("custom error"), + }) +} + +#[wasm_bindgen] +pub async fn async_take_reference(x: &str) -> String { + format!("Hi, {x}!") +} + +#[wasm_bindgen] +pub struct AsyncStruct; + +#[wasm_bindgen] +impl AsyncStruct { + #[wasm_bindgen(constructor)] + pub async fn new() -> AsyncStruct { + AsyncStruct + } + + pub async fn method(&self) -> u32 { + 42 + } +} + +#[wasm_bindgen_test] +async fn test_promise() { + assert_eq!(call_promise().await.as_string(), Some(String::from("ok"))) +} + +#[wasm_bindgen_test] +async fn test_promise_ok() { + assert_eq!( + call_promise_ok().await.map(|j| j.as_string()), + Ok(Some(String::from("ok"))) + ) +} + +#[wasm_bindgen_test] +async fn test_promise_err() { + assert_eq!( + call_promise_err().await.map_err(|j| j.as_string()), + Err(Some(String::from("error"))) + ) +} + +#[wasm_bindgen_test] +async fn test_promise_unit() { + call_promise_unit().await +} + +#[wasm_bindgen_test] +async fn test_promise_ok_unit() { + call_promise_ok_unit().await.unwrap() +} + +#[wasm_bindgen_test] +async fn test_promise_err_unit() { + assert_eq!( + call_promise_err_unit().await.map_err(|j| j.as_string()), + Err::<(), _>(Some(String::from("error"))) + ) +} |