Skip to content

Commit 862f2f7

Browse files
committed
Add --ignored
1 parent 35fe8e8 commit 862f2f7

File tree

4 files changed

+53
-30
lines changed

4 files changed

+53
-30
lines changed

CHANGELOG.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* Support importing memory and using `wasm_bindgen::module()` in Node.js.
1515
[#4349](https://github.com/rustwasm/wasm-bindgen/pull/4349)
1616

17-
* Add `--list` argument to `wasm-bindgen-test-runner`.
17+
* Add `--list` and `ignored` to `wasm-bindgen-test-runner`, analogous to `cargo test`.
1818
[#4356](https://github.com/rustwasm/wasm-bindgen/pull/4356)
1919

2020
### Changed

crates/cli/src/bin/wasm-bindgen-test-runner/main.rs

+16-10
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,10 @@ struct Cli {
3535
help = "The file to test. `cargo test` passes this argument for you."
3636
)]
3737
file: PathBuf,
38-
#[arg(long, help = "Run ignored tests")]
38+
#[arg(long, conflicts_with = "ignored", help = "Run ignored tests")]
3939
include_ignored: bool,
40+
#[arg(long, conflicts_with = "include_ignored", help = "Run ignored tests")]
41+
ignored: bool,
4042
#[arg(
4143
long,
4244
value_name = "FILTER",
@@ -64,6 +66,7 @@ struct Cli {
6466
impl Cli {
6567
fn into_args(self) -> String {
6668
let include_ignored = self.include_ignored;
69+
let ignored = self.ignored;
6770
let skip = self.skip;
6871
let filter = if let Some(filter) = self.filter {
6972
&format!("\"{filter}\"")
@@ -75,6 +78,7 @@ impl Cli {
7578
r#"
7679
// Forward runtime arguments.
7780
cx.include_ignored({include_ignored:?});
81+
cx.ignored({ignored:?});
7882
cx.skip({skip:?});
7983
cx.filter({filter});
8084
"#
@@ -111,19 +115,21 @@ fn main() -> anyhow::Result<()> {
111115

112116
if cli.list {
113117
'outer: for test in tests {
114-
if let Some(filter) = &cli.filter {
115-
if !test.contains(filter) {
116-
continue;
118+
if !cli.ignored || test.starts_with("__wbgt_$") {
119+
if let Some(filter) = &cli.filter {
120+
if !test.contains(filter) {
121+
continue;
122+
}
117123
}
118-
}
119124

120-
for skip in &cli.skip {
121-
if test.contains(skip) {
122-
continue 'outer;
125+
for skip in &cli.skip {
126+
if test.contains(skip) {
127+
continue 'outer;
128+
}
123129
}
124-
}
125130

126-
println!("{}: test", test.split_once("::").unwrap().1);
131+
println!("{}: test", test.split_once("::").unwrap().1);
132+
}
127133
}
128134

129135
// Returning cleanly has the strange effect of outputting

crates/test-macro/src/lib.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -90,12 +90,14 @@ pub fn wasm_bindgen_test(
9090
quote! { cx.execute_sync(test_name, #ident, #should_panic_par, #ignore_par); }
9191
};
9292

93+
let ignore_name = if ignore.is_some() { "$" } else { "" };
94+
9395
let wasm_bindgen_path = attributes.wasm_bindgen_path;
9496
tokens.extend(
9597
quote! {
9698
const _: () = {
9799
#wasm_bindgen_path::__rt::wasm_bindgen::__wbindgen_coverage! {
98-
#[export_name = ::core::concat!("__wbgt_", ::core::module_path!(), "::", ::core::stringify!(#ident))]
100+
#[export_name = ::core::concat!("__wbgt_", #ignore_name, ::core::module_path!(), "::", ::core::stringify!(#ident))]
99101
#[cfg(all(target_arch = "wasm32", any(target_os = "unknown", target_os = "none")))]
100102
extern "C" fn __wbgt_test(cx: &#wasm_bindgen_path::__rt::Context) {
101103
let test_name = ::core::concat!(::core::module_path!(), "::", ::core::stringify!(#ident));

crates/test/src/rt/mod.rs

+33-18
Original file line numberDiff line numberDiff line change
@@ -136,17 +136,20 @@ struct State {
136136
/// Include ignored tests.
137137
include_ignored: Cell<bool>,
138138

139+
/// Include ignored tests.
140+
ignored: Cell<bool>,
141+
139142
/// Tests to skip.
140143
skip: RefCell<Vec<String>>,
141144

142145
/// Counter of the number of tests that have succeeded.
143-
succeeded: Cell<usize>,
146+
succeeded_count: Cell<usize>,
144147

145148
/// Counter of the number of tests that have been filtered
146-
filtered: Cell<usize>,
149+
filtered_count: Cell<usize>,
147150

148151
/// Counter of the number of tests that have been ignored
149-
ignored: Cell<usize>,
152+
ignored_count: Cell<usize>,
150153

151154
/// A list of all tests which have failed.
152155
///
@@ -349,13 +352,14 @@ impl Context {
349352
state: Rc::new(State {
350353
filter: Default::default(),
351354
include_ignored: Default::default(),
355+
ignored: Default::default(),
352356
skip: Default::default(),
353357
failures: Default::default(),
354-
filtered: Default::default(),
355-
ignored: Default::default(),
358+
filtered_count: Default::default(),
359+
ignored_count: Default::default(),
356360
remaining: Default::default(),
357361
running: Default::default(),
358-
succeeded: Default::default(),
362+
succeeded_count: Default::default(),
359363
formatter,
360364
timer,
361365
}),
@@ -367,6 +371,11 @@ impl Context {
367371
self.state.include_ignored.set(include_ignored);
368372
}
369373

374+
/// Handle `--ignored` flag.
375+
pub fn ignored(&mut self, ignored: bool) {
376+
self.state.ignored.set(ignored);
377+
}
378+
370379
/// Handle `--skip` arguments.
371380
pub fn skip(&mut self, skip: Vec<String>) {
372381
*self.state.skip.borrow_mut() = skip;
@@ -547,27 +556,33 @@ impl Context {
547556
let filter = self.state.filter.borrow();
548557
if let Some(filter) = &*filter {
549558
if !name.contains(filter) {
550-
let filtered = self.state.filtered.get();
551-
self.state.filtered.set(filtered + 1);
559+
let filtered = self.state.filtered_count.get();
560+
self.state.filtered_count.set(filtered + 1);
552561
return;
553562
}
554563
}
555564

556565
for skip in &*self.state.skip.borrow() {
557566
if name.contains(skip) {
558-
let filtered = self.state.filtered.get();
559-
self.state.filtered.set(filtered + 1);
567+
let filtered = self.state.filtered_count.get();
568+
self.state.filtered_count.set(filtered + 1);
560569
return;
561570
}
562571
}
563572

564-
if !self.state.include_ignored.get() {
573+
if self.state.ignored.get() && ignore.is_none() {
574+
let filtered = self.state.filtered_count.get();
575+
self.state.filtered_count.set(filtered + 1);
576+
return;
577+
}
578+
579+
if !self.state.include_ignored.get() && !self.state.ignored.get() {
565580
if let Some(ignore) = ignore {
566581
self.state
567582
.formatter
568583
.log_test(name, &TestResult::Ignored(ignore.map(str::to_owned)));
569-
let ignored = self.state.ignored.get();
570-
self.state.ignored.set(ignored + 1);
584+
let ignored = self.state.ignored_count.get();
585+
self.state.ignored_count.set(ignored + 1);
571586
return;
572587
}
573588
}
@@ -665,7 +680,7 @@ impl State {
665680
}
666681

667682
self.formatter.log_test(&test.name, &TestResult::Ok);
668-
self.succeeded.set(self.succeeded.get() + 1);
683+
self.succeeded_count.set(self.succeeded_count.get() + 1);
669684
} else {
670685
self.formatter
671686
.log_test(&test.name, &TestResult::Err(JsValue::NULL));
@@ -677,7 +692,7 @@ impl State {
677692
self.formatter.log_test(&test.name, &result);
678693

679694
match result {
680-
TestResult::Ok => self.succeeded.set(self.succeeded.get() + 1),
695+
TestResult::Ok => self.succeeded_count.set(self.succeeded_count.get() + 1),
681696
TestResult::Err(e) => self.failures.borrow_mut().push((test, Failure::Error(e))),
682697
_ => (),
683698
}
@@ -710,10 +725,10 @@ impl State {
710725
{} filtered out\
711726
{}\n",
712727
if failures.len() == 0 { "ok" } else { "FAILED" },
713-
self.succeeded.get(),
728+
self.succeeded_count.get(),
714729
failures.len(),
715-
self.ignored.get(),
716-
self.filtered.get(),
730+
self.ignored_count.get(),
731+
self.filtered_count.get(),
717732
finished_in,
718733
));
719734
}

0 commit comments

Comments
 (0)