fev 0.2.3

High-level VA-API bindings
Documentation
use std::{error::Error, fmt::Write, fs};

use expect_test::{expect_file, ExpectFile};

use super::parser::JpegParser;

fn check(filename: &str, expect: ExpectFile) {
    let bytes = std::fs::read(format!("src/jpeg/test-images/{filename}")).unwrap();
    println!("checking {filename}");
    let mut parser = JpegParser::new(&bytes);

    let mut out = String::new();
    while let Some(segment) = parser.next_segment().unwrap() {
        writeln!(out, "{:04X} {:?}", segment.pos, segment.kind).unwrap();
    }

    expect.assert_eq(&out);
}

#[test]
fn reftests() {
    do_reftests().unwrap();
}

fn do_reftests() -> Result<(), Box<dyn Error>> {
    for entry in fs::read_dir("src/jpeg/test-images")? {
        let entry = entry?;
        let path = entry.path();
        let stem = path.file_stem().unwrap().to_str().unwrap();
        let ext = path.extension().unwrap().to_str().unwrap();
        if ext == "log" {
            continue;
        }
        assert_eq!(ext, "jpg", "file '{}' has invalid suffix", path.display());

        if entry.file_type()?.is_file() {
            let log = format!("test-images/{stem}.log");
            check(&format!("{stem}.{ext}"), expect_file![log]);
        }
    }

    Ok(())
}