# HG changeset patch # User Bram Moolenaar # Date 1582395304 -3600 # Node ID 0d3dcb4476ba48760962150ef4864cb6c63c4fa2 # Parent 5bb16fb9c9d1b28bb268da4b05b317cc63a32c85 patch 8.2.0299: Vim9: ISN_STORE with argument not tested Commit: https://github.com/vim/vim/commit/8ed04587d3cd53e29be20fde9c36e619ea7da4dc Author: Bram Moolenaar Date: Sat Feb 22 19:07:28 2020 +0100 patch 8.2.0299: Vim9: ISN_STORE with argument not tested Problem: Vim9: ISN_STORE with argument not tested. Some cases in tv2bool() not tested. Solution: Add tests. Add test_unknown() and test_void(). diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -2864,6 +2864,8 @@ test_null_job() Job null value for tes test_null_list() List null value for testing test_null_partial() Funcref null value for testing test_null_string() String null value for testing +test_unknown() any unknown value for testing +test_void() any void value for testing test_option_not_set({name}) none reset flag indicating option was set test_override({expr}, {val}) none test with Vim internal overrides test_refcount({expr}) Number get the reference count of {expr} diff --git a/runtime/doc/testing.txt b/runtime/doc/testing.txt --- a/runtime/doc/testing.txt +++ b/runtime/doc/testing.txt @@ -123,6 +123,13 @@ test_null_string() *test_null_string Return a |String| that is null. Only useful for testing. +test_unknown() *test_unknown()* + Return a value with unknown type. Only useful for testing. + +test_void() *test_void()* + Return a value with void type. Only useful for testing. + + test_option_not_set({name}) *test_option_not_set()* Reset the flag that indicates option {name} was set. Thus it looks like it still has the default value. Use like this: > diff --git a/src/evalfunc.c b/src/evalfunc.c --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -821,6 +821,8 @@ static funcentry_T global_functions[] = {"test_setmouse", 2, 2, 0, &t_void, f_test_setmouse}, {"test_settime", 1, 1, FEARG_1, &t_void, f_test_settime}, {"test_srand_seed", 0, 1, FEARG_1, &t_void, f_test_srand_seed}, + {"test_unknown", 0, 0, 0, &t_any, f_test_unknown}, + {"test_void", 0, 0, 0, &t_any, f_test_void}, #ifdef FEAT_TIMERS {"timer_info", 0, 1, FEARG_1, &t_list_dict_any, f_timer_info}, {"timer_pause", 2, 2, FEARG_1, &t_void, f_timer_pause}, diff --git a/src/proto/testing.pro b/src/proto/testing.pro --- a/src/proto/testing.pro +++ b/src/proto/testing.pro @@ -28,6 +28,8 @@ void f_test_null_job(typval_T *argvars, void f_test_null_list(typval_T *argvars, typval_T *rettv); void f_test_null_partial(typval_T *argvars, typval_T *rettv); void f_test_null_string(typval_T *argvars, typval_T *rettv); +void f_test_unknown(typval_T *argvars, typval_T *rettv); +void f_test_void(typval_T *argvars, typval_T *rettv); void f_test_scrollbar(typval_T *argvars, typval_T *rettv); void f_test_setmouse(typval_T *argvars, typval_T *rettv); void f_test_settime(typval_T *argvars, typval_T *rettv); diff --git a/src/testdir/test_vim9_disassemble.vim b/src/testdir/test_vim9_disassemble.vim --- a/src/testdir/test_vim9_disassemble.vim +++ b/src/testdir/test_vim9_disassemble.vim @@ -221,6 +221,23 @@ def Test_disassemble_call() \, res) enddef + +def FuncWithDefault(arg: string = 'default'): string + return arg +enddef + +def Test_disassemble_call_default() + let res = execute('disass FuncWithDefault') + assert_match('FuncWithDefault.*' + \ .. '\d PUSHS "default".*' + \ .. '\d STORE arg\[-1].*' + \ .. 'return arg.*' + \ .. '\d LOAD arg\[-1].*' + \ .. '\d RETURN.*' + \, res) +enddef + + def HasEval() if has("eval") echo "yes" diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim --- a/src/testdir/test_vim9_expr.vim +++ b/src/testdir/test_vim9_expr.vim @@ -765,6 +765,23 @@ def Test_expr7_not() assert_equal(false, ![2]) assert_equal(true, !!'asdf') assert_equal(true, !![2]) + + assert_equal(true, !test_null_partial()) + assert_equal(false, !{-> 'yes'}) + + assert_equal(true, !test_null_dict()) + assert_equal(true, !{}) + assert_equal(false, !{'yes': 'no'}) + + assert_equal(true, !test_null_job()) + assert_equal(true, !test_null_channel()) + + assert_equal(true, !test_null_blob()) + assert_equal(true, !0z) + assert_equal(false, !0z01) + + assert_equal(true, !test_void()) + assert_equal(true, !test_unknown()) enddef func Test_expr7_fails() diff --git a/src/testing.c b/src/testing.c --- a/src/testing.c +++ b/src/testing.c @@ -896,6 +896,18 @@ f_test_null_string(typval_T *argvars UNU rettv->vval.v_string = NULL; } + void +f_test_unknown(typval_T *argvars UNUSED, typval_T *rettv) +{ + rettv->v_type = VAR_UNKNOWN; +} + + void +f_test_void(typval_T *argvars UNUSED, typval_T *rettv) +{ + rettv->v_type = VAR_VOID; +} + #ifdef FEAT_GUI void f_test_scrollbar(typval_T *argvars, typval_T *rettv UNUSED) diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -739,6 +739,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 299, +/**/ 298, /**/ 297,