1use std::{2 fs, io,3 path::{Path, PathBuf},4};56use jrsonnet_evaluator::{7 trace::{CompactFormat, PathResolver},8 FileImportResolver, State,9};1011mod common;1213fn run(root: &Path, file: &Path) -> String {14 let s = State::default();15 s.set_trace_format(Box::new(CompactFormat {16 resolver: PathResolver::Relative(root.to_owned()),17 padding: 3,18 }));19 s.with_stdlib();20 common::with_test(&s);21 s.set_import_resolver(Box::new(FileImportResolver::default()));2223 let v = match s.evaluate_file_raw(file) {24 Ok(v) => v,25 Err(e) => return s.stringify_err(&e),26 };27 match v.to_json(s.clone(), 3) {28 Ok(v) => v.to_string(),29 Err(e) => s.stringify_err(&e),30 }31}3233#[test]34fn test() -> io::Result<()> {35 let mut root = PathBuf::from(env!("CARGO_MANIFEST_DIR"));36 root.push("tests/golden");3738 for entry in fs::read_dir(&root)? {39 let entry = entry?;40 if !entry.path().extension().map_or(false, |e| e == "jsonnet") {41 continue;42 }4344 let result = run(&root, &entry.path());4546 let mut golden_path = entry.path();47 golden_path.set_extension("jsonnet.golden");4849 if !golden_path.exists() {50 fs::write(golden_path, &result)?;51 } else {52 let golden = fs::read_to_string(golden_path)?;5354 assert_eq!(55 result,56 golden,57 "golden didn't match for {}",58 entry.path().display()59 )60 }61 }6263 Ok(())64}