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)]

`