summaryrefslogtreecommitdiff
path: root/tests/modules/semver/test.lua
blob: cc1f0c75fe4f2b8b9567ed0a956a135b9dd5f0f5 (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
114
115
116
117
118
119
120
121
122
123
-- imports
import("core.base.semver")

-- select version
function _check_semver_select(results, required_ver, versions, tags, branches)

    -- select it
    local version, source = semver.select(required_ver, versions or {}, tags or {}, branches or {})
    if (version.version or version) ~= results[1] or source ~= results[2] then
        print("semver.select(\"%s\", {\"%s\"}, {\"%s\"}, {\"%s\"})"
            , required_ver
            , table.concat(versions or {}, "\", \"")
            , table.concat(tags     or {}, "\", \"")
            , table.concat(branches or {}, "\", \""))
        raise("{\"%s\", \"%s\"} != {\"%s\", \"%s\"}", version.version or version, source or "", results[1] or "", results[2] or "")
    end
end

-- test select version
function _test_semver_select()

    _check_semver_select({"1.5.1", "versions"}
                        , ">=1.5.0 <1.6.0"
                        , {"1.4.0", "1.5.0", "1.5.1"})

    _check_semver_select({"1.5.1", "versions"}
                        , "^1.5.0"
                        ,{"1.4.0", "1.5.0", "1.5.1"})

    _check_semver_select({"master", "branches"}
                        , "master"
                        , {"1.4.0", "1.5.0", "1.5.1"}
                        , {"v1.2.0", "v1.6.0"}
                        , {"master", "dev"})

    _check_semver_select({"1.5.1", "versions"}
                        , "lastest"
                        , {"1.4.0", "1.5.0", "1.5.1"})

    print("semver.select: ok!")
end

-- select version
function _check_semver_satisfies(expected, version, range)

    -- select it
    local result = semver.satisfies(version, range)
    if expected ~= result then
        print("semver.satisfies(\"%s\", \"%s\")"
            , version
            , range)
        raise("\"%s\" != \"%s\"", expected, result)
    end
end

-- test satisfies version
function _test_semver_satisfies()

    _check_semver_satisfies(true, "1.5.1", ">=1.5.0 <1.6.0")
    _check_semver_satisfies(true, "1.5.1", "^1.5.0")

    print("semver.satisfies: ok!")
end

-- parse version
function _check_semver_parse(version_str, major, minor, patch, prerelease, build)

    -- create it
    local version = semver.parse(version_str)

    if version.major ~= major then
        raise("major: \"%s\" != \"%s\"", version.major or "", major or "")
    end

    if version.minor ~= minor then
        raise("minor: \"%s\" != \"%s\"", version.minor or "", minor or "")
    end

    if version.patch ~= patch then
        raise("patch: \"%s\" != \"%s\"", version.patch or "", patch or "")
    end

    if table.concat(version.prerelease or {}, ".") ~= table.concat(prerelease or {}, ".") then
        raise("prerelease: \"%s\" != \"%s\""
            , table.concat(version.prerelease or {}, ".") or ""
            , table.concat(prerelease or {}, ".") or "")
    end

    if table.concat(version.build or {}, ".") ~= table.concat(build or {}, ".") then
        raise("build: \"%s\" != \"%s\""
            , table.concat(version.build or {}, ".") or ""
            , table.concat(build or {}, ".") or "")
    end
end

-- test parse version
function _test_semver_parse()

    _check_semver_parse("1.2.3", 1, 2, 3)
    _check_semver_parse("1.2.3-beta", 1, 2, 3, {"beta"})
    _check_semver_parse("1.2.3-beta+77", 1, 2, 3, {"beta"}, {"77"})
    _check_semver_parse("v1.2.3-alpha.1+77", 1, 2, 3, {"alpha", "1"}, {"77"})
    _check_semver_parse("v3.2.1-alpha.1+77.foo", 3, 2, 1, {"alpha", "1"}, {"77", "foo"})

    print("semver.parse: ok!")
end

--
-- run tests:
--
-- $ make test name=semver
--
function main()

    -- test semver
    _test_semver_parse()

    -- test semver satisfies
    _test_semver_satisfies()

    -- test select version
    _test_semver_select()
end