use std::ffi::OsString;
use std::path::PathBuf;
use std::process::ExitCode;
use crate::cli::TestFormatArg;
use crate::compiler::Compiler;
pub struct TestArgs {
pub input: PathBuf,
pub output: Option<PathBuf>,
pub no_run: bool,
pub format: TestFormatArg,
pub inspect: bool,
pub seed: Option<String>,
pub case: Option<String>,
}
pub fn run(compiler: &Compiler, args: TestArgs) -> ExitCode {
let Some(bynkc) = compiler.path.as_deref() else {
eprintln!(
"bynk test: no `bynkc` compiler found (looked at $BYNK_BYNKC, PATH, and next to `bynk`)."
);
eprintln!(" Run `bynk doctor --only test` for the exact remedy.");
return ExitCode::FAILURE;
};
let mut argv: Vec<OsString> = vec!["test".into(), args.input.into_os_string()];
if let Some(output) = args.output {
argv.push("--output".into());
argv.push(output.into_os_string());
}
if args.no_run {
argv.push("--no-run".into());
}
argv.push("--format".into());
argv.push(args.format.as_bynkc_arg().into());
if args.inspect {
argv.push("--inspect".into());
}
if let Some(seed) = args.seed {
argv.push("--seed".into());
argv.push(seed.into());
}
if let Some(case) = args.case {
argv.push("--case".into());
argv.push(case.into());
}
crate::shell::delegate(bynkc, argv)
}