aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/tests/platform/version_test.rs
blob: c2511d559dc96963add457fea130e99bb30d4537 (plain)
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::version_parser::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 = "compile_php_pattern in the php-shim cannot yet parse Version's PCRE patterns"]
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 = "compile_php_pattern in the php-shim cannot yet parse Version's PCRE patterns"]
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 = "compile_php_pattern in the php-shim cannot yet parse Version's PCRE patterns"]
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)
        );
    }
}