]> granicus.if.org Git - vim/commitdiff
patch 8.2.0299: Vim9: ISN_STORE with argument not tested v8.2.0299
authorBram Moolenaar <Bram@vim.org>
Sat, 22 Feb 2020 18:07:28 +0000 (19:07 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 22 Feb 2020 18:07:28 +0000 (19:07 +0100)
Problem:    Vim9: ISN_STORE with argument not tested.  Some cases in tv2bool()
            not tested.
Solution:   Add tests.  Add test_unknown() and test_void().

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

index 4349e76ef5ddaa61882e61bfa42b6130fbfce9ab..9ad88edff8204bad82da203fe06faba380f15606 100644 (file)
@@ -2864,6 +2864,8 @@ test_null_job()                   Job     null value for testing
 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}
index f48984c9f2bfd81ba4849cce62bdc3f33ac55bbe..e728e27426443bbb7067e121b75b54655ac32645 100644 (file)
@@ -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: >
index f1a06caaacd8f763a3423e84cd31411bef4a73fb..cad7a969f9706f652bca19b39becb14694cb9533 100644 (file)
@@ -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},
index 2b001a543a6abeb2848e1dfc965da12685960f96..7542ccb4461695278967beb69db274a2f7f5ed13 100644 (file)
@@ -28,6 +28,8 @@ void f_test_null_job(typval_T *argvars, typval_T *rettv);
 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);
index c608a5daaa40cde1810abd6066503687092ca83a..cf3dd8c45078b2dd840cb94ef0d85bc639a508e9 100644 (file)
@@ -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"
index 312d6338c2d15c48fdb5603297ae9f869aa67673..a5b6e44d69972dba6bec4ddde33703bb9f5f6805 100644 (file)
@@ -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()
index 5dacf073b344525fe782b75836a0bfcae128a938..8a64ce85e7c6e5f0d4faa260005b66486851f112 100644 (file)
@@ -896,6 +896,18 @@ f_test_null_string(typval_T *argvars UNUSED, typval_T *rettv)
     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)
index d889ce7e8af5a81e206273c6ee808a473650a8fa..95a098bea19f4ab098d86d03e50dcbb2e79932c0 100644 (file)
@@ -738,6 +738,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    299,
 /**/
     298,
 /**/