//! Tests for custom preprocessors. use crate::prelude::*; use mdbook::book::Book; use mdbook::errors::Result; use mdbook::preprocess::{Preprocessor, PreprocessorContext}; use std::sync::{Arc, Mutex}; struct Spy(Arc>); #[derive(Debug, Default)] struct Inner { run_count: usize, rendered_with: Vec, } impl Preprocessor for Spy { fn name(&self) -> &str { "dummy" } fn run(&self, ctx: &PreprocessorContext, book: Book) -> Result { let mut inner = self.0.lock().unwrap(); inner.run_count += 1; inner.rendered_with.push(ctx.renderer.clone()); Ok(book) } } // Test that preprocessor gets run. #[test] fn runs_preprocessors() { let test = BookTest::init(|_| {}); let spy: Arc> = Default::default(); let mut book = test.load_book(); book.with_preprocessor(Spy(Arc::clone(&spy))); book.build().unwrap(); let inner = spy.lock().unwrap(); assert_eq!(inner.run_count, 1); assert_eq!(inner.rendered_with, ["html"]); }