use std::process::{Command, Stdio};
fn fixture(rel: &str) -> String {
format!("{}{}", env!("CARGO_MANIFEST_DIR"), rel)
}
fn run(args: &[&str]) -> (bool, Vec<u8>, String) {
let bin = env!("CARGO_BIN_EXE_dvb-tools");
let output = Command::new(bin)
.args(args)
.stdout(Stdio::piped())
.stderr(Stdio::piped())
.output()
.expect("spawn dvb-tools");
let ok = output.status.success();
(
ok,
output.stdout,
String::from_utf8_lossy(&output.stderr).into_owned(),
)
}
#[test]
fn dump_m6_single() {
let path = fixture("/../dvb-si/tests/fixtures/m6-single.ts");
let (ok, stdout, stderr) = run(&["dump", &path]);
assert!(ok, "dump m6-single failed: stderr={stderr}");
assert!(
!stdout.is_empty(),
"dump m6-single produced empty stdout: stderr={stderr}"
);
}
#[test]
fn dump_tnt_isi6() {
let path = fixture("/../dvb-si/tests/fixtures/tnt-5w-12732v-isi6-10s.ts");
let (ok, stdout, stderr) = run(&["dump", &path]);
assert!(ok, "dump tnt-isi6 failed: stderr={stderr}");
assert!(
!stdout.is_empty(),
"dump tnt-isi6 produced empty stdout: stderr={stderr}"
);
}
#[test]
fn services_m6_single_exits_success() {
let path = fixture("/../dvb-si/tests/fixtures/m6-single.ts");
let (ok, _, stderr) = run(&["services", &path]);
assert!(
ok,
"services m6-single should exit 0 even with no SDT; stderr={stderr}"
);
}
#[test]
fn pids_m6_single() {
let path = fixture("/../dvb-si/tests/fixtures/m6-single.ts");
let (ok, stdout, stderr) = run(&["pids", &path]);
assert!(ok, "pids m6-single failed: stderr={stderr}");
assert!(
!stdout.is_empty(),
"pids m6-single produced empty stdout: stderr={stderr}"
);
}