aboutsummaryrefslogtreecommitdiff
path: root/test/helpers.lua
diff options
context:
space:
mode:
Diffstat (limited to 'test/helpers.lua')
-rw-r--r--test/helpers.lua23
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