Skip to content

Commit cad8dec

Browse files
committed
libtest: print the type of test being run
1 parent a955f1c commit cad8dec

File tree

70 files changed

+190
-79
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+190
-79
lines changed

library/test/src/console.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -257,9 +257,9 @@ fn on_test_event(
257257
out: &mut dyn OutputFormatter,
258258
) -> io::Result<()> {
259259
match (*event).clone() {
260-
TestEvent::TeFiltered(filtered_tests, shuffle_seed) => {
260+
TestEvent::TeFiltered(filtered_tests, shuffle_seed, group_kind) => {
261261
st.total = filtered_tests;
262-
out.write_run_start(filtered_tests, shuffle_seed)?;
262+
out.write_run_start(filtered_tests, shuffle_seed, group_kind)?;
263263
}
264264
TestEvent::TeFilteredOut(filtered_out) => {
265265
st.filtered_out = filtered_out;

library/test/src/event.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
use super::test_result::TestResult;
55
use super::time::TestExecTime;
66
use super::types::{TestDesc, TestId};
7+
use crate::TestGroupKind;
78

89
#[derive(Debug, Clone)]
910
pub struct CompletedTest {
@@ -28,7 +29,7 @@ impl CompletedTest {
2829

2930
#[derive(Debug, Clone)]
3031
pub enum TestEvent {
31-
TeFiltered(usize, Option<u64>),
32+
TeFiltered(usize, Option<u64>, TestGroupKind),
3233
TeWait(TestDesc),
3334
TeResult(CompletedTest),
3435
TeTimeout(TestDesc),

library/test/src/formatters/json.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,12 @@ impl<T: Write> OutputFormatter for JsonFormatter<T> {
9494
))
9595
}
9696

97-
fn write_run_start(&mut self, test_count: usize, shuffle_seed: Option<u64>) -> io::Result<()> {
97+
fn write_run_start(
98+
&mut self,
99+
test_count: usize,
100+
shuffle_seed: Option<u64>,
101+
_kind: super::TestGroupKind,
102+
) -> io::Result<()> {
98103
let shuffle_seed_json = if let Some(shuffle_seed) = shuffle_seed {
99104
format!(r#", "shuffle_seed": {shuffle_seed}"#)
100105
} else {

library/test/src/formatters/junit.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ impl<T: Write> OutputFormatter for JunitFormatter<T> {
5454
&mut self,
5555
_test_count: usize,
5656
_shuffle_seed: Option<u64>,
57+
_group_kind: super::TestGroupKind,
5758
) -> io::Result<()> {
5859
// We write xml header on run start
5960
self.write_message("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
@@ -187,7 +188,7 @@ impl<T: Write> OutputFormatter for JunitFormatter<T> {
187188
fn parse_class_name(desc: &TestDesc) -> (String, String) {
188189
match desc.test_type {
189190
TestType::UnitTest => parse_class_name_unit(desc),
190-
TestType::DocTest => parse_class_name_doc(desc),
191+
TestType::DocTest { merged: _ } => parse_class_name_doc(desc),
191192
TestType::IntegrationTest => parse_class_name_integration(desc),
192193
TestType::Unknown => (String::from("unknown"), String::from(desc.name.as_slice())),
193194
}

library/test/src/formatters/mod.rs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,12 @@ pub(crate) trait OutputFormatter {
2121
fn write_test_discovered(&mut self, desc: &TestDesc, test_type: &str) -> io::Result<()>;
2222
fn write_discovery_finish(&mut self, state: &ConsoleTestDiscoveryState) -> io::Result<()>;
2323

24-
fn write_run_start(&mut self, test_count: usize, shuffle_seed: Option<u64>) -> io::Result<()>;
24+
fn write_run_start(
25+
&mut self,
26+
test_count: usize,
27+
shuffle_seed: Option<u64>,
28+
kind: TestGroupKind,
29+
) -> io::Result<()>;
2530
fn write_test_start(&mut self, desc: &TestDesc) -> io::Result<()>;
2631
fn write_timeout(&mut self, desc: &TestDesc) -> io::Result<()>;
2732
fn write_result(
@@ -43,3 +48,22 @@ pub(crate) fn write_stderr_delimiter(test_output: &mut Vec<u8>, test_name: &Test
4348
}
4449
writeln!(test_output, "---- {test_name} stderr ----").unwrap();
4550
}
51+
52+
/// Controls what type of message is printed when running tests.
53+
#[non_exhaustive]
54+
#[derive(Copy, Clone, Debug)]
55+
pub enum TestGroupKind {
56+
Regular,
57+
DocTestMerged,
58+
DocTestStandalone,
59+
}
60+
61+
impl TestGroupKind {
62+
fn qualifier(&self) -> &str {
63+
match self {
64+
TestGroupKind::Regular => "",
65+
TestGroupKind::DocTestMerged => "merged doc",
66+
TestGroupKind::DocTestStandalone => "standalone doc",
67+
}
68+
}
69+
}

library/test/src/formatters/pretty.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,14 +206,20 @@ impl<T: Write> OutputFormatter for PrettyFormatter<T> {
206206
))
207207
}
208208

209-
fn write_run_start(&mut self, test_count: usize, shuffle_seed: Option<u64>) -> io::Result<()> {
209+
fn write_run_start(
210+
&mut self,
211+
test_count: usize,
212+
shuffle_seed: Option<u64>,
213+
kind: super::TestGroupKind,
214+
) -> io::Result<()> {
210215
let noun = if test_count != 1 { "tests" } else { "test" };
211216
let shuffle_seed_msg = if let Some(shuffle_seed) = shuffle_seed {
212217
format!(" (shuffle seed: {shuffle_seed})")
213218
} else {
214219
String::new()
215220
};
216-
self.write_plain(format!("\nrunning {test_count} {noun}{shuffle_seed_msg}\n"))
221+
let qual = kind.qualifier();
222+
self.write_plain(format!("\nrunning {test_count} {qual}{noun}{shuffle_seed_msg}\n"))
217223
}
218224

219225
fn write_test_start(&mut self, desc: &TestDesc) -> io::Result<()> {

library/test/src/formatters/terse.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,15 +197,21 @@ impl<T: Write> OutputFormatter for TerseFormatter<T> {
197197
Ok(())
198198
}
199199

200-
fn write_run_start(&mut self, test_count: usize, shuffle_seed: Option<u64>) -> io::Result<()> {
200+
fn write_run_start(
201+
&mut self,
202+
test_count: usize,
203+
shuffle_seed: Option<u64>,
204+
kind: super::TestGroupKind,
205+
) -> io::Result<()> {
201206
self.total_test_count = test_count;
202207
let noun = if test_count != 1 { "tests" } else { "test" };
203208
let shuffle_seed_msg = if let Some(shuffle_seed) = shuffle_seed {
204209
format!(" (shuffle seed: {shuffle_seed})")
205210
} else {
206211
String::new()
207212
};
208-
self.write_plain(format!("\nrunning {test_count} {noun}{shuffle_seed_msg}\n"))
213+
let qual = kind.qualifier();
214+
self.write_plain(format!("\nrunning {test_count} {qual}{noun}{shuffle_seed_msg}\n"))
209215
}
210216

211217
fn write_test_start(&mut self, desc: &TestDesc) -> io::Result<()> {

library/test/src/lib.rs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ pub use cli::TestOpts;
3535
pub use self::ColorConfig::*;
3636
pub use self::bench::{Bencher, black_box};
3737
pub use self::console::run_tests_console;
38+
pub use self::formatters::TestGroupKind;
3839
pub use self::options::{ColorConfig, Options, OutputFormat, RunIgnored, ShouldPanic};
3940
pub use self::types::TestName::*;
4041
pub use self::types::*;
@@ -327,6 +328,19 @@ where
327328
if !opts.bench_benchmarks {
328329
filtered_tests = convert_benchmarks_to_tests(filtered_tests);
329330
}
331+
let group_kind = match filtered_tests.get(0).map(|x| x.desc.test_type) {
332+
// if all remaining tests are the same kind of doctest, we will print a different message.
333+
Some(ty @ TestType::DocTest { merged })
334+
if filtered_tests.iter().all(|t| t.desc.test_type == ty) =>
335+
{
336+
if merged {
337+
TestGroupKind::DocTestMerged
338+
} else {
339+
TestGroupKind::DocTestStandalone
340+
}
341+
}
342+
_ => TestGroupKind::Regular,
343+
};
330344

331345
for test in filtered_tests {
332346
let mut desc = test.desc;
@@ -348,7 +362,7 @@ where
348362

349363
let shuffle_seed = get_shuffle_seed(opts);
350364

351-
let event = TestEvent::TeFiltered(filtered.total_len(), shuffle_seed);
365+
let event = TestEvent::TeFiltered(filtered.total_len(), shuffle_seed, group_kind);
352366
notify_about_test_event(event)?;
353367

354368
let concurrency = opts.test_threads.unwrap_or_else(get_concurrency);

library/test/src/time.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ impl TestTimeOptions {
167167
match test.test_type {
168168
TestType::UnitTest => self.unit_threshold.warn,
169169
TestType::IntegrationTest => self.integration_threshold.warn,
170-
TestType::DocTest => self.doctest_threshold.warn,
170+
TestType::DocTest { merged: _ } => self.doctest_threshold.warn,
171171
TestType::Unknown => time_constants::UNKNOWN_WARN,
172172
}
173173
}
@@ -176,7 +176,7 @@ impl TestTimeOptions {
176176
match test.test_type {
177177
TestType::UnitTest => self.unit_threshold.critical,
178178
TestType::IntegrationTest => self.integration_threshold.critical,
179-
TestType::DocTest => self.doctest_threshold.critical,
179+
TestType::DocTest { merged: _ } => self.doctest_threshold.critical,
180180
TestType::Unknown => time_constants::UNKNOWN_CRITICAL,
181181
}
182182
}

library/test/src/types.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ pub enum TestType {
2121
/// Integration-style tests are expected to be in the `tests` folder of the crate.
2222
IntegrationTest,
2323
/// Doctests are created by the `librustdoc` manually, so it's a different type of test.
24-
DocTest,
24+
DocTest { merged: bool },
2525
/// Tests for the sources that don't follow the project layout convention
2626
/// (e.g. tests in raw `main.rs` compiled by calling `rustc --test` directly).
2727
Unknown,
@@ -252,6 +252,7 @@ pub struct TestDescAndFn {
252252
}
253253

254254
impl TestDescAndFn {
255+
/// Generate a new merged doctest
255256
pub const fn new_doctest(
256257
test_name: &'static str,
257258
ignore: bool,
@@ -278,7 +279,7 @@ impl TestDescAndFn {
278279
} else {
279280
options::ShouldPanic::No
280281
},
281-
test_type: TestType::DocTest,
282+
test_type: TestType::DocTest{ merged: true },
282283
},
283284
testfn,
284285
}

0 commit comments

Comments
 (0)