Skip to content

Commit d8e90f7

Browse files
authored
Merge pull request #139 from oli-obk/skippidy
Allow skipping tests via --skip
2 parents 22fd96d + 3537786 commit d8e90f7

File tree

8 files changed

+50
-13
lines changed

8 files changed

+50
-13
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "ui_test"
3-
version = "0.16.1"
3+
version = "0.16.2"
44
edition = "2021"
55
license = "MIT OR Apache-2.0"
66
description = "A test framework for testing rustc diagnostics output"

src/config/args.rs

Lines changed: 38 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
//! Default argument processing when `ui_test` is used
22
//! as a test driver.
33
4-
use std::num::NonZeroUsize;
4+
use std::{borrow::Cow, num::NonZeroUsize};
55

6-
use color_eyre::eyre::{bail, eyre, Result};
6+
use color_eyre::eyre::{bail, ensure, eyre, Result};
77

88
/// Plain arguments if `ui_test` is used as a binary.
99
#[derive(Debug)]
@@ -20,6 +20,9 @@ pub struct Args {
2020

2121
/// The number of threads to use
2222
pub threads: NonZeroUsize,
23+
24+
/// Skip tests whose names contain any of these entries.
25+
pub skip: Vec<String>,
2326
}
2427

2528
impl Args {
@@ -29,6 +32,7 @@ impl Args {
2932
filters: vec![],
3033
quiet: false,
3134
check: false,
35+
skip: vec![],
3236
threads: match std::env::var_os("RUST_TEST_THREADS") {
3337
None => std::thread::available_parallelism()?,
3438
Some(n) => n
@@ -37,24 +41,52 @@ impl Args {
3741
.parse()?,
3842
},
3943
};
40-
for arg in std::env::args().skip(1) {
44+
let mut iter = std::env::args().skip(1);
45+
while let Some(arg) = iter.next() {
4146
if arg == "--" {
4247
continue;
4348
}
4449
if arg == "--quiet" {
4550
args.quiet = true;
4651
} else if arg == "--check" {
4752
args.check = true;
53+
} else if let Some(skip) = parse_value("--skip", &arg, &mut iter)? {
54+
args.skip.push(skip.into_owned());
4855
} else if arg == "--help" {
49-
bail!("available flags: --quiet, --check, --test-threads=n")
50-
} else if let Some(n) = arg.strip_prefix("--test-threads=") {
56+
bail!("available flags: --quiet, --check, --test-threads=n, --skip")
57+
} else if let Some(n) = parse_value("--test-threads", &arg, &mut iter)? {
5158
args.threads = n.parse()?;
5259
} else if arg.starts_with("--") {
53-
bail!("unknown command line flag `{arg}`");
60+
bail!(
61+
"unknown command line flag `{arg}`: {:?}",
62+
std::env::args().collect::<Vec<_>>()
63+
);
5464
} else {
5565
args.filters.push(arg);
5666
}
5767
}
5868
Ok(args)
5969
}
6070
}
71+
72+
fn parse_value<'a>(
73+
name: &str,
74+
arg: &'a str,
75+
iter: &mut impl Iterator<Item = String>,
76+
) -> Result<Option<Cow<'a, str>>> {
77+
let with_eq = match arg.strip_prefix(name) {
78+
Some(s) => s,
79+
None => return Ok(None),
80+
};
81+
if let Some(n) = with_eq.strip_prefix('=') {
82+
Ok(Some(n.into()))
83+
} else {
84+
ensure!(with_eq.is_empty(), "`{name}` can only be followed by `=`");
85+
86+
if let Some(next) = iter.next() {
87+
Ok(Some(next.into()))
88+
} else {
89+
bail!("`name` must be followed by a value")
90+
}
91+
}
92+
}

src/lib.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,12 @@ pub fn run_tests_generic(
250250
for entry in entries {
251251
todo.push_back((entry, config));
252252
}
253-
} else if file_filter(&path, &args, config) {
253+
} else if !args
254+
.skip
255+
.iter()
256+
.any(|skip| path.display().to_string().contains(skip))
257+
&& file_filter(&path, &args, config)
258+
{
254259
let status = status_emitter.register_test(path);
255260
// Forward .rs files to the test workers.
256261
submit.send((status, config)).unwrap();

tests/integrations/basic-bin/Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/integrations/basic-fail-mode/Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/integrations/basic-fail/Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/integrations/basic/Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)