tauri-sys/tests/web.rs
2024-03-26 14:36:26 +01:00

109 lines
2.2 KiB
Rust

use serde::Deserialize;
use serde::Serialize;
use tauri_sys::{mocks::mock_ipc, tauri};
use wasm_bindgen::JsError;
use wasm_bindgen_test::wasm_bindgen_test;
use wasm_bindgen_test::wasm_bindgen_test_configure;
macro_rules! bail {
($e:expr) => {
return Err(JsError::new($e));
};
($fmt:expr, $($arg:tt)*) => {
return Err(JsError::new(&format!($fmt, $($arg)*)));
};
}
macro_rules! ensure {
($cond:expr) => {
if !($cond) {
bail!("{}", _failure__stringify!($cond));
}
};
($cond:expr, $e:expr) => {
if !($cond) {
bail!($e);
}
};
($cond:expr, $fmt:expr, $($arg:tt)*) => {
if !($cond) {
bail!($fmt, $($arg)*);
}
};
}
macro_rules! _failure__stringify {
($($inner:tt)*) => {
stringify! { $($inner)* }
}
}
#[derive(Deserialize)]
struct ApiRequestInner {
cmd: String,
}
#[derive(Deserialize)]
struct ApiRequest {
#[serde(rename = "__tauriModule")]
__tauri_module: String,
message: ApiRequestInner,
}
fn main() {
wasm_bindgen_test_configure!(run_in_browser);
}
/**
* App module
*/
#[wasm_bindgen_test]
async fn test_get_version() {
use tauri_sys::app::get_version;
mock_ipc(|cmd, payload| {
ensure!(cmd.as_str() == "tauri", "unknown command");
let payload: ApiRequest = serde_wasm_bindgen::from_value(payload).unwrap();
ensure!(payload.__tauri_module == "App");
ensure!(payload.message.cmd == "getAppVersion");
Ok("1.0.0")
});
let version = get_version().await.unwrap();
assert_eq!(version.major, 1);
assert_eq!(version.minor, 0);
assert_eq!(version.patch, 0)
}
/**
* Tauri module
*/
#[wasm_bindgen_test]
async fn test_invoke() -> Result<(), Box<dyn std::error::Error>> {
#[derive(Serialize, Deserialize)]
struct AddPayload {
a: u32,
b: u32,
}
mock_ipc(|cmd, payload| match cmd.as_str() {
"add" => {
let args: AddPayload = serde_wasm_bindgen::from_value(payload).unwrap();
Ok(args.a + args.b)
}
_ => Err(JsError::new("Unknown command")),
});
let out = tauri::invoke::<_, u32>("add", &AddPayload { a: 12, b: 15 }).await?;
assert_eq!(out, 27);
Ok(())
}