diff options
Diffstat (limited to 'src/sync/tests/notify.rs')
-rw-r--r-- | src/sync/tests/notify.rs | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/sync/tests/notify.rs b/src/sync/tests/notify.rs index 8c9a573..eb0da8f 100644 --- a/src/sync/tests/notify.rs +++ b/src/sync/tests/notify.rs @@ -4,6 +4,9 @@ use std::mem::ManuallyDrop; use std::sync::Arc; use std::task::{Context, RawWaker, RawWakerVTable, Waker}; +#[cfg(tokio_wasm_not_wasi)] +use wasm_bindgen_test::wasm_bindgen_test as test; + #[test] fn notify_clones_waker_before_lock() { const VTABLE: &RawWakerVTable = &RawWakerVTable::new(clone_w, wake, wake_by_ref, drop_w); @@ -42,3 +45,37 @@ fn notify_clones_waker_before_lock() { // The result doesn't matter, we're just testing that we don't deadlock. let _ = future.poll(&mut cx); } + +#[test] +fn notify_simple() { + let notify = Notify::new(); + + let mut fut1 = tokio_test::task::spawn(notify.notified()); + assert!(fut1.poll().is_pending()); + + let mut fut2 = tokio_test::task::spawn(notify.notified()); + assert!(fut2.poll().is_pending()); + + notify.notify_waiters(); + + assert!(fut1.poll().is_ready()); + assert!(fut2.poll().is_ready()); +} + +#[test] +#[cfg(not(tokio_wasm))] +fn watch_test() { + let rt = crate::runtime::Builder::new_current_thread() + .build() + .unwrap(); + + rt.block_on(async { + let (tx, mut rx) = crate::sync::watch::channel(()); + + crate::spawn(async move { + let _ = tx.send(()); + }); + + let _ = rx.changed().await; + }); +} |