use std::process::Command;
use std::str;
fn run_print(args: &[&str]) -> String {
let output = Command::new("./target/debug/ao")
.arg("--print")
.args(args)
.output()
.expect("Failed to execute ao");
assert!(
output.status.success(),
"Command failed: ao --print {}",
args.join(" ")
);
str::from_utf8(&output.stdout).unwrap().trim().to_string()
}
#[test]
fn test_command_printing() {
let build = Command::new("cargo")
.arg("build")
.status()
.expect("Failed to build");
assert!(build.success());
assert_eq!(run_print(&["user", "ls"]), "cat /etc/passwd");
assert_eq!(run_print(&["net", "interfaces"]), "ip addr");
assert_eq!(
run_print(&["svc", "status", "cron"]),
"systemctl status -- cron"
);
assert_eq!(run_print(&["disk", "ls"]), "lsblk --json");
assert_eq!(run_print(&["sys", "info"]), "sysinfo (Rust library)");
assert_eq!(
run_print(&["log", "auth", "--lines", "10"]),
"journalctl -n 10 _FACILITY=4 _FACILITY=10 --"
);
let pkg_print = run_print(&["pkg", "add", "vim"]);
assert!(
pkg_print.contains("apt install")
|| pkg_print.contains("apt-get install")
|| pkg_print.contains("dnf install")
|| pkg_print.contains("pacman -S")
);
}