pub fn tool_command(program: &str) -> std::process::Command {
which::which(program).map_or_else(|_| std::process::Command::new(program), std::process::Command::new)
}
#[cfg(test)]
mod tests {
use super::tool_command;
#[test]
fn a_resolvable_tool_is_spawned_by_its_resolved_path() {
let resolved = which::which("cargo").expect("cargo is on PATH for the test suite");
let command = tool_command("cargo");
assert_eq!(std::path::Path::new(command.get_program()), resolved);
assert!(std::path::Path::new(command.get_program()).is_absolute());
}
#[test]
fn an_unresolvable_tool_falls_back_to_the_bare_program_name() {
let command = tool_command("alef-no-such-toolchain-exists");
assert_eq!(command.get_program(), "alef-no-such-toolchain-exists");
}
}