use super::*;
#[test]
fn load_command_auto_probes_non_cargo_entry_and_writes_cache() {
let tmp = TempDir::new();
let cmd_dir = tmp.0.join("mybench");
std::fs::create_dir_all(&cmd_dir).unwrap();
let script = cmd_dir.join("emit.sh");
let body = "#!/bin/sh\n\
if [ \"$1\" = \"--fdl-schema\" ]; then\n\
cat <<'JSON'\n\
{ \"options\": { \"rounds\": { \"type\": \"int\", \"description\": \"N\" } } }\n\
JSON\n\
exit 0\n\
fi\n";
std::fs::write(&script, body).unwrap();
#[cfg(unix)]
{
use std::os::unix::fs::PermissionsExt;
std::fs::set_permissions(&script, std::fs::Permissions::from_mode(0o755)).unwrap();
}
std::fs::write(cmd_dir.join("fdl.yml"), "entry: sh emit.sh\n").unwrap();
let cfg = load_command(&cmd_dir).expect("load ok");
let schema = cfg.schema.expect("auto-probe must populate schema");
assert!(schema.options.contains_key("rounds"));
let cached_path = crate::schema_cache::cache_path(&cmd_dir, "mybench");
assert!(cached_path.is_file(), "cache file should exist");
}
#[test]
fn load_command_skips_auto_probe_for_cargo_entries() {
let tmp = TempDir::new();
let cmd_dir = tmp.0.join("cargo-cmd");
std::fs::create_dir_all(&cmd_dir).unwrap();
std::fs::write(cmd_dir.join("fdl.yml"), "entry: cargo run --\n").unwrap();
let cfg = load_command(&cmd_dir).expect("load ok");
assert!(
cfg.schema.is_none(),
"cargo entry must not be auto-probed (compile latency would ruin --help)"
);
let cached = crate::schema_cache::cache_path(&cmd_dir, "cargo-cmd");
assert!(!cached.exists(), "no cache should be written for cargo entries");
}
#[test]
fn load_command_compile_true_overrides_cargo_skip() {
let tmp = TempDir::new();
let cmd_dir = tmp.0.join("cargo-compile-true");
std::fs::create_dir_all(&cmd_dir).unwrap();
std::fs::write(
cmd_dir.join("fdl.yml"),
"entry: cargo run --\ncompile: true\n",
)
.unwrap();
let cfg = load_command(&cmd_dir).expect("load ok");
assert_eq!(cfg.compile, Some(true), "compile field round-trips");
assert!(cfg.schema.is_none());
}
#[test]
fn load_command_compile_false_keeps_cargo_skip() {
let tmp = TempDir::new();
let cmd_dir = tmp.0.join("cargo-compile-false");
std::fs::create_dir_all(&cmd_dir).unwrap();
std::fs::write(
cmd_dir.join("fdl.yml"),
"entry: cargo run --\ncompile: false\n",
)
.unwrap();
let cfg = load_command(&cmd_dir).expect("load ok");
assert_eq!(cfg.compile, Some(false));
assert!(cfg.schema.is_none(), "cargo skip honored when compile: false");
let cached = crate::schema_cache::cache_path(&cmd_dir, "cargo-compile-false");
assert!(!cached.exists());
}
#[test]
fn load_command_auto_probe_failure_falls_through_silently() {
let tmp = TempDir::new();
let cmd_dir = tmp.0.join("silent");
std::fs::create_dir_all(&cmd_dir).unwrap();
std::fs::write(cmd_dir.join("fdl.yml"), "entry: \"/bin/true\"\n").unwrap();
let cfg = load_command(&cmd_dir).expect("load must succeed despite probe error");
assert!(cfg.schema.is_none());
}