Merge pull request #1986 from mgeisler/preprocessors-for-test

Run preprocessors in `mdbook test`
This commit is contained in:
Eric Huss 2023-03-04 14:55:10 -08:00 committed by GitHub
commit 4c59405e5c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 27 additions and 10 deletions

View File

@ -196,21 +196,26 @@ impl MDBook {
Ok(()) Ok(())
} }
/// Run the entire build process for a particular [`Renderer`]. /// Run preprocessors and return the final book.
pub fn execute_build_process(&self, renderer: &dyn Renderer) -> Result<()> { pub fn preprocess_book(&self, renderer: &dyn Renderer) -> Result<(Book, PreprocessorContext)> {
let mut preprocessed_book = self.book.clone();
let preprocess_ctx = PreprocessorContext::new( let preprocess_ctx = PreprocessorContext::new(
self.root.clone(), self.root.clone(),
self.config.clone(), self.config.clone(),
renderer.name().to_string(), renderer.name().to_string(),
); );
let mut preprocessed_book = self.book.clone();
for preprocessor in &self.preprocessors { for preprocessor in &self.preprocessors {
if preprocessor_should_run(&**preprocessor, renderer, &self.config) { if preprocessor_should_run(&**preprocessor, renderer, &self.config) {
debug!("Running the {} preprocessor.", preprocessor.name()); debug!("Running the {} preprocessor.", preprocessor.name());
preprocessed_book = preprocessor.run(&preprocess_ctx, preprocessed_book)?; preprocessed_book = preprocessor.run(&preprocess_ctx, preprocessed_book)?;
} }
} }
Ok((preprocessed_book, preprocess_ctx))
}
/// Run the entire build process for a particular [`Renderer`].
pub fn execute_build_process(&self, renderer: &dyn Renderer) -> Result<()> {
let (preprocessed_book, preprocess_ctx) = self.preprocess_book(renderer)?;
let name = renderer.name(); let name = renderer.name();
let build_dir = self.build_dir_for(name); let build_dir = self.build_dir_for(name);
@ -264,13 +269,25 @@ impl MDBook {
let mut chapter_found = false; let mut chapter_found = false;
// FIXME: Is "test" the proper renderer name to use here? struct TestRenderer;
let preprocess_context = impl Renderer for TestRenderer {
PreprocessorContext::new(self.root.clone(), self.config.clone(), "test".to_string()); // FIXME: Is "test" the proper renderer name to use here?
fn name(&self) -> &str {
"test"
}
let book = LinkPreprocessor::new().run(&preprocess_context, self.book.clone())?; fn render(&self, _: &RenderContext) -> Result<()> {
// Index Preprocessor is disabled so that chapter paths continue to point to the Ok(())
// actual markdown files. }
}
// Index Preprocessor is disabled so that chapter paths
// continue to point to the actual markdown files.
self.preprocessors = determine_preprocessors(&self.config)?
.into_iter()
.filter(|pre| pre.name() != IndexPreprocessor::NAME)
.collect();
let (book, _) = self.preprocess_book(&TestRenderer)?;
let mut failed = false; let mut failed = false;
for item in book.iter() { for item in book.iter() {