blob: d2d12ae83a21c0b717e01aa707cbda59c6679ea6 (
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
|
use std::fs::copy;
use std::path::{Path, PathBuf};
use run_make_support::{copy_dir_all, recursive_diff, 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.
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.
copy(out_dir.join("foobar.json"), tmp_out_dir.join("foobar.json")).unwrap();
// 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.
recursive_diff(&out_dir, &tmp_out_dir);
}
|