diff --git a/crates/mdbook-html/src/html_handlebars/helpers/fontawesome.rs b/crates/mdbook-html/src/html_handlebars/helpers/fontawesome.rs index 3ece0973..c4fe1a1d 100644 --- a/crates/mdbook-html/src/html_handlebars/helpers/fontawesome.rs +++ b/crates/mdbook-html/src/html_handlebars/helpers/fontawesome.rs @@ -43,10 +43,14 @@ pub(crate) fn fa_helper( } else { out.write("")?; } - out.write( - fa::svg(type_, name) - .map_err(|_| RenderErrorReason::Other(format!("Missing font {}", name)))?, - )?; + out.write(fa::svg(type_, name).map_err(|_| { + let valid_types = "fas (solid), fab (brands), or far (regular)"; + RenderErrorReason::Other(format!( + "Unknown Font Awesome icon `{name}` for type `{type_}`. \ + Hint: check the icon name and prefix ({valid_types}) at \ + https://fontawesome.com/v6/search?m=free" + )) + })?)?; out.write("")?; Ok(()) diff --git a/tests/testsuite/rendering.rs b/tests/testsuite/rendering.rs index 421aa5d4..c1288298 100644 --- a/tests/testsuite/rendering.rs +++ b/tests/testsuite/rendering.rs @@ -60,6 +60,24 @@ fn fontawesome() { .check_all_main_files(); } +// Verifies that an invalid `git-repository-icon` in book.toml produces a +// helpful error message with the icon name, type, and a link to FontAwesome. +#[test] +fn fontawesome_error_message() { + BookTest::from_dir("rendering/fontawesome_error") + .run("build", |cmd| { + cmd.expect_failure(); + cmd.expect_stderr(str![[r#" + INFO Book building has started + INFO Running the html backend +ERROR Rendering failed +[TAB]Caused by: Error rendering "index" line [..], col [..]: Unknown Font Awesome icon `github` for type `regular`. Hint: check the icon name and prefix (fas (solid), fab (brands), or far (regular)) at https://fontawesome.com/v6/search?m=free +[TAB]Caused by: Unknown Font Awesome icon `github` for type `regular`. Hint: check the icon name and prefix (fas (solid), fab (brands), or far (regular)) at https://fontawesome.com/v6/search?m=free + +"#]]); + }); +} + // Tests the rendering when setting the default rust edition. #[test] fn default_rust_edition() { diff --git a/tests/testsuite/rendering/fontawesome_error/book.toml b/tests/testsuite/rendering/fontawesome_error/book.toml new file mode 100644 index 00000000..940cdeba --- /dev/null +++ b/tests/testsuite/rendering/fontawesome_error/book.toml @@ -0,0 +1,6 @@ +[book] +title = "fontawesome_error" + +[output.html] +git-repository-url = "https://github.com/example/test" +git-repository-icon = "fa-github" diff --git a/tests/testsuite/rendering/fontawesome_error/src/SUMMARY.md b/tests/testsuite/rendering/fontawesome_error/src/SUMMARY.md new file mode 100644 index 00000000..7390c828 --- /dev/null +++ b/tests/testsuite/rendering/fontawesome_error/src/SUMMARY.md @@ -0,0 +1,3 @@ +# Summary + +- [Chapter 1](./chapter_1.md) diff --git a/tests/testsuite/rendering/fontawesome_error/src/chapter_1.md b/tests/testsuite/rendering/fontawesome_error/src/chapter_1.md new file mode 100644 index 00000000..f759ea1f --- /dev/null +++ b/tests/testsuite/rendering/fontawesome_error/src/chapter_1.md @@ -0,0 +1,3 @@ +# Chapter 1 + +Hello, world!