1use 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}