mirror of
https://github.com/TangentFoxy/semver.lua.git
synced 2025-07-27 18:42:21 +00:00
Refactor assertions to get more useful error messages
This commit is contained in:
21
spec/custom_assertions.lua
Normal file
21
spec/custom_assertions.lua
Normal file
@@ -0,0 +1,21 @@
|
||||
local assert = require("luassert")
|
||||
local say = require("say")
|
||||
|
||||
local function less(state, arguments)
|
||||
return arguments[1] < arguments[2]
|
||||
end
|
||||
|
||||
local function greater(state, arguments)
|
||||
return arguments[1] > arguments[2]
|
||||
end
|
||||
|
||||
say:set_namespace("en")
|
||||
say:set("assertion.less.positive", "Expected %s to be smaller than %s")
|
||||
say:set("assertion.less.negative", "Expected %s to not be smaller than %s")
|
||||
assert:register("assertion", "less", less, "assertion.less.positive", "assertion.less.negative")
|
||||
|
||||
say:set("assertion.greater.positive", "Expected %s to be greater than %s")
|
||||
say:set("assertion.greater.negative", "Expected %s to not be greater than %s")
|
||||
assert:register("assertion", "greater", greater, "assertion.greater.positive", "assertion.greater.negative")
|
||||
|
||||
|
@@ -1,3 +1,5 @@
|
||||
require 'spec.custom_assertions'
|
||||
|
||||
local v = require 'semver'
|
||||
|
||||
local function checkVersion(ver, major, minor, patch, prerelease, build)
|
||||
@@ -128,100 +130,100 @@ describe('semver', function()
|
||||
|
||||
describe("<", function()
|
||||
test("true if major < minor", function()
|
||||
assert.is_true(v'1.100.10' < v'2.0.0')
|
||||
assert.less(v'1.100.10', v'2.0.0')
|
||||
end)
|
||||
test("false if major > minor", function()
|
||||
assert.is_true(v'2' > v'1')
|
||||
assert.greater(v'2', v'1')
|
||||
end)
|
||||
test("true if major = major but minor < minor", function()
|
||||
assert.is_true(v'1.2.0' < v'1.3.0')
|
||||
assert.less(v'1.2.0', v'1.3.0')
|
||||
end)
|
||||
test("false if minor < minor", function()
|
||||
assert.is_false(v'1.1' < v'1.0')
|
||||
assert.greater(v'1.1', v'1.0')
|
||||
end)
|
||||
test("true if major =, minor =, but patch <", function()
|
||||
assert.is_true(v'0.0.1' < v'0.0.10')
|
||||
assert.less(v'0.0.1', v'0.0.10')
|
||||
end)
|
||||
test("false if major =, minor =, but patch >", function()
|
||||
assert.is_true(v'0.0.2' > v'0.0.1')
|
||||
assert.greater(v'0.0.2', v'0.0.1')
|
||||
end)
|
||||
describe("prereleases", function()
|
||||
test("false if exact same prerelease", function()
|
||||
assert.is_false(v'1.0.0-beta' < v'1.0.0-beta')
|
||||
assert.not_less(v'1.0.0-beta', v'1.0.0-beta')
|
||||
end)
|
||||
test("#focus a prerelease version is less than the official version", function()
|
||||
assert.is_true(v'1.0.0-rc1' < v'1.0.0')
|
||||
assert.is_true(v'1.2.3' > v'1.2.3-alpha')
|
||||
assert.is_false(v'1.0.0-rc1' > v'1.0.0')
|
||||
assert.is_false(v'1.2.3' < v'1.2.3-alpha')
|
||||
assert.less(v'1.0.0-rc1', v'1.0.0')
|
||||
assert.not_greater(v'1.0.0-rc1', v'1.0.0')
|
||||
assert.greater(v'1.2.3', v'1.2.3-alpha')
|
||||
assert.not_less(v'1.2.3', v'1.2.3-alpha')
|
||||
end)
|
||||
test("identifiers with only digits are compared numerically", function()
|
||||
assert.is_true(v'1.0.0-1' < v'1.0.0-2')
|
||||
assert.is_false(v'1.0.0-1' > v'1.0.0-2')
|
||||
assert.less(v'1.0.0-1', v'1.0.0-2')
|
||||
assert.not_greater(v'1.0.0-1', v'1.0.0-2')
|
||||
end)
|
||||
test("idendifiers with letters or dashes are compared lexiconumerically", function()
|
||||
assert.is_true(v'1.0.0-alpha' < v'1.0.0-beta')
|
||||
assert.is_true(v'1.0.0-alpha-10' < v'1.0.0-alpha-2')
|
||||
assert.is_false(v'1.0.0-alpha' > v'1.0.0-beta')
|
||||
assert.is_false(v'1.0.0-alpha-10' > v'1.0.0-alpha-2')
|
||||
assert.less(v'1.0.0-alpha', v'1.0.0-beta')
|
||||
assert.less(v'1.0.0-alpha-10', v'1.0.0-alpha-2')
|
||||
assert.not_greater(v'1.0.0-alpha', v'1.0.0-beta')
|
||||
assert.not_greater(v'1.0.0-alpha-10', v'1.0.0-alpha-2')
|
||||
end)
|
||||
test("numerical ids always have less priority than lexiconumericals", function()
|
||||
assert.is_true(v'1.0.0-1' < v'1.0.0-alpha')
|
||||
assert.is_true(v'1.0.0-2' < v'1.0.0-1asdf')
|
||||
assert.is_false(v'1.0.0-1' > v'1.0.0-alpha')
|
||||
assert.is_false(v'1.0.0-2' > v'1.0.0-1asdf')
|
||||
assert.less(v'1.0.0-1', v'1.0.0-alpha')
|
||||
assert.less(v'1.0.0-2', v'1.0.0-1asdf')
|
||||
assert.not_greater(v'1.0.0-1', v'1.0.0-alpha')
|
||||
assert.not_greater(v'1.0.0-2', v'1.0.0-1asdf')
|
||||
end)
|
||||
test("identifiers can be separated by colons; they must be compared individually", function()
|
||||
--assert.is_true(v'1.0.0-alpha' < v'1.0.0-alpha.1')
|
||||
--assert.is_true(v'1.0.0-alpha.1' < v'1.0.0-beta.2')
|
||||
--assert.is_true(v'1.0.0-beta.2' < v'1.0.0-beta.11')
|
||||
--assert.is_true(v'1.0.0-beta.11' < v'1.0.0-rc.1')
|
||||
assert.is_false(v'1.0.0-alpha' > v'1.0.0-alpha.1')
|
||||
--assert.is_false(v'1.0.0-alpha.1' > v'1.0.0-beta.2')
|
||||
--assert.is_false(v'1.0.0-beta.2' > v'1.0.0-beta.11')
|
||||
--assert.is_false(v'1.0.0-beta.11' > v'1.0.0-rc.1')
|
||||
--assert.less(v'1.0.0-alpha' , v'1.0.0-alpha.1')
|
||||
--assert.less(v'1.0.0-alpha.1' , v'1.0.0-beta.2')
|
||||
--assert.less(v'1.0.0-beta.2' , v'1.0.0-beta.11')
|
||||
--assert.less(v'1.0.0-beta.11' , v'1.0.0-rc.1')
|
||||
assert.not_greater(v'1.0.0-alpha', v'1.0.0-alpha.1')
|
||||
--assert.not_greater(v'1.0.0-alpha.1', v'1.0.0-beta.2')
|
||||
--assert.not_greater(v'1.0.0-beta.2' , v'1.0.0-beta.11')
|
||||
--assert.not_greater(v'1.0.0-beta.11', v'1.0.0-rc.1')
|
||||
end)
|
||||
end)
|
||||
describe("builds", function()
|
||||
test("false if exact same build", function()
|
||||
assert.is_false(v'1.0.0+build1' < v'1.0.0+build1')
|
||||
assert.not_less(v'1.0.0+build1', v'1.0.0+build1')
|
||||
end)
|
||||
test("a regular (not-build) version is always less than a build version", function()
|
||||
assert.is_true(v'1.0.0' < v'1.0.0+12')
|
||||
assert.is_false(v'1.0.0' > v'1.0.0+12')
|
||||
assert.less(v'1.0.0', v'1.0.0+12')
|
||||
assert.less(v'1.0.0', v'1.0.0+12')
|
||||
end)
|
||||
test("identifiers with only digits are compared numerically", function()
|
||||
assert.is_true(v'1.0.0+1' < v'1.0.0+2')
|
||||
assert.is_true(v'1.0.0+2' < v'1.0.0+10')
|
||||
assert.is_false(v'1.0.0+1' > v'1.0.0+2')
|
||||
assert.is_false(v'1.0.0+2' > v'1.0.0+10')
|
||||
assert.less(v'1.0.0+1', v'1.0.0+2')
|
||||
assert.less(v'1.0.0+2', v'1.0.0+10')
|
||||
assert.not_greater(v'1.0.0+1', v'1.0.0+2')
|
||||
assert.not_greater(v'1.0.0+2', v'1.0.0+10')
|
||||
end)
|
||||
test("idendifiers with letters or dashes are compared lexiconumerically", function()
|
||||
assert.is_true(v'1.0.0+build1' < v'1.0.0+build2')
|
||||
assert.is_true(v'1.0.0+build10' < v'1.0.0+build2')
|
||||
assert.is_false(v'1.0.0+build1' > v'1.0.0+build2')
|
||||
assert.is_false(v'1.0.0+build10' > v'1.0.0+build2')
|
||||
assert.less(v'1.0.0+build1' , v'1.0.0+build2')
|
||||
assert.less(v'1.0.0+build10', v'1.0.0+build2')
|
||||
assert.not_greater(v'1.0.0+build1' , v'1.0.0+build2')
|
||||
assert.not_greater(v'1.0.0+build10' , v'1.0.0+build2')
|
||||
end)
|
||||
test("numerical ids always have less priority than lexiconumericals", function()
|
||||
assert.is_true(v'1.0.0+1' < v'1.0.0+build1')
|
||||
assert.is_true(v'1.0.0+2' < v'1.0.0+1build')
|
||||
assert.is_false(v'1.0.0+1' > v'1.0.0+build1')
|
||||
assert.is_false(v'1.0.0+2' > v'1.0.0+1build')
|
||||
assert.less(v'1.0.0+1', v'1.0.0+build1')
|
||||
assert.less(v'1.0.0+2', v'1.0.0+1build')
|
||||
assert.not_greater(v'1.0.0+1', v'1.0.0+build1')
|
||||
assert.not_greater(v'1.0.0+2', v'1.0.0+1build')
|
||||
end)
|
||||
test("identifiers can be separated by colons; they must be compared individually", function()
|
||||
assert.is_true(v'1.0.0+0.3.7' < v'1.3.7+build')
|
||||
assert.is_true(v'1.3.7+build' < v'1.3.7+build.2.b8f12d7')
|
||||
assert.is_true(v'1.3.7+build.2.b8f12d7' < v'1.3.7+build.11.e0f985a')
|
||||
assert.is_false(v'1.0.0+0.3.7' > v'1.3.7+build')
|
||||
assert.is_false(v'1.3.7+build' > v'1.3.7+build.2.b8f12d7')
|
||||
assert.is_false(v'1.3.7+build.2.b8f12d7' > v'1.3.7+build.11.e0f985a')
|
||||
assert.less(v'1.0.0+0.3.7', v'1.3.7+build')
|
||||
assert.less(v'1.3.7+build', v'1.3.7+build.2.b8f12d7')
|
||||
assert.less(v'1.3.7+build.2.b8f12d7', v'1.3.7+build.11.e0f985a')
|
||||
assert.not_greater(v'1.0.0+0.3.7', v'1.3.7+build')
|
||||
assert.not_greater(v'1.3.7+build', v'1.3.7+build.2.b8f12d7')
|
||||
assert.not_greater(v'1.3.7+build.2.b8f12d7', v'1.3.7+build.11.e0f985a')
|
||||
end)
|
||||
end)
|
||||
test("#focus prereleases + builds", function()
|
||||
--assert.is_true(v'1.0.0-rc.1' < v'1.0.0-rc.1+build.1')
|
||||
--assert.is_true(v'1.0.0-rc.1+build.1' < v'1.0.0')
|
||||
--assert.is_false(v'1.0.0-rc.1' > v'1.0.0-rc.1+build.1')
|
||||
assert.is_false(v'1.0.0-rc.1+build.1' > v'1.0.0')
|
||||
--assert.less(v'1.0.0-rc.1', v'1.0.0-rc.1+build.1')
|
||||
--assert.less(v'1.0.0-rc.1+build.1', v'1.0.0')
|
||||
--assert.not_greater(v'1.0.0-rc.1', v'1.0.0-rc.1+build.1')
|
||||
assert.not_greater(v'1.0.0-rc.1+build.1', v'1.0.0')
|
||||
end)
|
||||
end)
|
||||
|
||||
|
Reference in New Issue
Block a user