git.delta.rocks / jrsonnet / refs/commits / 7da68eaa8a4d

difftreelog

test re-enable structural matching

yzxkunvxYaroslav Bolyukin2026-03-23parent: #3a37893.patch.diff
in: master

4 files changed

modifiedCargo.lockdiffbeforeafterboth
282 "typenum",282 "typenum",
283]283]
284
285[[package]]
286name = "difflib"
287version = "0.4.0"
288source = "registry+https://github.com/rust-lang/crates.io-index"
289checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
290284
291[[package]]285[[package]]
292name = "digest"286name = "digest"
809 "wasm-bindgen",803 "wasm-bindgen",
810]804]
811
812[[package]]
813name = "json-structural-diff"
814version = "0.2.0"
815source = "registry+https://github.com/rust-lang/crates.io-index"
816checksum = "e878e36a8a44c158505c2c818abdc1350413ad83dcb774a0459f6a7ef2b65cbf"
817dependencies = [
818 "difflib",
819 "regex",
820 "serde_json",
821]
822805
823[[package]]806[[package]]
824name = "keccak"807name = "keccak"
1448 "jrsonnet-evaluator",1431 "jrsonnet-evaluator",
1449 "jrsonnet-gcmodule",1432 "jrsonnet-gcmodule",
1450 "jrsonnet-stdlib",1433 "jrsonnet-stdlib",
1451 "json-structural-diff",
1452 "serde",1434 "serde",
1453 "serde_json",1435 "serde_json",
1454]1436]
modifiedCargo.tomldiffbeforeafterboth
85regex = "1.12"85regex = "1.12"
86lru = "0.16.3"86lru = "0.16.3"
8787
88json-structural-diff = "0.2.0"
89syn-dissect-closure = "0.1.0"88syn-dissect-closure = "0.1.0"
9089
91[workspace.lints.rust]90[workspace.lints.rust]
modifiedtests/Cargo.tomldiffbeforeafterboth
19jrsonnet-gcmodule.workspace = true19jrsonnet-gcmodule.workspace = true
20jrsonnet-stdlib.workspace = true20jrsonnet-stdlib.workspace = true
21serde.workspace = true21serde.workspace = true
22json-structural-diff.workspace = true
23serde_json.workspace = true22serde_json.workspace = true
2423
25[dev-dependencies]24[dev-dependencies]
modifiedtests/tests/cpp_test_suite.rsdiffbeforeafterboth
144 "pow6.jsonnet",144 "pow6.jsonnet",
145 // golang escapes "e" yaml key, does it think it is float?145 // golang escapes "e" yaml key, does it think it is float?
146 "builtin_manifestYamlDoc.jsonnet",146 "builtin_manifestYamlDoc.jsonnet",
147 // Wtf?..
148 // Result
149 // [
150 // {},
151 // {},
152 // []
153 // ]
154 // and golden
155 // [
156 // {},
157 // {},
158 // []
159 // ]
160 // did not match structurally:
161 // [
162 // ...
163 // - {
164 // - }
165 // + {
166 // + }
167 // [
168 // ]
169 // ]
170 "empty_object_comp.jsonnet",
171 "object_hidden.jsonnet",
172 // multi output is a CLI part, not an interpreter.147 // multi output is a CLI part, not an interpreter.
173 "multi.jsonnet",148 "multi.jsonnet",
174 "multi_no_newline.jsonnet",149 "multi_no_newline.jsonnet",
183 "number_leading_zero.jsonnet",158 "number_leading_zero.jsonnet",
184 // Jrsonnet has this overload159 // Jrsonnet has this overload
185 "number_times_string.jsonnet",160 "number_times_string.jsonnet",
186 // Jrsonnet has stricter implementations, this is a dumb thing that the filter value might not be
187 // evaluated anyway...
188 "std.filter7.jsonnet",
189 // Golang fails with max stack frames exceeded error161 // Golang fails with max stack frames exceeded error
190 "std.makeArray_recursive_evalutation_order_matters.jsonnet",162 "std.makeArray_recursive_evalutation_order_matters.jsonnet",
191 // Jrsonnet has this overload163 // Jrsonnet has this overload
196168
197#[test]169#[test]
198fn cpp_test_suite() -> io::Result<()> {170fn cpp_test_suite() -> io::Result<()> {
199 use json_structural_diff::JsonDiff;
200
201 for root_dir in ["cpp_test_suite", "go_testdata"] {171 for root_dir in ["cpp_test_suite", "go_testdata"] {
202 let root_tests = PathBuf::from(env!("CARGO_MANIFEST_DIR"));172 let root_tests = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
261 #[cfg(not(feature = "ir-parser"))]231 #[cfg(not(feature = "ir-parser"))]
262 let update_golden_path = &golden_override;232 let update_golden_path = &golden_override;
263233
264 match (serde_json::from_str(&result), serde_json::from_str(&golden)) {234 match (serde_json::from_str::<serde_json::Value>(&result), serde_json::from_str::<serde_json::Value>(&golden)) {
265 (Err(_), Ok(_)) => panic!(235 (Err(_), Ok(_)) => panic!(
266 "unexpected error for golden {}:\n<got>\n{result}\n</got>\n<golden>\n{golden}\n</golden>",236 "unexpected error for golden {}:\n<got>\n{result}\n</got>\n<golden>\n{golden}\n</golden>",
267 entry.path().display()237 entry.path().display()
270 "expected error for golden {}:\n<got>\n{result}\n</got>\n<golden>\n{golden}\n</golden>",240 "expected error for golden {}:\n<got>\n{result}\n</got>\n<golden>\n{golden}\n</golden>",
271 entry.path().display()241 entry.path().display()
272 ),242 ),
273 (Ok(result_v), Ok(golden)) => {243 (Ok(result_v), Ok(golden_v)) => {
274 // Show diff relative to golden`.
275 let diff = JsonDiff::diff_string(&golden, &result_v, false);
276 if let Some(diff) = diff {244 if result_v != golden_v {
277 if env::var_os("UPDATE_GOLDEN").is_some() {245 if env::var_os("UPDATE_GOLDEN").is_some() {
278 fs::write(update_golden_path, result)?;246 fs::write(update_golden_path, result)?;
279 } else {247 } else {
280 panic!(248 panic!(
281 "Result \n{result_v:#}\n\249 "Result \n{result_v:#}\n\
282 and golden \n{golden:#}\n\250 and golden \n{golden_v:#}\n\
283 did not match structurally:\n{diff:#}\n\251 did not match structurally\n\
284 for golden {}",252 for golden {}",
285 entry.path().display()253 entry.path().display()
286 );254 );
287 }255 }