Skip to content

Commit 4c59405

Browse files
authored
Merge pull request #1986 from mgeisler/preprocessors-for-test
Run preprocessors in `mdbook test`
2 parents 703a215 + b09aa0e commit 4c59405

File tree

1 file changed

+27
-10
lines changed

1 file changed

+27
-10
lines changed

src/book/mod.rs

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -196,21 +196,26 @@ impl MDBook {
196196
Ok(())
197197
}
198198

199-
/// Run the entire build process for a particular [`Renderer`].
200-
pub fn execute_build_process(&self, renderer: &dyn Renderer) -> Result<()> {
201-
let mut preprocessed_book = self.book.clone();
199+
/// Run preprocessors and return the final book.
200+
pub fn preprocess_book(&self, renderer: &dyn Renderer) -> Result<(Book, PreprocessorContext)> {
202201
let preprocess_ctx = PreprocessorContext::new(
203202
self.root.clone(),
204203
self.config.clone(),
205204
renderer.name().to_string(),
206205
);
207-
206+
let mut preprocessed_book = self.book.clone();
208207
for preprocessor in &self.preprocessors {
209208
if preprocessor_should_run(&**preprocessor, renderer, &self.config) {
210209
debug!("Running the {} preprocessor.", preprocessor.name());
211210
preprocessed_book = preprocessor.run(&preprocess_ctx, preprocessed_book)?;
212211
}
213212
}
213+
Ok((preprocessed_book, preprocess_ctx))
214+
}
215+
216+
/// Run the entire build process for a particular [`Renderer`].
217+
pub fn execute_build_process(&self, renderer: &dyn Renderer) -> Result<()> {
218+
let (preprocessed_book, preprocess_ctx) = self.preprocess_book(renderer)?;
214219

215220
let name = renderer.name();
216221
let build_dir = self.build_dir_for(name);
@@ -264,13 +269,25 @@ impl MDBook {
264269

265270
let mut chapter_found = false;
266271

267-
// FIXME: Is "test" the proper renderer name to use here?
268-
let preprocess_context =
269-
PreprocessorContext::new(self.root.clone(), self.config.clone(), "test".to_string());
272+
struct TestRenderer;
273+
impl Renderer for TestRenderer {
274+
// FIXME: Is "test" the proper renderer name to use here?
275+
fn name(&self) -> &str {
276+
"test"
277+
}
270278

271-
let book = LinkPreprocessor::new().run(&preprocess_context, self.book.clone())?;
272-
// Index Preprocessor is disabled so that chapter paths continue to point to the
273-
// actual markdown files.
279+
fn render(&self, _: &RenderContext) -> Result<()> {
280+
Ok(())
281+
}
282+
}
283+
284+
// Index Preprocessor is disabled so that chapter paths
285+
// continue to point to the actual markdown files.
286+
self.preprocessors = determine_preprocessors(&self.config)?
287+
.into_iter()
288+
.filter(|pre| pre.name() != IndexPreprocessor::NAME)
289+
.collect();
290+
let (book, _) = self.preprocess_book(&TestRenderer)?;
274291

275292
let mut failed = false;
276293
for item in book.iter() {

0 commit comments

Comments
 (0)