// This test ensures that no temporary folder is "left behind" when doctests fail for any reason. //@ ignore-cross-compile use std::path::Path; use run_make_support::{path, rfs, rustdoc}; fn run_doctest_and_check_tmpdir(tmp_dir: &Path, doctest: &str, edition: &str) { let mut runner = rustdoc(); runner.input(doctest).arg("--test").edition(edition); let output = if cfg!(unix) { runner.env("TMPDIR", tmp_dir) } else if cfg!(windows) { runner.env("TEMP", tmp_dir).env("TMP", tmp_dir) } else { panic!("unsupported OS") } .run_fail(); output.assert_exit_code(101).assert_stdout_contains( "test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out", ); rfs::read_dir_entries(tmp_dir, |entry| { panic!("Found an item inside the temporary folder: {entry:?}"); }); } fn run_doctest_and_check_tmpdir_for_edition(tmp_dir: &Path, edition: &str) { run_doctest_and_check_tmpdir(tmp_dir, "compile-error.rs", edition); run_doctest_and_check_tmpdir(tmp_dir, "run-error.rs", edition); } fn main() { let tmp_dir = path("tmp"); rfs::create_dir(&tmp_dir); run_doctest_and_check_tmpdir_for_edition(&tmp_dir, "2018"); // We use the 2024 edition to check that it's also working for merged doctests. run_doctest_and_check_tmpdir_for_edition(&tmp_dir, "2024"); }