lazy.nvim/tests/manage/semver_spec.lua

99 lines
3.6 KiB
Lua

local Semver = require("lazy.manage.semver")
local function v(version)
return Semver.version(version)
end
describe("semver version", function()
local tests = {
["v1.2.3"] = { major = 1, minor = 2, patch = 3 },
["v1.2"] = { major = 1, minor = 2, patch = 0 },
["v1.2.3-prerelease"] = { major = 1, minor = 2, patch = 3, prerelease = "prerelease" },
["v1.2-prerelease"] = { major = 1, minor = 2, patch = 0, prerelease = "prerelease" },
["v1.2.3-prerelease+build"] = { major = 1, minor = 2, patch = 3, prerelease = "prerelease", build = "build" },
["1.2.3+build"] = { major = 1, minor = 2, patch = 3, build = "build" },
}
for input, output in pairs(tests) do
output.input = input
it("correctly parses " .. input, function()
assert.same(output, v(input))
end)
end
end)
describe("semver range", function()
local tests = {
["1.2.3"] = { from = { 1, 2, 3 }, to = { 1, 2, 4 } },
["1.2"] = { from = { 1, 2, 0 }, to = { 1, 3, 0 } },
["=1.2.3"] = { from = { 1, 2, 3 }, to = { 1, 2, 4 } },
[">1.2.3"] = { from = { 1, 2, 4 } },
[">=1.2.3"] = { from = { 1, 2, 3 } },
["~1.2.3"] = { from = { 1, 2, 3 }, to = { 1, 3, 0 } },
["^1.2.3"] = { from = { 1, 2, 3 }, to = { 2, 0, 0 } },
["^0.2.3"] = { from = { 0, 2, 3 }, to = { 0, 3, 0 } },
["^0.0.1"] = { from = { 0, 0, 1 }, to = { 0, 0, 2 } },
["^1.2"] = { from = { 1, 2, 0 }, to = { 2, 0, 0 } },
["~1.2"] = { from = { 1, 2, 0 }, to = { 1, 3, 0 } },
["~1"] = { from = { 1, 0, 0 }, to = { 2, 0, 0 } },
["^1"] = { from = { 1, 0, 0 }, to = { 2, 0, 0 } },
["1.*"] = { from = { 1, 0, 0 }, to = { 2, 0, 0 } },
["1"] = { from = { 1, 0, 0 }, to = { 2, 0, 0 } },
["1.x"] = { from = { 1, 0, 0 }, to = { 2, 0, 0 } },
["1.2.x"] = { from = { 1, 2, 0 }, to = { 1, 3, 0 } },
["1.2.*"] = { from = { 1, 2, 0 }, to = { 1, 3, 0 } },
["*"] = { from = { 0, 0, 0 } },
["1.2 - 2.3.0"] = { from = { 1, 2, 0 }, to = { 2, 3, 0 } },
["1.2.3 - 2.3.4"] = { from = { 1, 2, 3 }, to = { 2, 3, 4 } },
["1.2.3 - 2"] = { from = { 1, 2, 3 }, to = { 3, 0, 0 } },
}
for input, output in pairs(tests) do
output.from = v(output.from)
output.to = output.to and v(output.to)
local range = Semver.range(input)
it("correctly parses " .. input, function()
assert.same(output, range)
end)
it("from in range " .. input, function()
assert(range:matches(output.from))
end)
it("from - 1 not in range " .. input, function()
local lower = vim.deepcopy(range.from)
lower.major = lower.major - 1
assert(not range:matches(lower))
end)
it("to not in range " .. input .. " to:" .. tostring(range.to), function()
if range.to then
assert(not (range.to < range.to))
assert(not range:matches(range.to))
end
end)
end
it("handles prereleass", function()
assert(not Semver.range("1.2.3"):matches("1.2.3-alpha"))
assert(Semver.range("1.2.3-alpha"):matches("1.2.3-alpha"))
assert(not Semver.range("1.2.3-alpha"):matches("1.2.3-beta"))
end)
end)
describe("semver order", function()
it("is correct", function()
assert(v("v1.2.3") == v("1.2.3"))
assert(not (v("v1.2.3") < v("1.2.3")))
assert(v("v1.2.3") > v("1.2.3-prerelease"))
assert(v("v1.2.3-alpha") < v("1.2.3-beta"))
assert(v("v1.2.3-prerelease") < v("1.2.3"))
assert(v("v1.2.3") >= v("1.2.3"))
assert(v("v1.2.3") >= v("1.0.3"))
assert(v("v1.2.3") >= v("1.2.2"))
assert(v("v1.2.3") > v("1.2.2"))
assert(v("v1.2.3") > v("1.0.3"))
assert.same(Semver.last({ v("1.2.3"), v("2.0.0") }), v("2.0.0"))
assert.same(Semver.last({ v("2.0.0"), v("1.2.3") }), v("2.0.0"))
end)
end)