use std::{sync::mpsc, thread::sleep, time::Duration};
use crate::BackgroundRunner;
#[test]
fn test_initial_update() {
let (tx, rx) = mpsc::channel();
let runner = BackgroundRunner::new(move |data| {
tx.send(*data).unwrap();
});
let sent_data = 42;
runner.update(&sent_data);
let received_data = rx.recv().unwrap();
assert_eq!(received_data, sent_data);
}
#[test]
fn test_wait_update() {
let (tx, rx) = mpsc::channel();
let runner = BackgroundRunner::new(move |data| {
sleep(Duration::from_millis(100));
tx.send(*data).unwrap();
sleep(Duration::from_millis(100));
});
let sent_data = 0;
runner.update(&sent_data);
sleep(Duration::from_millis(40));
let sent_data = 42;
runner.wait_and_update(&sent_data);
runner.join();
let mut last_received_data = rx.recv().unwrap();
while let Ok(data) = rx.try_recv() {
last_received_data = data;
}
assert_eq!(last_received_data, sent_data);
}
#[test]
fn test_final_update() {
let (tx, rx) = mpsc::channel();
let runner = BackgroundRunner::new(move |data| {
sleep(Duration::from_millis(100));
tx.send(*data).unwrap();
sleep(Duration::from_millis(100));
});
let sent_data = 0;
runner.update(&sent_data);
let sent_data = 42;
runner.wait_and_update(&sent_data);
runner.join();
let mut last_received_data = rx.recv().unwrap();
while let Ok(data) = rx.try_recv() {
last_received_data = data;
}
assert_eq!(last_received_data, sent_data);
}