Skip to content

Commit 44d6652

Browse files
committed
patch 8.2.1632: not checking the context of test_fails()
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.
1 parent 9bd5d87 commit 44d6652

File tree

6 files changed

+63
-29
lines changed

6 files changed

+63
-29
lines changed

src/errors.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ EXTERN char e_invalid_command_str[]
2323
INIT(= N_("E476: Invalid command: %s"));
2424
EXTERN char e_cannot_slice_dictionary[]
2525
INIT(= N_("E719: cannot slice a Dictionary"));
26+
EXTERN char e_assert_fails_second_arg[]
27+
INIT(= N_("E856: assert_fails() second argument must be a string or a list with one or two strings"));
2628
EXTERN char e_cannot_index_special_variable[]
2729
INIT(= N_("E909: Cannot index a special variable"));
2830
EXTERN char e_missing_let_str[]
@@ -250,4 +252,8 @@ EXTERN char e_overlapping_ranges_for_nr[]
250252
INIT(= N_("E1113: Overlapping ranges for 0x%lx"));
251253
EXTERN char e_only_values_of_0x100_and_higher_supported[]
252254
INIT(= N_("E1114: Only values of 0x100 and higher supported"));
255+
EXTERN char e_assert_fails_fourth_argument[]
256+
INIT(= N_("E1115: assert_fails() fourth argument must be a number"));
257+
EXTERN char e_assert_fails_fifth_argument[]
258+
INIT(= N_("E1116: assert_fails() fifth argument must be a string"));
253259
#endif

src/testdir/test_assert.vim

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,20 @@ func Test_assert_fail_fails()
269269
let exp = v:exception
270270
endtry
271271
call assert_match("E856: assert_fails() second argument", exp)
272+
273+
try
274+
call assert_equal(1, assert_fails('xxx', 'E492', '', 'burp'))
275+
catch
276+
let exp = v:exception
277+
endtry
278+
call assert_match("E1115: assert_fails() fourth argument must be a number", exp)
279+
280+
try
281+
call assert_equal(1, assert_fails('xxx', 'E492', '', 54, 123))
282+
catch
283+
let exp = v:exception
284+
endtry
285+
call assert_match("E1116: assert_fails() fifth argument must be a string", exp)
272286
endfunc
273287

274288
func Test_assert_fails_in_try_block()

src/testdir/test_vim9_func.vim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,7 @@ enddef
524524

525525
def Test_error_in_nested_function()
526526
# Error in called function requires unwinding the call stack.
527-
assert_fails('FuncWithForwardCall()', 'E1096:', 1, 'FuncWithForwardCall')
527+
assert_fails('FuncWithForwardCall()', 'E1096:', '', 1, 'FuncWithForwardCall')
528528
enddef
529529

530530
def Test_return_type_wrong()

src/testdir/test_vim9_script.vim

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1343,7 +1343,7 @@ def Test_vim9_import_export()
13431343
defcompile
13441344
END
13451345
writefile(import_star_as_lines_no_dot, 'Ximport.vim')
1346-
assert_fails('source Ximport.vim', 'E1060:')
1346+
assert_fails('source Ximport.vim', 'E1060:', '', 2, 'Func')
13471347

13481348
let import_star_as_lines_dot_space =<< trim END
13491349
vim9script
@@ -1354,7 +1354,7 @@ def Test_vim9_import_export()
13541354
defcompile
13551355
END
13561356
writefile(import_star_as_lines_dot_space, 'Ximport.vim')
1357-
assert_fails('source Ximport.vim', 'E1074:')
1357+
assert_fails('source Ximport.vim', 'E1074:', '', 1, 'Func')
13581358

13591359
let import_star_as_lines_missing_name =<< trim END
13601360
vim9script
@@ -1365,7 +1365,7 @@ def Test_vim9_import_export()
13651365
defcompile
13661366
END
13671367
writefile(import_star_as_lines_missing_name, 'Ximport.vim')
1368-
assert_fails('source Ximport.vim', 'E1048:')
1368+
assert_fails('source Ximport.vim', 'E1048:', '', 1, 'Func')
13691369

13701370
let import_star_as_lbr_lines =<< trim END
13711371
vim9script
@@ -1387,15 +1387,15 @@ def Test_vim9_import_export()
13871387
import * from './Xexport.vim'
13881388
END
13891389
writefile(import_star_lines, 'Ximport.vim')
1390-
assert_fails('source Ximport.vim', 'E1045:')
1390+
assert_fails('source Ximport.vim', 'E1045:', '', 2, 'Ximport.vim')
13911391

13921392
# try to import something that exists but is not exported
13931393
let import_not_exported_lines =<< trim END
13941394
vim9script
13951395
import name from './Xexport.vim'
13961396
END
13971397
writefile(import_not_exported_lines, 'Ximport.vim')
1398-
assert_fails('source Ximport.vim', 'E1049:')
1398+
assert_fails('source Ximport.vim', 'E1049:', '', 2, 'Ximport.vim')
13991399

14001400
# try to import something that is already defined
14011401
let import_already_defined =<< trim END
@@ -1404,7 +1404,7 @@ def Test_vim9_import_export()
14041404
import exported from './Xexport.vim'
14051405
END
14061406
writefile(import_already_defined, 'Ximport.vim')
1407-
assert_fails('source Ximport.vim', 'E1073:')
1407+
assert_fails('source Ximport.vim', 'E1073:', '', 3, 'Ximport.vim')
14081408

14091409
# try to import something that is already defined
14101410
import_already_defined =<< trim END
@@ -1413,7 +1413,7 @@ def Test_vim9_import_export()
14131413
import * as exported from './Xexport.vim'
14141414
END
14151415
writefile(import_already_defined, 'Ximport.vim')
1416-
assert_fails('source Ximport.vim', 'E1073:')
1416+
assert_fails('source Ximport.vim', 'E1073:', '', 3, 'Ximport.vim')
14171417

14181418
# try to import something that is already defined
14191419
import_already_defined =<< trim END
@@ -1422,43 +1422,43 @@ def Test_vim9_import_export()
14221422
import {exported} from './Xexport.vim'
14231423
END
14241424
writefile(import_already_defined, 'Ximport.vim')
1425-
assert_fails('source Ximport.vim', 'E1073:')
1425+
assert_fails('source Ximport.vim', 'E1073:', '', 3, 'Ximport.vim')
14261426

14271427
# import a very long name, requires making a copy
14281428
let import_long_name_lines =<< trim END
14291429
vim9script
14301430
import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim'
14311431
END
14321432
writefile(import_long_name_lines, 'Ximport.vim')
1433-
assert_fails('source Ximport.vim', 'E1048:')
1433+
assert_fails('source Ximport.vim', 'E1048:', '', 2, 'Ximport.vim')
14341434

14351435
let import_no_from_lines =<< trim END
14361436
vim9script
14371437
import name './Xexport.vim'
14381438
END
14391439
writefile(import_no_from_lines, 'Ximport.vim')
1440-
assert_fails('source Ximport.vim', 'E1070:')
1440+
assert_fails('source Ximport.vim', 'E1070:', '', 2, 'Ximport.vim')
14411441

14421442
let import_invalid_string_lines =<< trim END
14431443
vim9script
14441444
import name from Xexport.vim
14451445
END
14461446
writefile(import_invalid_string_lines, 'Ximport.vim')
1447-
assert_fails('source Ximport.vim', 'E1071:')
1447+
assert_fails('source Ximport.vim', 'E1071:', '', 2, 'Ximport.vim')
14481448

14491449
let import_wrong_name_lines =<< trim END
14501450
vim9script
14511451
import name from './XnoExport.vim'
14521452
END
14531453
writefile(import_wrong_name_lines, 'Ximport.vim')
1454-
assert_fails('source Ximport.vim', 'E1053:')
1454+
assert_fails('source Ximport.vim', 'E1053:', '', 2, 'Ximport.vim')
14551455

14561456
let import_missing_comma_lines =<< trim END
14571457
vim9script
14581458
import {exported name} from './Xexport.vim'
14591459
END
14601460
writefile(import_missing_comma_lines, 'Ximport3.vim')
1461-
assert_fails('source Ximport3.vim', 'E1046:')
1461+
assert_fails('source Ximport3.vim', 'E1046:', '', 2, 'Ximport3.vim')
14621462

14631463
delete('Ximport.vim')
14641464
delete('Ximport3.vim')
@@ -1646,7 +1646,7 @@ def Test_vim9script_reload_import()
16461646
let valone = 5678
16471647
END
16481648
writefile(lines, 'Xreload.vim')
1649-
assert_fails('source Xreload.vim', 'E1041:')
1649+
assert_fails('source Xreload.vim', 'E1041:', '', 3, 'Xreload.vim')
16501650

16511651
delete('Xreload.vim')
16521652
delete('Ximport.vim')
@@ -1745,7 +1745,7 @@ def Test_vim9script_reload_delfunc()
17451745
let nono_lines =<< trim END
17461746
def g:DoCheck(no_exists: bool)
17471747
assert_equal('yes', FuncYes())
1748-
assert_fails('FuncNo()', 'E117:')
1748+
assert_fails('FuncNo()', 'E117:', '', 2, 'DoCheck')
17491749
enddef
17501750
END
17511751

src/testing.c

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,7 @@ f_assert_fails(typval_T *argvars, typval_T *rettv)
550550
garray_T ga;
551551
int save_trylevel = trylevel;
552552
int called_emsg_before = called_emsg;
553-
int wrong_arg = FALSE;
553+
char *wrong_arg_msg = NULL;
554554

555555
// trylevel must be zero for a ":throw" command to be considered failed
556556
trylevel = 0;
@@ -590,7 +590,7 @@ f_assert_fails(typval_T *argvars, typval_T *rettv)
590590

591591
if (list == NULL || list->lv_len < 1 || list->lv_len > 2)
592592
{
593-
wrong_arg = TRUE;
593+
wrong_arg_msg = e_assert_fails_second_arg;
594594
goto theend;
595595
}
596596
CHECK_LIST_MATERIALIZE(list);
@@ -611,26 +611,38 @@ f_assert_fails(typval_T *argvars, typval_T *rettv)
611611
}
612612
else
613613
{
614-
wrong_arg = TRUE;
614+
wrong_arg_msg = e_assert_fails_second_arg;
615615
goto theend;
616616
}
617617

618618
if (!error_found && argvars[2].v_type != VAR_UNKNOWN
619-
&& argvars[3].v_type == VAR_NUMBER)
619+
&& argvars[3].v_type != VAR_UNKNOWN)
620620
{
621-
if (argvars[3].vval.v_number >= 0
622-
&& argvars[3].vval.v_number != emsg_assert_fails_lnum)
621+
if (argvars[3].v_type != VAR_NUMBER)
622+
{
623+
wrong_arg_msg = e_assert_fails_fourth_argument;
624+
goto theend;
625+
}
626+
else if (argvars[3].vval.v_number >= 0
627+
&& argvars[3].vval.v_number != emsg_assert_fails_lnum)
623628
{
624629
error_found = TRUE;
625630
error_found_index = 3;
626631
}
627-
if (!error_found && argvars[4].v_type == VAR_STRING
628-
&& argvars[4].vval.v_string != NULL
632+
if (!error_found && argvars[4].v_type != VAR_UNKNOWN)
633+
{
634+
if (argvars[4].v_type != VAR_STRING)
635+
{
636+
wrong_arg_msg = e_assert_fails_fifth_argument;
637+
goto theend;
638+
}
639+
else if (argvars[4].vval.v_string != NULL
629640
&& !pattern_match(argvars[4].vval.v_string,
630641
emsg_assert_fails_context, FALSE))
631-
{
632-
error_found = TRUE;
633-
error_found_index = 4;
642+
{
643+
error_found = TRUE;
644+
error_found_index = 4;
645+
}
634646
}
635647
}
636648

@@ -672,8 +684,8 @@ f_assert_fails(typval_T *argvars, typval_T *rettv)
672684
emsg_assert_fails_used = FALSE;
673685
VIM_CLEAR(emsg_assert_fails_msg);
674686
set_vim_var_string(VV_ERRMSG, NULL, 0);
675-
if (wrong_arg)
676-
emsg(_("E856: assert_fails() second argument must be a string or a list with one or two strings"));
687+
if (wrong_arg_msg != NULL)
688+
emsg(_(wrong_arg_msg));
677689
}
678690

679691
/*

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -754,6 +754,8 @@ static char *(features[]) =
754754

755755
static int included_patches[] =
756756
{ /* Add new patch number below this line */
757+
/**/
758+
1632,
757759
/**/
758760
1631,
759761
/**/

0 commit comments

Comments
 (0)