about summary refs log tree commit diff
path: root/tests/run-make/rustdoc-scrape-examples-ordering/rmake.rs
blob: 1bc23ec88817f9a8e7bfe4e5d7346937f6980115 (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 run_make_support::{htmldocck, rustc, rustdoc, source_path, tmp_dir};
use std::fs::read_dir;
use std::path::Path;

fn main() {
    let lib_dir = tmp_dir();
    let out_dir = tmp_dir().join("rustdoc");
    let crate_name = "foobar";
    let deps = read_dir("examples")
        .unwrap()
        .filter_map(|entry| entry.ok().map(|e| e.path()))
        .filter(|path| path.is_file() && path.extension().is_some_and(|ext| ext == "rs"))
        .collect::<Vec<_>>();

    rustc().input("src/lib.rs").crate_name(crate_name).crate_type("lib").emit("metadata").run();

    let mut out_deps = Vec::with_capacity(deps.len());
    for dep in deps {
        let dep_stem = dep.file_stem().unwrap();
        let out_example = out_dir.join(format!("{}.calls", dep_stem.to_str().unwrap()));
        rustdoc()
            .input(&dep)
            .crate_name(&dep_stem)
            .crate_type("bin")
            .output(&out_dir)
            .extern_(crate_name, lib_dir.join(format!("lib{crate_name}.rmeta")))
            .arg("-Zunstable-options")
            .arg("--scrape-examples-output-path")
            .arg(&out_example)
            .arg("--scrape-examples-target-crate")
            .arg(crate_name)
            .run();
        out_deps.push(out_example);
    }

    let mut rustdoc = rustdoc();
    rustdoc
        .input("src/lib.rs")
        .output(&out_dir)
        .crate_name(crate_name)
        .crate_type("lib")
        .arg("-Zunstable-options");
    for dep in out_deps {
        rustdoc.arg("--with-examples").arg(dep);
    }
    rustdoc.run();

    assert!(htmldocck().arg(out_dir).arg("src/lib.rs").status().unwrap().success());
}