use assert_cmd::Command;
#[test]
fn test_explain_prints_translation_table() {
let tmp_in = std::env::temp_dir().join("oximedia_explain_test_input.mkv");
let output = Command::cargo_bin("oximedia-ff")
.expect("oximedia-ff binary must exist")
.args([
"--explain",
"-i",
tmp_in.to_str().expect("valid temp path"),
"-c:v",
"libaom-av1",
"-crf",
"28",
"-c:a",
"libopus",
"output_explain_test.webm",
])
.output()
.expect("process must run");
let stdout = String::from_utf8_lossy(&output.stdout);
let stderr = String::from_utf8_lossy(&output.stderr);
assert!(
output.status.success(),
"oximedia-ff --explain should exit 0; stderr: {}",
stderr
);
assert!(
stdout.contains("Translation table") || stderr.contains("Translation table"),
"Expected 'Translation table' in output, got stdout='{}', stderr='{}'",
stdout,
stderr
);
assert!(
stdout.contains("av1") || stdout.contains("libaom-av1"),
"Expected codec in explain output, got: {}",
stdout
);
assert!(
stdout.contains("28") || stdout.contains("crf"),
"Expected crf in explain output, got: {}",
stdout
);
assert!(
!std::path::Path::new("output_explain_test.webm").exists(),
"--explain must not create output files"
);
}
#[test]
fn test_explain_shows_patent_substitution() {
let tmp_in = std::env::temp_dir().join("oximedia_explain_patent_test.mkv");
let output = Command::cargo_bin("oximedia-ff")
.expect("oximedia-ff binary must exist")
.args([
"--explain",
"-i",
tmp_in.to_str().expect("valid temp path"),
"-c:v",
"libx264",
"-c:a",
"aac",
"output_explain_patent.webm",
])
.output()
.expect("process must run");
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(
output.status.success(),
"should exit 0 even with patent codecs"
);
assert!(
stdout.contains("av1") || stdout.contains("opus") || stdout.contains("-c:v"),
"Expected substituted codec in explain output, got: {}",
stdout
);
}