]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.2.1632: not checking the context of test_fails() v8.2.1632
authorBram Moolenaar <Bram@vim.org>
Sun, 6 Sep 2020 20:26:57 +0000 (22:26 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 6 Sep 2020 20:26:57 +0000 (22:26 +0200)
Problem:    Not checking the context of test_fails().
Solution:   Add the line number and context arguments.  Give error if
            assert_fails() argument types are wrong.

src/errors.h
src/testdir/test_assert.vim
src/testdir/test_vim9_func.vim
src/testdir/test_vim9_script.vim
src/testing.c
src/version.c

index 4db134251c06d3c64b9732e7ac72a976efefd1d1..659619944d84f8773eeb5edd6c20a1b41cc89592 100644 (file)
@@ -23,6 +23,8 @@ EXTERN char e_invalid_command_str[]
        INIT(= N_("E476: Invalid command: %s"));
 EXTERN char e_cannot_slice_dictionary[]
        INIT(= N_("E719: cannot slice a Dictionary"));
+EXTERN char e_assert_fails_second_arg[]
+       INIT(= N_("E856: assert_fails() second argument must be a string or a list with one or two strings"));
 EXTERN char e_cannot_index_special_variable[]
        INIT(= N_("E909: Cannot index a special variable"));
 EXTERN char e_missing_let_str[]
@@ -250,4 +252,8 @@ EXTERN char e_overlapping_ranges_for_nr[]
        INIT(= N_("E1113: Overlapping ranges for 0x%lx"));
 EXTERN char e_only_values_of_0x100_and_higher_supported[]
        INIT(= N_("E1114: Only values of 0x100 and higher supported"));
+EXTERN char e_assert_fails_fourth_argument[]
+       INIT(= N_("E1115: assert_fails() fourth argument must be a number"));
+EXTERN char e_assert_fails_fifth_argument[]
+       INIT(= N_("E1116: assert_fails() fifth argument must be a string"));
 #endif
index 1a18799f5d9aad86bced9df1db9f48253ce4c75b..47dcc1f1e891b001bfdf44691dec83105af91db4 100644 (file)
@@ -269,6 +269,20 @@ func Test_assert_fail_fails()
     let exp = v:exception
   endtry
   call assert_match("E856: assert_fails() second argument", exp)
+
+  try
+    call assert_equal(1, assert_fails('xxx', 'E492', '', 'burp'))
+  catch
+    let exp = v:exception
+  endtry
+  call assert_match("E1115: assert_fails() fourth argument must be a number", exp)
+
+  try
+    call assert_equal(1, assert_fails('xxx', 'E492', '', 54, 123))
+  catch
+    let exp = v:exception
+  endtry
+  call assert_match("E1116: assert_fails() fifth argument must be a string", exp)
 endfunc
 
 func Test_assert_fails_in_try_block()
index bf81bbef7eec35079723d6b4ee8708e425dd23f5..ae8f329f97885eab3fa6e2695c9305bea2dea77f 100644 (file)
@@ -524,7 +524,7 @@ enddef
 
 def Test_error_in_nested_function()
   # Error in called function requires unwinding the call stack.
-  assert_fails('FuncWithForwardCall()', 'E1096:', 1, 'FuncWithForwardCall')
+  assert_fails('FuncWithForwardCall()', 'E1096:', '', 1, 'FuncWithForwardCall')
 enddef
 
 def Test_return_type_wrong()
index a4fb8c7cd523ab9c7077d56c178501d96abfd049..8d8111a83d35a693e9d4b05717e260f1fa558b99 100644 (file)
@@ -1343,7 +1343,7 @@ def Test_vim9_import_export()
     defcompile
   END
   writefile(import_star_as_lines_no_dot, 'Ximport.vim')
-  assert_fails('source Ximport.vim', 'E1060:')
+  assert_fails('source Ximport.vim', 'E1060:', '', 2, 'Func')
 
   let import_star_as_lines_dot_space =<< trim END
     vim9script
@@ -1354,7 +1354,7 @@ def Test_vim9_import_export()
     defcompile
   END
   writefile(import_star_as_lines_dot_space, 'Ximport.vim')
-  assert_fails('source Ximport.vim', 'E1074:')
+  assert_fails('source Ximport.vim', 'E1074:', '', 1, 'Func')
 
   let import_star_as_lines_missing_name =<< trim END
     vim9script
@@ -1365,7 +1365,7 @@ def Test_vim9_import_export()
     defcompile
   END
   writefile(import_star_as_lines_missing_name, 'Ximport.vim')
-  assert_fails('source Ximport.vim', 'E1048:')
+  assert_fails('source Ximport.vim', 'E1048:', '', 1, 'Func')
 
   let import_star_as_lbr_lines =<< trim END
     vim9script
@@ -1387,7 +1387,7 @@ def Test_vim9_import_export()
     import * from './Xexport.vim'
   END
   writefile(import_star_lines, 'Ximport.vim')
-  assert_fails('source Ximport.vim', 'E1045:')
+  assert_fails('source Ximport.vim', 'E1045:', '', 2, 'Ximport.vim')
 
   # try to import something that exists but is not exported
   let import_not_exported_lines =<< trim END
@@ -1395,7 +1395,7 @@ def Test_vim9_import_export()
     import name from './Xexport.vim'
   END
   writefile(import_not_exported_lines, 'Ximport.vim')
-  assert_fails('source Ximport.vim', 'E1049:')
+  assert_fails('source Ximport.vim', 'E1049:', '', 2, 'Ximport.vim')
 
   # try to import something that is already defined
   let import_already_defined =<< trim END
@@ -1404,7 +1404,7 @@ def Test_vim9_import_export()
     import exported from './Xexport.vim'
   END
   writefile(import_already_defined, 'Ximport.vim')
-  assert_fails('source Ximport.vim', 'E1073:')
+  assert_fails('source Ximport.vim', 'E1073:', '', 3, 'Ximport.vim')
 
   # try to import something that is already defined
   import_already_defined =<< trim END
@@ -1413,7 +1413,7 @@ def Test_vim9_import_export()
     import * as exported from './Xexport.vim'
   END
   writefile(import_already_defined, 'Ximport.vim')
-  assert_fails('source Ximport.vim', 'E1073:')
+  assert_fails('source Ximport.vim', 'E1073:', '', 3, 'Ximport.vim')
 
   # try to import something that is already defined
   import_already_defined =<< trim END
@@ -1422,7 +1422,7 @@ def Test_vim9_import_export()
     import {exported} from './Xexport.vim'
   END
   writefile(import_already_defined, 'Ximport.vim')
-  assert_fails('source Ximport.vim', 'E1073:')
+  assert_fails('source Ximport.vim', 'E1073:', '', 3, 'Ximport.vim')
 
   # import a very long name, requires making a copy
   let import_long_name_lines =<< trim END
@@ -1430,35 +1430,35 @@ def Test_vim9_import_export()
     import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim'
   END
   writefile(import_long_name_lines, 'Ximport.vim')
-  assert_fails('source Ximport.vim', 'E1048:')
+  assert_fails('source Ximport.vim', 'E1048:', '', 2, 'Ximport.vim')
 
   let import_no_from_lines =<< trim END
     vim9script
     import name './Xexport.vim'
   END
   writefile(import_no_from_lines, 'Ximport.vim')
-  assert_fails('source Ximport.vim', 'E1070:')
+  assert_fails('source Ximport.vim', 'E1070:', '', 2, 'Ximport.vim')
 
   let import_invalid_string_lines =<< trim END
     vim9script
     import name from Xexport.vim
   END
   writefile(import_invalid_string_lines, 'Ximport.vim')
-  assert_fails('source Ximport.vim', 'E1071:')
+  assert_fails('source Ximport.vim', 'E1071:', '', 2, 'Ximport.vim')
 
   let import_wrong_name_lines =<< trim END
     vim9script
     import name from './XnoExport.vim'
   END
   writefile(import_wrong_name_lines, 'Ximport.vim')
-  assert_fails('source Ximport.vim', 'E1053:')
+  assert_fails('source Ximport.vim', 'E1053:', '', 2, 'Ximport.vim')
 
   let import_missing_comma_lines =<< trim END
     vim9script
     import {exported name} from './Xexport.vim'
   END
   writefile(import_missing_comma_lines, 'Ximport3.vim')
-  assert_fails('source Ximport3.vim', 'E1046:')
+  assert_fails('source Ximport3.vim', 'E1046:', '', 2, 'Ximport3.vim')
 
   delete('Ximport.vim')
   delete('Ximport3.vim')
@@ -1646,7 +1646,7 @@ def Test_vim9script_reload_import()
     let valone = 5678
   END
   writefile(lines, 'Xreload.vim')
-  assert_fails('source Xreload.vim', 'E1041:')
+  assert_fails('source Xreload.vim', 'E1041:', '', 3, 'Xreload.vim')
 
   delete('Xreload.vim')
   delete('Ximport.vim')
@@ -1745,7 +1745,7 @@ def Test_vim9script_reload_delfunc()
   let nono_lines =<< trim END
     def g:DoCheck(no_exists: bool)
       assert_equal('yes', FuncYes())
-      assert_fails('FuncNo()', 'E117:')
+      assert_fails('FuncNo()', 'E117:', '', 2, 'DoCheck')
     enddef
   END
 
index 5f7858d89673d60acd5988b000e73b2d43c61715..8db7d62ed415d3ec97a693a00b063fea0f803449 100644 (file)
@@ -550,7 +550,7 @@ f_assert_fails(typval_T *argvars, typval_T *rettv)
     garray_T   ga;
     int                save_trylevel = trylevel;
     int                called_emsg_before = called_emsg;
-    int                wrong_arg = FALSE;
+    char       *wrong_arg_msg = NULL;
 
     // trylevel must be zero for a ":throw" command to be considered failed
     trylevel = 0;
@@ -590,7 +590,7 @@ f_assert_fails(typval_T *argvars, typval_T *rettv)
 
            if (list == NULL || list->lv_len < 1 || list->lv_len > 2)
            {
-               wrong_arg = TRUE;
+               wrong_arg_msg = e_assert_fails_second_arg;
                goto theend;
            }
            CHECK_LIST_MATERIALIZE(list);
@@ -611,26 +611,38 @@ f_assert_fails(typval_T *argvars, typval_T *rettv)
        }
        else
        {
-           wrong_arg = TRUE;
+           wrong_arg_msg = e_assert_fails_second_arg;
            goto theend;
        }
 
        if (!error_found && argvars[2].v_type != VAR_UNKNOWN
-               && argvars[3].v_type == VAR_NUMBER)
+               && argvars[3].v_type != VAR_UNKNOWN)
        {
-           if (argvars[3].vval.v_number >= 0
-               && argvars[3].vval.v_number != emsg_assert_fails_lnum)
+           if (argvars[3].v_type != VAR_NUMBER)
+           {
+               wrong_arg_msg = e_assert_fails_fourth_argument;
+               goto theend;
+           }
+           else if (argvars[3].vval.v_number >= 0
+                        && argvars[3].vval.v_number != emsg_assert_fails_lnum)
            {
                error_found = TRUE;
                error_found_index = 3;
            }
-           if (!error_found && argvars[4].v_type == VAR_STRING
-                   && argvars[4].vval.v_string != NULL
+           if (!error_found && argvars[4].v_type != VAR_UNKNOWN)
+           {
+               if (argvars[4].v_type != VAR_STRING)
+               {
+                   wrong_arg_msg = e_assert_fails_fifth_argument;
+                   goto theend;
+               }
+               else if (argvars[4].vval.v_string != NULL
                    && !pattern_match(argvars[4].vval.v_string,
                                             emsg_assert_fails_context, FALSE))
-           {
-               error_found = TRUE;
-               error_found_index = 4;
+               {
+                   error_found = TRUE;
+                   error_found_index = 4;
+               }
            }
        }
 
@@ -672,8 +684,8 @@ theend:
     emsg_assert_fails_used = FALSE;
     VIM_CLEAR(emsg_assert_fails_msg);
     set_vim_var_string(VV_ERRMSG, NULL, 0);
-    if (wrong_arg)
-       emsg(_("E856: assert_fails() second argument must be a string or a list with one or two strings"));
+    if (wrong_arg_msg != NULL)
+       emsg(_(wrong_arg_msg));
 }
 
 /*
index 39dbe0f826250363892bf091336ef21c42d2565b..2a13bf3dd8639d9112dba771a00c0031d286588a 100644 (file)
@@ -754,6 +754,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1632,
 /**/
     1631,
 /**/