Don't special-case if there is only one merged doctest

This commit is contained in:
Guillaume Gomez 2024-07-08 15:01:17 +02:00
parent 72aeffa78c
commit 4b1db071d1
7 changed files with 44 additions and 68 deletions

View File

@ -267,39 +267,35 @@ pub(crate) fn run_tests(
if doctests.is_empty() {
continue;
}
// If there is only one mergeable doctest, the cost to run it would be higher than just
// running it alonside standalone doctests.
if doctests.len() > 1 {
doctests.sort_by(|(_, a), (_, b)| a.name.cmp(&b.name));
doctests.sort_by(|(_, a), (_, b)| a.name.cmp(&b.name));
let mut tests_runner = runner::DocTestRunner::new();
let mut tests_runner = runner::DocTestRunner::new();
let rustdoc_test_options = IndividualTestOptions::new(
&rustdoc_options,
&Some(format!("merged_doctest_{edition}")),
PathBuf::from(format!("doctest_{edition}.rs")),
);
let rustdoc_test_options = IndividualTestOptions::new(
&rustdoc_options,
&Some(format!("merged_doctest_{edition}")),
PathBuf::from(format!("doctest_{edition}.rs")),
);
for (doctest, scraped_test) in &doctests {
tests_runner.add_test(doctest, scraped_test, &target_str);
}
if let Ok(success) = tests_runner.run_merged_tests(
rustdoc_test_options,
edition,
&opts,
&test_args,
rustdoc_options,
) {
ran_edition_tests += 1;
if !success {
nb_errors += 1;
}
continue;
}
// We failed to compile all compatible tests as one so we push them into the
// `standalone_tests` doctests.
debug!("Failed to compile compatible doctests for edition {} all at once", edition);
for (doctest, scraped_test) in &doctests {
tests_runner.add_test(doctest, scraped_test, &target_str);
}
if let Ok(success) = tests_runner.run_merged_tests(
rustdoc_test_options,
edition,
&opts,
&test_args,
rustdoc_options,
) {
ran_edition_tests += 1;
if !success {
nb_errors += 1;
}
continue;
}
// We failed to compile all compatible tests as one so we push them into the
// `standalone_tests` doctests.
debug!("Failed to compile compatible doctests for edition {} all at once", edition);
for (doctest, scraped_test) in doctests {
doctest.generate_unique_doctest(
&scraped_test.text,

View File

@ -1,11 +1,11 @@
running 1 test
test $DIR/failed-doctest-should-panic.rs - Foo (line 9) ... FAILED
test $DIR/failed-doctest-should-panic.rs - Foo (line 9) - should panic ... FAILED
failures:
---- $DIR/failed-doctest-should-panic.rs - Foo (line 9) stdout ----
Test executable succeeded, but it's marked `should_panic`.
note: test did not panic as expected
failures:
$DIR/failed-doctest-should-panic.rs - Foo (line 9)

View File

@ -1,7 +1,12 @@
running 3 tests
running 1 test
test $DIR/wrong-ast-2024.rs - three (line 17) - should panic ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in $TIME
running 2 tests
test $DIR/wrong-ast-2024.rs - one (line 7) ... FAILED
test $DIR/wrong-ast-2024.rs - three (line 17) ... ok
test $DIR/wrong-ast-2024.rs - two (line 12) ... FAILED
failures:
@ -32,5 +37,5 @@ failures:
$DIR/wrong-ast-2024.rs - one (line 7)
$DIR/wrong-ast-2024.rs - two (line 12)
test result: FAILED. 1 passed; 2 failed; 0 ignored; 0 measured; 0 filtered out; finished in $TIME
test result: FAILED. 0 passed; 2 failed; 0 ignored; 0 measured; 0 filtered out; finished in $TIME

View File

@ -1,7 +1,6 @@
//@ compile-flags:--test --test-args=--test-threads=1
//@ normalize-stdout-test: "tests/rustdoc-ui/doctest" -> "$$DIR"
//@ normalize-stdout-test "finished in \d+\.\d+s" -> "finished in $$TIME"
//@ normalize-stdout-test ".rs:\d+:\d+" -> ".rs:$$LINE:$$COL"
//@ failure-status: 101
/// ```

View File

@ -1,14 +1,14 @@
running 3 tests
test $DIR/wrong-ast.rs - one (line 7) ... FAILED
test $DIR/wrong-ast.rs - three (line 17) ... ok
test $DIR/wrong-ast.rs - two (line 12) ... FAILED
test $DIR/wrong-ast.rs - one (line 6) ... FAILED
test $DIR/wrong-ast.rs - three (line 16) ... ok
test $DIR/wrong-ast.rs - two (line 11) ... FAILED
failures:
---- $DIR/wrong-ast.rs - one (line 7) stdout ----
---- $DIR/wrong-ast.rs - one (line 6) stdout ----
error[E0758]: unterminated block comment
--> $DIR/wrong-ast.rs:$LINE:$COL
--> $DIR/wrong-ast.rs:7:1
|
LL | /* plop
| ^^^^^^^
@ -17,9 +17,9 @@ error: aborting due to 1 previous error
For more information about this error, try `rustc --explain E0758`.
Couldn't compile the test.
---- $DIR/wrong-ast.rs - two (line 12) stdout ----
---- $DIR/wrong-ast.rs - two (line 11) stdout ----
error: unexpected closing delimiter: `}`
--> $DIR/wrong-ast.rs:$LINE:$COL
--> $DIR/wrong-ast.rs:12:1
|
LL | } mod __doctest_1 { fn main() {
| ^ unexpected closing delimiter
@ -29,8 +29,8 @@ error: aborting due to 1 previous error
Couldn't compile the test.
failures:
$DIR/wrong-ast.rs - one (line 7)
$DIR/wrong-ast.rs - two (line 12)
$DIR/wrong-ast.rs - one (line 6)
$DIR/wrong-ast.rs - two (line 11)
test result: FAILED. 1 passed; 2 failed; 0 ignored; 0 measured; 0 filtered out; finished in $TIME

View File

@ -1,17 +0,0 @@
// This test ensures that if there is only one mergeable doctest, then it is
// instead run as part of standalone doctests.
//@ compile-flags:--test --test-args=--test-threads=1 -Zunstable-options --edition 2024
//@ normalize-stdout-test: "tests/rustdoc-ui" -> "$$DIR"
//@ normalize-stdout-test "finished in \d+\.\d+s" -> "finished in $$TIME"
//@ normalize-stdout-test ".rs:\d+:\d+" -> ".rs:$$LINE:$$COL"
//@ check-pass
/// ```
/// let x = 12;
/// ```
///
/// ```compile_fail
/// let y = x;
/// ```
pub fn one() {}

View File

@ -1,7 +0,0 @@
running 2 tests
test $DIR/run-as-standalone.rs - one (line 10) ... ok
test $DIR/run-as-standalone.rs - one (line 14) - compile fail ... ok
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in $TIME