mdbook/tests/testsuite/test.rs
Eric Huss fc76a47d6e Finish move of utils to mdbook-core
This updates everything for the move of utils to mdbook-core. There will
be followup commits that will be moving and refactoring these utils.
This simply moves them over unchanged (except visibility).
2025-07-23 17:29:55 -07:00

89 lines
2.6 KiB
Rust

//! Tests for the `mdbook test` command.
use crate::prelude::*;
// Simple test for passing tests.
#[test]
fn passing_tests() {
BookTest::from_dir("test/passing_tests").run("test", |cmd| {
cmd.expect_stdout(str![[""]]).expect_stderr(str![[r#"
[TIMESTAMP] [INFO] (mdbook::book): Testing chapter 'Intro': "intro.md"
[TIMESTAMP] [INFO] (mdbook::book): Testing chapter 'Passing 1': "passing1.md"
[TIMESTAMP] [INFO] (mdbook::book): Testing chapter 'Passing 2': "passing2.md"
"#]]);
});
}
// Test for a test failure
#[test]
fn failing_tests() {
BookTest::from_dir("test/failing_tests").run("test", |cmd| {
cmd.expect_code(101)
.expect_stdout(str![[""]])
// This redacts a large number of lines that come from rustdoc and
// libtest. If the output from those ever changes, then it would not
// make it possible to test against different versions of Rust. This
// still includes a little bit of output, so if that is a problem,
// add more redactions.
.expect_stderr(str![[r#"
[TIMESTAMP] [INFO] (mdbook::book): Testing chapter 'Failing Tests': "failing.md"
[TIMESTAMP] [ERROR] (mdbook::book): rustdoc returned an error:
--- stdout
...
test failing.md - Failing_Tests (line 3) ... FAILED
...
thread 'main' panicked at failing.md:3:1:
fail
...
[TIMESTAMP] [INFO] (mdbook::book): Testing chapter 'Failing Include': "failing_include.md"
[TIMESTAMP] [ERROR] (mdbook::book): rustdoc returned an error:
--- stdout
...
test failing_include.md - Failing_Include (line 3) ... FAILED
...
thread 'main' panicked at failing_include.md:3:1:
failing!
...
[TIMESTAMP] [ERROR] (mdbook_core::utils): Error: One or more tests failed
"#]]);
});
}
// Test with a specific chapter.
#[test]
fn test_individual_chapter() {
let mut test = BookTest::from_dir("test/passing_tests");
test.run("test -c", |cmd| {
cmd.args(&["Passing 1"])
.expect_stdout(str![[""]])
.expect_stderr(str![[r#"
[TIMESTAMP] [INFO] (mdbook::book): Testing chapter 'Passing 1': "passing1.md"
"#]]);
})
// Can also be a source path.
.run("test -c passing2.md", |cmd| {
cmd.expect_stdout(str![[""]]).expect_stderr(str![[r#"
[TIMESTAMP] [INFO] (mdbook::book): Testing chapter 'Passing 2': "passing2.md"
"#]]);
});
}
// Unknown chapter name.
#[test]
fn chapter_not_found() {
BookTest::from_dir("test/passing_tests").run("test -c bogus", |cmd| {
cmd.expect_failure()
.expect_stdout(str![[""]])
.expect_stderr(str![[r#"
[TIMESTAMP] [ERROR] (mdbook_core::utils): Error: Chapter not found: bogus
"#]]);
});
}