use std::path::PathBuf;
use std::process::Command;
fn cargo_run() -> Command {
let manifest_dir = env!("CARGO_MANIFEST_DIR");
let workspace_root = PathBuf::from(manifest_dir)
.join("../..")
.canonicalize()
.expect("workspace root must exist");
let mut cmd = Command::new("cargo");
cmd.current_dir(&workspace_root)
.arg("run")
.arg("-q")
.arg("-p")
.arg("basic")
.arg("--");
cmd
}
#[test]
fn basic_help_renders() {
let output = cargo_run()
.arg("--help")
.output()
.expect("spawn cargo run -p basic -- --help");
assert!(output.status.success(), "--help should exit 0");
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(stdout.contains("basic"), "help must mention binary name");
assert!(stdout.contains("--config"), "help must list --config");
assert!(stdout.contains("--verbose"), "help must list --verbose");
}
#[test]
fn basic_verbose_flag_parses() {
let output = cargo_run()
.arg("-vv")
.arg("version")
.output()
.expect("spawn cargo run -p basic -- -vv version");
assert!(
output.status.success(),
"-vv version should exit 0; stderr={}",
String::from_utf8_lossy(&output.stderr)
);
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(
stdout.contains("basic v"),
"version subcommand should print version; got: {stdout}"
);
}