#![cfg(not(miri))]
use std::process::{Command, Output};
use cargo_gamma_lib::internals::commands::{EXIT_OK, EXIT_USAGE};
fn gamma(arguments: &[&str]) -> Output {
Command::new(env!("CARGO_BIN_EXE_cargo-gamma"))
.args(arguments)
.output()
.expect("the built cargo-gamma binary runs")
}
#[track_caller]
fn code(output: &Output) -> i32 {
output.status.code().unwrap_or_else(|| {
panic!(
"the process was killed rather than exiting: {}",
String::from_utf8_lossy(&output.stderr)
)
})
}
#[test]
fn the_installed_binary_reports_its_version_and_succeeds() {
let output = gamma(&["--version"]);
let printed = String::from_utf8_lossy(&output.stdout);
let errors = String::from_utf8_lossy(&output.stderr);
let expected = format!("cargo-gamma {}", env!("CARGO_PKG_VERSION"));
assert_eq!(code(&output), EXIT_OK, "{errors}");
assert_eq!(printed.trim(), expected);
assert!(output.stderr.is_empty(), "version output reached standard error: {errors}");
}
#[test]
fn the_installed_binary_accepts_the_argument_shape_cargo_passes_it() {
let output = gamma(&["gamma", "--version"]);
let printed = String::from_utf8_lossy(&output.stdout);
let errors = String::from_utf8_lossy(&output.stderr);
let expected = format!("cargo-gamma {}", env!("CARGO_PKG_VERSION"));
assert_eq!(code(&output), EXIT_OK, "{errors}");
assert_eq!(printed.trim(), expected);
assert!(output.stderr.is_empty(), "version output reached standard error: {errors}");
}
#[test]
fn an_unknown_command_exits_with_the_usage_code_and_explains_itself_on_standard_error() {
let output = gamma(&["definitely-not-a-command"]);
let complaint = String::from_utf8_lossy(&output.stderr);
assert_eq!(code(&output), EXIT_USAGE, "an unknown command must not be reported as success");
assert!(!complaint.trim().is_empty(), "an unknown command was refused without saying why");
assert!(
String::from_utf8_lossy(&output.stdout).trim().is_empty(),
"a diagnostic reached standard output, where it would corrupt piped report output"
);
}