File: rmake.rs

package info (click to toggle)
rustc 1.89.0%2Bdfsg1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 906,624 kB
  • sloc: xml: 158,148; python: 34,888; javascript: 19,595; sh: 19,221; ansic: 13,046; cpp: 7,144; asm: 4,376; makefile: 692; lisp: 174; sql: 15
file content (50 lines) | stat: -rw-r--r-- 1,527 bytes parent folder | download | duplicates (7)
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
//@ needs-target-std

use std::path::{Path, PathBuf};

use run_make_support::{assert_dirs_are_equal, rfs, rustdoc};

#[derive(PartialEq)]
enum JsonOutput {
    Yes,
    No,
}

fn generate_docs(out_dir: &Path, json_output: JsonOutput) {
    let mut rustdoc = rustdoc();
    rustdoc.input("src/lib.rs").crate_name("foobar").crate_type("lib").out_dir(&out_dir);
    if json_output == JsonOutput::Yes {
        rustdoc.arg("-Zunstable-options").output_format("json");
    }
    rustdoc.run();
}

fn main() {
    let out_dir = PathBuf::from("rustdoc");
    let tmp_out_dir = PathBuf::from("tmp-rustdoc");

    // Generate HTML docs.
    generate_docs(&out_dir, JsonOutput::No);

    // Copy first output for to check if it's exactly same after second compilation.
    rfs::copy_dir_all(&out_dir, &tmp_out_dir);

    // Generate html docs once again on same output.
    generate_docs(&out_dir, JsonOutput::No);

    // Generate json doc on the same output.
    generate_docs(&out_dir, JsonOutput::Yes);

    // Check if expected json file is generated.
    assert!(out_dir.join("foobar.json").is_file());

    // Copy first json output to check if it's exactly same after second compilation.
    rfs::copy(out_dir.join("foobar.json"), tmp_out_dir.join("foobar.json"));

    // Generate json doc on the same output.
    generate_docs(&out_dir, JsonOutput::Yes);

    // Check if all docs(including both json and html formats) are still the same after multiple
    // compilations.
    assert_dirs_are_equal(&out_dir, &tmp_out_dir);
}