diff options
| author | bors <bors@rust-lang.org> | 2021-02-08 20:52:54 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-02-08 20:52:54 +0000 |
| commit | 0fc6756b42e0556cc2e18079f5fc6b4d58f4e81a (patch) | |
| tree | b772cfec476469c0839bdcc49ef177f0a5229ec5 /library/test/src | |
| parent | 921ec4b3fca17cc777766c240038d7d50ba98e0d (diff) | |
| parent | 9d1e8fe045d8512309fa3303d188ccbf06b9542f (diff) | |
| download | rust-0fc6756b42e0556cc2e18079f5fc6b4d58f4e81a.tar.gz rust-0fc6756b42e0556cc2e18079f5fc6b4d58f4e81a.zip | |
Auto merge of #81889 - m-ou-se:rollup-k63log3, r=m-ou-se
Rollup of 9 pull requests Successful merges: - #71531 (Move treat err as bug tests to ui) - #81356 (libtest: allow multiple filters) - #81735 (faster few span methods) - #81779 (improve error message for disallowed ptr-to-int casts in const eval) - #81817 (Add option to emit compiler stderr per bitwidth.) - #81828 (parse_format: treat r" as a literal) - #81840 (fix formatting of std::iter::Map) - #81861 (Show MIR bytes separately in -Zmeta-stats output) - #81865 (Clean up weird Option mapping) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'library/test/src')
| -rw-r--r-- | library/test/src/cli.rs | 17 | ||||
| -rw-r--r-- | library/test/src/lib.rs | 4 | ||||
| -rw-r--r-- | library/test/src/tests.rs | 35 |
3 files changed, 34 insertions, 22 deletions
diff --git a/library/test/src/cli.rs b/library/test/src/cli.rs index 02c529252e0..c0b5197e997 100644 --- a/library/test/src/cli.rs +++ b/library/test/src/cli.rs @@ -10,7 +10,7 @@ use super::time::TestTimeOptions; #[derive(Debug)] pub struct TestOpts { pub list: bool, - pub filter: Option<String>, + pub filters: Vec<String>, pub filter_exact: bool, pub force_run_in_process: bool, pub exclude_should_panic: bool, @@ -148,12 +148,13 @@ fn optgroups() -> getopts::Options { } fn usage(binary: &str, options: &getopts::Options) { - let message = format!("Usage: {} [OPTIONS] [FILTER]", binary); + let message = format!("Usage: {} [OPTIONS] [FILTERS...]", binary); println!( r#"{usage} The FILTER string is tested against the name of all tests, and only those -tests whose names contain the filter are run. +tests whose names contain the filter are run. Multiple filter strings may +be passed, which will run all tests matching any of the filters. By default, all tests are run in parallel. This can be altered with the --test-threads flag or the RUST_TEST_THREADS environment variable when running @@ -243,7 +244,7 @@ fn parse_opts_impl(matches: getopts::Matches) -> OptRes { let logfile = get_log_file(&matches)?; let run_ignored = get_run_ignored(&matches, include_ignored)?; - let filter = get_filter(&matches)?; + let filters = matches.free.clone(); let nocapture = get_nocapture(&matches)?; let test_threads = get_test_threads(&matches)?; let color = get_color_config(&matches)?; @@ -253,7 +254,7 @@ fn parse_opts_impl(matches: getopts::Matches) -> OptRes { let test_opts = TestOpts { list, - filter, + filters, filter_exact: exact, force_run_in_process, exclude_should_panic, @@ -397,12 +398,6 @@ fn get_run_ignored(matches: &getopts::Matches, include_ignored: bool) -> OptPart Ok(run_ignored) } -fn get_filter(matches: &getopts::Matches) -> OptPartRes<Option<String>> { - let filter = if !matches.free.is_empty() { Some(matches.free[0].clone()) } else { None }; - - Ok(filter) -} - fn get_allow_unstable(matches: &getopts::Matches) -> OptPartRes<bool> { let mut allow_unstable = false; diff --git a/library/test/src/lib.rs b/library/test/src/lib.rs index 3ff79eaea49..c38a8c965be 100644 --- a/library/test/src/lib.rs +++ b/library/test/src/lib.rs @@ -396,8 +396,8 @@ pub fn filter_tests(opts: &TestOpts, tests: Vec<TestDescAndFn>) -> Vec<TestDescA }; // Remove tests that don't match the test filter - if let Some(ref filter) = opts.filter { - filtered.retain(|test| matches_filter(test, filter)); + if !opts.filters.is_empty() { + filtered.retain(|test| opts.filters.iter().any(|filter| matches_filter(test, filter))); } // Skip tests that match any of the skip filters diff --git a/library/test/src/tests.rs b/library/test/src/tests.rs index 154876dde3b..e3c9b386915 100644 --- a/library/test/src/tests.rs +++ b/library/test/src/tests.rs @@ -34,7 +34,7 @@ impl TestOpts { fn new() -> TestOpts { TestOpts { list: false, - filter: None, + filters: vec![], filter_exact: false, force_run_in_process: false, exclude_should_panic: false, @@ -473,43 +473,60 @@ pub fn exact_filter_match() { } let substr = - filter_tests(&TestOpts { filter: Some("base".into()), ..TestOpts::new() }, tests()); + filter_tests(&TestOpts { filters: vec!["base".into()], ..TestOpts::new() }, tests()); assert_eq!(substr.len(), 4); - let substr = filter_tests(&TestOpts { filter: Some("bas".into()), ..TestOpts::new() }, tests()); + let substr = + filter_tests(&TestOpts { filters: vec!["bas".into()], ..TestOpts::new() }, tests()); assert_eq!(substr.len(), 4); let substr = - filter_tests(&TestOpts { filter: Some("::test".into()), ..TestOpts::new() }, tests()); + filter_tests(&TestOpts { filters: vec!["::test".into()], ..TestOpts::new() }, tests()); assert_eq!(substr.len(), 3); let substr = - filter_tests(&TestOpts { filter: Some("base::test".into()), ..TestOpts::new() }, tests()); + filter_tests(&TestOpts { filters: vec!["base::test".into()], ..TestOpts::new() }, tests()); assert_eq!(substr.len(), 3); + let substr = filter_tests( + &TestOpts { filters: vec!["test1".into(), "test2".into()], ..TestOpts::new() }, + tests(), + ); + assert_eq!(substr.len(), 2); + let exact = filter_tests( - &TestOpts { filter: Some("base".into()), filter_exact: true, ..TestOpts::new() }, + &TestOpts { filters: vec!["base".into()], filter_exact: true, ..TestOpts::new() }, tests(), ); assert_eq!(exact.len(), 1); let exact = filter_tests( - &TestOpts { filter: Some("bas".into()), filter_exact: true, ..TestOpts::new() }, + &TestOpts { filters: vec!["bas".into()], filter_exact: true, ..TestOpts::new() }, tests(), ); assert_eq!(exact.len(), 0); let exact = filter_tests( - &TestOpts { filter: Some("::test".into()), filter_exact: true, ..TestOpts::new() }, + &TestOpts { filters: vec!["::test".into()], filter_exact: true, ..TestOpts::new() }, tests(), ); assert_eq!(exact.len(), 0); let exact = filter_tests( - &TestOpts { filter: Some("base::test".into()), filter_exact: true, ..TestOpts::new() }, + &TestOpts { filters: vec!["base::test".into()], filter_exact: true, ..TestOpts::new() }, tests(), ); assert_eq!(exact.len(), 1); + + let exact = filter_tests( + &TestOpts { + filters: vec!["base".into(), "base::test".into()], + filter_exact: true, + ..TestOpts::new() + }, + tests(), + ); + assert_eq!(exact.len(), 2); } #[test] |
