use tablero::render::{Bounds, RenderContext};
use tablero::widget::{Dashboard, Msg, SystemStats, SystemWidget};
fn sample(cpu: f64, mem: f64) -> Msg {
Msg::System(SystemStats::new(cpu, mem))
}
#[test]
fn system_sample_drives_exact_redraw_decision() {
let mut dash = Dashboard::new(vec![Box::new(SystemWidget::new(Bounds::new(
0, 0, 320, 32,
)))]);
assert!(
dash.update(&sample(12.0, 47.0)),
"first sample must request a redraw"
);
assert!(
!dash.update(&sample(12.3, 47.4)),
"an unchanged whole-percent sample must not request a redraw"
);
assert!(
dash.update(&sample(30.0, 47.0)),
"a new CPU reading must request a redraw"
);
assert!(
dash.update(&sample(30.0, 63.0)),
"a new memory reading must request a redraw"
);
}
#[test]
fn sampled_stats_appear_in_rendered_output() {
let mut dash = Dashboard::new(vec![Box::new(SystemWidget::new(Bounds::new(
0, 0, 320, 32,
)))]);
let mut ctx = RenderContext::new(320, 32);
dash.draw(&mut ctx);
assert!(
ctx.pixels()
.chunks_exact(4)
.all(|p| p[0] < 0x30 && p[1] < 0x30 && p[2] < 0x30 && p[3] == 0xFF),
"widget painted something before its first sample"
);
assert!(dash.update(&sample(12.0, 47.0)));
dash.draw(&mut ctx);
assert!(
ctx.pixels().chunks_exact(4).any(|p| p[0] > 0x60),
"sampled stats were not rendered as foreground glyphs"
);
}