Skip to content

Commit 21d21d5

Browse files
committed
Normalize host target in snapshot tests
1 parent 8c28161 commit 21d21d5

File tree

2 files changed

+74
-17
lines changed

2 files changed

+74
-17
lines changed

src/bootstrap/src/core/builder/tests.rs

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use crate::Flags;
99
use crate::core::build_steps::doc::DocumentationFormat;
1010
use crate::core::config::Config;
1111
use crate::utils::cache::ExecutedStep;
12+
use crate::utils::helpers::get_host_target;
1213
use crate::utils::tests::git::{GitCtx, git_test};
1314

1415
static TEST_TRIPLE_1: &str = "i686-unknown-haiku";
@@ -1236,24 +1237,38 @@ fn any_debug() {
12361237
/// The staging tests use insta for snapshot testing.
12371238
/// See bootstrap's README on how to bless the snapshots.
12381239
mod staging {
1240+
use crate::Build;
1241+
use crate::core::builder::Builder;
12391242
use crate::core::builder::tests::{
12401243
TEST_TRIPLE_1, configure, configure_with_args, render_steps, run_build,
12411244
};
1245+
use crate::utils::tests::ConfigBuilder;
12421246

12431247
#[test]
12441248
fn build_compiler_stage_1() {
1245-
let mut cache = run_build(
1246-
&["compiler".into()],
1247-
configure_with_args(&["build", "--stage", "1"], &[TEST_TRIPLE_1], &[TEST_TRIPLE_1]),
1248-
);
1249-
let steps = cache.into_executed_steps();
1250-
insta::assert_snapshot!(render_steps(&steps), @r"
1251-
[build] rustc 0 <target1> -> std 0 <target1>
1252-
[build] llvm <target1>
1253-
[build] rustc 0 <target1> -> rustc 1 <target1>
1254-
[build] rustc 0 <target1> -> rustc 1 <target1>
1249+
insta::assert_snapshot!(
1250+
ConfigBuilder::build()
1251+
.path("compiler")
1252+
.stage(1)
1253+
.get_steps(), @r"
1254+
[build] rustc 0 <host> -> std 0 <host>
1255+
[build] llvm <host>
1256+
[build] rustc 0 <host> -> rustc 1 <host>
1257+
[build] rustc 0 <host> -> rustc 1 <host>
12551258
");
12561259
}
1260+
1261+
impl ConfigBuilder {
1262+
fn get_steps(self) -> String {
1263+
let config = self.create_config();
1264+
1265+
let kind = config.cmd.kind();
1266+
let build = Build::new(config);
1267+
let builder = Builder::new(&build);
1268+
builder.run_step_descriptions(&Builder::get_step_descriptions(kind), &builder.paths);
1269+
render_steps(&builder.cache.into_executed_steps())
1270+
}
1271+
}
12571272
}
12581273

12591274
/// Renders the executed bootstrap steps for usage in snapshot tests with insta.
@@ -1275,18 +1290,17 @@ fn render_steps(steps: &[ExecutedStep]) -> String {
12751290
}
12761291
let stage =
12771292
if let Some(stage) = metadata.stage { format!("{stage} ") } else { "".to_string() };
1278-
write!(record, "{} {stage}<{}>", metadata.name, metadata.target);
1293+
write!(record, "{} {stage}<{}>", metadata.name, normalize_target(metadata.target));
12791294
Some(record)
12801295
})
1281-
.map(|line| {
1282-
line.replace(TEST_TRIPLE_1, "target1")
1283-
.replace(TEST_TRIPLE_2, "target2")
1284-
.replace(TEST_TRIPLE_3, "target3")
1285-
})
12861296
.collect::<Vec<_>>()
12871297
.join("\n")
12881298
}
12891299

1300+
fn normalize_target(target: TargetSelection) -> String {
1301+
target.to_string().replace(&get_host_target().to_string(), "host")
1302+
}
1303+
12901304
fn render_compiler(compiler: Compiler) -> String {
1291-
format!("rustc {} <{}>", compiler.stage, compiler.host)
1305+
format!("rustc {} <{}>", compiler.stage, normalize_target(compiler.host))
12921306
}

src/bootstrap/src/utils/tests/mod.rs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,46 @@
11
//! This module contains shared utilities for bootstrap tests.
22
3+
use crate::core::builder::Builder;
4+
use crate::core::config::DryRun;
5+
use crate::{Build, Config, Flags};
6+
37
pub mod git;
8+
9+
/// Used to configure an invocation of bootstrap.
10+
/// Currently runs in the rustc checkout, long-term it should be switched
11+
/// to run in a (cache-primed) temporary directory instead.
12+
pub struct ConfigBuilder {
13+
args: Vec<String>,
14+
}
15+
16+
impl ConfigBuilder {
17+
pub fn from_args(args: &[&str]) -> Self {
18+
Self::new(args)
19+
}
20+
21+
pub fn build() -> Self {
22+
Self::new(&["build"])
23+
}
24+
25+
pub fn path(mut self, path: &str) -> Self {
26+
self.args.push(path.to_string());
27+
self
28+
}
29+
30+
pub fn stage(mut self, stage: u32) -> Self {
31+
self.args.push("--stage".to_string());
32+
self.args.push(stage.to_string());
33+
self
34+
}
35+
36+
fn new(args: &[&str]) -> Self {
37+
Self { args: args.iter().copied().map(String::from).collect() }
38+
}
39+
40+
pub fn create_config(mut self) -> Config {
41+
let mut config = Config::parse(Flags::parse(&self.args));
42+
// Run in dry-check, otherwise the test would be too slow
43+
config.set_dry_run(DryRun::SelfCheck);
44+
config
45+
}
46+
}

0 commit comments

Comments
 (0)