diff options
-rw-r--r-- | src/nvim/eval.c | 12 | ||||
-rw-r--r-- | test/functional/eval/special_vars_spec.lua | 17 |
2 files changed, 25 insertions, 4 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 22a12d353a..63fd392a3a 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -7587,16 +7587,20 @@ static void f_assert_equal(typval_T *argvars, typval_T *rettv) } // Common for assert_true() and assert_false(). -static void assert_bool(typval_T *argvars, bool isTrue) +static void assert_bool(typval_T *argvars, bool is_true) { int error = (int)false; garray_T ga; - if (argvars[0].v_type != VAR_NUMBER || - (get_tv_number_chk(&argvars[0], &error) == 0) == isTrue || error) { + if ((argvars[0].v_type != VAR_NUMBER || + (get_tv_number_chk(&argvars[0], &error) == 0) == is_true || error) + && (argvars[0].v_type != VAR_SPECIAL + || argvars[0].vval.v_special != (is_true + ?kSpecialVarTrue + :kSpecialVarFalse))) { prepare_assert_error(&ga); fill_assert_error(&ga, &argvars[1], - (char_u *)(isTrue ? "True" : "False"), + (char_u *)(is_true ? "True" : "False"), NULL, &argvars[0]); assert_error(&ga); ga_clear(&ga); diff --git a/test/functional/eval/special_vars_spec.lua b/test/functional/eval/special_vars_spec.lua index b5c65d23d9..7539261d49 100644 --- a/test/functional/eval/special_vars_spec.lua +++ b/test/functional/eval/special_vars_spec.lua @@ -151,4 +151,21 @@ describe('Special values', function() eq('Vim(echo):E15: Cannot index a special value', exc_exec('echo v:false[0]')) eq('Vim(echo):E15: Cannot index a special value', exc_exec('echo v:null[0]')) end) + + it('is accepted by assert_true and assert_false', function() + funcs.assert_false(false) + funcs.assert_false(true) + eval('assert_false(v:null)') + + funcs.assert_true(false) + funcs.assert_true(true) + eval('assert_true(v:null)') + + eq({ + 'Expected False but got v:true', + 'Expected False but got v:null', + 'Expected True but got v:false', + 'Expected True but got v:null', + }, meths.get_vvar('errors')) + end) end) |