#[test]
fn rendering_is_reproducible() {
let template = "{% for k, v in items | dictsort %}{{ k }}={{ v }};{% endfor %}";
let mut env = minijinja::Environment::new();
env.add_template("probe", template)
.expect("template must compile");
let tmpl = env.get_template("probe").expect("template must resolve");
let vars = minijinja::context! {
items => minijinja::context! { beta => 2, alpha => 1, gamma => 3 },
};
let first = tmpl.render(&vars).expect("first render must succeed");
for _ in 0..64 {
assert_eq!(
tmpl.render(&vars).expect("render must succeed"),
first,
"rendering must not vary between runs"
);
}
assert_eq!(first, "alpha=1;beta=2;gamma=3;");
}
#[test]
fn provenance_hashing_is_sha256_over_raw_bytes() {
use core::fmt::Write;
use sha2::{Digest, Sha256};
let digest = Sha256::digest(b"abc");
let hex = digest.iter().fold(String::new(), |mut acc, byte| {
write!(&mut acc, "{byte:02x}").expect("writing to a String cannot fail");
acc
});
assert_eq!(
hex,
"ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
);
}