use std::cell::Cell;
use std::time::{Duration, Instant};
use test_better::prelude::*;
#[test]
fn eventually_blocking_returns_the_moment_the_probe_passes() -> TestResult {
let polls = Cell::new(0u32);
eventually_blocking(Duration::from_secs(5), || {
polls.set(polls.get() + 1);
polls.get() >= 4
})?;
expect!(polls.get()).to(eq(4u32))?;
Ok(())
}
#[test]
fn eventually_blocking_failure_names_the_elapsed_time_and_probe_count() -> TestResult {
let polls = Cell::new(0u32);
let started = Instant::now();
let error = eventually_blocking(Duration::from_millis(50), || {
polls.set(polls.get() + 1);
false
})
.expect_err("a probe that never passes must time out");
expect!(started.elapsed() >= Duration::from_millis(50)).to(is_true())?;
let rendered = error.to_string();
expect!(rendered.contains("was not met within")).to(is_true())?;
expect!(rendered.contains(&format!("{} probe", polls.get()))).to(is_true())?;
Ok(())
}