#![cfg(target_arch = "wasm32")]
use arora_types::module::low::Header;
use arora_web::Engine;
use wasm_bindgen::JsValue;
use wasm_bindgen_test::*;
wasm_bindgen_test_configure!(run_in_browser);
const WASM_BYTES: &[u8] = include_bytes!(env!("CARGO_CDYLIB_FILE_TEST_RUST_WASM_test_rust_wasm"));
const PING_FN_ID: &str = "5f423ba9-d5f9-46d7-a9b5-fb7d28f99ea6";
fn header() -> Header {
test_rust_wasm::test_rust_wasm::header(arora_types::module::low::Executor {
name: "wasm".to_string(),
min_version: None,
max_version: None,
})
}
fn header_json() -> String {
serde_json::to_string(&header()).expect("the declared header serializes to json")
}
#[wasm_bindgen_test]
fn load_and_ping_test_rust_wasm() {
let header_json = header_json();
let mut engine = Engine::new();
let module_id: String = engine
.load_module(&header_json, WASM_BYTES)
.map_err(jsval_to_string)
.expect("loadModule succeeded");
assert_eq!(module_id, header().id.to_string());
let call_json = format!(r#"{{"id":"{PING_FN_ID}","args":[]}}"#);
let result = engine
.call(&call_json)
.map_err(jsval_to_string)
.expect("call(ping) succeeded");
assert!(!result.is_empty(), "result was empty");
}
#[wasm_bindgen_test]
async fn prepare_load_and_ping_test_rust_wasm() {
let header_json = header_json();
let mut engine = Engine::new();
wasm_bindgen_futures::JsFuture::from(engine.prepare_module(&header_json, WASM_BYTES.to_vec()))
.await
.expect("prepareModule succeeded");
let module_id: String = engine
.load_prepared_module(&header_json)
.map_err(jsval_to_string)
.expect("loadPreparedModule succeeded");
assert_eq!(module_id, header().id.to_string());
let call_json = format!(r#"{{"id":"{PING_FN_ID}","args":[]}}"#);
let result = engine
.call(&call_json)
.map_err(jsval_to_string)
.expect("call(ping) succeeded");
assert!(!result.is_empty(), "result was empty");
}
fn jsval_to_string(v: JsValue) -> String {
v.as_string().unwrap_or_else(|| format!("{v:?}"))
}