1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
//! ref: composer/tests/Composer/Test/Platform/VersionTest.php
use shirabe::platform::version::Version;
use shirabe_semver::VersionParser;
fn provide_openssl_versions() -> Vec<(&'static str, &'static str, bool, Option<&'static str>)> {
vec![
// Generated
("1.2.3", "1.2.3.0", false, None),
("1.2.3-beta3", "1.2.3.0-beta3", false, None),
("1.2.3-beta3-dev", "1.2.3.0-beta3-dev", false, None),
("1.2.3-beta3-fips", "1.2.3.0-beta3", true, None),
("1.2.3-beta3-fips-dev", "1.2.3.0-beta3-dev", true, None),
("1.2.3-dev", "1.2.3.0-dev", false, None),
("1.2.3-fips", "1.2.3.0", true, None),
("1.2.3-fips-beta3", "1.2.3.0-beta3", true, None),
("1.2.3-fips-beta3-dev", "1.2.3.0-beta3-dev", true, None),
("1.2.3-fips-dev", "1.2.3.0-dev", true, None),
("1.2.3-pre2", "1.2.3.0-alpha2", false, None),
("1.2.3-pre2-dev", "1.2.3.0-alpha2-dev", false, None),
("1.2.3-pre2-fips", "1.2.3.0-alpha2", true, None),
("1.2.3-pre2-fips-dev", "1.2.3.0-alpha2-dev", true, None),
("1.2.3a", "1.2.3.1", false, None),
("1.2.3a-beta3", "1.2.3.1-beta3", false, None),
("1.2.3a-beta3-dev", "1.2.3.1-beta3-dev", false, None),
("1.2.3a-dev", "1.2.3.1-dev", false, None),
("1.2.3a-dev-fips", "1.2.3.1-dev", true, None),
("1.2.3a-fips", "1.2.3.1", true, None),
("1.2.3a-fips-beta3", "1.2.3.1-beta3", true, None),
("1.2.3a-fips-dev", "1.2.3.1-dev", true, None),
("1.2.3beta3", "1.2.3.0-beta3", false, None),
("1.2.3beta3-dev", "1.2.3.0-beta3-dev", false, None),
("1.2.3zh", "1.2.3.34", false, None),
("1.2.3zh-dev", "1.2.3.34-dev", false, None),
("1.2.3zh-fips", "1.2.3.34", true, None),
("1.2.3zh-fips-dev", "1.2.3.34-dev", true, None),
// Additional cases
(
"1.2.3zh-fips-rc3",
"1.2.3.34-rc3",
true,
Some("1.2.3.34-RC3"),
),
("1.2.3zh-alpha10-fips", "1.2.3.34-alpha10", true, None),
("1.1.1l (Schannel)", "1.1.1.12", false, None),
// Check that alphabetical patch levels overflow correctly
("1.2.3", "1.2.3.0", false, None),
("1.2.3a", "1.2.3.1", false, None),
("1.2.3z", "1.2.3.26", false, None),
("1.2.3za", "1.2.3.27", false, None),
("1.2.3zy", "1.2.3.51", false, None),
("1.2.3zz", "1.2.3.52", false, None),
// 3.x
("3.0.0", "3.0.0", false, Some("3.0.0.0")),
("3.2.4-dev", "3.2.4-dev", false, Some("3.2.4.0-dev")),
]
}
#[test]
#[ignore]
fn test_parse_openssl_versions() {
for (input, parsed_version, fips_expected, normalized_version) in provide_openssl_versions() {
let mut is_fips = false;
assert_eq!(
Some(parsed_version.to_string()),
Version::parse_openssl(input, &mut is_fips)
);
assert_eq!(fips_expected, is_fips);
let normalized_version = normalized_version.unwrap_or(parsed_version);
assert_eq!(
normalized_version,
VersionParser.normalize(parsed_version, None).unwrap()
);
}
}
#[test]
#[ignore]
fn test_parse_libjpeg_version() {
let cases = [
("9", "9.0"),
("9a", "9.1"),
("9b", "9.2"),
// Never seen in the wild, just for overflow correctness
("9za", "9.27"),
];
for (input, parsed_version) in cases {
assert_eq!(
Some(parsed_version.to_string()),
Version::parse_libjpeg(input)
);
}
}
#[test]
#[ignore]
fn test_parse_zoneinfo_version() {
let cases = [
("2019c", "2019.3"),
("2020a", "2020.1"),
// Never happened so far but fixate overflow behavior
("2020za", "2020.27"),
];
for (input, parsed_version) in cases {
assert_eq!(
Some(parsed_version.to_string()),
Version::parse_zoneinfo_version(input)
);
}
}
|