extern crate futures;
extern crate tokio_mock_task;
extern crate tokio_sync;
use futures::task::{self, Task};
use tokio_mock_task::*;
use tokio_sync::task::AtomicTask;
trait AssertSend: Send {}
trait AssertSync: Send {}
impl AssertSend for AtomicTask {}
impl AssertSync for AtomicTask {}
impl AssertSend for Task {}
impl AssertSync for Task {}
#[test]
fn register_task() {
let atomic = AtomicTask::new();
let mut mock1 = MockTask::new();
let mut mock2 = MockTask::new();
mock1.enter(|| atomic.register());
let task2 = mock2.enter(task::current);
{
let atomic = &atomic;
mock1.enter(move || {
atomic.register_task(task2);
});
}
assert!(!mock1.is_notified(), "mock1 shouldn't be notified yet");
assert!(!mock2.is_notified(), "mock2 shouldn't be notified yet");
atomic.notify();
assert!(!mock1.is_notified(), "mock1 shouldn't be notified");
assert!(mock2.is_notified(), "mock2 should be notified");
}