aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2019-09-21 17:03:46 -0400
committerJustin M. Keyes <justinkz@gmail.com>2019-09-21 14:03:46 -0700
commitb3e56957f8e9468497e5db508d97d7b560ccfe85 (patch)
treea268fb727adda47f9b3fd729fa3ba5b2f2fe30d7
parentd6f658e38fc6a44dfc43af9eef3ae09452a8c2a5 (diff)
downloadrneovim-b3e56957f8e9468497e5db508d97d7b560ccfe85.tar.gz
rneovim-b3e56957f8e9468497e5db508d97d7b560ccfe85.tar.bz2
rneovim-b3e56957f8e9468497e5db508d97d7b560ccfe85.zip
vim-patch:8.1.0460: assert_fails() message argument #11051
Problem: assert_fails() does not take a message argument Solution: Add the argument. https://github.com/vim/vim/commit/1307d1c003b01b4f67524c95feb07c3d91c7c428
-rw-r--r--src/nvim/eval.c11
-rw-r--r--src/nvim/eval.lua2
-rw-r--r--test/functional/legacy/assert_spec.lua18
3 files changed, 25 insertions, 6 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index 248edfc9cc..7d45787fae 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -7076,7 +7076,7 @@ static void f_assert_exception(typval_T *argvars, typval_T *rettv, FunPtr fptr)
rettv->vval.v_number = assert_exception(argvars);
}
-/// "assert_fails(cmd [, error])" function
+/// "assert_fails(cmd [, error [, msg]])" function
static void f_assert_fails(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
const char *const cmd = tv_get_string_chk(&argvars[0]);
@@ -7094,7 +7094,14 @@ static void f_assert_fails(typval_T *argvars, typval_T *rettv, FunPtr fptr)
if (!called_emsg) {
prepare_assert_error(&ga);
ga_concat(&ga, (const char_u *)"command did not fail: ");
- ga_concat(&ga, (const char_u *)cmd);
+ if (argvars[1].v_type != VAR_UNKNOWN
+ && argvars[2].v_type != VAR_UNKNOWN) {
+ char *const tofree = encode_tv2echo(&argvars[2], NULL);
+ ga_concat(&ga, (char_u *)tofree);
+ xfree(tofree);
+ } else {
+ ga_concat(&ga, (const char_u *)cmd);
+ }
assert_error(&ga);
ga_clear(&ga);
ret = 1;
diff --git a/src/nvim/eval.lua b/src/nvim/eval.lua
index 8efbcc71f1..0ae250e626 100644
--- a/src/nvim/eval.lua
+++ b/src/nvim/eval.lua
@@ -30,7 +30,7 @@ return {
assert_equal={args={2, 3}},
assert_equalfile={args=2},
assert_exception={args={1, 2}},
- assert_fails={args={1, 2}},
+ assert_fails={args={1, 3}},
assert_false={args={1, 2}},
assert_inrange={args={3, 4}},
assert_match={args={2, 3}},
diff --git a/test/functional/legacy/assert_spec.lua b/test/functional/legacy/assert_spec.lua
index 97c1f1405c..3cb5d97869 100644
--- a/test/functional/legacy/assert_spec.lua
+++ b/test/functional/legacy/assert_spec.lua
@@ -3,6 +3,7 @@ local nvim, call = helpers.meths, helpers.call
local clear, eq = helpers.clear, helpers.eq
local source, command = helpers.source, helpers.command
local exc_exec = helpers.exc_exec
+local eval = helpers.eval
local function expected_errors(errors)
eq(errors, nvim.get_vvar('errors'))
@@ -233,20 +234,31 @@ describe('assert function:', function()
-- assert_fails({cmd}, [, {error}])
describe('assert_fails', function()
it('should change v:errors when error does not match v:errmsg', function()
- command([[call assert_fails('xxx', {})]])
+ eq(1, eval([[assert_fails('xxx', {})]]))
command([[call assert_match("Expected {} but got 'E731:", v:errors[0])]])
expected_errors({"Expected {} but got 'E731: using Dictionary as a String'"})
end)
it('should not change v:errors when cmd errors', function()
- call('assert_fails', 'NonexistentCmd')
+ eq(0, eval([[assert_fails('NonexistentCmd')]]))
expected_empty()
end)
it('should change v:errors when cmd succeeds', function()
- call('assert_fails', 'call empty("")')
+ eq(1, eval([[assert_fails('call empty("")', '')]]))
expected_errors({'command did not fail: call empty("")'})
end)
+
+ it('can specify and get a message about what failed', function()
+ eq(1, eval([[assert_fails('xxx', {}, 'stupid')]]))
+ command([[call assert_match("stupid: Expected {} but got 'E731:", v:errors[0])]])
+ expected_errors({"stupid: Expected {} but got 'E731: using Dictionary as a String'"})
+ end)
+
+ it('can specify and get a message even when cmd succeeds', function()
+ eq(1, eval([[assert_fails('echo', '', 'echo command')]]))
+ expected_errors({'command did not fail: echo command'})
+ end)
end)
-- assert_inrange({lower}, {upper}, {actual}[, {msg}])