//! 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> { 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> = files.iter().filter_map(|(k, v)| k.strip_prefix("cases/").map(|k| (k.to_string(), v.clone()))).collect(); assert_eq!(on_disk.keys().collect::>(), want.keys().collect::>(), "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}"); } }