about summary refs log tree commit diff
path: root/tests/run-make/rustdoc-output-stdout/rmake.rs
blob: e6c007978bdca1104419509832e4e6e000800af6 (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
// This test verifies that rustdoc `-o -` prints JSON on stdout and doesn't generate
// a JSON file.

//@ needs-target-std

use run_make_support::path_helpers::{cwd, has_extension, read_dir_entries_recursive};
use run_make_support::{rustdoc, serde_json};

fn main() {
    let json_string = rustdoc()
        .input("foo.rs")
        .out_dir("-")
        .arg("-Zunstable-options")
        .output_format("json")
        .run()
        .stdout_utf8();

    // First we check that we generate the JSON in the stdout.
    let json_value: serde_json::Value =
        serde_json::from_str(&json_string).expect("stdout should be valid json");

    // We don't care to test the specifics of the JSON, as that's done
    // elsewhere, just check that it has a format_version (as all JSON output
    // should).
    let format_version = json_value["format_version"]
        .as_i64()
        .expect("json output should contain format_version field");
    assert!(format_version > 30);

    // Then we check it didn't generate any JSON file.
    read_dir_entries_recursive(cwd(), |path| {
        if path.is_file() && has_extension(path, "json") {
            panic!("Found a JSON file {path:?}");
        }
    });
}