2024-05-25 06:04:41 -05:00
|
|
|
use std::path::{Path, PathBuf};
|
|
|
|
|
2024-07-17 08:02:34 -05:00
|
|
|
use run_make_support::{assert_dirs_are_equal, rfs, rustdoc};
|
2024-05-25 06:04:41 -05:00
|
|
|
|
|
|
|
#[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() {
|
2024-06-06 14:34:34 -05:00
|
|
|
let out_dir = PathBuf::from("rustdoc");
|
|
|
|
let tmp_out_dir = PathBuf::from("tmp-rustdoc");
|
2024-05-25 06:04:41 -05:00
|
|
|
|
|
|
|
// Generate HTML docs.
|
|
|
|
generate_docs(&out_dir, JsonOutput::No);
|
|
|
|
|
|
|
|
// Copy first output for to check if it's exactly same after second compilation.
|
2024-07-17 07:42:06 -05:00
|
|
|
rfs::copy_dir_all(&out_dir, &tmp_out_dir);
|
2024-05-25 06:04:41 -05:00
|
|
|
|
|
|
|
// 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.
|
2024-07-17 07:42:06 -05:00
|
|
|
rfs::copy(out_dir.join("foobar.json"), tmp_out_dir.join("foobar.json"));
|
2024-05-25 06:04:41 -05:00
|
|
|
|
|
|
|
// 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.
|
2024-07-17 08:02:34 -05:00
|
|
|
assert_dirs_are_equal(&out_dir, &tmp_out_dir);
|
2024-05-25 06:04:41 -05:00
|
|
|
}
|