use crate::runner::SuiteResult;
use serde::Serialize;
use std::fs;
use std::io;
use std::path::Path;
pub fn render_console_summary(summary: &SuiteResult) -> String {
let mut out = String::new();
out.push_str(&format!(
"Conformance summary for {}\n",
summary.runtime_name
));
out.push_str(&format!(
"Total: {} Passed: {} Failed: {} Duration: {}ms\n",
summary.total, summary.passed, summary.failed, summary.duration_ms
));
for result in &summary.results {
let status = if result.result.passed { "OK" } else { "FAILED" };
let duration = result
.result
.duration_ms
.map_or_else(|| "n/a".to_string(), |ms| format!("{ms}ms"));
out.push_str(&format!(
"- {} ({}) [{}] {}\n",
result.test_id, result.test_name, status, duration
));
}
out
}
pub fn write_json_report<T: Serialize>(summary: &T, path: &Path) -> io::Result<()> {
let data =
serde_json::to_vec_pretty(summary).map_err(|err| io::Error::other(err.to_string()))?;
fs::write(path, data)
}