/// Run sync and async Python scenarios. /// /// The Python scripts are given as identifiers, relative to this /// file. They can be `None` if the sync or async test variant does /// not exist. /// /// The test script can use `import mls_rs_uniffi` to get access to /// the Python bindings. macro_rules! generate_python_tests { ($sync_scenario:ident, None) => { #[cfg(not(mls_build_async))] generate_python_tests!($sync_scenario); }; (None, $async_scenario:ident) => { #[cfg(mls_build_async)] generate_python_tests!($async_scenario); }; ($sync_scenario:ident, $async_scenario:ident) => { #[cfg(not(mls_build_async))] generate_python_tests!($sync_scenario); #[cfg(mls_build_async)] generate_python_tests!($async_scenario); }; ($scenario:ident) => { #[test] fn $scenario() -> Result<(), Box> { let target_dir = env!("CARGO_TARGET_TMPDIR"); let script_path = format!("tests/{}.py", stringify!($scenario)); uniffi_bindgen::bindings::python::run_script( &target_dir, "mls-rs-uniffi", &script_path, vec![], &uniffi_bindgen::bindings::RunScriptOptions::default(), ) .map_err(Into::into) } }; } generate_python_tests!( generate_signature_keypair_sync, generate_signature_keypair_async ); generate_python_tests!(client_config_default_sync, client_config_default_async); generate_python_tests!(custom_storage_sync, None); generate_python_tests!(simple_scenario_sync, simple_scenario_async); generate_python_tests!(ratchet_tree_sync, ratchet_tree_async); generate_python_tests!(roster_update_sync, None);