Skip to content

Commit ca86776

Browse files
committed
test(harness): Show current argfile behavior
1 parent f5af618 commit ca86776

6 files changed

Lines changed: 415 additions & 0 deletions

File tree

Lines changed: 195 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,195 @@
1+
use snapbox::prelude::*;
2+
use snapbox::str;
3+
4+
fn test_cmd() -> snapbox::cmd::Command {
5+
static BIN: once_cell_polyfill::sync::OnceLock<(std::path::PathBuf, std::path::PathBuf)> =
6+
once_cell_polyfill::sync::OnceLock::new();
7+
let (bin, current_dir) = BIN.get_or_init(|| {
8+
let package_root = crate::util::new_test(
9+
r#"
10+
fn main() {
11+
use libtest2_mimic::Trial;
12+
use libtest2_mimic::RunError;
13+
libtest2_mimic::Harness::with_env()
14+
.cases(vec![
15+
Trial::test("one", |_| Ok(())),
16+
Trial::test("two", |_| Ok(())),
17+
Trial::test("three", |_| Ok(())),
18+
Trial::test("one_two", |_| Ok(())),
19+
])
20+
.main();
21+
}
22+
"#,
23+
false,
24+
);
25+
let bin = crate::util::compile_test(&package_root);
26+
(bin, package_root)
27+
});
28+
snapbox::cmd::Command::new(bin).current_dir(current_dir)
29+
}
30+
31+
fn check(
32+
args: &[&str],
33+
argfile: &std::path::Path,
34+
code: i32,
35+
single: impl IntoData,
36+
parallel: impl IntoData,
37+
) {
38+
test_cmd()
39+
.arg(format!("@{}", argfile.to_str().unwrap()))
40+
.args(args)
41+
.args(["--test-threads", "1"])
42+
.assert()
43+
.code(code)
44+
.stdout_eq(single);
45+
test_cmd()
46+
.arg(format!("@{}", argfile.to_str().unwrap()))
47+
.args(args)
48+
.assert()
49+
.code(code)
50+
.stdout_eq(parallel);
51+
}
52+
53+
#[test]
54+
fn empty() {
55+
let argfile = crate::util::new_file("argfile-", ".txt", "");
56+
check(
57+
&[],
58+
&argfile,
59+
0,
60+
str![[r#"
61+
62+
running 0 tests
63+
64+
test result: ok. 0 passed; 0 failed; 0 ignored; 4 filtered out; finished in [..]s
65+
66+
67+
"#]],
68+
str![[r#"
69+
70+
running 0 tests
71+
...
72+
73+
test result: ok. 0 passed; 0 failed; 0 ignored; 4 filtered out; finished in [..]s
74+
75+
76+
"#]],
77+
);
78+
}
79+
80+
#[test]
81+
fn list() {
82+
let argfile = crate::util::new_file("argfile-", ".txt", "--list");
83+
check(
84+
&[],
85+
&argfile,
86+
0,
87+
str![[r#"
88+
89+
running 0 tests
90+
91+
test result: ok. 0 passed; 0 failed; 0 ignored; 4 filtered out; finished in [..]s
92+
93+
94+
"#]],
95+
str![[r#"
96+
97+
running 0 tests
98+
...
99+
100+
test result: ok. 0 passed; 0 failed; 0 ignored; 4 filtered out; finished in [..]s
101+
102+
103+
"#]],
104+
);
105+
}
106+
107+
#[test]
108+
fn multiline() {
109+
let argfile = crate::util::new_file(
110+
"argfile-",
111+
".txt",
112+
"one
113+
two
114+
--exact",
115+
);
116+
check(
117+
&[],
118+
&argfile,
119+
0,
120+
str![[r#"
121+
122+
running 0 tests
123+
124+
test result: ok. 0 passed; 0 failed; 0 ignored; 4 filtered out; finished in [..]s
125+
126+
127+
"#]],
128+
str![[r#"
129+
130+
running 0 tests
131+
...
132+
133+
test result: ok. 0 passed; 0 failed; 0 ignored; 4 filtered out; finished in [..]s
134+
135+
136+
"#]],
137+
);
138+
}
139+
140+
#[test]
141+
fn mixed() {
142+
let argfile = crate::util::new_file(
143+
"argfile-", ".txt", "one
144+
two",
145+
);
146+
check(
147+
&["--exact"],
148+
&argfile,
149+
0,
150+
str![[r#"
151+
152+
running 0 tests
153+
154+
test result: ok. 0 passed; 0 failed; 0 ignored; 4 filtered out; finished in [..]s
155+
156+
157+
"#]],
158+
str![[r#"
159+
160+
running 0 tests
161+
...
162+
163+
test result: ok. 0 passed; 0 failed; 0 ignored; 4 filtered out; finished in [..]s
164+
165+
166+
"#]],
167+
);
168+
}
169+
170+
#[test]
171+
fn invalid() {
172+
let argfile = std::path::Path::new("highly-improbably-non-existent-file.txt");
173+
check(
174+
&[],
175+
argfile,
176+
0,
177+
str![[r#"
178+
179+
running 0 tests
180+
181+
test result: ok. 0 passed; 0 failed; 0 ignored; 4 filtered out; finished in [..]s
182+
183+
184+
"#]],
185+
str![[r#"
186+
187+
running 0 tests
188+
...
189+
190+
test result: ok. 0 passed; 0 failed; 0 ignored; 4 filtered out; finished in [..]s
191+
192+
193+
"#]],
194+
);
195+
}

crates/libtest2-mimic/tests/testsuite/main.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
mod all_passing;
2+
mod argfile;
23
mod main_thread;
34
mod mixed_bag;
45
mod panic;

crates/libtest2-mimic/tests/testsuite/util.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,15 @@ harness = {harness}
4040
package_root
4141
}
4242

43+
pub fn new_file(name_prefix: &str, name_suffix: &str, content: &str) -> std::path::PathBuf {
44+
static SUFFIX: std::sync::atomic::AtomicU32 = std::sync::atomic::AtomicU32::new(0);
45+
let suffix = SUFFIX.fetch_add(1, std::sync::atomic::Ordering::SeqCst);
46+
let name = format!("{name_prefix}{suffix}{name_suffix}");
47+
let path = tempdir().join(name);
48+
std::fs::write(&path, content).unwrap();
49+
path
50+
}
51+
4352
pub fn compile_test(package_root: &std::path::Path) -> std::path::PathBuf {
4453
let manifest_path = package_root.join("Cargo.toml");
4554
let target_name = package_root.file_name().unwrap().to_str().unwrap();

0 commit comments

Comments
 (0)