Skip to main content

cli/
preset_test.rs

1//! Terminal adapter for declarative Preset fixture reports.
2
3use crate::commands::PresetReportFormat;
4use anyhow::Result;
5use shine_core::runtime::PresetTestReportV1;
6use std::path::Path;
7
8pub async fn handle_test(path: &Path, format: PresetReportFormat) -> Result<bool> {
9    let cwd = std::env::current_dir().unwrap_or_else(|_| Path::new(".").to_path_buf());
10    let report =
11        shine_core::runtime::test_preset_path(&shine_core::runtime::RealHost, &cwd, path).await;
12    match format {
13        PresetReportFormat::Text => print_text_report(&report),
14        PresetReportFormat::Json => println!("{}", serde_json::to_string_pretty(&report)?),
15    }
16    Ok(report.valid)
17}
18
19fn print_text_report(report: &PresetTestReportV1) {
20    println!(
21        "Preset tests: {}",
22        if report.valid { "passed" } else { "failed" }
23    );
24    for diagnostic in &report.diagnostics {
25        println!("  error[{diagnostic}]");
26    }
27    for case in &report.cases {
28        println!(
29            "  {} {} ({}) ยท valid={} ready={}",
30            if case.passed { "PASS" } else { "FAIL" },
31            case.name,
32            case.platform,
33            case.actual_valid,
34            case.actual_ready
35        );
36        for failure in &case.failure_codes {
37            println!("    ! {failure}");
38        }
39    }
40    println!(
41        "Summary: {} cases, {} passed, {} failed",
42        report.summary.cases, report.summary.passed, report.summary.failed
43    );
44}