use crate::query;
use super::markers::{compact_marker, heuristic_suffix, test_via_suffix};
pub fn render_tests_text(model: &query::TestsModel) -> String {
let mut out: Vec<String> = vec![format!("tests for {}", model.symbol)];
if model.rows.is_empty() {
out.push("no test references found".to_string());
return out.join("\n");
}
out.push(format!(
"covered by {} test file(s), {} reference(s)",
model.test_file_count, model.ref_count
));
out.push(String::new());
for r in &model.rows {
out.push(format!(
"{}{}{}",
r.file,
heuristic_suffix(r.heuristic, r.tier),
test_via_suffix(r.via)
));
let lines = r
.lines
.iter()
.map(|l| l.to_string())
.collect::<Vec<_>>()
.join(", ");
if r.test_defs.is_empty() {
out.push(format!(" lines: {lines}"));
} else {
for def_id in &r.test_defs {
out.push(format!(" {def_id} lines: {lines}"));
}
}
}
out.join("\n")
}
pub fn render_tests_compact(model: &query::TestsModel) -> String {
let heur = if model.heuristic_file_count != 0 {
format!(" heuristic={}", model.heuristic_file_count)
} else {
String::new()
};
let mut out: Vec<String> = vec![format!(
"tests {} files={} refs={}{heur}",
model.symbol, model.test_file_count, model.ref_count
)];
for r in &model.rows {
let lines = r
.lines
.iter()
.map(|l| format!("{l}{}", compact_marker(r.heuristic, r.tier)))
.collect::<Vec<_>>()
.join(",");
out.push(format!("{} {lines}", r.file));
}
out.join("\n")
}