diff --git a/tests/alternative_backends.rs b/tests/alternative_backends.rs index a1b21ac4..f787c862 100644 --- a/tests/alternative_backends.rs +++ b/tests/alternative_backends.rs @@ -6,13 +6,6 @@ use std::fs; use std::path::Path; use tempfile::{Builder as TempFileBuilder, TempDir}; -#[test] -fn failing_alternate_backend() { - let (md, _temp) = dummy_book_with_backend("failing", fail_cmd(), false); - - md.build().unwrap_err(); -} - #[test] fn missing_backends_are_fatal() { let (md, _temp) = dummy_book_with_backend("missing", "trduyvbhijnorgevfuhn", false); @@ -128,14 +121,6 @@ fn dummy_book_with_backend( (md, temp) } -fn fail_cmd() -> &'static str { - if cfg!(windows) { - r#"cmd.exe /c "exit 1""# - } else { - "false" - } -} - fn rust_exe(temp: &Path, name: &str, src: &str) { let rs = temp.join(name).with_extension("rs"); fs::write(&rs, src).unwrap(); diff --git a/tests/testsuite/renderer.rs b/tests/testsuite/renderer.rs index f4e5cabc..98be19c9 100644 --- a/tests/testsuite/renderer.rs +++ b/tests/testsuite/renderer.rs @@ -36,3 +36,39 @@ fn runs_renderers() { let inner = spy.lock().unwrap(); assert_eq!(inner.run_count, 1); } + +// Test renderer with a failing command fails. +#[test] +fn failing_command() { + BookTest::init(|_| {}) + .rust_program( + "failing", + r#" + fn main() { + // Read from stdin to avoid random pipe failures on Linux. + use std::io::Read; + let mut s = String::new(); + std::io::stdin().read_to_string(&mut s).unwrap(); + std::process::exit(1); + } + "#, + ) + .change_file( + "book.toml", + "[output.failing]\n\ + command = './failing'\n", + ) + .run("build", |cmd| { + cmd.expect_failure() + .expect_stdout(str![[""]]) + .expect_stderr(str![[r#" +[TIMESTAMP] [INFO] (mdbook::book): Book building has started +[TIMESTAMP] [INFO] (mdbook::book): Running the failing backend +[TIMESTAMP] [INFO] (mdbook::renderer): Invoking the "failing" renderer +[TIMESTAMP] [ERROR] (mdbook::renderer): Renderer exited with non-zero return code. +[TIMESTAMP] [ERROR] (mdbook::utils): Error: Rendering failed +[TIMESTAMP] [ERROR] (mdbook::utils): [TAB]Caused By: The "failing" renderer failed + +"#]]); + }); +}