From f558f990224d128ca8efa3da04c2753d9bddec70 Mon Sep 17 00:00:00 2001 From: kikito Date: Tue, 20 Oct 2015 10:01:39 +0200 Subject: [PATCH] Refactor assertions to get more useful error messages --- spec/custom_assertions.lua | 21 +++++++ spec/semver_spec.lua | 110 +++++++++++++++++++------------------ 2 files changed, 77 insertions(+), 54 deletions(-) create mode 100644 spec/custom_assertions.lua diff --git a/spec/custom_assertions.lua b/spec/custom_assertions.lua new file mode 100644 index 0000000..7446cb9 --- /dev/null +++ b/spec/custom_assertions.lua @@ -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") + + diff --git a/spec/semver_spec.lua b/spec/semver_spec.lua index e6bccbf..c356af5 100644 --- a/spec/semver_spec.lua +++ b/spec/semver_spec.lua @@ -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)