open-standards/wai/wai-pack/tests/encode_rung.rs

41 lines
1.8 KiB
Rust

//! An encoded rendition over a package's pieces (extensions/platform-encode.md §9): the
//! committed corpus `encode-conformance/rendition/` regenerates byte for byte from its pinned
//! fixture streams and the base golden, and every case gets its outcome.
use std::collections::BTreeMap;
use std::path::PathBuf;
use wai_pack::rendition::{Package, corpus};
fn dir() -> PathBuf {
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../encode-conformance/rendition")
}
fn streams() -> BTreeMap<String, Vec<u8>> {
corpus::STREAMS.iter().map(|(f, _, _)| (f.to_string(), std::fs::read(dir().join("streams").join(f)).expect("a fixture stream"))).collect()
}
#[test]
fn the_rendition_corpus_regenerates_byte_for_byte() {
let pkg = Package::read(&dir().join(corpus::PACKAGE), corpus::COMPONENT).expect("the base golden");
let files = corpus::generate(&pkg, &streams()).expect("the corpus generates");
for (p, b) in &files {
assert_eq!(std::fs::read(dir().join(p)).ok().as_ref(), Some(b), "{p} does not regenerate: run `wai-pack rendition-vectors gen`");
}
let on_disk = wai::pin::read_dir_set(&dir().join("cases")).expect("cases/");
let want: BTreeMap<String, Vec<u8>> = files.iter().filter_map(|(k, v)| k.strip_prefix("cases/").map(|k| (k.to_string(), v.clone()))).collect();
assert_eq!(on_disk.keys().collect::<Vec<_>>(), want.keys().collect::<Vec<_>>(), "cases/ holds exactly the generated files");
}
#[test]
fn every_rendition_case_gets_its_outcome() {
let n = corpus::check(&dir()).unwrap_or_else(|e| panic!("{e}"));
assert!(n >= 9);
}
#[test]
fn the_stream_pins_hold() {
let pins: serde_json::Value = serde_json::from_slice(&std::fs::read(dir().join("streams.json")).expect("streams.json")).expect("JSON");
for (k, v) in streams() {
assert_eq!(pins[&k].as_str(), Some(wai_pack::sha256_hex(&v).as_str()), "{k}");
}
}