diff options
Diffstat (limited to 'test/helpers.lua')
-rw-r--r-- | test/helpers.lua | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/test/helpers.lua b/test/helpers.lua index c2a708197f..ebc0a7d811 100644 --- a/test/helpers.lua +++ b/test/helpers.lua @@ -73,12 +73,23 @@ function module.matches(pat, actual) end error(string.format('Pattern does not match.\nPattern:\n%s\nActual:\n%s', pat, actual)) end --- Expect an error matching pattern `pat`. -function module.expect_err(pat, ...) - local fn = select(1, ...) - local fn_args = {...} - table.remove(fn_args, 1) - assert.error_matches(function() return fn(unpack(fn_args)) end, pat) + +-- Invokes `fn` and returns the error string, or raises an error if `fn` succeeds. +-- +-- Usage: +-- -- Match exact string. +-- eq('e', pcall_err(function(a, b) error('e') end, 'arg1', 'arg2')) +-- -- Match Lua pattern. +-- matches('e[or]+$', pcall_err(function(a, b) error('some error') end, 'arg1', 'arg2')) +-- +function module.pcall_err(fn, ...) + assert(type(fn) == 'function') + local status, rv = pcall(fn, ...) + if status == true then + error('expected failure, but got success') + end + local errmsg = tostring(rv):gsub('^[^:]+:%d+: ', '') + return errmsg end -- initial_path: directory to recurse into |