-
-
Notifications
You must be signed in to change notification settings - Fork 28
Expand file tree
/
Copy pathtest-version.lua
More file actions
133 lines (127 loc) · 4.35 KB
/
test-version.lua
File metadata and controls
133 lines (127 loc) · 4.35 KB
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
124
125
126
127
128
129
130
131
132
133
--
-- Tests for the `version` module
--
local Version = require 'Version'
local tasty = require 'tasty'
local group = tasty.test_group
local test = tasty.test_case
local assert = tasty.assert
return {
group 'constructor' {
test('has type `userdata`', function ()
assert.are_same(type(Version {2}), 'userdata')
end),
test('accepts list of integers', function ()
assert.are_same(type(Version {2, 7, 3}), 'userdata')
end),
test('accepts a single integer', function ()
assert.are_same(Version(5), Version {5})
end),
test('accepts version as string', function ()
assert.are_same(
Version '4.45.1',
Version {4, 45, 1}
)
end),
test('non-version string is rejected', function ()
local success, msg = pcall(function () return Version '11friends' end)
assert.is_falsy(success)
assert.is_truthy(tostring(msg):match('11friends'))
end)
},
group 'comparison' {
test('smaller (equal) than', function ()
assert.is_truthy(Version {2, 58, 3} < Version {2, 58, 4})
assert.is_falsy(Version {2, 60, 1} < Version {2, 59, 2})
assert.is_truthy(Version {0, 14, 3} < Version {0, 14, 3, 1})
assert.is_truthy(Version {3, 58, 3} <= Version {4})
assert.is_truthy(Version {0, 14, 3} <= Version {0, 14, 3, 1})
end),
test('larger (equal) than', function ()
assert.is_truthy(Version{2,58,3} > Version {2, 57, 4})
assert.is_truthy(Version{2,58,3} > Version {2, 58, 2})
assert.is_truthy(Version {0, 8} >= Version {0, 8})
assert.is_falsy(Version {0, 8} >= Version {0, 8, 2})
end),
test('equality', function ()
assert.is_truthy(Version '8.8', Version {8, 8})
end),
test('second argument can be a version string', function ()
assert.is_truthy(Version '8' < '9.1')
assert.is_falsy(Version '8.8' < '8.7')
end),
test('equality test works with value not usable as a version', function ()
assert.is_falsy(Version '8' == function() end)
end),
test('other comparisons fail if one value is not a version', function ()
assert.error_matches(
function () return Version '8' < (function() end) end,
'could not peek Version'
)
assert.error_matches(
function () return Version '8' <= (function() end) end,
'could not peek Version'
)
assert.error_matches(
function () return Version '8' > (function() end) end,
'could not peek Version'
)
end)
},
group 'conversion to string' {
test('converting from and to string is a noop', function ()
local version_string = '1.19.4'
assert.are_equal(tostring(Version(version_string)), version_string)
end)
},
group 'convenience functions' {
test('throws error if version is too old', function ()
local actual = Version {2, 8}
local expected = Version {2, 9}
assert.error_matches(
function () actual:must_be_at_least(expected) end,
'expected version 2.9 or newer, got 2.8'
)
end),
test('does nothing if expected version is older than actual', function ()
local actual = Version '2.9'
local expected = Version '2.8'
actual:must_be_at_least(expected)
end),
test('does nothing if expected version equals to actual', function ()
local actual = Version '2.8'
local expected = Version '2.8'
actual:must_be_at_least(expected)
end)
},
group 'list-like behavior' {
test('can access version component numbers', function ()
local version = Version '2.7.3'
assert.is_nil(version[0])
assert.are_equal(version[1], 2)
assert.are_equal(version[2], 7)
assert.are_equal(version[3], 3)
end),
test('can be iterated over', function ()
local version_list = {2, 7, 3}
local final_index = 0
for i, v in pairs(Version(version_list)) do
assert.are_equal(v, version_list[i])
final_index = i
end
assert.are_equal(final_index, 3)
end),
test('length is the number of components', function ()
assert.are_equal(#(Version '0'), 1)
assert.are_equal(#(Version '1.6'), 2)
assert.are_equal(#(Version '8.7.5'), 3)
assert.are_equal(#(Version '2.9.1.5'), 4)
end),
test('branches can be modified', function ()
local v = Version '5.3.6'
v[2] = 2
v[3] = nil
assert.are_equal(v, Version '5.2')
end)
}
}