about summary refs log tree commit diff
path: root/tests/run-make/rustdoc-map-file/rmake.rs
blob: 802c924d580d71b64ece55d91a23db1acbc91f09 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
// This test ensures that all items from `foo` are correctly generated into the `redirect-map.json`
// file with `--generate-redirect-map` rustdoc option.

//@ needs-target-std

use run_make_support::rfs::read_to_string;
use run_make_support::{path, rustdoc, serde_json};

fn main() {
    let out_dir = "out";
    let crate_name = "foo";
    rustdoc()
        .input("foo.rs")
        .crate_name(crate_name)
        .arg("-Zunstable-options")
        .arg("--generate-redirect-map")
        .out_dir(&out_dir)
        .run();

    let generated = read_to_string(path(out_dir).join(crate_name).join("redirect-map.json"));
    let expected = read_to_string("expected.json");
    let generated: serde_json::Value =
        serde_json::from_str(&generated).expect("failed to parse JSON");
    let expected: serde_json::Value =
        serde_json::from_str(&expected).expect("failed to parse JSON");
    let expected = expected.as_object().unwrap();

    let mut differences = Vec::new();
    for (key, expected_value) in expected.iter() {
        match generated.get(key) {
            Some(value) => {
                if expected_value != value {
                    differences.push(format!(
                        "values for key `{key}` don't match: `{expected_value:?}` != `{value:?}`"
                    ));
                }
            }
            None => differences.push(format!("missing key `{key}`")),
        }
    }
    for (key, data) in generated.as_object().unwrap().iter() {
        if !expected.contains_key(key) {
            differences.push(format!("Extra data not expected: key: `{key}`, data: `{data}`"));
        }
    }

    if !differences.is_empty() {
        eprintln!("Found differences in JSON files:");
        for diff in differences {
            eprintln!("=> {diff}");
        }
        panic!("Found differences in JSON files");
    }
}