Skip to content

Commit 4445703

Browse files
GuillaumeGomezrezwanahmedsami
authored andcommitted
Migrate validate_json.py script to rust in run-make/rustdoc-map-file test
1 parent 3cdbdc7 commit 4445703

File tree

1 file changed

+39
-36
lines changed

1 file changed

+39
-36
lines changed
Lines changed: 39 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,57 @@
1-
// This test ensures that all items from `foo` are correctly generated into the `redirect-map.json`
2-
// file with `--generate-redirect-map` rustdoc option.
3-
4-
use std::path::Path;
5-
1+
use run_make_support::path_helpers::read_dir_entries_recursive;
62
use run_make_support::rfs::read_to_string;
7-
use run_make_support::{path, rustdoc, serde_json};
3+
use run_make_support::{jzon, rustdoc};
84

95
fn main() {
106
let out_dir = "out";
11-
let crate_name = "foo";
127
rustdoc()
138
.input("foo.rs")
14-
.crate_name(crate_name)
159
.arg("-Zunstable-options")
1610
.arg("--generate-redirect-map")
1711
.out_dir(&out_dir)
1812
.run();
1913

20-
let generated = read_to_string(path(out_dir).join(crate_name).join("redirect-map.json"));
21-
let expected = read_to_string("expected.json");
22-
let generated: serde_json::Value =
23-
serde_json::from_str(&generated).expect("failed to parse JSON");
24-
let expected: serde_json::Value =
25-
serde_json::from_str(&expected).expect("failed to parse JSON");
26-
let expected = expected.as_object().unwrap();
14+
let mut found_file = false;
15+
read_dir_entries_recursive(&out_dir, |path| {
16+
if !found_file
17+
&& path.is_file()
18+
&& path.file_name().map(|name| name == "redirect-map.json").unwrap_or(false)
19+
{
20+
found_file = true;
21+
let generated = read_to_string(path);
22+
let expected = read_to_string("expected.json");
23+
let generated = jzon::parse(&generated).expect("failed to parse JSON");
24+
let expected = jzon::parse(&expected).expect("failed to parse JSON");
2725

28-
let mut differences = Vec::new();
29-
for (key, expected_value) in expected.iter() {
30-
match generated.get(key) {
31-
Some(value) => {
32-
if expected_value != value {
33-
differences.push(format!(
34-
"values for key `{key}` don't match: `{expected_value:?}` != `{value:?}`"
35-
));
26+
let mut differences = Vec::new();
27+
for (key, expected_value) in expected.entries() {
28+
match generated.get(key) {
29+
Some(value) => {
30+
if expected_value != value {
31+
differences.push(format!("values for key `{key}` don't match"));
32+
}
33+
}
34+
None => differences.push(format!("missing key `{key}`")),
35+
}
36+
}
37+
for (key, data) in generated.entries() {
38+
if !expected.has_key(key) {
39+
differences
40+
.push(format!("Extra data not expected: key: `{key}`, data: `{data}`"));
3641
}
3742
}
38-
None => differences.push(format!("missing key `{key}`")),
39-
}
40-
}
41-
for (key, data) in generated.as_object().unwrap().iter() {
42-
if !expected.contains_key(key) {
43-
differences.push(format!("Extra data not expected: key: `{key}`, data: `{data}`"));
44-
}
45-
}
4643

47-
if !differences.is_empty() {
48-
eprintln!("Found differences in JSON files:");
49-
for diff in differences {
50-
eprintln!("=> {diff}");
44+
if !differences.is_empty() {
45+
eprintln!("Found differences in JSON files:");
46+
for diff in differences {
47+
eprintln!("=> {diff}");
48+
}
49+
std::process::exit(1);
50+
}
5151
}
52-
panic!("Found differences in JSON files");
52+
});
53+
54+
if !found_file {
55+
panic!("`redirect-map.json` file was not found");
5356
}
5457
}

0 commit comments

Comments
 (0)