use assert_cmd::Command;
#[test]
fn registry_covers_every_bin() {
let manifest = std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("Cargo.toml");
let violations = consortium_cli::grammar::registry_violations(&manifest);
assert!(violations.is_empty(), "registry violations: {violations:?}");
}
#[test]
fn global_flag_vocabulary() {
for bin in ["claw", "molt", "pinch", "cast", "cascade-copy"] {
let output = Command::cargo_bin(bin)
.unwrap_or_else(|e| panic!("bin '{bin}': {e}"))
.arg("--help")
.output()
.unwrap_or_else(|e| panic!("bin '{bin}' --help: {e}"));
let help = String::from_utf8_lossy(&output.stdout);
for flag in ["--verbose", "--color", "--format"] {
assert!(
help.contains(flag),
"bin '{bin}' --help missing shared flag '{flag}'\n---\n{help}"
);
}
}
let output = Command::cargo_bin("cast")
.unwrap()
.args(["cascade", "tree", "--help"])
.output()
.unwrap();
let help = String::from_utf8_lossy(&output.stdout);
assert!(
help.contains("--format"),
"cast cascade tree --help missing --format\n---\n{help}"
);
}
#[test]
fn molt_takes_no_node_selection() {
let output = Command::cargo_bin("molt")
.unwrap()
.arg("--help")
.output()
.unwrap();
let help = String::from_utf8_lossy(&output.stdout);
for forbidden in [
"-w, --nodes",
"--all",
"-g, --group ",
"-x, --exclude",
"--hostfile",
"--pick",
] {
assert!(
!help.contains(forbidden),
"molt --help must not offer node selection '{forbidden}'\n---\n{help}"
);
}
}