use pretty_assertions::assert_str_eq;
use std::ffi::OsStr;
use std::process::Command;
use std::process::Stdio;
const PCI_BIN_PATH: &str = env!("CARGO_BIN_EXE_pci");
pub const LSPCI_MUSL_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/tests/bin/lspci-musl");
#[allow(dead_code)]
pub static INFO_SUBS: &[(&str, &str)] = &[
(r"Processes: \d+", r"Procs: 666"),
(r"Uptime: \d+d \d+h \d+m", r"Uptime: 1d 2h 49m"),
(r"used: \d+\.\d+? ([MGT]iB) \(\d+\.\d%\)", r"used: 0.00 $1 (00.0%)"),
(r"running in: \S+", r"running in: cargo"),
(r"Shell: \S+( v: \S+)?", r"Shell: integration-e45"),
(r"running-in: \S+", r"running-in: cargo"),
(r"inxi(rs)?: \S+", r"inxi: 0.0.0"),
];
#[allow(dead_code)]
pub static MEMORY_SUBS: &[(&str, &str)] = &[
(r"used: \d+(\.\d{1,2})? [KMGTP]iB \(\d{2}.\d%\)", "used: 8.00 GiB (50.0%)"),
];
pub(crate) fn compare_exe_outputs(lspci_path: impl AsRef<OsStr>, args_str: &str, test_stderr: bool) {
let args: Vec<&str> = args_str.split_whitespace().collect();
let lspci = Command::new(lspci_path)
.args(&args)
.stdin(Stdio::inherit())
.output()
.expect("failed to execute lspci");
let lspci_out = String::from_utf8_lossy(&lspci.stdout);
let lspci_err = String::from_utf8_lossy(&lspci.stderr);
let pci_ls = Command::new(PCI_BIN_PATH)
.arg("list")
.args(&args)
.stdin(Stdio::inherit())
.output()
.unwrap_or_else(|_| {
panic!(
"failed to execute `{} list`, probably you should build with --features=\"clap kmod\"",
PCI_BIN_PATH
)
});
let pci_ls_out = String::from_utf8_lossy(&pci_ls.stdout);
let pci_ls_err = String::from_utf8_lossy(&pci_ls.stderr);
dbg!(&lspci_err, &pci_ls_err);
if test_stderr {
assert_str_eq!(lspci_err, pci_ls_err, "STDERR");
}
assert_str_eq!(lspci_out, pci_ls_out, "STDOUT");
}