@@ -9,6 +9,7 @@ use crate::Flags;
9
9
use crate :: core:: build_steps:: doc:: DocumentationFormat ;
10
10
use crate :: core:: config:: Config ;
11
11
use crate :: utils:: cache:: ExecutedStep ;
12
+ use crate :: utils:: helpers:: get_host_target;
12
13
use crate :: utils:: tests:: git:: { GitCtx , git_test} ;
13
14
14
15
static TEST_TRIPLE_1 : & str = "i686-unknown-haiku" ;
@@ -1236,29 +1237,48 @@ fn any_debug() {
1236
1237
/// The staging tests use insta for snapshot testing.
1237
1238
/// See bootstrap's README on how to bless the snapshots.
1238
1239
mod staging {
1240
+ use crate :: Build ;
1241
+ use crate :: core:: builder:: Builder ;
1239
1242
use crate :: core:: builder:: tests:: {
1240
1243
TEST_TRIPLE_1 , configure, configure_with_args, render_steps, run_build,
1241
1244
} ;
1245
+ use crate :: utils:: tests:: { ConfigBuilder , TestCtx } ;
1242
1246
1243
1247
#[ test]
1244
1248
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
+ let ctx = TestCtx :: new ( ) ;
1250
+ insta :: assert_snapshot! (
1251
+ ctx . config ( "build" )
1252
+ . path ( "compiler" )
1253
+ . stage ( 1 )
1254
+ . get_steps ( ) , @r"
1255
+ [build] rustc 0 <host > -> std 0 <host >
1256
+ [build] llvm <host >
1257
+ [build] rustc 0 <host > -> rustc 1 <host >
1258
+ [build] rustc 0 <host > -> rustc 1 <host >
1255
1259
" ) ;
1256
1260
}
1261
+
1262
+ impl ConfigBuilder {
1263
+ fn get_steps ( self ) -> String {
1264
+ let config = self . create_config ( ) ;
1265
+
1266
+ let kind = config. cmd . kind ( ) ;
1267
+ let build = Build :: new ( config) ;
1268
+ let builder = Builder :: new ( & build) ;
1269
+ builder. run_step_descriptions ( & Builder :: get_step_descriptions ( kind) , & builder. paths ) ;
1270
+ render_steps ( & builder. cache . into_executed_steps ( ) )
1271
+ }
1272
+ }
1257
1273
}
1258
1274
1259
1275
/// Renders the executed bootstrap steps for usage in snapshot tests with insta.
1260
1276
/// Only renders certain important steps.
1261
1277
/// Each value in `steps` should be a tuple of (Step, step output).
1278
+ ///
1279
+ /// The arrow in the rendered output (`X -> Y`) means `X builds Y`.
1280
+ /// This is similar to the output printed by bootstrap to stdout, but here it is
1281
+ /// generated purely for the purpose of tests.
1262
1282
fn render_steps ( steps : & [ ExecutedStep ] ) -> String {
1263
1283
steps
1264
1284
. iter ( )
@@ -1275,18 +1295,17 @@ fn render_steps(steps: &[ExecutedStep]) -> String {
1275
1295
}
1276
1296
let stage =
1277
1297
if let Some ( stage) = metadata. stage { format ! ( "{stage} " ) } else { "" . to_string ( ) } ;
1278
- write ! ( record, "{} {stage}<{}>" , metadata. name, metadata. target) ;
1298
+ write ! ( record, "{} {stage}<{}>" , metadata. name, normalize_target ( metadata. target) ) ;
1279
1299
Some ( record)
1280
1300
} )
1281
- . map ( |line| {
1282
- line. replace ( TEST_TRIPLE_1 , "target1" )
1283
- . replace ( TEST_TRIPLE_2 , "target2" )
1284
- . replace ( TEST_TRIPLE_3 , "target3" )
1285
- } )
1286
1301
. collect :: < Vec < _ > > ( )
1287
1302
. join ( "\n " )
1288
1303
}
1289
1304
1305
+ fn normalize_target ( target : TargetSelection ) -> String {
1306
+ target. to_string ( ) . replace ( & get_host_target ( ) . to_string ( ) , "host" )
1307
+ }
1308
+
1290
1309
fn render_compiler ( compiler : Compiler ) -> String {
1291
- format ! ( "rustc {} <{}>" , compiler. stage, compiler. host)
1310
+ format ! ( "rustc {} <{}>" , compiler. stage, normalize_target ( compiler. host) )
1292
1311
}
0 commit comments