h265nal-cli 0.1.2

CLI for parsing HEVC/H.265 bitstreams with h265nal
use std::path::PathBuf;
use std::process::Command;

fn fixture_path(file_name: &str) -> PathBuf {
    PathBuf::from(env!("CARGO_MANIFEST_DIR"))
        .join("../../media")
        .join(file_name)
}

#[test]
fn json_output_includes_count_and_normalized_flags() {
    let output = Command::new(env!("CARGO_BIN_EXE_h265nal-cli"))
        .arg("--output-format")
        .arg("json")
        .arg("--add-contents")
        .arg("--no-add-offset")
        .arg(fixture_path("pps_fdump_crash.202203.265"))
        .output()
        .expect("failed to run json output mode");

    assert!(output.status.success());
    let stdout = String::from_utf8_lossy(&output.stdout);
    let payload: serde_json::Value =
        serde_json::from_str(&stdout).expect("stdout should be valid json");

    assert!(payload["nal_units"].as_u64().unwrap_or(0) > 0);
    assert_eq!(payload["options"]["add_contents"].as_bool(), Some(true));
    assert_eq!(payload["options"]["add_offset"].as_bool(), Some(true));
    assert_eq!(payload["options"]["add_length"].as_bool(), Some(true));
}

#[test]
fn pretty_output_includes_key_sections() {
    let output = Command::new(env!("CARGO_BIN_EXE_h265nal-cli"))
        .arg("--output-format")
        .arg("pretty")
        .arg(fixture_path("pps_fdump_crash.202203.265"))
        .output()
        .expect("failed to run pretty output mode");

    assert!(output.status.success());
    let stdout = String::from_utf8_lossy(&output.stdout);
    assert!(stdout.contains("Input:"));
    assert!(stdout.contains("NAL units:"));
}

#[test]
fn dump_all_is_rejected_for_json_mode() {
    let output = Command::new(env!("CARGO_BIN_EXE_h265nal-cli"))
        .arg("--output-format")
        .arg("json")
        .arg("--dump-all")
        .arg(fixture_path("pps_fdump_crash.202203.265"))
        .output()
        .expect("failed to run json dump-all mode");

    assert_eq!(output.status.code(), Some(2));
    let stderr = String::from_utf8_lossy(&output.stderr);
    assert!(stderr.contains("--dump-all is currently only supported with --output-format c"));
}