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:: { path, rfs, rustc , 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,30 @@ 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+ let builder_bin = path ( "builder-bin" ) ;
29+ rustc ( ) . input ( "builder.rs" ) . output ( & builder_bin) . run ( ) ;
30+
31+ let log_path = path ( "builder.log" ) ;
32+ let _ = std:: fs:: remove_file ( & log_path) ;
33+
34+ // Run rustdoc with our custom test-builder
35+ rustdoc ( )
36+ . input ( "doctest.rs" )
37+ . arg ( "--test" )
38+ . arg ( "-Zunstable-options" )
39+ . arg ( "--test-builder" )
40+ . arg ( & builder_bin)
41+ . env ( "REAL_RUSTC" , rustc_path ( ) )
42+ . env ( "BUILDER_LOG" , & log_path)
43+ . run ( ) ;
44+
45+ // Verify the custom builder was invoked with rustc-style arguments
46+ let log_contents = rfs:: read_to_string ( & log_path) ;
47+ assert ! (
48+ log_contents. contains( "--crate-type" ) ,
49+ "expected builder to receive rustc arguments, got:\n {log_contents}"
50+ ) ;
2251}
0 commit comments