compiletest: Stricter parsing of //@ normalize-*
headers · rust-lang/rust@e09eedb (original) (raw)
`@@ -3,7 +3,7 @@ use std::path::Path;
`
3
3
`use std::str::FromStr;
`
4
4
``
5
5
`use crate::common::{Config, Debugger, Mode};
`
6
``
`-
use crate::header::{parse_normalization_string, EarlyProps, HeadersCache};
`
``
6
`+
use crate::header::{parse_normalize_rule, EarlyProps, HeadersCache};
`
7
7
``
8
8
`use super::iter_header;
`
9
9
``
`@@ -32,35 +32,41 @@ fn make_test_description<R: Read>(
`
32
32
`}
`
33
33
``
34
34
`#[test]
`
35
``
`-
fn test_parse_normalization_string() {
`
36
``
`-
let mut s = "normalize-stderr-32bit: "something (32 bits)" -> "something ($WORD bits)".";
`
37
``
`-
let first = parse_normalization_string(&mut s);
`
38
``
`-
assert_eq!(first, Some("something (32 bits)".to_owned()));
`
39
``
`-
assert_eq!(s, " -> "something ($WORD bits)".");
`
40
``
-
41
``
`-
// Nothing to normalize (No quotes)
`
42
``
`-
let mut s = "normalize-stderr-32bit: something (32 bits) -> something ($WORD bits).";
`
43
``
`-
let first = parse_normalization_string(&mut s);
`
44
``
`-
assert_eq!(first, None);
`
45
``
`-
assert_eq!(s, r#"normalize-stderr-32bit: something (32 bits) -> something ($WORD bits)."#);
`
46
``
-
47
``
`-
// Nothing to normalize (Only a single quote)
`
48
``
`-
let mut s = "normalize-stderr-32bit: "something (32 bits) -> something ($WORD bits).";
`
49
``
`-
let first = parse_normalization_string(&mut s);
`
50
``
`-
assert_eq!(first, None);
`
51
``
`-
assert_eq!(s, "normalize-stderr-32bit: "something (32 bits) -> something ($WORD bits).");
`
52
``
-
53
``
`-
// Nothing to normalize (Three quotes)
`
54
``
`-
let mut s = "normalize-stderr-32bit: "something (32 bits)" -> "something ($WORD bits).";
`
55
``
`-
let first = parse_normalization_string(&mut s);
`
56
``
`-
assert_eq!(first, Some("something (32 bits)".to_owned()));
`
57
``
`-
assert_eq!(s, " -> "something ($WORD bits).");
`
58
``
-
59
``
`-
// Nothing to normalize (No quotes, 16-bit)
`
60
``
`-
let mut s = "normalize-stderr-16bit: something (16 bits) -> something ($WORD bits).";
`
61
``
`-
let first = parse_normalization_string(&mut s);
`
62
``
`-
assert_eq!(first, None);
`
63
``
`-
assert_eq!(s, r#"normalize-stderr-16bit: something (16 bits) -> something ($WORD bits)."#);
`
``
35
`+
fn test_parse_normalize_rule() {
`
``
36
`+
let good_data = &[
`
``
37
`+
(
`
``
38
`+
r#"normalize-stderr-32bit: "something (32 bits)" -> "something ($WORD bits)""#,
`
``
39
`+
"something (32 bits)",
`
``
40
`+
"something ($WORD bits)",
`
``
41
`+
),
`
``
42
`+
// FIXME(#126370): A colon after the header name should be mandatory,
`
``
43
`+
// but currently is not, and there are many tests that lack the colon.
`
``
44
`+
(
`
``
45
`+
r#"normalize-stderr-32bit "something (32 bits)" -> "something ($WORD bits)""#,
`
``
46
`+
"something (32 bits)",
`
``
47
`+
"something ($WORD bits)",
`
``
48
`+
),
`
``
49
`+
];
`
``
50
+
``
51
`+
for &(input, expected_regex, expected_replacement) in good_data {
`
``
52
`+
let parsed = parse_normalize_rule(input);
`
``
53
`+
let parsed =
`
``
54
`+
parsed.as_ref().map(|(regex, replacement)| (regex.as_str(), replacement.as_str()));
`
``
55
`+
assert_eq!(parsed, Some((expected_regex, expected_replacement)));
`
``
56
`+
}
`
``
57
+
``
58
`+
let bad_data = &[
`
``
59
`+
r#"normalize-stderr-16bit: something (16 bits) -> something ($WORD bits)"#,
`
``
60
`+
r#"normalize-stderr-32bit: something (32 bits) -> something ($WORD bits)"#,
`
``
61
`+
r#"normalize-stderr-32bit: "something (32 bits) -> something ($WORD bits)"#,
`
``
62
`+
r#"normalize-stderr-32bit: "something (32 bits)" -> "something ($WORD bits)"#,
`
``
63
`+
r#"normalize-stderr-32bit: "something (32 bits)" -> "something ($WORD bits)"."#,
`
``
64
`+
];
`
``
65
+
``
66
`+
for &input in bad_data {
`
``
67
`+
let parsed = parse_normalize_rule(input);
`
``
68
`+
assert_eq!(parsed, None);
`
``
69
`+
}
`
64
70
`}
`
65
71
``
66
72
`#[derive(Default)]
`