use assert_cmd::Command;
fn assert_clap_accepted(args: &[&str], env: &[(&str, &str)]) {
let mut cmd = Command::cargo_bin("grex").expect("binary built");
for (k, v) in env {
cmd.env(k, v);
}
let out = cmd.args(args).assert().get_output().clone();
let stderr = String::from_utf8_lossy(&out.stderr);
assert!(
stderr.contains("grex sync:") || stderr.contains("<pack_root>"),
"clap should have accepted the flag; got stderr: {stderr}"
);
assert!(
!stderr.starts_with("error:"),
"clap parse-error leak (should have been our fall-through): {stderr}"
);
}
#[test]
fn parallel_flag_parses() {
assert_clap_accepted(&["sync", "--parallel", "4"], &[]);
}
#[test]
fn parallel_zero_accepted_unbounded() {
assert_clap_accepted(&["sync", "--parallel", "0"], &[]);
}
#[test]
fn parallel_one_preserves_serial_flag() {
assert_clap_accepted(&["sync", "--parallel", "1"], &[]);
}
#[test]
fn parallel_env_var_used_when_flag_absent() {
assert_clap_accepted(&["sync"], &[("GREX_PARALLEL", "2")]);
}
#[test]
fn parallel_rejects_negative() {
Command::cargo_bin("grex")
.expect("binary built")
.args(["sync", "--parallel", "-1"])
.assert()
.failure();
}
#[test]
fn parallel_rejects_non_numeric() {
Command::cargo_bin("grex")
.expect("binary built")
.args(["sync", "--parallel", "abc"])
.assert()
.failure();
}