aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/tests/package/version/version_parser_test.rs
blob: cddb382295c8b63869fb6dd869c947ad664e21a7 (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
//! ref: composer/tests/Composer/Test/Package/Version/VersionParserTest.php

use indexmap::IndexMap;
use shirabe::package::version::version_parser::VersionParser;

fn pairs(items: &[&str]) -> Vec<String> {
    items.iter().map(|s| s.to_string()).collect()
}

fn entry(fields: &[(&str, &str)]) -> IndexMap<String, String> {
    fields
        .iter()
        .map(|(k, v)| (k.to_string(), v.to_string()))
        .collect()
}

#[test]
#[ignore = "parseNameVersionPairs uses a lookbehind/lookahead pattern the regex crate cannot compile"]
fn test_parse_name_version_pairs() {
    for (input, result) in provide_parse_name_version_pairs_data() {
        let version_parser = VersionParser::new();

        assert_eq!(result, version_parser.parse_name_version_pairs(input).unwrap());
    }
}

fn provide_parse_name_version_pairs_data() -> Vec<(Vec<String>, Vec<IndexMap<String, String>>)> {
    vec![
        (
            pairs(&["php:^7.0"]),
            vec![entry(&[("name", "php"), ("version", "^7.0")])],
        ),
        (
            pairs(&["php", "^7.0"]),
            vec![entry(&[("name", "php"), ("version", "^7.0")])],
        ),
        (
            pairs(&["php", "ext-apcu"]),
            vec![entry(&[("name", "php")]), entry(&[("name", "ext-apcu")])],
        ),
        (
            pairs(&["foo/*", "bar*", "acme/baz", "*@dev"]),
            vec![
                entry(&[("name", "foo/*")]),
                entry(&[("name", "bar*")]),
                entry(&[("name", "acme/baz"), ("version", "*@dev")]),
            ],
        ),
        (
            pairs(&["php", "*"]),
            vec![entry(&[("name", "php"), ("version", "*")])],
        ),
    ]
}

#[test]
#[ignore = "VersionParser::is_upgrade reaches a todo!() in the php-shim"]
fn test_is_upgrade() {
    for (from, to, expected) in provide_is_upgrade_tests() {
        assert_eq!(expected, VersionParser::is_upgrade(&from, &to).unwrap());
    }
}

fn provide_is_upgrade_tests() -> Vec<(String, String, bool)> {
    vec![
        ("0.9.0.0".to_string(), "1.0.0.0".to_string(), true),
        ("1.0.0.0".to_string(), "0.9.0.0".to_string(), false),
        (
            "1.0.0.0".to_string(),
            VersionParser::DEFAULT_BRANCH_ALIAS.to_string(),
            true,
        ),
        (
            VersionParser::DEFAULT_BRANCH_ALIAS.to_string(),
            VersionParser::DEFAULT_BRANCH_ALIAS.to_string(),
            true,
        ),
        (
            VersionParser::DEFAULT_BRANCH_ALIAS.to_string(),
            "1.0.0.0".to_string(),
            false,
        ),
        ("1.0.0.0".to_string(), "dev-foo".to_string(), true),
        ("dev-foo".to_string(), "dev-foo".to_string(), true),
        ("dev-foo".to_string(), "1.0.0.0".to_string(), true),
    ]
}