61 lines
2.2 KiB
Rust
61 lines
2.2 KiB
Rust
// This test validates the `--test-builder` rustdoc option.
|
|
// It ensures that:
|
|
// 1. When the test-builder path points to a non-executable file, rustdoc gracefully fails
|
|
// 2. When the test-builder path points to a valid executable, it receives rustc arguments
|
|
|
|
//@ needs-target-std
|
|
|
|
use run_make_support::{bare_rustc, path, rfs, rustc_path, rustdoc, target};
|
|
|
|
fn main() {
|
|
// Test 1: Verify that a non-executable test-builder fails gracefully
|
|
let absolute_path = path("foo.rs").canonicalize().expect("failed to get absolute path");
|
|
let output = rustdoc()
|
|
.input("foo.rs")
|
|
.arg("--test")
|
|
.arg("-Zunstable-options")
|
|
.arg("--test-builder")
|
|
.arg(&absolute_path)
|
|
.run_fail();
|
|
|
|
// We check that rustdoc outputs the error correctly...
|
|
output.assert_stdout_contains("Failed to spawn ");
|
|
// ... and that we didn't panic.
|
|
output.assert_not_ice();
|
|
|
|
// Some targets (for example wasm) cannot execute doctests directly even with a runner,
|
|
// so only exercise the success path when the target can run on the host.
|
|
if target().contains("wasm")
|
|
|| target().contains("sgx")
|
|
|| std::env::var_os("REMOTE_TEST_CLIENT").is_some()
|
|
{
|
|
return;
|
|
}
|
|
|
|
// Test 2: Verify that a valid test-builder is invoked with correct arguments
|
|
// Build a custom test-builder that logs its arguments and forwards to rustc.
|
|
// Use `bare_rustc` so we compile for the host architecture even in cross builds.
|
|
let builder_bin = path("builder-bin");
|
|
bare_rustc().input("builder.rs").output(&builder_bin).run();
|
|
|
|
let log_path = path("builder.log");
|
|
let _ = std::fs::remove_file(&log_path);
|
|
|
|
// Run rustdoc with our custom test-builder
|
|
rustdoc()
|
|
.input("doctest.rs")
|
|
.arg("--test")
|
|
.arg("-Zunstable-options")
|
|
.arg("--test-builder")
|
|
.arg(&builder_bin)
|
|
.env("REAL_RUSTC", rustc_path())
|
|
.env("BUILDER_LOG", &log_path)
|
|
.run();
|
|
|
|
// Verify the custom builder was invoked with rustc-style arguments
|
|
let log_contents = rfs::read_to_string(&log_path);
|
|
assert!(
|
|
log_contents.contains("--crate-type"),
|
|
"expected builder to receive rustc arguments, got:\n{log_contents}"
|
|
);
|
|
}
|