use std::process::Command;
fn filament_bin() -> std::path::PathBuf {
let mut path = std::env::current_exe().unwrap();
path.pop(); path.pop(); path.push("filament");
path
}
#[test]
fn man_piped_emits_roff() {
let bin = filament_bin();
let output = Command::new(&bin)
.arg("man")
.output()
.expect("failed to execute filament");
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(
stdout.contains(".TH"),
"Expected '.TH' in piped man output, got: {}",
&stdout[..stdout.len().min(500)]
);
}
#[test]
#[cfg(target_os = "linux")]
fn man_tty_emits_readable_help() {
let bin = filament_bin();
let output = Command::new("script")
.arg("-qec")
.arg(format!("{} man", bin.display()))
.arg("/dev/null")
.output()
.expect("failed to execute script");
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(
stdout.contains("Commands:") || stdout.contains("Usage:"),
"Expected readable help in TTY man output, got: {}",
&stdout[..stdout.len().min(500)]
);
assert!(
!stdout.contains(".TH"),
"Expected no '.TH' in TTY man output, got roff instead",
);
}
#[test]
#[cfg(target_os = "linux")]
fn man_unknown_page_shows_error() {
let bin = filament_bin();
let output = Command::new("script")
.arg("-qec")
.arg(format!("{} man settings", bin.display()))
.arg("/dev/null")
.output()
.expect("failed to execute script");
let combined = String::from_utf8_lossy(&output.stdout);
assert!(
combined.contains("no manual page 'settings'"),
"Expected 'no manual page' error, got: {}",
combined
);
assert!(
combined.contains("routing"),
"Expected 'routing' in available pages, got: {}",
combined
);
}
#[test]
fn man_routing_shows_doc() {
let bin = filament_bin();
let output = Command::new(&bin)
.arg("man")
.arg("routing")
.output()
.expect("failed to execute filament");
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(
stdout.contains("filament-routing") || stdout.contains("THE ROUTE"),
"Expected routing documentation, got: {}",
&stdout[..stdout.len().min(500)]
);
}