Add snapshot tests for checking compiler, library and rustc tools

This commit is contained in:
Jakub Beránek 2025-06-25 16:50:22 +02:00
parent 3c391a6394
commit 4dfa59dcfb
No known key found for this signature in database
GPG key ID: 909CD0D26483516B
3 changed files with 182 additions and 1 deletions

View file

@ -5,7 +5,7 @@ use crate::core::build_steps::compile::{
};
use crate::core::build_steps::tool::{COMPILETEST_ALLOW_FEATURES, SourceType, prepare_tool_cargo};
use crate::core::builder::{
self, Alias, Builder, Kind, RunConfig, ShouldRun, Step, crate_description,
self, Alias, Builder, Kind, RunConfig, ShouldRun, Step, StepMetadata, crate_description,
};
use crate::core::config::TargetSelection;
use crate::utils::build_stamp::{self, BuildStamp};
@ -167,6 +167,10 @@ impl Step for Std {
let _guard = builder.msg_check("library test/bench/example targets", target, Some(stage));
run_cargo(builder, cargo, builder.config.free_args.clone(), &stamp, vec![], true, false);
}
fn metadata(&self) -> Option<StepMetadata> {
Some(StepMetadata::check("std", self.target))
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
@ -258,6 +262,10 @@ impl Step for Rustc {
let hostdir = builder.sysroot_target_libdir(compiler, compiler.host);
add_to_sysroot(builder, &libdir, &hostdir, &stamp);
}
fn metadata(&self) -> Option<StepMetadata> {
Some(StepMetadata::check("rustc", self.target))
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
@ -467,6 +475,10 @@ macro_rules! tool_check_step {
let Self { target } = self;
run_tool_check_step(builder, target, stringify!($name), $path);
}
fn metadata(&self) -> Option<StepMetadata> {
Some(StepMetadata::check(stringify!($name), self.target))
}
}
}
}

View file

@ -153,6 +153,10 @@ impl StepMetadata {
Self::new(name, target, Kind::Build)
}
pub fn check(name: &'static str, target: TargetSelection) -> Self {
Self::new(name, target, Kind::Check)
}
pub fn doc(name: &'static str, target: TargetSelection) -> Self {
Self::new(name, target, Kind::Doc)
}

View file

@ -1233,6 +1233,171 @@ mod snapshot {
");
}
#[test]
fn check_compiler_no_explicit_stage() {
let ctx = TestCtx::new();
insta::assert_snapshot!(
ctx.config("check")
.path("compiler")
.render_steps(), @r"
[check] std <host>
[build] llvm <host>
[check] rustc <host>
");
insta::assert_snapshot!(
ctx.config("check")
.path("rustc")
.render_steps(), @r"
[build] llvm <host>
[check] rustc 0 <host> -> rustc 1 <host>
");
}
#[test]
#[should_panic]
fn check_compiler_stage_0() {
let ctx = TestCtx::new();
ctx.config("check").path("compiler").stage(0).run();
}
#[test]
fn check_compiler_stage_1() {
let ctx = TestCtx::new();
insta::assert_snapshot!(
ctx.config("check")
.path("compiler")
.stage(1)
.render_steps(), @r"
[build] llvm <host>
[build] rustc 0 <host> -> rustc 1 <host>
[build] rustc 1 <host> -> std 1 <host>
[check] rustc <host>
");
}
#[test]
fn check_compiler_stage_2() {
let ctx = TestCtx::new();
insta::assert_snapshot!(
ctx.config("check")
.path("compiler")
.stage(2)
.render_steps(), @r"
[build] llvm <host>
[build] rustc 0 <host> -> rustc 1 <host>
[build] rustc 1 <host> -> std 1 <host>
[build] rustc 1 <host> -> rustc 2 <host>
[build] rustc 2 <host> -> std 2 <host>
[check] rustc <host>
");
}
#[test]
fn check_library_no_explicit_stage() {
let ctx = TestCtx::new();
insta::assert_snapshot!(
ctx.config("check")
.path("library")
.render_steps(), @r"
[build] llvm <host>
[build] rustc 0 <host> -> rustc 1 <host>
[check] std <host>
");
}
#[test]
#[should_panic]
fn check_library_stage_0() {
let ctx = TestCtx::new();
ctx.config("check").path("library").stage(0).run();
}
#[test]
fn check_library_stage_1() {
let ctx = TestCtx::new();
insta::assert_snapshot!(
ctx.config("check")
.path("library")
.stage(1)
.render_steps(), @r"
[build] llvm <host>
[build] rustc 0 <host> -> rustc 1 <host>
[check] std <host>
");
}
#[test]
fn check_library_stage_2() {
let ctx = TestCtx::new();
insta::assert_snapshot!(
ctx.config("check")
.path("library")
.stage(2)
.render_steps(), @r"
[build] llvm <host>
[build] rustc 0 <host> -> rustc 1 <host>
[build] rustc 1 <host> -> std 1 <host>
[build] rustc 1 <host> -> rustc 2 <host>
[check] std <host>
");
}
#[test]
fn check_miri_no_explicit_stage() {
let ctx = TestCtx::new();
insta::assert_snapshot!(
ctx.config("check")
.path("miri")
.render_steps(), @r"
[check] std <host>
[build] llvm <host>
[check] rustc <host>
[check] Miri <host>
");
}
#[test]
#[should_panic]
fn check_miri_stage_0() {
let ctx = TestCtx::new();
ctx.config("check").path("miri").stage(0).run();
}
#[test]
fn check_miri_stage_1() {
let ctx = TestCtx::new();
insta::assert_snapshot!(
ctx.config("check")
.path("miri")
.stage(1)
.render_steps(), @r"
[build] llvm <host>
[build] rustc 0 <host> -> rustc 1 <host>
[build] rustc 1 <host> -> std 1 <host>
[check] rustc <host>
[check] Miri <host>
");
}
#[test]
fn check_miri_stage_2() {
let ctx = TestCtx::new();
insta::assert_snapshot!(
ctx.config("check")
.path("miri")
.stage(2)
.render_steps(), @r"
[build] llvm <host>
[build] rustc 0 <host> -> rustc 1 <host>
[build] rustc 1 <host> -> std 1 <host>
[build] rustc 1 <host> -> rustc 2 <host>
[build] rustc 2 <host> -> std 2 <host>
[check] rustc <host>
[check] Miri <host>
");
}
#[test]
fn test_exclude() {
let ctx = TestCtx::new();