1use std::{2 fs, io,3 path::{Path, PathBuf},4};56use jrsonnet_evaluator::{7 manifest::JsonFormat,8 trace::{CompactFormat, PathResolver, TraceFormat},9 FileImportResolver, State,10};11use jrsonnet_stdlib::StateExt;1213mod common;1415fn run(file: &Path) -> String {16 let s = State::default();17 s.with_stdlib();18 common::with_test(&s);19 s.set_import_resolver(Box::new(FileImportResolver::default()));20 let trace_format = CompactFormat {21 resolver: PathResolver::FileName,22 max_trace: 20,23 padding: 4,24 };2526 let v = match s.import(file) {27 Ok(v) => v,28 Err(e) => return trace_format.format(&e).unwrap(),29 };30 match v.manifest(31 JsonFormat::default(),32 #[cfg(feature = "exp-preserve-order")]33 false,34 ) {35 Ok(v) => v.to_string(),36 Err(e) => trace_format.format(&e).unwrap(),37 }38}3940#[test]41fn test() -> io::Result<()> {42 let mut root = PathBuf::from(env!("CARGO_MANIFEST_DIR"));43 root.push("golden");4445 for entry in fs::read_dir(&root)? {46 let entry = entry?;47 if !entry.path().extension().map_or(false, |e| e == "jsonnet") {48 continue;49 }5051 let result = run(&entry.path());5253 let mut golden_path = entry.path();54 golden_path.set_extension("jsonnet.golden");5556 if !golden_path.exists() {57 fs::write(golden_path, &result)?;58 } else {59 let golden = fs::read_to_string(golden_path)?;6061 assert_eq!(62 result,63 golden,64 "golden didn't match for {}",65 entry.path().display()66 )67 }68 }6970 Ok(())71}