Patch 8.2.1632
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.
Files:      src/testing.c, src/errors.h, src/testdir/test_assert.vim,
            src/testdir/test_vim9_func.vim, src/testdir/test_vim9_script.vim


*** ../vim-8.2.1631/src/testing.c       2020-09-06 21:47:39.323041533 +0200
--- src/testing.c       2020-09-06 22:11:15.033189355 +0200
***************
*** 550,556 ****
      garray_T  ga;
      int               save_trylevel = trylevel;
      int               called_emsg_before = called_emsg;
!     int               wrong_arg = FALSE;
  
      // trylevel must be zero for a ":throw" command to be considered failed
      trylevel = 0;
--- 550,556 ----
      garray_T  ga;
      int               save_trylevel = trylevel;
      int               called_emsg_before = called_emsg;
!     char      *wrong_arg_msg = NULL;
  
      // trylevel must be zero for a ":throw" command to be considered failed
      trylevel = 0;
***************
*** 590,596 ****
  
            if (list == NULL || list->lv_len < 1 || list->lv_len > 2)
            {
!               wrong_arg = TRUE;
                goto theend;
            }
            CHECK_LIST_MATERIALIZE(list);
--- 590,596 ----
  
            if (list == NULL || list->lv_len < 1 || list->lv_len > 2)
            {
!               wrong_arg_msg = e_assert_fails_second_arg;
                goto theend;
            }
            CHECK_LIST_MATERIALIZE(list);
***************
*** 611,636 ****
        }
        else
        {
!           wrong_arg = TRUE;
            goto theend;
        }
  
        if (!error_found && argvars[2].v_type != VAR_UNKNOWN
!               && argvars[3].v_type == VAR_NUMBER)
        {
!           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
                    && !pattern_match(argvars[4].vval.v_string,
                                             emsg_assert_fails_context, FALSE))
!           {
!               error_found = TRUE;
!               error_found_index = 4;
            }
        }
  
--- 611,648 ----
        }
        else
        {
!           wrong_arg_msg = e_assert_fails_second_arg;
            goto theend;
        }
  
        if (!error_found && argvars[2].v_type != VAR_UNKNOWN
!               && argvars[3].v_type != VAR_UNKNOWN)
        {
!           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_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;
!               }
            }
        }
  
***************
*** 672,679 ****
      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"));
  }
  
  /*
--- 684,691 ----
      emsg_assert_fails_used = FALSE;
      VIM_CLEAR(emsg_assert_fails_msg);
      set_vim_var_string(VV_ERRMSG, NULL, 0);
!     if (wrong_arg_msg != NULL)
!       emsg(_(wrong_arg_msg));
  }
  
  /*
*** ../vim-8.2.1631/src/errors.h        2020-08-28 23:27:16.932923997 +0200
--- src/errors.h        2020-09-06 22:10:21.613372144 +0200
***************
*** 23,28 ****
--- 23,30 ----
        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,253 ****
--- 252,259 ----
        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
*** ../vim-8.2.1631/src/testdir/test_assert.vim 2020-09-04 21:18:40.480161935 
+0200
--- src/testdir/test_assert.vim 2020-09-06 22:20:10.027425266 +0200
***************
*** 269,274 ****
--- 269,288 ----
      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()
*** ../vim-8.2.1631/src/testdir/test_vim9_func.vim      2020-09-06 
21:47:39.323041533 +0200
--- src/testdir/test_vim9_func.vim      2020-09-06 22:25:37.518437353 +0200
***************
*** 524,530 ****
  
  def Test_error_in_nested_function()
    # Error in called function requires unwinding the call stack.
!   assert_fails('FuncWithForwardCall()', 'E1096:', 1, 'FuncWithForwardCall')
  enddef
  
  def Test_return_type_wrong()
--- 524,530 ----
  
  def Test_error_in_nested_function()
    # Error in called function requires unwinding the call stack.
!   assert_fails('FuncWithForwardCall()', 'E1096:', '', 1, 
'FuncWithForwardCall')
  enddef
  
  def Test_return_type_wrong()
*** ../vim-8.2.1631/src/testdir/test_vim9_script.vim    2020-09-06 
15:58:33.383154915 +0200
--- src/testdir/test_vim9_script.vim    2020-09-06 22:24:24.002612351 +0200
***************
*** 1343,1349 ****
      defcompile
    END
    writefile(import_star_as_lines_no_dot, 'Ximport.vim')
!   assert_fails('source Ximport.vim', 'E1060:')
  
    let import_star_as_lines_dot_space =<< trim END
      vim9script
--- 1343,1349 ----
      defcompile
    END
    writefile(import_star_as_lines_no_dot, 'Ximport.vim')
!   assert_fails('source Ximport.vim', 'E1060:', '', 2, 'Func')
  
    let import_star_as_lines_dot_space =<< trim END
      vim9script
***************
*** 1354,1360 ****
      defcompile
    END
    writefile(import_star_as_lines_dot_space, 'Ximport.vim')
!   assert_fails('source Ximport.vim', 'E1074:')
  
    let import_star_as_lines_missing_name =<< trim END
      vim9script
--- 1354,1360 ----
      defcompile
    END
    writefile(import_star_as_lines_dot_space, 'Ximport.vim')
!   assert_fails('source Ximport.vim', 'E1074:', '', 1, 'Func')
  
    let import_star_as_lines_missing_name =<< trim END
      vim9script
***************
*** 1365,1371 ****
      defcompile
    END
    writefile(import_star_as_lines_missing_name, 'Ximport.vim')
!   assert_fails('source Ximport.vim', 'E1048:')
  
    let import_star_as_lbr_lines =<< trim END
      vim9script
--- 1365,1371 ----
      defcompile
    END
    writefile(import_star_as_lines_missing_name, 'Ximport.vim')
!   assert_fails('source Ximport.vim', 'E1048:', '', 1, 'Func')
  
    let import_star_as_lbr_lines =<< trim END
      vim9script
***************
*** 1387,1393 ****
      import * from './Xexport.vim'
    END
    writefile(import_star_lines, 'Ximport.vim')
!   assert_fails('source Ximport.vim', 'E1045:')
  
    # try to import something that exists but is not exported
    let import_not_exported_lines =<< trim END
--- 1387,1393 ----
      import * from './Xexport.vim'
    END
    writefile(import_star_lines, 'Ximport.vim')
!   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,1401 ****
      import name from './Xexport.vim'
    END
    writefile(import_not_exported_lines, 'Ximport.vim')
!   assert_fails('source Ximport.vim', 'E1049:')
  
    # try to import something that is already defined
    let import_already_defined =<< trim END
--- 1395,1401 ----
      import name from './Xexport.vim'
    END
    writefile(import_not_exported_lines, 'Ximport.vim')
!   assert_fails('source Ximport.vim', 'E1049:', '', 2, 'Ximport.vim')
  
    # try to import something that is already defined
    let import_already_defined =<< trim END
***************
*** 1404,1410 ****
      import exported from './Xexport.vim'
    END
    writefile(import_already_defined, 'Ximport.vim')
!   assert_fails('source Ximport.vim', 'E1073:')
  
    # try to import something that is already defined
    import_already_defined =<< trim END
--- 1404,1410 ----
      import exported from './Xexport.vim'
    END
    writefile(import_already_defined, 'Ximport.vim')
!   assert_fails('source Ximport.vim', 'E1073:', '', 3, 'Ximport.vim')
  
    # try to import something that is already defined
    import_already_defined =<< trim END
***************
*** 1413,1419 ****
      import * as exported from './Xexport.vim'
    END
    writefile(import_already_defined, 'Ximport.vim')
!   assert_fails('source Ximport.vim', 'E1073:')
  
    # try to import something that is already defined
    import_already_defined =<< trim END
--- 1413,1419 ----
      import * as exported from './Xexport.vim'
    END
    writefile(import_already_defined, 'Ximport.vim')
!   assert_fails('source Ximport.vim', 'E1073:', '', 3, 'Ximport.vim')
  
    # try to import something that is already defined
    import_already_defined =<< trim END
***************
*** 1422,1428 ****
      import {exported} from './Xexport.vim'
    END
    writefile(import_already_defined, 'Ximport.vim')
!   assert_fails('source Ximport.vim', 'E1073:')
  
    # import a very long name, requires making a copy
    let import_long_name_lines =<< trim END
--- 1422,1428 ----
      import {exported} from './Xexport.vim'
    END
    writefile(import_already_defined, 'Ximport.vim')
!   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,1464 ****
      import 
name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
 from './Xexport.vim'
    END
    writefile(import_long_name_lines, 'Ximport.vim')
!   assert_fails('source Ximport.vim', 'E1048:')
  
    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:')
  
    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:')
  
    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:')
  
    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:')
  
    delete('Ximport.vim')
    delete('Ximport3.vim')
--- 1430,1464 ----
      import 
name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
 from './Xexport.vim'
    END
    writefile(import_long_name_lines, 'Ximport.vim')
!   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:', '', 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:', '', 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:', '', 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:', '', 2, 'Ximport3.vim')
  
    delete('Ximport.vim')
    delete('Ximport3.vim')
***************
*** 1646,1652 ****
      let valone = 5678
    END
    writefile(lines, 'Xreload.vim')
!   assert_fails('source Xreload.vim', 'E1041:')
  
    delete('Xreload.vim')
    delete('Ximport.vim')
--- 1646,1652 ----
      let valone = 5678
    END
    writefile(lines, 'Xreload.vim')
!   assert_fails('source Xreload.vim', 'E1041:', '', 3, 'Xreload.vim')
  
    delete('Xreload.vim')
    delete('Ximport.vim')
***************
*** 1745,1751 ****
    let nono_lines =<< trim END
      def g:DoCheck(no_exists: bool)
        assert_equal('yes', FuncYes())
!       assert_fails('FuncNo()', 'E117:')
      enddef
    END
  
--- 1745,1751 ----
    let nono_lines =<< trim END
      def g:DoCheck(no_exists: bool)
        assert_equal('yes', FuncYes())
!       assert_fails('FuncNo()', 'E117:', '', 2, 'DoCheck')
      enddef
    END
  
*** ../vim-8.2.1631/src/version.c       2020-09-06 21:47:39.327041522 +0200
--- src/version.c       2020-09-06 22:26:08.086373395 +0200
***************
*** 756,757 ****
--- 756,759 ----
  {   /* Add new patch number below this line */
+ /**/
+     1632,
  /**/

-- 
Two cows are standing together in a field.  One asks the other:
"So what do you think about this Mad Cow Disease?"
The other replies: "That doesn't concern me. I'm a helicopter."

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/202009062027.086KRPPf1002304%40masaka.moolenaar.net.

Raspunde prin e-mail lui