mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-17 01:13:11 +00:00
initial implementation of rustdoc nested aux-build
This commit is contained in:
parent
56c698c711
commit
794434ec63
@ -9,6 +9,7 @@ const KNOWN_DIRECTIVE_NAMES: &[&str] = &[
|
|||||||
"aux-codegen-backend",
|
"aux-codegen-backend",
|
||||||
"aux-crate",
|
"aux-crate",
|
||||||
"build-aux-docs",
|
"build-aux-docs",
|
||||||
|
"unique-doc-out-dir",
|
||||||
"build-fail",
|
"build-fail",
|
||||||
"build-pass",
|
"build-pass",
|
||||||
"check-fail",
|
"check-fail",
|
||||||
@ -18,6 +19,7 @@ const KNOWN_DIRECTIVE_NAMES: &[&str] = &[
|
|||||||
"check-test-line-numbers-match",
|
"check-test-line-numbers-match",
|
||||||
"compare-output-lines-by-subset",
|
"compare-output-lines-by-subset",
|
||||||
"compile-flags",
|
"compile-flags",
|
||||||
|
"doc-flags",
|
||||||
"dont-check-compiler-stderr",
|
"dont-check-compiler-stderr",
|
||||||
"dont-check-compiler-stdout",
|
"dont-check-compiler-stdout",
|
||||||
"dont-check-failure-status",
|
"dont-check-failure-status",
|
||||||
|
@ -95,6 +95,8 @@ pub struct TestProps {
|
|||||||
pub compile_flags: Vec<String>,
|
pub compile_flags: Vec<String>,
|
||||||
// Extra flags to pass when the compiled code is run (such as --bench)
|
// Extra flags to pass when the compiled code is run (such as --bench)
|
||||||
pub run_flags: Vec<String>,
|
pub run_flags: Vec<String>,
|
||||||
|
/// Extra flags to pass to rustdoc but not the compiler.
|
||||||
|
pub doc_flags: Vec<String>,
|
||||||
// If present, the name of a file that this test should match when
|
// If present, the name of a file that this test should match when
|
||||||
// pretty-printed
|
// pretty-printed
|
||||||
pub pp_exact: Option<PathBuf>,
|
pub pp_exact: Option<PathBuf>,
|
||||||
@ -122,6 +124,9 @@ pub struct TestProps {
|
|||||||
pub unset_exec_env: Vec<String>,
|
pub unset_exec_env: Vec<String>,
|
||||||
// Build documentation for all specified aux-builds as well
|
// Build documentation for all specified aux-builds as well
|
||||||
pub build_aux_docs: bool,
|
pub build_aux_docs: bool,
|
||||||
|
/// Build the documentation for each crate in a unique output directory.
|
||||||
|
/// Uses <root output directory>/docs/<test name>/doc
|
||||||
|
pub unique_doc_out_dir: bool,
|
||||||
// Flag to force a crate to be built with the host architecture
|
// Flag to force a crate to be built with the host architecture
|
||||||
pub force_host: bool,
|
pub force_host: bool,
|
||||||
// Check stdout for error-pattern output as well as stderr
|
// Check stdout for error-pattern output as well as stderr
|
||||||
@ -220,8 +225,10 @@ mod directives {
|
|||||||
pub const REGEX_ERROR_PATTERN: &'static str = "regex-error-pattern";
|
pub const REGEX_ERROR_PATTERN: &'static str = "regex-error-pattern";
|
||||||
pub const COMPILE_FLAGS: &'static str = "compile-flags";
|
pub const COMPILE_FLAGS: &'static str = "compile-flags";
|
||||||
pub const RUN_FLAGS: &'static str = "run-flags";
|
pub const RUN_FLAGS: &'static str = "run-flags";
|
||||||
|
pub const DOC_FLAGS: &'static str = "doc-flags";
|
||||||
pub const SHOULD_ICE: &'static str = "should-ice";
|
pub const SHOULD_ICE: &'static str = "should-ice";
|
||||||
pub const BUILD_AUX_DOCS: &'static str = "build-aux-docs";
|
pub const BUILD_AUX_DOCS: &'static str = "build-aux-docs";
|
||||||
|
pub const UNIQUE_DOC_OUT_DIR: &'static str = "unique-doc-out-dir";
|
||||||
pub const FORCE_HOST: &'static str = "force-host";
|
pub const FORCE_HOST: &'static str = "force-host";
|
||||||
pub const CHECK_STDOUT: &'static str = "check-stdout";
|
pub const CHECK_STDOUT: &'static str = "check-stdout";
|
||||||
pub const CHECK_RUN_RESULTS: &'static str = "check-run-results";
|
pub const CHECK_RUN_RESULTS: &'static str = "check-run-results";
|
||||||
@ -267,6 +274,7 @@ impl TestProps {
|
|||||||
regex_error_patterns: vec![],
|
regex_error_patterns: vec![],
|
||||||
compile_flags: vec![],
|
compile_flags: vec![],
|
||||||
run_flags: vec![],
|
run_flags: vec![],
|
||||||
|
doc_flags: vec![],
|
||||||
pp_exact: None,
|
pp_exact: None,
|
||||||
aux_builds: vec![],
|
aux_builds: vec![],
|
||||||
aux_bins: vec![],
|
aux_bins: vec![],
|
||||||
@ -281,6 +289,7 @@ impl TestProps {
|
|||||||
exec_env: vec![],
|
exec_env: vec![],
|
||||||
unset_exec_env: vec![],
|
unset_exec_env: vec![],
|
||||||
build_aux_docs: false,
|
build_aux_docs: false,
|
||||||
|
unique_doc_out_dir: false,
|
||||||
force_host: false,
|
force_host: false,
|
||||||
check_stdout: false,
|
check_stdout: false,
|
||||||
check_run_results: false,
|
check_run_results: false,
|
||||||
@ -377,6 +386,8 @@ impl TestProps {
|
|||||||
|r| r,
|
|r| r,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
config.push_name_value_directive(ln, DOC_FLAGS, &mut self.doc_flags, |r| r);
|
||||||
|
|
||||||
fn split_flags(flags: &str) -> Vec<String> {
|
fn split_flags(flags: &str) -> Vec<String> {
|
||||||
// Individual flags can be single-quoted to preserve spaces; see
|
// Individual flags can be single-quoted to preserve spaces; see
|
||||||
// <https://github.com/rust-lang/rust/pull/115948/commits/957c5db6>.
|
// <https://github.com/rust-lang/rust/pull/115948/commits/957c5db6>.
|
||||||
@ -414,6 +425,8 @@ impl TestProps {
|
|||||||
|
|
||||||
config.set_name_directive(ln, SHOULD_ICE, &mut self.should_ice);
|
config.set_name_directive(ln, SHOULD_ICE, &mut self.should_ice);
|
||||||
config.set_name_directive(ln, BUILD_AUX_DOCS, &mut self.build_aux_docs);
|
config.set_name_directive(ln, BUILD_AUX_DOCS, &mut self.build_aux_docs);
|
||||||
|
config.set_name_directive(ln, UNIQUE_DOC_OUT_DIR, &mut self.unique_doc_out_dir);
|
||||||
|
|
||||||
config.set_name_directive(ln, FORCE_HOST, &mut self.force_host);
|
config.set_name_directive(ln, FORCE_HOST, &mut self.force_host);
|
||||||
config.set_name_directive(ln, CHECK_STDOUT, &mut self.check_stdout);
|
config.set_name_directive(ln, CHECK_STDOUT, &mut self.check_stdout);
|
||||||
config.set_name_directive(ln, CHECK_RUN_RESULTS, &mut self.check_run_results);
|
config.set_name_directive(ln, CHECK_RUN_RESULTS, &mut self.check_run_results);
|
||||||
|
@ -1,5 +1,17 @@
|
|||||||
// ignore-tidy-filelength
|
// ignore-tidy-filelength
|
||||||
|
|
||||||
|
use crate::compute_diff::{write_diff, write_filtered_diff};
|
||||||
|
use crate::errors::{self, Error, ErrorKind};
|
||||||
|
use crate::header::TestProps;
|
||||||
|
use crate::json;
|
||||||
|
use crate::read2::{read2_abbreviated, Truncated};
|
||||||
|
use crate::util::{add_dylib_path, copy_dir_all, dylib_env_var, logv, static_regex, PathBufExt};
|
||||||
|
use crate::ColorConfig;
|
||||||
|
use colored::Colorize;
|
||||||
|
use miropt_test_tools::{files_for_miropt_test, MiroptTest, MiroptTestFile};
|
||||||
|
use regex::{Captures, Regex};
|
||||||
|
use rustfix::{apply_suggestions, get_suggestions_from_json, Filter};
|
||||||
|
use std::borrow::Cow;
|
||||||
use std::collections::{HashMap, HashSet};
|
use std::collections::{HashMap, HashSet};
|
||||||
use std::ffi::{OsStr, OsString};
|
use std::ffi::{OsStr, OsString};
|
||||||
use std::fs::{self, create_dir_all, File, OpenOptions};
|
use std::fs::{self, create_dir_all, File, OpenOptions};
|
||||||
@ -723,7 +735,7 @@ impl<'test> TestCx<'test> {
|
|||||||
self.maybe_add_external_args(&mut rustc, &self.config.target_rustcflags);
|
self.maybe_add_external_args(&mut rustc, &self.config.target_rustcflags);
|
||||||
rustc.args(&self.props.compile_flags);
|
rustc.args(&self.props.compile_flags);
|
||||||
|
|
||||||
self.compose_and_run_compiler(rustc, Some(src))
|
self.compose_and_run_compiler(rustc, Some(src), self.testpaths)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn run_debuginfo_test(&self) {
|
fn run_debuginfo_test(&self) {
|
||||||
@ -1579,13 +1591,15 @@ impl<'test> TestCx<'test> {
|
|||||||
passes,
|
passes,
|
||||||
);
|
);
|
||||||
|
|
||||||
self.compose_and_run_compiler(rustc, None)
|
self.compose_and_run_compiler(rustc, None, self.testpaths)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn document(&self, out_dir: &Path) -> ProcRes {
|
/// `root_out_dir` and `root_testpaths` refer to the parameters of the actual test being run.
|
||||||
|
/// Auxiliaries, no matter how deep, have the same root_out_dir and root_testpaths.
|
||||||
|
fn document(&self, root_out_dir: &Path, root_testpaths: &TestPaths) -> ProcRes {
|
||||||
if self.props.build_aux_docs {
|
if self.props.build_aux_docs {
|
||||||
for rel_ab in &self.props.aux_builds {
|
for rel_ab in &self.props.aux_builds {
|
||||||
let aux_testpaths = self.compute_aux_test_paths(&self.testpaths, rel_ab);
|
let aux_testpaths = self.compute_aux_test_paths(root_testpaths, rel_ab);
|
||||||
let aux_props =
|
let aux_props =
|
||||||
self.props.from_aux_file(&aux_testpaths.file, self.revision, self.config);
|
self.props.from_aux_file(&aux_testpaths.file, self.revision, self.config);
|
||||||
let aux_cx = TestCx {
|
let aux_cx = TestCx {
|
||||||
@ -1596,7 +1610,7 @@ impl<'test> TestCx<'test> {
|
|||||||
};
|
};
|
||||||
// Create the directory for the stdout/stderr files.
|
// Create the directory for the stdout/stderr files.
|
||||||
create_dir_all(aux_cx.output_base_dir()).unwrap();
|
create_dir_all(aux_cx.output_base_dir()).unwrap();
|
||||||
let auxres = aux_cx.document(out_dir);
|
let auxres = aux_cx.document(&root_out_dir, root_testpaths);
|
||||||
if !auxres.status.success() {
|
if !auxres.status.success() {
|
||||||
return auxres;
|
return auxres;
|
||||||
}
|
}
|
||||||
@ -1606,21 +1620,47 @@ impl<'test> TestCx<'test> {
|
|||||||
let aux_dir = self.aux_output_dir_name();
|
let aux_dir = self.aux_output_dir_name();
|
||||||
|
|
||||||
let rustdoc_path = self.config.rustdoc_path.as_ref().expect("--rustdoc-path not passed");
|
let rustdoc_path = self.config.rustdoc_path.as_ref().expect("--rustdoc-path not passed");
|
||||||
let mut rustdoc = Command::new(rustdoc_path);
|
|
||||||
|
|
||||||
|
// actual --out-dir given to the auxiliary or test, as opposed to the root out dir for the entire
|
||||||
|
// test
|
||||||
|
let out_dir: Cow<'_, Path> = if self.props.unique_doc_out_dir {
|
||||||
|
let file_name = self
|
||||||
|
.testpaths
|
||||||
|
.file
|
||||||
|
.file_name()
|
||||||
|
.expect("file name should not be empty")
|
||||||
|
.to_str()
|
||||||
|
.expect("file name utf8")
|
||||||
|
.trim_end_matches(".rs");
|
||||||
|
let out_dir = PathBuf::from_iter([
|
||||||
|
root_out_dir,
|
||||||
|
Path::new("docs"),
|
||||||
|
Path::new(file_name),
|
||||||
|
Path::new("doc"),
|
||||||
|
]);
|
||||||
|
create_dir_all(&out_dir).unwrap();
|
||||||
|
Cow::Owned(out_dir)
|
||||||
|
} else {
|
||||||
|
Cow::Borrowed(root_out_dir)
|
||||||
|
};
|
||||||
|
|
||||||
|
let mut rustdoc = Command::new(rustdoc_path);
|
||||||
|
let current_dir = output_base_dir(self.config, root_testpaths, self.safe_revision());
|
||||||
|
rustdoc.current_dir(current_dir);
|
||||||
rustdoc
|
rustdoc
|
||||||
.arg("-L")
|
.arg("-L")
|
||||||
.arg(self.config.run_lib_path.to_str().unwrap())
|
.arg(self.config.run_lib_path.to_str().unwrap())
|
||||||
.arg("-L")
|
.arg("-L")
|
||||||
.arg(aux_dir)
|
.arg(aux_dir)
|
||||||
.arg("-o")
|
.arg("-o")
|
||||||
.arg(out_dir)
|
.arg(out_dir.as_ref())
|
||||||
.arg("--deny")
|
.arg("--deny")
|
||||||
.arg("warnings")
|
.arg("warnings")
|
||||||
.arg(&self.testpaths.file)
|
.arg(&self.testpaths.file)
|
||||||
.arg("-A")
|
.arg("-A")
|
||||||
.arg("internal_features")
|
.arg("internal_features")
|
||||||
.args(&self.props.compile_flags);
|
.args(&self.props.compile_flags)
|
||||||
|
.args(&self.props.doc_flags);
|
||||||
|
|
||||||
if self.config.mode == RustdocJson {
|
if self.config.mode == RustdocJson {
|
||||||
rustdoc.arg("--output-format").arg("json").arg("-Zunstable-options");
|
rustdoc.arg("--output-format").arg("json").arg("-Zunstable-options");
|
||||||
@ -1630,7 +1670,7 @@ impl<'test> TestCx<'test> {
|
|||||||
rustdoc.arg(format!("-Clinker={}", linker));
|
rustdoc.arg(format!("-Clinker={}", linker));
|
||||||
}
|
}
|
||||||
|
|
||||||
self.compose_and_run_compiler(rustdoc, None)
|
self.compose_and_run_compiler(rustdoc, None, root_testpaths)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn exec_compiled_test(&self) -> ProcRes {
|
fn exec_compiled_test(&self) -> ProcRes {
|
||||||
@ -1828,9 +1868,16 @@ impl<'test> TestCx<'test> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn compose_and_run_compiler(&self, mut rustc: Command, input: Option<String>) -> ProcRes {
|
/// `root_testpaths` refers to the path of the original test.
|
||||||
|
/// the auxiliary and the test with an aux-build have the same `root_testpaths`.
|
||||||
|
fn compose_and_run_compiler(
|
||||||
|
&self,
|
||||||
|
mut rustc: Command,
|
||||||
|
input: Option<String>,
|
||||||
|
root_testpaths: &TestPaths,
|
||||||
|
) -> ProcRes {
|
||||||
let aux_dir = self.aux_output_dir();
|
let aux_dir = self.aux_output_dir();
|
||||||
self.build_all_auxiliary(&self.testpaths, &aux_dir, &mut rustc);
|
self.build_all_auxiliary(root_testpaths, &aux_dir, &mut rustc);
|
||||||
|
|
||||||
rustc.envs(self.props.rustc_env.clone());
|
rustc.envs(self.props.rustc_env.clone());
|
||||||
self.props.unset_rustc_env.iter().fold(&mut rustc, Command::env_remove);
|
self.props.unset_rustc_env.iter().fold(&mut rustc, Command::env_remove);
|
||||||
@ -2545,7 +2592,7 @@ impl<'test> TestCx<'test> {
|
|||||||
Vec::new(),
|
Vec::new(),
|
||||||
);
|
);
|
||||||
|
|
||||||
let proc_res = self.compose_and_run_compiler(rustc, None);
|
let proc_res = self.compose_and_run_compiler(rustc, None, self.testpaths);
|
||||||
let output_path = self.get_filecheck_file("ll");
|
let output_path = self.get_filecheck_file("ll");
|
||||||
(proc_res, output_path)
|
(proc_res, output_path)
|
||||||
}
|
}
|
||||||
@ -2581,7 +2628,7 @@ impl<'test> TestCx<'test> {
|
|||||||
Vec::new(),
|
Vec::new(),
|
||||||
);
|
);
|
||||||
|
|
||||||
let proc_res = self.compose_and_run_compiler(rustc, None);
|
let proc_res = self.compose_and_run_compiler(rustc, None, self.testpaths);
|
||||||
let output_path = self.get_filecheck_file("s");
|
let output_path = self.get_filecheck_file("s");
|
||||||
(proc_res, output_path)
|
(proc_res, output_path)
|
||||||
}
|
}
|
||||||
@ -2664,7 +2711,7 @@ impl<'test> TestCx<'test> {
|
|||||||
let out_dir = self.output_base_dir();
|
let out_dir = self.output_base_dir();
|
||||||
remove_and_create_dir_all(&out_dir);
|
remove_and_create_dir_all(&out_dir);
|
||||||
|
|
||||||
let proc_res = self.document(&out_dir);
|
let proc_res = self.document(&out_dir, &self.testpaths);
|
||||||
if !proc_res.status.success() {
|
if !proc_res.status.success() {
|
||||||
self.fatal_proc_rec("rustdoc failed!", &proc_res);
|
self.fatal_proc_rec("rustdoc failed!", &proc_res);
|
||||||
}
|
}
|
||||||
@ -2723,7 +2770,7 @@ impl<'test> TestCx<'test> {
|
|||||||
let aux_dir = new_rustdoc.aux_output_dir();
|
let aux_dir = new_rustdoc.aux_output_dir();
|
||||||
new_rustdoc.build_all_auxiliary(&new_rustdoc.testpaths, &aux_dir, &mut rustc);
|
new_rustdoc.build_all_auxiliary(&new_rustdoc.testpaths, &aux_dir, &mut rustc);
|
||||||
|
|
||||||
let proc_res = new_rustdoc.document(&compare_dir);
|
let proc_res = new_rustdoc.document(&compare_dir, &new_rustdoc.testpaths);
|
||||||
if !proc_res.status.success() {
|
if !proc_res.status.success() {
|
||||||
eprintln!("failed to run nightly rustdoc");
|
eprintln!("failed to run nightly rustdoc");
|
||||||
return;
|
return;
|
||||||
@ -2846,7 +2893,7 @@ impl<'test> TestCx<'test> {
|
|||||||
let out_dir = self.output_base_dir();
|
let out_dir = self.output_base_dir();
|
||||||
remove_and_create_dir_all(&out_dir);
|
remove_and_create_dir_all(&out_dir);
|
||||||
|
|
||||||
let proc_res = self.document(&out_dir);
|
let proc_res = self.document(&out_dir, &self.testpaths);
|
||||||
if !proc_res.status.success() {
|
if !proc_res.status.success() {
|
||||||
self.fatal_proc_rec("rustdoc failed!", &proc_res);
|
self.fatal_proc_rec("rustdoc failed!", &proc_res);
|
||||||
}
|
}
|
||||||
@ -2922,24 +2969,15 @@ impl<'test> TestCx<'test> {
|
|||||||
fn check_rustdoc_test_option(&self, res: ProcRes) {
|
fn check_rustdoc_test_option(&self, res: ProcRes) {
|
||||||
let mut other_files = Vec::new();
|
let mut other_files = Vec::new();
|
||||||
let mut files: HashMap<String, Vec<usize>> = HashMap::new();
|
let mut files: HashMap<String, Vec<usize>> = HashMap::new();
|
||||||
let cwd = env::current_dir().unwrap();
|
let normalized = fs::canonicalize(&self.testpaths.file).expect("failed to canonicalize");
|
||||||
files.insert(
|
let normalized = normalized.to_str().unwrap().replace('\\', "/");
|
||||||
self.testpaths
|
files.insert(normalized, self.get_lines(&self.testpaths.file, Some(&mut other_files)));
|
||||||
.file
|
|
||||||
.strip_prefix(&cwd)
|
|
||||||
.unwrap_or(&self.testpaths.file)
|
|
||||||
.to_str()
|
|
||||||
.unwrap()
|
|
||||||
.replace('\\', "/"),
|
|
||||||
self.get_lines(&self.testpaths.file, Some(&mut other_files)),
|
|
||||||
);
|
|
||||||
for other_file in other_files {
|
for other_file in other_files {
|
||||||
let mut path = self.testpaths.file.clone();
|
let mut path = self.testpaths.file.clone();
|
||||||
path.set_file_name(&format!("{}.rs", other_file));
|
path.set_file_name(&format!("{}.rs", other_file));
|
||||||
files.insert(
|
let path = fs::canonicalize(path).expect("failed to canonicalize");
|
||||||
path.strip_prefix(&cwd).unwrap_or(&path).to_str().unwrap().replace('\\', "/"),
|
let normalized = path.to_str().unwrap().replace('\\', "/");
|
||||||
self.get_lines(&path, None),
|
files.insert(normalized, self.get_lines(&path, None));
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut tested = 0;
|
let mut tested = 0;
|
||||||
@ -3778,7 +3816,7 @@ impl<'test> TestCx<'test> {
|
|||||||
if let Some(nodejs) = &self.config.nodejs {
|
if let Some(nodejs) = &self.config.nodejs {
|
||||||
let out_dir = self.output_base_dir();
|
let out_dir = self.output_base_dir();
|
||||||
|
|
||||||
self.document(&out_dir);
|
self.document(&out_dir, &self.testpaths);
|
||||||
|
|
||||||
let root = self.config.find_rust_src_root().unwrap();
|
let root = self.config.find_rust_src_root().unwrap();
|
||||||
let file_stem =
|
let file_stem =
|
||||||
@ -4094,7 +4132,7 @@ impl<'test> TestCx<'test> {
|
|||||||
rustc.arg(crate_name);
|
rustc.arg(crate_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
let res = self.compose_and_run_compiler(rustc, None);
|
let res = self.compose_and_run_compiler(rustc, None, self.testpaths);
|
||||||
if !res.status.success() {
|
if !res.status.success() {
|
||||||
self.fatal_proc_rec("failed to compile fixed code", &res);
|
self.fatal_proc_rec("failed to compile fixed code", &res);
|
||||||
}
|
}
|
||||||
|
@ -191,7 +191,7 @@ impl<'test> TestCx<'test> {
|
|||||||
|
|
||||||
rustdoc_cmd.arg(&self.testpaths.file);
|
rustdoc_cmd.arg(&self.testpaths.file);
|
||||||
|
|
||||||
let proc_res = self.compose_and_run_compiler(rustdoc_cmd, None);
|
let proc_res = self.compose_and_run_compiler(rustdoc_cmd, None, self.testpaths);
|
||||||
if !proc_res.status.success() {
|
if !proc_res.status.success() {
|
||||||
self.fatal_proc_rec("rustdoc --test failed!", &proc_res)
|
self.fatal_proc_rec("rustdoc --test failed!", &proc_res)
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,4 @@
|
|||||||
|
//@ build-aux-docs
|
||||||
|
|
||||||
|
|
||||||
|
pub struct Quebec;
|
@ -0,0 +1,6 @@
|
|||||||
|
//@ aux-build:q.rs
|
||||||
|
//@ build-aux-docs
|
||||||
|
|
||||||
|
|
||||||
|
extern crate q;
|
||||||
|
pub trait Tango {}
|
@ -0,0 +1,17 @@
|
|||||||
|
//@ aux-build:t.rs
|
||||||
|
//@ build-aux-docs
|
||||||
|
|
||||||
|
//@ has t/trait.Tango.html
|
||||||
|
//@ hasraw search-index.js 'Quebec'
|
||||||
|
//@ hasraw trait.impl/t/trait.Tango.js 'struct.Sierra.html'
|
||||||
|
//@ hasraw s/struct.Sierra.html 'Tango'
|
||||||
|
//@ hasraw search-index.js 'Sierra'
|
||||||
|
//@ hasraw search-index.js 'Tango'
|
||||||
|
//@ has q/struct.Quebec.html
|
||||||
|
//@ has s/struct.Sierra.html
|
||||||
|
|
||||||
|
// We document multiple crates into the same output directory, which merges the cross-crate information. Everything is available.
|
||||||
|
|
||||||
|
extern crate t;
|
||||||
|
pub struct Sierra;
|
||||||
|
impl t::Tango for Sierra {}
|
@ -0,0 +1,6 @@
|
|||||||
|
//@ build-aux-docs
|
||||||
|
//@ doc-flags:--enable-index-page
|
||||||
|
//@ doc-flags:-Zunstable-options
|
||||||
|
|
||||||
|
|
||||||
|
pub struct Quebec;
|
@ -0,0 +1,8 @@
|
|||||||
|
//@ aux-build:q.rs
|
||||||
|
//@ build-aux-docs
|
||||||
|
//@ doc-flags:--enable-index-page
|
||||||
|
//@ doc-flags:-Zunstable-options
|
||||||
|
|
||||||
|
|
||||||
|
extern crate q;
|
||||||
|
pub trait Tango {}
|
24
tests/rustdoc/cross-crate-info/cargo-transitive/s.rs
Normal file
24
tests/rustdoc/cross-crate-info/cargo-transitive/s.rs
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
//@ aux-build:t.rs
|
||||||
|
//@ build-aux-docs
|
||||||
|
//@ doc-flags:--enable-index-page
|
||||||
|
//@ doc-flags:-Zunstable-options
|
||||||
|
|
||||||
|
//@ has t/trait.Tango.html
|
||||||
|
//@ hasraw search-index.js 'Quebec'
|
||||||
|
//@ has index.html '//ul[@class="all-items"]//a[@href="q/index.html"]' 'q'
|
||||||
|
//@ hasraw s/struct.Sierra.html 'Tango'
|
||||||
|
//@ hasraw trait.impl/t/trait.Tango.js 'struct.Sierra.html'
|
||||||
|
//@ has index.html '//ul[@class="all-items"]//a[@href="t/index.html"]' 't'
|
||||||
|
//@ has index.html '//h1' 'List of all crates'
|
||||||
|
//@ has index.html '//ul[@class="all-items"]//a[@href="s/index.html"]' 's'
|
||||||
|
//@ hasraw search-index.js 'Sierra'
|
||||||
|
//@ hasraw search-index.js 'Tango'
|
||||||
|
//@ has index.html
|
||||||
|
//@ has q/struct.Quebec.html
|
||||||
|
//@ has s/struct.Sierra.html
|
||||||
|
|
||||||
|
// We document multiple crates into the same output directory, which merges the cross-crate information. Everything is available.
|
||||||
|
|
||||||
|
extern crate t;
|
||||||
|
pub struct Sierra;
|
||||||
|
impl t::Tango for Sierra {}
|
@ -0,0 +1,4 @@
|
|||||||
|
//@ build-aux-docs
|
||||||
|
|
||||||
|
|
||||||
|
pub trait Foxtrot {}
|
15
tests/rustdoc/cross-crate-info/cargo-two-no-index/e.rs
Normal file
15
tests/rustdoc/cross-crate-info/cargo-two-no-index/e.rs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
//@ aux-build:f.rs
|
||||||
|
//@ build-aux-docs
|
||||||
|
|
||||||
|
//@ hasraw search-index.js 'Echo'
|
||||||
|
//@ hasraw search-index.js 'Foxtrot'
|
||||||
|
//@ hasraw trait.impl/f/trait.Foxtrot.js 'enum.Echo.html'
|
||||||
|
//@ has f/trait.Foxtrot.html
|
||||||
|
//@ has e/enum.Echo.html
|
||||||
|
//@ hasraw e/enum.Echo.html 'Foxtrot'
|
||||||
|
|
||||||
|
// document two crates in the same way that cargo does. do not provide --enable-index-page
|
||||||
|
|
||||||
|
extern crate f;
|
||||||
|
pub enum Echo {}
|
||||||
|
impl f::Foxtrot for Echo {}
|
6
tests/rustdoc/cross-crate-info/cargo-two/auxiliary/f.rs
Normal file
6
tests/rustdoc/cross-crate-info/cargo-two/auxiliary/f.rs
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
//@ build-aux-docs
|
||||||
|
//@ doc-flags:--enable-index-page
|
||||||
|
//@ doc-flags:-Zunstable-options
|
||||||
|
|
||||||
|
|
||||||
|
pub trait Foxtrot {}
|
21
tests/rustdoc/cross-crate-info/cargo-two/e.rs
Normal file
21
tests/rustdoc/cross-crate-info/cargo-two/e.rs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
//@ aux-build:f.rs
|
||||||
|
//@ build-aux-docs
|
||||||
|
//@ doc-flags:--enable-index-page
|
||||||
|
//@ doc-flags:-Zunstable-options
|
||||||
|
|
||||||
|
//@ hasraw search-index.js 'Echo'
|
||||||
|
//@ hasraw search-index.js 'Foxtrot'
|
||||||
|
//@ has index.html '//ul[@class="all-items"]//a[@href="e/index.html"]' 'e'
|
||||||
|
//@ has index.html '//ul[@class="all-items"]//a[@href="f/index.html"]' 'f'
|
||||||
|
//@ hasraw trait.impl/f/trait.Foxtrot.js 'enum.Echo.html'
|
||||||
|
//@ has f/trait.Foxtrot.html
|
||||||
|
//@ has index.html '//h1' 'List of all crates'
|
||||||
|
//@ has e/enum.Echo.html
|
||||||
|
//@ has index.html
|
||||||
|
//@ hasraw e/enum.Echo.html 'Foxtrot'
|
||||||
|
|
||||||
|
// document two crates in the same way that cargo does, writing them both into the same output directory
|
||||||
|
|
||||||
|
extern crate f;
|
||||||
|
pub enum Echo {}
|
||||||
|
impl f::Foxtrot for Echo {}
|
@ -0,0 +1,4 @@
|
|||||||
|
//@ build-aux-docs
|
||||||
|
|
||||||
|
|
||||||
|
pub trait Foxtrot {}
|
21
tests/rustdoc/cross-crate-info/index-on-last/e.rs
Normal file
21
tests/rustdoc/cross-crate-info/index-on-last/e.rs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
//@ aux-build:f.rs
|
||||||
|
//@ build-aux-docs
|
||||||
|
//@ doc-flags:--enable-index-page
|
||||||
|
//@ doc-flags:-Zunstable-options
|
||||||
|
|
||||||
|
//@ hasraw search-index.js 'Echo'
|
||||||
|
//@ hasraw search-index.js 'Foxtrot'
|
||||||
|
//@ has index.html '//ul[@class="all-items"]//a[@href="e/index.html"]' 'e'
|
||||||
|
//@ has index.html '//ul[@class="all-items"]//a[@href="f/index.html"]' 'f'
|
||||||
|
//@ hasraw trait.impl/f/trait.Foxtrot.js 'enum.Echo.html'
|
||||||
|
//@ has f/trait.Foxtrot.html
|
||||||
|
//@ has index.html '//h1' 'List of all crates'
|
||||||
|
//@ has e/enum.Echo.html
|
||||||
|
//@ has index.html
|
||||||
|
//@ hasraw e/enum.Echo.html 'Foxtrot'
|
||||||
|
|
||||||
|
// only declare --enable-index-page to the last rustdoc invocation
|
||||||
|
|
||||||
|
extern crate f;
|
||||||
|
pub enum Echo {}
|
||||||
|
impl f::Foxtrot for Echo {}
|
@ -0,0 +1,6 @@
|
|||||||
|
//@ build-aux-docs
|
||||||
|
//@ doc-flags:--enable-index-page
|
||||||
|
//@ doc-flags:-Zunstable-options
|
||||||
|
|
||||||
|
|
||||||
|
pub struct Quebec;
|
@ -0,0 +1,8 @@
|
|||||||
|
//@ aux-build:s.rs
|
||||||
|
//@ build-aux-docs
|
||||||
|
//@ doc-flags:--enable-index-page
|
||||||
|
//@ doc-flags:-Zunstable-options
|
||||||
|
|
||||||
|
|
||||||
|
extern crate s;
|
||||||
|
pub type Romeo = s::Sierra;
|
@ -0,0 +1,9 @@
|
|||||||
|
//@ aux-build:t.rs
|
||||||
|
//@ build-aux-docs
|
||||||
|
//@ doc-flags:--enable-index-page
|
||||||
|
//@ doc-flags:-Zunstable-options
|
||||||
|
|
||||||
|
|
||||||
|
extern crate t;
|
||||||
|
pub struct Sierra;
|
||||||
|
impl t::Tango for Sierra {}
|
@ -0,0 +1,8 @@
|
|||||||
|
//@ aux-build:q.rs
|
||||||
|
//@ build-aux-docs
|
||||||
|
//@ doc-flags:--enable-index-page
|
||||||
|
//@ doc-flags:-Zunstable-options
|
||||||
|
|
||||||
|
|
||||||
|
extern crate q;
|
||||||
|
pub trait Tango {}
|
32
tests/rustdoc/cross-crate-info/kitchen-sink/i.rs
Normal file
32
tests/rustdoc/cross-crate-info/kitchen-sink/i.rs
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
//@ aux-build:q.rs
|
||||||
|
//@ aux-build:r.rs
|
||||||
|
//@ aux-build:t.rs
|
||||||
|
//@ aux-build:s.rs
|
||||||
|
//@ build-aux-docs
|
||||||
|
//@ doc-flags:--enable-index-page
|
||||||
|
//@ doc-flags:-Zunstable-options
|
||||||
|
|
||||||
|
//@ hasraw search-index.js 'Quebec'
|
||||||
|
//@ hasraw search-index.js 'Sierra'
|
||||||
|
//@ has index.html
|
||||||
|
//@ has s/struct.Sierra.html
|
||||||
|
//@ hasraw s/struct.Sierra.html 'Tango'
|
||||||
|
//@ has index.html '//ul[@class="all-items"]//a[@href="i/index.html"]' 'i'
|
||||||
|
//@ has q/struct.Quebec.html
|
||||||
|
//@ has type.impl/s/struct.Sierra.js
|
||||||
|
//@ hasraw type.impl/s/struct.Sierra.js 'Romeo'
|
||||||
|
//@ hasraw type.impl/s/struct.Sierra.js 'Tango'
|
||||||
|
//@ has index.html '//ul[@class="all-items"]//a[@href="q/index.html"]' 'q'
|
||||||
|
//@ has index.html '//ul[@class="all-items"]//a[@href="t/index.html"]' 't'
|
||||||
|
//@ has index.html '//ul[@class="all-items"]//a[@href="s/index.html"]' 's'
|
||||||
|
//@ has r/type.Romeo.html
|
||||||
|
//@ has t/trait.Tango.html
|
||||||
|
//@ hasraw search-index.js 'Romeo'
|
||||||
|
//@ hasraw trait.impl/t/trait.Tango.js 'struct.Sierra.html'
|
||||||
|
//@ has index.html '//h1' 'List of all crates'
|
||||||
|
//@ hasraw search-index.js 'Tango'
|
||||||
|
//@ has index.html '//ul[@class="all-items"]//a[@href="r/index.html"]' 'r'
|
||||||
|
|
||||||
|
// document everything in the default mode
|
||||||
|
|
||||||
|
|
13
tests/rustdoc/cross-crate-info/single-crate-baseline/q.rs
Normal file
13
tests/rustdoc/cross-crate-info/single-crate-baseline/q.rs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
//@ build-aux-docs
|
||||||
|
//@ doc-flags:--enable-index-page
|
||||||
|
//@ doc-flags:-Zunstable-options
|
||||||
|
|
||||||
|
//@ hasraw search-index.js 'Quebec'
|
||||||
|
//@ has index.html '//ul[@class="all-items"]//a[@href="q/index.html"]' 'q'
|
||||||
|
//@ has index.html '//h1' 'List of all crates'
|
||||||
|
//@ has index.html
|
||||||
|
//@ has q/struct.Quebec.html
|
||||||
|
|
||||||
|
// there's nothing cross-crate going on here
|
||||||
|
|
||||||
|
pub struct Quebec;
|
@ -0,0 +1,8 @@
|
|||||||
|
//@ build-aux-docs
|
||||||
|
|
||||||
|
//@ hasraw search-index.js 'Quebec'
|
||||||
|
//@ has q/struct.Quebec.html
|
||||||
|
|
||||||
|
// there's nothing cross-crate going on here
|
||||||
|
|
||||||
|
pub struct Quebec;
|
4
tests/rustdoc/cross-crate-info/transitive/auxiliary/q.rs
Normal file
4
tests/rustdoc/cross-crate-info/transitive/auxiliary/q.rs
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
//@ build-aux-docs
|
||||||
|
|
||||||
|
|
||||||
|
pub struct Quebec;
|
6
tests/rustdoc/cross-crate-info/transitive/auxiliary/t.rs
Normal file
6
tests/rustdoc/cross-crate-info/transitive/auxiliary/t.rs
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
//@ aux-build:q.rs
|
||||||
|
//@ build-aux-docs
|
||||||
|
|
||||||
|
|
||||||
|
extern crate q;
|
||||||
|
pub trait Tango {}
|
9
tests/rustdoc/cross-crate-info/transitive/s.rs
Normal file
9
tests/rustdoc/cross-crate-info/transitive/s.rs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
//@ aux-build:t.rs
|
||||||
|
//@ build-aux-docs
|
||||||
|
|
||||||
|
|
||||||
|
// simple test to see if we support building transitive crates
|
||||||
|
|
||||||
|
extern crate t;
|
||||||
|
pub struct Sierra;
|
||||||
|
impl t::Tango for Sierra {}
|
4
tests/rustdoc/cross-crate-info/two/auxiliary/f.rs
Normal file
4
tests/rustdoc/cross-crate-info/two/auxiliary/f.rs
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
//@ build-aux-docs
|
||||||
|
|
||||||
|
|
||||||
|
pub trait Foxtrot {}
|
9
tests/rustdoc/cross-crate-info/two/e.rs
Normal file
9
tests/rustdoc/cross-crate-info/two/e.rs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
//@ aux-build:f.rs
|
||||||
|
//@ build-aux-docs
|
||||||
|
|
||||||
|
|
||||||
|
// simple test to assert that we can do a two-level aux-build
|
||||||
|
|
||||||
|
extern crate f;
|
||||||
|
pub enum Echo {}
|
||||||
|
impl f::Foxtrot for Echo {}
|
10
tests/rustdoc/cross-crate-info/working-dir-examples/q.rs
Normal file
10
tests/rustdoc/cross-crate-info/working-dir-examples/q.rs
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
//@ build-aux-docs
|
||||||
|
//@ doc-flags:--scrape-examples-output-path=examples
|
||||||
|
//@ doc-flags:--scrape-examples-target-crate=q
|
||||||
|
//@ doc-flags:-Zunstable-options
|
||||||
|
|
||||||
|
//@ has examples
|
||||||
|
|
||||||
|
// where will --scrape-examples-output-path resolve the path to be? should be the root output directory
|
||||||
|
|
||||||
|
pub struct Quebec;
|
@ -0,0 +1,5 @@
|
|||||||
|
//@ build-aux-docs
|
||||||
|
//@ unique-doc-out-dir
|
||||||
|
|
||||||
|
|
||||||
|
pub trait Foxtrot {}
|
@ -0,0 +1,15 @@
|
|||||||
|
//@ aux-build:f.rs
|
||||||
|
//@ build-aux-docs
|
||||||
|
|
||||||
|
//@ hasraw search-index.js 'Echo'
|
||||||
|
//@ !hasraw search-index.js 'Foxtrot'
|
||||||
|
//@ hasraw trait.impl/f/trait.Foxtrot.js 'enum.Echo.html'
|
||||||
|
//@ !has f/trait.Foxtrot.html
|
||||||
|
//@ has e/enum.Echo.html
|
||||||
|
//@ hasraw e/enum.Echo.html 'Foxtrot'
|
||||||
|
|
||||||
|
// test the fact that our test runner will document this crate somewhere else
|
||||||
|
|
||||||
|
extern crate f;
|
||||||
|
pub enum Echo {}
|
||||||
|
impl f::Foxtrot for Echo {}
|
Loading…
Reference in New Issue
Block a user