Skip to content
/ rust Public
forked from rust-lang/rust

Commit 48ad35d

Browse files
authored
Rollup merge of rust-lang#125822 - Urgau:print-check-cfg-refactor-test, r=jieyouxu
Refactor `--print=check-cfg` test *as asked in rust-lang#125818 (comment) r? ``@jieyouxu``
2 parents 35622d7 + a7e7848 commit 48ad35d

File tree

1 file changed

+86
-64
lines changed

1 file changed

+86
-64
lines changed

tests/run-make/print-check-cfg/rmake.rs

+86-64
Original file line numberDiff line numberDiff line change
@@ -8,61 +8,70 @@ use std::ops::Deref;
88

99
use run_make_support::rustc;
1010

11+
struct CheckCfg {
12+
args: &'static [&'static str],
13+
contains: Contains,
14+
}
15+
16+
enum Contains {
17+
Some { contains: &'static [&'static str], doesnt_contain: &'static [&'static str] },
18+
Only(&'static str),
19+
}
20+
1121
fn main() {
12-
check(
13-
/*args*/ &[],
14-
/*has_any*/ false,
15-
/*has_any_any*/ true,
16-
/*contains*/ &[],
17-
);
18-
check(
19-
/*args*/ &["--check-cfg=cfg()"],
20-
/*has_any*/ false,
21-
/*has_any_any*/ false,
22-
/*contains*/ &["unix", "miri"],
23-
);
24-
check(
25-
/*args*/ &["--check-cfg=cfg(any())"],
26-
/*has_any*/ true,
27-
/*has_any_any*/ false,
28-
/*contains*/ &["windows", "test"],
29-
);
30-
check(
31-
/*args*/ &["--check-cfg=cfg(feature)"],
32-
/*has_any*/ false,
33-
/*has_any_any*/ false,
34-
/*contains*/ &["unix", "miri", "feature"],
35-
);
36-
check(
37-
/*args*/ &[r#"--check-cfg=cfg(feature, values(none(), "", "test", "lol"))"#],
38-
/*has_any*/ false,
39-
/*has_any_any*/ false,
40-
/*contains*/ &["feature", "feature=\"\"", "feature=\"test\"", "feature=\"lol\""],
41-
);
42-
check(
43-
/*args*/
44-
&[
22+
check(CheckCfg { args: &[], contains: Contains::Only("any()=any()") });
23+
check(CheckCfg {
24+
args: &["--check-cfg=cfg()"],
25+
contains: Contains::Some {
26+
contains: &["unix", "miri"],
27+
doesnt_contain: &["any()", "any()=any()"],
28+
},
29+
});
30+
check(CheckCfg {
31+
args: &["--check-cfg=cfg(any())"],
32+
contains: Contains::Some {
33+
contains: &["any()", "unix", r#"target_feature="crt-static""#],
34+
doesnt_contain: &["any()=any()"],
35+
},
36+
});
37+
check(CheckCfg {
38+
args: &["--check-cfg=cfg(feature)"],
39+
contains: Contains::Some {
40+
contains: &["unix", "miri", "feature"],
41+
doesnt_contain: &["any()", "any()=any()", "feature=none()", "feature="],
42+
},
43+
});
44+
check(CheckCfg {
45+
args: &[r#"--check-cfg=cfg(feature, values(none(), "", "test", "lol"))"#],
46+
contains: Contains::Some {
47+
contains: &["feature", "feature=\"\"", "feature=\"test\"", "feature=\"lol\""],
48+
doesnt_contain: &["any()", "any()=any()", "feature=none()", "feature="],
49+
},
50+
});
51+
check(CheckCfg {
52+
args: &[
4553
r#"--check-cfg=cfg(feature, values(any()))"#,
4654
r#"--check-cfg=cfg(feature, values("tmp"))"#,
4755
],
48-
/*has_any*/ false,
49-
/*has_any_any*/ false,
50-
/*contains*/ &["unix", "miri", "feature=any()"],
51-
);
52-
check(
53-
/*args*/
54-
&[
56+
contains: Contains::Some {
57+
contains: &["unix", "miri", "feature=any()"],
58+
doesnt_contain: &["any()", "any()=any()", "feature", "feature=", "feature=\"tmp\""],
59+
},
60+
});
61+
check(CheckCfg {
62+
args: &[
5563
r#"--check-cfg=cfg(has_foo, has_bar)"#,
5664
r#"--check-cfg=cfg(feature, values("tmp"))"#,
5765
r#"--check-cfg=cfg(feature, values("tmp"))"#,
5866
],
59-
/*has_any*/ false,
60-
/*has_any_any*/ false,
61-
/*contains*/ &["has_foo", "has_bar", "feature=\"tmp\""],
62-
);
67+
contains: Contains::Some {
68+
contains: &["has_foo", "has_bar", "feature=\"tmp\""],
69+
doesnt_contain: &["any()", "any()=any()", "feature"],
70+
},
71+
});
6372
}
6473

65-
fn check(args: &[&str], has_any: bool, has_any_any: bool, contains: &[&str]) {
74+
fn check(CheckCfg { args, contains }: CheckCfg) {
6675
let output = rustc()
6776
.input("lib.rs")
6877
.arg("-Zunstable-options")
@@ -72,18 +81,11 @@ fn check(args: &[&str], has_any: bool, has_any_any: bool, contains: &[&str]) {
7281

7382
let stdout = String::from_utf8(output.stdout).unwrap();
7483

75-
let mut found_any = false;
76-
let mut found_any_any = false;
7784
let mut found = HashSet::<String>::new();
78-
let mut recorded = HashSet::<String>::new();
7985

8086
for l in stdout.lines() {
8187
assert!(l == l.trim());
82-
if l == "any()" {
83-
found_any = true;
84-
} else if l == "any()=any()" {
85-
found_any_any = true;
86-
} else if let Some((left, right)) = l.split_once('=') {
88+
if let Some((left, right)) = l.split_once('=') {
8789
if right != "any()" && right != "" {
8890
assert!(right.starts_with("\""));
8991
assert!(right.ends_with("\""));
@@ -92,17 +94,37 @@ fn check(args: &[&str], has_any: bool, has_any_any: bool, contains: &[&str]) {
9294
} else {
9395
assert!(!l.contains("\""));
9496
}
95-
assert!(recorded.insert(l.to_string()), "{}", &l);
96-
if contains.contains(&l) {
97-
assert!(found.insert(l.to_string()), "{}", &l);
98-
}
97+
assert!(found.insert(l.to_string()), "{}", &l);
9998
}
10099

101-
let should_found = HashSet::<String>::from_iter(contains.iter().map(|s| s.to_string()));
102-
let diff: Vec<_> = should_found.difference(&found).collect();
103-
104-
assert_eq!(found_any, has_any);
105-
assert_eq!(found_any_any, has_any_any);
106-
assert_eq!(found_any_any, recorded.len() == 1);
107-
assert!(diff.is_empty(), "{:?} != {:?} (~ {:?})", &should_found, &found, &diff);
100+
match contains {
101+
Contains::Some { contains, doesnt_contain } => {
102+
{
103+
let should_found =
104+
HashSet::<String>::from_iter(contains.iter().map(|s| s.to_string()));
105+
let diff: Vec<_> = should_found.difference(&found).collect();
106+
assert!(
107+
diff.is_empty(),
108+
"should found: {:?}, didn't found {:?}",
109+
&should_found,
110+
&diff
111+
);
112+
}
113+
{
114+
let should_not_find =
115+
HashSet::<String>::from_iter(doesnt_contain.iter().map(|s| s.to_string()));
116+
let diff: Vec<_> = should_not_find.intersection(&found).collect();
117+
assert!(
118+
diff.is_empty(),
119+
"should not find {:?}, did found {:?}",
120+
&should_not_find,
121+
&diff
122+
);
123+
}
124+
}
125+
Contains::Only(only) => {
126+
assert!(found.contains(&only.to_string()), "{:?} != {:?}", &only, &found);
127+
assert!(found.len() == 1, "len: {}, instead of 1", found.len());
128+
}
129+
}
108130
}

0 commit comments

Comments
 (0)