Tests for number of times rustdoc is built with x.py test and doc.
This commit is contained in:
parent
9154863647
commit
0b9bc79738
|
@ -54,6 +54,11 @@ fn dist_baseline() {
|
|||
&[dist::Std { compiler: Compiler { host: a, stage: 1 }, target: a },]
|
||||
);
|
||||
assert_eq!(first(builder.cache.all::<dist::Src>()), &[dist::Src]);
|
||||
// Make sure rustdoc is only built once.
|
||||
assert_eq!(
|
||||
first(builder.cache.all::<tool::Rustdoc>()),
|
||||
&[tool::Rustdoc { compiler: Compiler { host: a, stage: 2 } },]
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -414,3 +419,77 @@ fn test_exclude() {
|
|||
// Ensure other tests are not affected.
|
||||
assert!(builder.cache.contains::<test::RustdocUi>());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn doc_default() {
|
||||
let mut config = configure(&[], &[]);
|
||||
config.compiler_docs = true;
|
||||
config.cmd = Subcommand::Doc { paths: Vec::new(), open: false };
|
||||
let build = Build::new(config);
|
||||
let mut builder = Builder::new(&build);
|
||||
builder.run_step_descriptions(&Builder::get_step_descriptions(Kind::Doc), &[]);
|
||||
let a = INTERNER.intern_str("A");
|
||||
|
||||
// error_index_generator uses stage 1 to share rustdoc artifacts with the
|
||||
// rustdoc tool.
|
||||
assert_eq!(
|
||||
first(builder.cache.all::<doc::ErrorIndex>()),
|
||||
&[doc::ErrorIndex { compiler: Compiler { host: a, stage: 1 }, target: a },]
|
||||
);
|
||||
assert_eq!(
|
||||
first(builder.cache.all::<tool::ErrorIndex>()),
|
||||
&[tool::ErrorIndex { compiler: Compiler { host: a, stage: 1 } }]
|
||||
);
|
||||
// This is actually stage 1, but Rustdoc::run swaps out the compiler with
|
||||
// stage minus 1 if --stage is not 0. Very confusing!
|
||||
assert_eq!(
|
||||
first(builder.cache.all::<tool::Rustdoc>()),
|
||||
&[tool::Rustdoc { compiler: Compiler { host: a, stage: 2 } },]
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_docs() {
|
||||
// Behavior of `x.py test` doing various documentation tests.
|
||||
let mut config = configure(&[], &[]);
|
||||
config.cmd = Subcommand::Test {
|
||||
paths: vec![],
|
||||
test_args: vec![],
|
||||
rustc_args: vec![],
|
||||
fail_fast: true,
|
||||
doc_tests: DocTests::Yes,
|
||||
bless: false,
|
||||
compare_mode: None,
|
||||
rustfix_coverage: false,
|
||||
pass: None,
|
||||
};
|
||||
let build = Build::new(config);
|
||||
let mut builder = Builder::new(&build);
|
||||
builder.run_step_descriptions(&Builder::get_step_descriptions(Kind::Test), &[]);
|
||||
let a = INTERNER.intern_str("A");
|
||||
|
||||
// error_index_generator uses stage 1 to share rustdoc artifacts with the
|
||||
// rustdoc tool.
|
||||
assert_eq!(
|
||||
first(builder.cache.all::<doc::ErrorIndex>()),
|
||||
&[doc::ErrorIndex { compiler: Compiler { host: a, stage: 1 }, target: a },]
|
||||
);
|
||||
assert_eq!(
|
||||
first(builder.cache.all::<tool::ErrorIndex>()),
|
||||
&[tool::ErrorIndex { compiler: Compiler { host: a, stage: 1 } }]
|
||||
);
|
||||
// Unfortunately rustdoc is built twice. Once from stage1 for compiletest
|
||||
// (and other things), and once from stage0 for std crates. Ideally it
|
||||
// would only be built once. If someone wants to fix this, it might be
|
||||
// worth investigating if it would be possible to test std from stage1.
|
||||
// Note that the stages here are +1 than what they actually are because
|
||||
// Rustdoc::run swaps out the compiler with stage minus 1 if --stage is
|
||||
// not 0.
|
||||
assert_eq!(
|
||||
first(builder.cache.all::<tool::Rustdoc>()),
|
||||
&[
|
||||
tool::Rustdoc { compiler: Compiler { host: a, stage: 1 } },
|
||||
tool::Rustdoc { compiler: Compiler { host: a, stage: 2 } },
|
||||
]
|
||||
);
|
||||
}
|
||||
|
|
|
@ -637,9 +637,10 @@ impl Step for Rustdoc {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
|
||||
#[derive(Ord, PartialOrd, Debug, Copy, Clone, Hash, PartialEq, Eq)]
|
||||
pub struct ErrorIndex {
|
||||
target: Interned<String>,
|
||||
pub compiler: Compiler,
|
||||
pub target: Interned<String>,
|
||||
}
|
||||
|
||||
impl Step for ErrorIndex {
|
||||
|
@ -653,22 +654,22 @@ impl Step for ErrorIndex {
|
|||
}
|
||||
|
||||
fn make_run(run: RunConfig<'_>) {
|
||||
run.builder.ensure(ErrorIndex { target: run.target });
|
||||
let target = run.target;
|
||||
// error_index_generator depends on librustdoc. Use the compiler that
|
||||
// is normally used to build rustdoc for other documentation so that
|
||||
// it shares the same artifacts.
|
||||
let compiler =
|
||||
run.builder.compiler_for(run.builder.top_stage, run.builder.config.build, target);
|
||||
run.builder.ensure(ErrorIndex { compiler, target });
|
||||
}
|
||||
|
||||
/// Generates the HTML rendered error-index by running the
|
||||
/// `error_index_generator` tool.
|
||||
fn run(self, builder: &Builder<'_>) {
|
||||
let target = self.target;
|
||||
|
||||
builder.info(&format!("Documenting error index ({})", target));
|
||||
let out = builder.doc_out(target);
|
||||
builder.info(&format!("Documenting error index ({})", self.target));
|
||||
let out = builder.doc_out(self.target);
|
||||
t!(fs::create_dir_all(&out));
|
||||
// error_index_generator depends on librustdoc. Use the compiler that
|
||||
// is normally used to build rustdoc for other documentation so that
|
||||
// it shares the same artifacts.
|
||||
let compiler = builder.compiler_for(builder.top_stage, builder.config.build, target);
|
||||
let mut index = tool::ErrorIndex::command(builder, compiler);
|
||||
let mut index = tool::ErrorIndex::command(builder, self.compiler);
|
||||
index.arg("html");
|
||||
index.arg(out.join("error-index.html"));
|
||||
index.arg(crate::channel::CFG_RELEASE_NUM);
|
||||
|
|
|
@ -366,7 +366,7 @@ bootstrap_tool!(
|
|||
ExpandYamlAnchors, "src/tools/expand-yaml-anchors", "expand-yaml-anchors";
|
||||
);
|
||||
|
||||
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
|
||||
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq, Ord, PartialOrd)]
|
||||
pub struct ErrorIndex {
|
||||
pub compiler: Compiler,
|
||||
}
|
||||
|
@ -449,7 +449,7 @@ impl Step for RemoteTestServer {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
|
||||
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq, Ord, PartialOrd)]
|
||||
pub struct Rustdoc {
|
||||
/// This should only ever be 0 or 2.
|
||||
/// We sometimes want to reference the "bootstrap" rustdoc, which is why this option is here.
|
||||
|
|
Loading…
Reference in New Issue