use std::process::Command;
fn run(args: &[&str]) -> std::process::Output {
Command::new(env!("CARGO_BIN_EXE_marver"))
.args(args)
.output()
.expect("run marver")
}
#[test]
fn the_version_flag_reports_the_crate_version() {
for flag in ["-V", "--version"] {
let out = run(&[flag]);
let text = String::from_utf8_lossy(&out.stdout).trim().to_string();
assert!(out.status.success(), "{flag} should exit 0");
assert_eq!(text, format!("marver {}", env!("CARGO_PKG_VERSION")));
}
}
#[test]
fn the_version_flag_does_not_open_the_interface() {
let out = run(&["--version"]);
let text = String::from_utf8_lossy(&out.stdout);
assert!(!text.contains("Tasks"), "{text:?}");
assert!(text.lines().count() == 1, "one line and no more: {text:?}");
}
#[test]
fn an_unknown_subcommand_is_refused_rather_than_assumed() {
let out = run(&["wat"]);
let stderr = String::from_utf8_lossy(&out.stderr);
assert!(!out.status.success());
assert!(stderr.contains("unknown command"), "{stderr:?}");
}
#[test]
fn help_asked_for_goes_to_stdout_and_succeeds() {
let out = run(&["--help"]);
let text = String::from_utf8_lossy(&out.stdout);
assert!(out.status.success(), "help was asked for, not misused");
assert!(
String::from_utf8_lossy(&out.stderr).is_empty(),
"nothing went wrong, so stderr stays quiet"
);
for command in ["status", "daemon", "scan", "hook", "--version"] {
assert!(
text.contains(command),
"{command} missing from help: {text:?}"
);
}
}
#[test]
fn help_as_a_correction_goes_to_stderr_and_fails() {
let out = run(&["wat"]);
let stderr = String::from_utf8_lossy(&out.stderr);
assert!(!out.status.success());
assert!(stderr.contains("usage:"), "{stderr:?}");
assert!(
String::from_utf8_lossy(&out.stdout).is_empty(),
"a correction does not belong on stdout"
);
}