To: vim_dev@googlegroups.com Subject: Patch 8.2.1632 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ 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 -- Bram@Moolenaar.net -- 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 ///