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.import(file.to_owned()) {24 Ok(v) => v,25 Err(e) => return s.stringify_err(&e),26 };27 match v.to_json(28 s.clone(),29 3,30 #[cfg(feature = "exp-preserve-order")]31 false,32 ) {33 Ok(v) => v.to_string(),34 Err(e) => s.stringify_err(&e),35 }36}3738#[test]39fn test() -> io::Result<()> {40 let mut root = PathBuf::from(env!("CARGO_MANIFEST_DIR"));41 root.push("tests/golden");4243 for entry in fs::read_dir(&root)? {44 let entry = entry?;45 if !entry.path().extension().map_or(false, |e| e == "jsonnet") {46 continue;47 }4849 let result = run(&root, &entry.path());5051 let mut golden_path = entry.path();52 golden_path.set_extension("jsonnet.golden");5354 if !golden_path.exists() {55 fs::write(golden_path, &result)?;56 } else {57 let golden = fs::read_to_string(golden_path)?;5859 assert_eq!(60 result,61 golden,62 "golden didn't match for {}",63 entry.path().display()64 )65 }66 }6768 Ok(())69}