1use std::{2 fs, io,3 path::{Path, PathBuf},4};56use jrsonnet_evaluator::{7 trace::{CompactFormat, PathResolver},8 FileImportResolver, State,9};10use jrsonnet_stdlib::StateExt;1112mod common;1314fn run(root: &Path, file: &Path) -> String {15 let s = State::default();16 s.set_trace_format(CompactFormat {17 resolver: PathResolver::Relative(root.to_owned()),18 padding: 3,19 });20 s.with_stdlib();21 common::with_test(&s);22 s.set_import_resolver(Box::new(FileImportResolver::default()));2324 let v = match s.import(file) {25 Ok(v) => v,26 Err(e) => return s.stringify_err(&e),27 };28 match v.to_json(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("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}