1- // This test ensures that if the rustdoc test binary is not executable, it will
2- // gracefully fail and not panic.
1+ // This test validates the `--test-builder` rustdoc option.
2+ // It ensures that:
3+ // 1. When the test-builder path points to a non-executable file, rustdoc gracefully fails
4+ // 2. When the test-builder path points to a valid executable, it receives rustc arguments
35
46//@ needs-target-std
57
6- use run_make_support:: { path, rfs, rustdoc} ;
8+ use run_make_support:: { bare_rustc , path, rfs, rustc_path , rustdoc} ;
79
810fn main ( ) {
11+ // Test 1: Verify that a non-executable test-builder fails gracefully
912 let absolute_path = path ( "foo.rs" ) . canonicalize ( ) . expect ( "failed to get absolute path" ) ;
1013 let output = rustdoc ( )
1114 . input ( "foo.rs" )
@@ -19,4 +22,31 @@ fn main() {
1922 output. assert_stdout_contains ( "Failed to spawn " ) ;
2023 // ... and that we didn't panic.
2124 output. assert_not_ice ( ) ;
25+
26+ // Test 2: Verify that a valid test-builder is invoked with correct arguments
27+ // Build a custom test-builder that logs its arguments and forwards to rustc.
28+ // Use `bare_rustc` so we compile for the host architecture even in cross builds.
29+ let builder_bin = path ( "builder-bin" ) ;
30+ bare_rustc ( ) . input ( "builder.rs" ) . output ( & builder_bin) . run ( ) ;
31+
32+ let log_path = path ( "builder.log" ) ;
33+ let _ = std:: fs:: remove_file ( & log_path) ;
34+
35+ // Run rustdoc with our custom test-builder
36+ rustdoc ( )
37+ . input ( "doctest.rs" )
38+ . arg ( "--test" )
39+ . arg ( "-Zunstable-options" )
40+ . arg ( "--test-builder" )
41+ . arg ( & builder_bin)
42+ . env ( "REAL_RUSTC" , rustc_path ( ) )
43+ . env ( "BUILDER_LOG" , & log_path)
44+ . run ( ) ;
45+
46+ // Verify the custom builder was invoked with rustc-style arguments
47+ let log_contents = rfs:: read_to_string ( & log_path) ;
48+ assert ! (
49+ log_contents. contains( "--crate-type" ) ,
50+ "expected builder to receive rustc arguments, got:\n {log_contents}"
51+ ) ;
2252}
0 commit comments