Rewrite test to use tempfile

We don't want to be writing to arbitrary directories, and this
seems to make the test a little simpler.
This commit is contained in:
Eric Huss 2025-02-20 08:48:16 -08:00
parent 3978612611
commit 2a4e5583ab

View file

@ -314,7 +314,8 @@ mod tests {
use crate::config::HtmlConfig; use crate::config::HtmlConfig;
use crate::theme::Theme; use crate::theme::Theme;
use crate::utils::fs::write_file; use crate::utils::fs::write_file;
use std::io::Read; use tempfile::TempDir;
#[test] #[test]
fn test_write_directive() { fn test_write_directive() {
let theme = Theme { let theme = Theme {
@ -339,40 +340,30 @@ mod tests {
fonts_css: None, fonts_css: None,
font_files: Vec::new(), font_files: Vec::new(),
}; };
let reference_js = PathBuf::from("target/static-files-test-case-reference.js"); let temp_dir = TempDir::with_prefix("mdbook-").unwrap();
let test_case = PathBuf::from("target/static-files-test-case"); let reference_js = Path::new("static-files-test-case-reference.js");
let mut html_config = HtmlConfig::default(); let mut html_config = HtmlConfig::default();
html_config.additional_js.push(reference_js.clone()); html_config.additional_js.push(reference_js.to_owned());
write_file( write_file(
&Path::new("."), temp_dir.path(),
&reference_js, reference_js,
br#"{{ resource "book.js" }}"#, br#"{{ resource "book.js" }}"#,
) )
.unwrap(); .unwrap();
let mut static_files = StaticFiles::new(&theme, &html_config, &Path::new(".")).unwrap(); let mut static_files = StaticFiles::new(&theme, &html_config, temp_dir.path()).unwrap();
static_files.hash_files().unwrap(); static_files.hash_files().unwrap();
static_files.write_files(&test_case).unwrap(); static_files.write_files(temp_dir.path()).unwrap();
// custom JS winds up referencing book.js // custom JS winds up referencing book.js
let mut reference_js_dest = File::open( let reference_js_content = std::fs::read_to_string(
"target/static-files-test-case/target/static-files-test-case-reference-635c9cdc.js", temp_dir
.path()
.join("static-files-test-case-reference-635c9cdc.js"),
) )
.unwrap(); .unwrap();
let mut reference_js_content = Vec::new(); assert_eq!("book-e3b0c442.js", reference_js_content);
reference_js_dest
.read_to_end(&mut reference_js_content)
.unwrap();
std::mem::drop(reference_js_dest);
assert_eq!(br#"../book-e3b0c442.js"#, &reference_js_content[..]);
// book.js winds up empty // book.js winds up empty
let mut reference_js_dest = let book_js_content =
File::open("target/static-files-test-case/book-e3b0c442.js").unwrap(); std::fs::read_to_string(temp_dir.path().join("book-e3b0c442.js")).unwrap();
let mut reference_js_content = Vec::new(); assert_eq!("", book_js_content);
reference_js_dest
.read_to_end(&mut reference_js_content)
.unwrap();
std::mem::drop(reference_js_dest);
assert_eq!(br#""#, &reference_js_content[..]);
std::fs::remove_dir_all(&test_case).unwrap();
std::fs::remove_file(&reference_js).unwrap();
} }
} }