summaryrefslogtreecommitdiffstats
path: root/vendor/mdbook/src/book/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/mdbook/src/book/mod.rs')
-rw-r--r--vendor/mdbook/src/book/mod.rs28
1 files changed, 26 insertions, 2 deletions
diff --git a/vendor/mdbook/src/book/mod.rs b/vendor/mdbook/src/book/mod.rs
index 9745d2b7e..75bbcc714 100644
--- a/vendor/mdbook/src/book/mod.rs
+++ b/vendor/mdbook/src/book/mod.rs
@@ -14,6 +14,7 @@ pub use self::book::{load_book, Book, BookItem, BookItems, Chapter};
pub use self::init::BookBuilder;
pub use self::summary::{parse_summary, Link, SectionNumber, Summary, SummaryItem};
+use log::{debug, error, info, log_enabled, trace, warn};
use std::io::Write;
use std::path::PathBuf;
use std::process::Command;
@@ -246,6 +247,13 @@ impl MDBook {
/// Run `rustdoc` tests on the book, linking against the provided libraries.
pub fn test(&mut self, library_paths: Vec<&str>) -> Result<()> {
+ // test_chapter with chapter:None will run all tests.
+ self.test_chapter(library_paths, None)
+ }
+
+ /// Run `rustdoc` tests on a specific chapter of the book, linking against the provided libraries.
+ /// If `chapter` is `None`, all tests will be run.
+ pub fn test_chapter(&mut self, library_paths: Vec<&str>, chapter: Option<&str>) -> Result<()> {
let library_args: Vec<&str> = (0..library_paths.len())
.map(|_| "-L")
.zip(library_paths.into_iter())
@@ -254,6 +262,8 @@ impl MDBook {
let temp_dir = TempFileBuilder::new().prefix("mdbook-").tempdir()?;
+ let mut chapter_found = false;
+
// FIXME: Is "test" the proper renderer name to use here?
let preprocess_context =
PreprocessorContext::new(self.root.clone(), self.config.clone(), "test".to_string());
@@ -270,8 +280,16 @@ impl MDBook {
_ => continue,
};
- let path = self.source_dir().join(&chapter_path);
- info!("Testing file: {:?}", path);
+ if let Some(chapter) = chapter {
+ if ch.name != chapter && chapter_path.to_str() != Some(chapter) {
+ if chapter == "?" {
+ info!("Skipping chapter '{}'...", ch.name);
+ }
+ continue;
+ }
+ }
+ chapter_found = true;
+ info!("Testing chapter '{}': {:?}", ch.name, chapter_path);
// write preprocessed file to tempdir
let path = temp_dir.path().join(&chapter_path);
@@ -295,6 +313,7 @@ impl MDBook {
}
}
+ debug!("running {:?}", cmd);
let output = cmd.output()?;
if !output.status.success() {
@@ -311,6 +330,11 @@ impl MDBook {
if failed {
bail!("One or more tests failed");
}
+ if let Some(chapter) = chapter {
+ if !chapter_found {
+ bail!("Chapter not found: {}", chapter);
+ }
+ }
Ok(())
}