changeset 19483:0d3dcb4476ba v8.2.0299

patch 8.2.0299: Vim9: ISN_STORE with argument not tested Commit: https://github.com/vim/vim/commit/8ed04587d3cd53e29be20fde9c36e619ea7da4dc Author: Bram Moolenaar <Bram@vim.org> 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().
author Bram Moolenaar <Bram@vim.org>
date Sat, 22 Feb 2020 19:15:04 +0100
parents 5bb16fb9c9d1
children 0af19002b9a6
files runtime/doc/eval.txt runtime/doc/testing.txt src/evalfunc.c src/proto/testing.pro src/testdir/test_vim9_disassemble.vim src/testdir/test_vim9_expr.vim src/testing.c src/version.c
diffstat 8 files changed, 61 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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}
--- 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: >
--- 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},
--- 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);
--- 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"
--- 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()
--- 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)
--- 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,