use assert_cmd::Command;
#[test]
fn non_utf8_content_round_trips() {
let mut input = Vec::new();
input.extend_from_slice(b"--- a/f\n+++ b/f\n@@ -1 +1 @@\n-caf");
input.push(0xE9);
input.push(b'\n');
input.extend_from_slice(b"+CAF");
input.push(0xE9);
input.push(b'\n');
let out = Command::cargo_bin("hunkpick")
.unwrap()
.args(["select", "1"])
.write_stdin(input)
.assert()
.success()
.get_output()
.stdout
.clone();
assert_eq!(
out.iter().filter(|&&b| b == 0xE9).count(),
2,
"both 0xE9 bytes must be preserved in output: {out:?}"
);
}
#[test]
fn nul_byte_input_exits_2() {
Command::cargo_bin("hunkpick")
.unwrap()
.arg("list")
.write_stdin(vec![0u8, 1, 2, b'h', b'i'])
.assert()
.failure()
.code(2);
}
#[test]
fn non_diff_text_exits_2() {
Command::cargo_bin("hunkpick")
.unwrap()
.arg("list")
.write_stdin("hello world\nthis is not a diff\n")
.assert()
.failure()
.code(2);
}
#[test]
fn empty_input_list_is_noop() {
Command::cargo_bin("hunkpick")
.unwrap()
.arg("list")
.write_stdin("")
.assert()
.success()
.stdout(predicates::ord::eq(""));
}
#[test]
fn empty_input_select_is_noop() {
Command::cargo_bin("hunkpick")
.unwrap()
.args(["select", "1"])
.write_stdin("")
.assert()
.success()
.stdout(predicates::ord::eq(""));
}
#[test]
fn whitespace_only_input_is_noop() {
Command::cargo_bin("hunkpick")
.unwrap()
.args(["select", "1"])
.write_stdin(" \n\t\n")
.assert()
.success()
.stdout(predicates::ord::eq(""));
}