#[cfg(feature = "testmatrix")]
pub fn emit(component: &str, check: &str, ok: bool, detail: &str) {
nornir_testmatrix::functional_status(component, check, ok, detail);
}
#[cfg(not(feature = "testmatrix"))]
#[inline(always)]
pub fn emit(_component: &str, _check: &str, _ok: bool, _detail: &str) {}
#[cfg(feature = "testmatrix")]
pub fn emit_render(component: &str, vertices: usize, geometry: usize) {
let ok = vertices > 0 && geometry > 0;
emit(
component,
"headless_render",
ok,
&format!("vertices={vertices} geometry={geometry}"),
);
}
#[cfg(not(feature = "testmatrix"))]
#[inline(always)]
pub fn emit_render(_component: &str, _vertices: usize, _geometry: usize) {}
#[cfg(feature = "testmatrix")]
pub fn emit_non_blank(component: &str, ratio: f64, min_ratio: f64, geometry: usize) {
let ok = ratio >= min_ratio && geometry > 0;
emit(
component,
"renders_non_blank",
ok,
&format!("content_ratio={ratio:.4} min={min_ratio} geometry={geometry}"),
);
}
#[cfg(not(feature = "testmatrix"))]
#[inline(always)]
pub fn emit_non_blank(_component: &str, _ratio: f64, _min_ratio: f64, _geometry: usize) {}
#[cfg(all(test, feature = "testmatrix"))]
mod tests {
use super::*;
#[test]
fn emit_render_writes_green_and_red_rows() {
let dir = std::env::temp_dir().join(format!(
"facett-tm-{}",
std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.unwrap()
.as_nanos()
));
std::fs::create_dir_all(&dir).unwrap();
let file = dir.join("functional.json");
unsafe {
std::env::set_var("NORNIR_TESTMATRIX_OUT", &file);
std::env::set_var("NORNIR_TESTMATRIX_REPO", "facett");
std::env::set_var("NORNIR_TESTMATRIX_RUN", "run-fc-test");
}
emit_render("live_view", 1234, 9);
emit_render("dead_map", 50, 0);
emit_non_blank("blank_pane", 0.0007, 0.01, 40_000);
emit_non_blank("real_map", 0.028, 0.01, 40_000);
let rows = nornir_testmatrix::JsonFileSink::new(&file)
.read_all()
.unwrap();
assert_eq!(rows.len(), 4, "four checks → four functional rows");
let live = rows.iter().find(|r| r.suite == "live_view").unwrap();
assert_eq!(live.status, nornir_testmatrix::status::PASS);
assert_eq!(live.aspect, nornir_testmatrix::ASPECT_FUNCTIONAL);
let dead = rows.iter().find(|r| r.suite == "dead_map").unwrap();
assert_eq!(dead.status, nornir_testmatrix::status::FAIL, "zero geometry = RED");
let blank = rows.iter().find(|r| r.suite == "blank_pane").unwrap();
assert_eq!(blank.status, nornir_testmatrix::status::FAIL, "blank pane = RED");
let real = rows.iter().find(|r| r.suite == "real_map").unwrap();
assert_eq!(real.status, nornir_testmatrix::status::PASS);
unsafe {
std::env::remove_var("NORNIR_TESTMATRIX_OUT");
std::env::remove_var("NORNIR_TESTMATRIX_REPO");
std::env::remove_var("NORNIR_TESTMATRIX_RUN");
}
let _ = std::fs::remove_dir_all(&dir);
}
}