mdbook/tests/testsuite/theme.rs
Eric Huss 3e5ec749ba Remove copy-fonts
This removes the deprecated `output.html.copy-fonts` option. This was
deprecated in https://github.com/rust-lang/mdBook/pull/1987. The
behavior now is that the default fonts are copied over unless there is a
custom `theme/fonts/fonts.css` file.
2025-08-12 17:56:14 -07:00

178 lines
5.5 KiB
Rust

//! Tests for theme handling.
use crate::prelude::*;
// Checks what happens if the theme directory is missing.
#[test]
fn missing_theme() {
BookTest::from_dir("theme/missing_theme")
.run("build", |cmd| {
cmd.expect_failure()
.expect_stderr(str![[r#"
[TIMESTAMP] [INFO] (mdbook_driver::mdbook): Book building has started
[TIMESTAMP] [INFO] (mdbook_driver::mdbook): Running the html backend
[TIMESTAMP] [ERROR] (mdbook_core::utils): Error: Rendering failed
[TIMESTAMP] [ERROR] (mdbook_core::utils): [TAB]Caused By: theme dir [ROOT]/./non-existent-directory does not exist
"#]]);
});
}
// Checks what happens if the theme directory is empty.
#[test]
fn empty_theme() {
BookTest::from_dir("theme/empty_theme").run("build", |cmd| {
std::fs::create_dir(cmd.dir.join("theme")).unwrap();
cmd.expect_stderr(str![[r#"
[TIMESTAMP] [INFO] (mdbook_driver::mdbook): Book building has started
[TIMESTAMP] [INFO] (mdbook_driver::mdbook): Running the html backend
[TIMESTAMP] [INFO] (mdbook_html::html_handlebars::hbs_renderer): HTML book written to `[ROOT]/book`
"#]]);
});
}
// Checks overriding index.hbs.
#[test]
fn override_index() {
BookTest::from_dir("theme/override_index").check_file(
"book/index.html",
str![[r#"
This is a modified index.hbs!
"#]],
);
}
// After building, what are the default set of fonts?
#[test]
fn default_fonts() {
BookTest::init(|_| {})
.check_file_contains("book/index.html", "fonts/fonts.css")
.check_file_list(
"book/fonts",
str![[r#"
book/fonts/OPEN-SANS-LICENSE.txt
book/fonts/SOURCE-CODE-PRO-LICENSE.txt
book/fonts/fonts.css
book/fonts/open-sans-v17-all-charsets-300.woff2
book/fonts/open-sans-v17-all-charsets-300italic.woff2
book/fonts/open-sans-v17-all-charsets-600.woff2
book/fonts/open-sans-v17-all-charsets-600italic.woff2
book/fonts/open-sans-v17-all-charsets-700.woff2
book/fonts/open-sans-v17-all-charsets-700italic.woff2
book/fonts/open-sans-v17-all-charsets-800.woff2
book/fonts/open-sans-v17-all-charsets-800italic.woff2
book/fonts/open-sans-v17-all-charsets-italic.woff2
book/fonts/open-sans-v17-all-charsets-regular.woff2
book/fonts/source-code-pro-v11-all-charsets-500.woff2
"#]],
);
}
// When the theme is initialized, what does the fonts list look like?
#[test]
fn theme_fonts_copied() {
BookTest::init(|bb| {
bb.copy_theme(true);
})
.check_file_contains("book/index.html", "fonts/fonts.css")
.check_file_list(
"theme/fonts",
str![[r#"
theme/fonts/OPEN-SANS-LICENSE.txt
theme/fonts/SOURCE-CODE-PRO-LICENSE.txt
theme/fonts/fonts.css
theme/fonts/open-sans-v17-all-charsets-300.woff2
theme/fonts/open-sans-v17-all-charsets-300italic.woff2
theme/fonts/open-sans-v17-all-charsets-600.woff2
theme/fonts/open-sans-v17-all-charsets-600italic.woff2
theme/fonts/open-sans-v17-all-charsets-700.woff2
theme/fonts/open-sans-v17-all-charsets-700italic.woff2
theme/fonts/open-sans-v17-all-charsets-800.woff2
theme/fonts/open-sans-v17-all-charsets-800italic.woff2
theme/fonts/open-sans-v17-all-charsets-italic.woff2
theme/fonts/open-sans-v17-all-charsets-regular.woff2
theme/fonts/source-code-pro-v11-all-charsets-500.woff2
"#]],
)
.check_file_list(
"book/fonts",
str![[r#"
book/fonts/OPEN-SANS-LICENSE.txt
book/fonts/SOURCE-CODE-PRO-LICENSE.txt
book/fonts/fonts.css
book/fonts/open-sans-v17-all-charsets-300.woff2
book/fonts/open-sans-v17-all-charsets-300italic.woff2
book/fonts/open-sans-v17-all-charsets-600.woff2
book/fonts/open-sans-v17-all-charsets-600italic.woff2
book/fonts/open-sans-v17-all-charsets-700.woff2
book/fonts/open-sans-v17-all-charsets-700italic.woff2
book/fonts/open-sans-v17-all-charsets-800.woff2
book/fonts/open-sans-v17-all-charsets-800italic.woff2
book/fonts/open-sans-v17-all-charsets-italic.woff2
book/fonts/open-sans-v17-all-charsets-regular.woff2
book/fonts/source-code-pro-v11-all-charsets-500.woff2
"#]],
);
}
// Custom fonts.css.
#[test]
fn fonts_css() {
BookTest::from_dir("theme/fonts_css")
.check_file_contains("book/index.html", "fonts/fonts.css")
.check_file(
"book/fonts/fonts.css",
str![[r#"
/*custom*/
"#]],
)
.check_file("book/fonts/myfont.woff", str![[""]])
.check_file_list(
"book/fonts",
str![[r#"
book/fonts/fonts.css
book/fonts/myfont.woff
"#]],
);
}
// Empty fonts.css should not copy the default fonts.
#[test]
fn empty_fonts_css() {
BookTest::from_dir("theme/empty_fonts_css")
.run("build", |cmd| {
cmd.expect_stderr(str![[r#"
[TIMESTAMP] [INFO] (mdbook_driver::mdbook): Book building has started
[TIMESTAMP] [INFO] (mdbook_driver::mdbook): Running the html backend
[TIMESTAMP] [INFO] (mdbook_html::html_handlebars::hbs_renderer): HTML book written to `[ROOT]/book`
"#]]);
})
.check_file_contains("book/index.html", "fonts.css")
.check_file_list("book/fonts", str![[""]]);
}
// Custom fonts.css file shouldn't copy default fonts.
#[test]
fn custom_fonts_css() {
BookTest::from_dir("theme/custom_fonts_css")
.run("build", |cmd| {
cmd.expect_stderr(str![[r#"
[TIMESTAMP] [INFO] (mdbook_driver::mdbook): Book building has started
[TIMESTAMP] [INFO] (mdbook_driver::mdbook): Running the html backend
[TIMESTAMP] [INFO] (mdbook_html::html_handlebars::hbs_renderer): HTML book written to `[ROOT]/book`
"#]]);
})
.check_file_contains("book/index.html", "fonts.css")
.check_file_list(
"book/fonts",
str![[r#"
book/fonts/fonts.css
book/fonts/myfont.woff
"#]],
);
}