This reverts https://github.com/rust-lang/mdBook/pull/2646/ because I overlooked that this is a public field in a public struct, which would be a breaking API change.
257 lines
5.2 KiB
Rust
257 lines
5.2 KiB
Rust
//! Tests for `mdbook init`.
|
|
|
|
use crate::prelude::*;
|
|
use mdbook::{Config, MDBook};
|
|
use std::path::PathBuf;
|
|
|
|
// Tests "init" with no args.
|
|
#[test]
|
|
fn basic_init() {
|
|
let mut test = BookTest::empty();
|
|
test.run("init", |cmd| {
|
|
cmd.expect_stdout(str![[r#"
|
|
|
|
Do you want a .gitignore to be created? (y/n)
|
|
What title would you like to give the book?
|
|
|
|
All done, no errors...
|
|
|
|
"#]])
|
|
.expect_stderr(str![[r#"
|
|
[TIMESTAMP] [INFO] (mdbook::book::init): Creating a new book with stub content
|
|
|
|
"#]]);
|
|
})
|
|
.check_file(
|
|
"book.toml",
|
|
str![[r#"
|
|
[book]
|
|
authors = []
|
|
language = "en"
|
|
multilingual = false
|
|
src = "src"
|
|
|
|
"#]],
|
|
)
|
|
.check_file(
|
|
"src/SUMMARY.md",
|
|
str
|
|
|
|
"#]],
|
|
)
|
|
.check_file(
|
|
"src/chapter_1.md",
|
|
str![[r#"
|
|
# Chapter 1
|
|
|
|
"#]],
|
|
)
|
|
.check_main_file(
|
|
"book/chapter_1.html",
|
|
str![[r##"<h1 id="chapter-1"><a class="header" href="#chapter-1">Chapter 1</a></h1>"##]],
|
|
);
|
|
assert!(!test.dir.join(".gitignore").exists());
|
|
assert!(test.dir.join("book").exists());
|
|
}
|
|
|
|
// Test init via API. This does a little less than the CLI does.
|
|
#[test]
|
|
fn init_api() {
|
|
let mut test = BookTest::empty();
|
|
MDBook::init(&test.dir).build().unwrap();
|
|
test.check_file_list(
|
|
".",
|
|
str![[r#"
|
|
book
|
|
book.toml
|
|
src
|
|
src/SUMMARY.md
|
|
src/chapter_1.md
|
|
"#]],
|
|
);
|
|
}
|
|
|
|
// Run `mdbook init` with `--force` to skip the confirmation prompts
|
|
#[test]
|
|
fn init_force() {
|
|
let mut test = BookTest::empty();
|
|
test.run("init --force", |cmd| {
|
|
cmd.expect_stdout(str![[r#"
|
|
|
|
All done, no errors...
|
|
|
|
"#]])
|
|
.expect_stderr(str![[r#"
|
|
[TIMESTAMP] [INFO] (mdbook::book::init): Creating a new book with stub content
|
|
|
|
"#]]);
|
|
})
|
|
.check_file(
|
|
"book.toml",
|
|
str![[r#"
|
|
[book]
|
|
authors = []
|
|
language = "en"
|
|
multilingual = false
|
|
src = "src"
|
|
|
|
"#]],
|
|
);
|
|
assert!(!test.dir.join(".gitignore").exists());
|
|
}
|
|
|
|
// Run `mdbook init` with `--title` without git config.
|
|
//
|
|
// Regression test for https://github.com/rust-lang/mdBook/issues/2485
|
|
#[test]
|
|
fn no_git_config_with_title() {
|
|
let mut test = BookTest::empty();
|
|
test.run("init", |cmd| {
|
|
cmd.expect_stdout(str![[r#"
|
|
|
|
Do you want a .gitignore to be created? (y/n)
|
|
|
|
All done, no errors...
|
|
|
|
"#]])
|
|
.expect_stderr(str![[r#"
|
|
[TIMESTAMP] [INFO] (mdbook::book::init): Creating a new book with stub content
|
|
|
|
"#]])
|
|
.args(&["--title", "Example title"]);
|
|
})
|
|
.check_file(
|
|
"book.toml",
|
|
str![[r#"
|
|
[book]
|
|
authors = []
|
|
language = "en"
|
|
multilingual = false
|
|
src = "src"
|
|
title = "Example title"
|
|
|
|
"#]],
|
|
);
|
|
assert!(!test.dir.join(".gitignore").exists());
|
|
}
|
|
|
|
// Run `mdbook init` in a directory containing a SUMMARY.md should create the
|
|
// files listed in the summary.
|
|
#[test]
|
|
fn init_from_summary() {
|
|
BookTest::from_dir("init/init_from_summary")
|
|
.run("init", |_| {})
|
|
.check_file(
|
|
"src/intro.md",
|
|
str![[r#"
|
|
# intro
|
|
|
|
"#]],
|
|
)
|
|
.check_file(
|
|
"src/first.md",
|
|
str![[r#"
|
|
# First chapter
|
|
|
|
"#]],
|
|
)
|
|
.check_file(
|
|
"src/outro.md",
|
|
str![[r#"
|
|
# outro
|
|
|
|
"#]],
|
|
);
|
|
}
|
|
|
|
// Set some custom arguments for where to place the source and destination
|
|
// files, then call `mdbook init`.
|
|
#[test]
|
|
fn init_with_custom_book_and_src_locations() {
|
|
let mut test = BookTest::empty();
|
|
let mut cfg = Config::default();
|
|
cfg.book.src = PathBuf::from("in");
|
|
cfg.build.build_dir = PathBuf::from("out");
|
|
MDBook::init(&test.dir).with_config(cfg).build().unwrap();
|
|
test.check_file(
|
|
"book.toml",
|
|
str![[r#"
|
|
[book]
|
|
authors = []
|
|
language = "en"
|
|
multilingual = false
|
|
src = "in"
|
|
|
|
[build]
|
|
build-dir = "out"
|
|
create-missing = true
|
|
extra-watch-dirs = []
|
|
use-default-preprocessors = true
|
|
|
|
"#]],
|
|
)
|
|
.check_file(
|
|
"in/SUMMARY.md",
|
|
str
|
|
|
|
"#]],
|
|
)
|
|
.check_file(
|
|
"in/chapter_1.md",
|
|
str![[r#"
|
|
# Chapter 1
|
|
|
|
"#]],
|
|
);
|
|
assert!(test.dir.join("out").exists());
|
|
}
|
|
|
|
// Copies the theme into the initialized directory.
|
|
#[test]
|
|
fn copy_theme() {
|
|
BookTest::empty()
|
|
.run("init --theme", |_| {})
|
|
.check_file_list(
|
|
".",
|
|
str![[r#"
|
|
book
|
|
book.toml
|
|
src
|
|
src/SUMMARY.md
|
|
src/chapter_1.md
|
|
theme
|
|
theme/book.js
|
|
theme/css
|
|
theme/css/chrome.css
|
|
theme/css/general.css
|
|
theme/css/print.css
|
|
theme/css/variables.css
|
|
theme/favicon.png
|
|
theme/favicon.svg
|
|
theme/fonts
|
|
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
|
|
theme/highlight.css
|
|
theme/highlight.js
|
|
theme/index.hbs
|
|
"#]],
|
|
);
|
|
}
|