mod common;
#[test]
fn strict_unknown_flag_byte_format() {
let assert = common::rusty_pv_cmd()
.arg("--strict")
.arg("-Z")
.assert()
.failure();
let stderr = String::from_utf8_lossy(&assert.get_output().stderr).into_owned();
assert!(
stderr.contains("invalid option") && stderr.contains("'Z'"),
"Strict unknown-flag stderr should mention the offending character; got: {stderr:?}"
);
}
#[test]
fn strict_excluded_flag_f_rejected() {
let assert = common::rusty_pv_cmd()
.arg("--strict")
.arg("-F")
.arg("%p")
.assert()
.failure();
let stderr = String::from_utf8_lossy(&assert.get_output().stderr).into_owned();
assert!(
stderr.contains("invalid option") && stderr.contains("'F'"),
"Strict mode must reject excluded -F; got: {stderr:?}"
);
}
#[test]
fn strict_last_wins_rate_limit() {
let assert = common::rusty_pv_cmd()
.arg("--strict")
.arg("-q")
.arg("-L")
.arg("1M")
.arg("-L")
.arg("100M")
.write_stdin("x")
.assert()
.success();
assert!(assert.get_output().status.success());
}
#[test]
fn strict_grouped_short_flags() {
let assert = common::rusty_pv_cmd()
.arg("--strict")
.arg("-q")
.arg("-rb")
.write_stdin("hello")
.assert()
.success();
let stdout = String::from_utf8_lossy(&assert.get_output().stdout).into_owned();
assert_eq!(stdout, "hello");
}
#[test]
fn strict_does_not_emit_completion_script() {
let assert = common::rusty_pv_cmd()
.arg("--strict")
.arg("completions")
.arg("bash")
.write_stdin("")
.assert();
let stdout = String::from_utf8_lossy(&assert.get_output().stdout).into_owned();
assert!(
!stdout.contains("#!/") && !stdout.contains("complete -F"),
"Strict mode must NOT emit a completion script; got: {stdout:?}"
);
}
#[test]
fn strict_activates_via_env_var() {
let assert = common::rusty_pv_cmd()
.env("RUSTY_PV_STRICT", "1")
.arg("-q")
.write_stdin("data")
.assert()
.success();
let stdout = String::from_utf8_lossy(&assert.get_output().stdout).into_owned();
assert_eq!(stdout, "data");
}
#[test]
fn no_strict_overrides_env() {
let assert = common::rusty_pv_cmd()
.env("RUSTY_PV_STRICT", "1")
.arg("--no-strict")
.arg("-q")
.write_stdin("x")
.assert()
.success();
assert_eq!(assert.get_output().stdout.as_slice(), b"x");
}