Skip to content

Instantly share code, notes, and snippets.

@matthiesenj
Created June 26, 2024 15:22
Show Gist options
  • Save matthiesenj/f97a7022c0740dc41c1776de23a80957 to your computer and use it in GitHub Desktop.
Save matthiesenj/f97a7022c0740dc41c1776de23a80957 to your computer and use it in GitHub Desktop.
Adapt luassert failure messages to luanit to avoid luaunit interpreting them as errors
-- execute dofile("luassert_luaunit_adapter.lua")
-- then execute dofile("file_with_your_tests.lua"
local luaunit = require("luaunit")
local astate = require("luassert.state")
local util = require("luassert.util")
---prepends LuaUnit FAILURE_PREFIX to luassert custom failure message
---in order to make LuaUnit pick up test failures as failures instead of errors.
local function prepender(state, arguments, level)
local failure_message = rawget(state, "failure_message")
if util.hastostring(failure_message) then
failure_message = luaunit.FAILURE_PREFIX .. tostring(failure_message)
elseif failure_message ~= nil then
failure_message = luaunit.FAILURE_PREFIX .. astate.format_argument(failure_message)
else
failure_message = luaunit.FAILURE_PREFIX
end
state.failure_message = failure_message
end
---patch assert.register function to register modifier
---for assertions which get registered later.
local assert = require("luassert.assert")
local org_register = rawget(assert, "register")
assert.register = function(self, nspace, name, callback, positive_message, negative_message)
if nspace == "assertion" then
org_register(self, "modifier", name, prepender)
end
org_register(self, nspace, name, callback, positive_message, negative_message)
end
---register modifier for already registered assertions
---(e.g. in case luassert.assertions was already loaded)
local namespace = require("luassert.namespaces")
for k, _ in pairs(namespace.assertion or {}) do
assert:register("modifier", k, prepender)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment