use std::sync::atomic::{AtomicU32, Ordering};
use std::sync::Arc;
use std::time::Duration;
use tokio::time::timeout;
use waapi_rs::ak;
use waapi_rs::ak::wwise::ui::SELECTION_CHANGED;
use waapi_rs::WaapiClient;
#[tokio::test]
async fn test_subscribe_and_unsubscribe() {
let client = match WaapiClient::connect().await {
Ok(c) => c,
Err(e) => {
eprintln!("Skip: WAAPI not available ({e})");
return;
}
};
let handle = client
.subscribe(SELECTION_CHANGED, None, |_kwargs| {})
.await
.expect("subscribe failed");
let _ = timeout(Duration::from_millis(800), tokio::time::sleep(Duration::from_millis(500)))
.await;
handle.unsubscribe().await.expect("unsubscribe failed");
client.disconnect().await;
}
#[tokio::test]
async fn test_subscribe_with_callback() {
let client: WaapiClient = match WaapiClient::connect().await {
Ok(c) => c,
Err(e) => {
eprintln!("Skip: WAAPI not available ({e})");
return;
}
};
let count = Arc::new(AtomicU32::new(0));
let count_clone = Arc::clone(&count);
let handler = client
.subscribe(ak::wwise::ui::SELECTION_CHANGED, None, move |kwargs| {
count_clone.fetch_add(1, Ordering::Relaxed);
println!("[test] selectionChanged: {kwargs:?}");
})
.await
.expect("subscribe failed");
let _ = timeout(Duration::from_millis(500), async {
tokio::time::sleep(Duration::from_millis(400)).await;
})
.await;
handler.unsubscribe().await.expect("unsubscribe failed");
client.disconnect().await;
let _n = count.load(Ordering::Relaxed);
}
#[tokio::test]
async fn test_subscribe_callback_drop_handle() {
let client: WaapiClient = match WaapiClient::connect().await {
Ok(c) => c,
Err(e) => {
eprintln!("Skip: WAAPI not available ({e})");
return;
}
};
let handler = client
.subscribe(ak::wwise::ui::SELECTION_CHANGED, None, |kwargs| {
println!("[test] selectionChanged (drop_handle): {kwargs:?}");
})
.await
.expect("subscribe failed");
drop(handler);
client.disconnect().await;
}