#![allow(clippy::expect_used, clippy::unwrap_used, clippy::panic)]
use std::process::Command;
fn doiget_bin() -> &'static str {
env!("CARGO_BIN_EXE_doiget")
}
fn contains_semver_like(s: &str) -> bool {
let bytes = s.as_bytes();
let mut i = 0;
while i < bytes.len() {
if !bytes[i].is_ascii_digit() {
i += 1;
continue;
}
let g1_start = i;
while i < bytes.len() && bytes[i].is_ascii_digit() {
i += 1;
}
if i >= bytes.len() || bytes[i] != b'.' || i == g1_start {
continue;
}
i += 1; let g2_start = i;
while i < bytes.len() && bytes[i].is_ascii_digit() {
i += 1;
}
if i >= bytes.len() || bytes[i] != b'.' || i == g2_start {
continue;
}
i += 1; let g3_start = i;
while i < bytes.len() && bytes[i].is_ascii_digit() {
i += 1;
}
if i > g3_start {
return true;
}
}
false
}
#[test]
fn help_exits_successfully_with_usage_output() {
let output = Command::new(doiget_bin())
.arg("--help")
.output()
.expect("failed to spawn doiget --help");
assert!(
output.status.success(),
"doiget --help exited with non-zero status: {:?}\nstderr: {}",
output.status,
String::from_utf8_lossy(&output.stderr)
);
let stdout = String::from_utf8(output.stdout).expect("doiget --help stdout was not UTF-8");
assert!(
!stdout.is_empty(),
"doiget --help produced empty stdout (expected clap usage block)"
);
assert!(
stdout.contains("doiget"),
"doiget --help stdout missing binary name 'doiget':\n{}",
stdout
);
assert!(
stdout.contains("fetch"),
"doiget --help stdout missing 'fetch' subcommand:\n{}",
stdout
);
}
#[test]
fn version_exits_successfully_and_prints_semver() {
let output = Command::new(doiget_bin())
.arg("--version")
.output()
.expect("failed to spawn doiget --version");
assert!(
output.status.success(),
"doiget --version exited with non-zero status: {:?}\nstderr: {}",
output.status,
String::from_utf8_lossy(&output.stderr)
);
let stdout = String::from_utf8(output.stdout).expect("doiget --version stdout was not UTF-8");
assert!(!stdout.is_empty(), "doiget --version produced empty stdout");
assert!(
contains_semver_like(&stdout),
"doiget --version stdout did not contain a semver-shaped token \
(expected pattern: digit+.digit+.digit+):\n{}",
stdout
);
}