mdbook/tests/testsuite/test.rs
Eric Huss 841c68d05e Fix test for nightly panic message change
A recent nightly changed the format of the panic message. This updates
the test that was matching against this so it doesn't match the text
that has changed.
2025-08-09 16:45:41 -07:00

89 lines
2.7 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_driver::mdbook): Testing chapter 'Intro': "intro.md"
[TIMESTAMP] [INFO] (mdbook_driver::mdbook): Testing chapter 'Passing 1': "passing1.md"
[TIMESTAMP] [INFO] (mdbook_driver::mdbook): 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_driver::mdbook): Testing chapter 'Failing Tests': "failing.md"
[TIMESTAMP] [ERROR] (mdbook_driver::mdbook): rustdoc returned an error:
--- stdout
...
test failing.md - Failing_Tests (line 3) ... FAILED
...
thread [..] panicked at failing.md:3:1:
fail
...
[TIMESTAMP] [INFO] (mdbook_driver::mdbook): Testing chapter 'Failing Include': "failing_include.md"
[TIMESTAMP] [ERROR] (mdbook_driver::mdbook): rustdoc returned an error:
--- stdout
...
test failing_include.md - Failing_Include (line 3) ... FAILED
...
thread [..] 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_driver::mdbook): 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_driver::mdbook): 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
"#]]);
});
}