{"assert_equal", 2, 3, FEARG_2, ret_number, f_assert_equal},
{"assert_equalfile", 2, 3, FEARG_1, ret_number, f_assert_equalfile},
{"assert_exception", 1, 2, 0, ret_number, f_assert_exception},
- {"assert_fails", 1, 4, FEARG_1, ret_number, f_assert_fails},
+ {"assert_fails", 1, 5, FEARG_1, ret_number, f_assert_fails},
{"assert_false", 1, 2, FEARG_1, ret_number, f_assert_false},
{"assert_inrange", 3, 4, FEARG_3, ret_number, f_assert_inrange},
{"assert_match", 2, 3, FEARG_2, ret_number, f_assert_match},
def Test_return_something()
assert_equal('string', ReturnString())
assert_equal(123, ReturnNumber())
- assert_fails('ReturnGlobal()', 'E1029: Expected number but got string')
+ assert_fails('ReturnGlobal()', 'E1029: Expected number but got string', '', 1, 'ReturnGlobal')
enddef
def Test_missing_return()
def Test_call_default_args()
assert_equal('string', MyDefaultArgs())
assert_equal('one', MyDefaultArgs('one'))
- assert_fails('MyDefaultArgs("one", "two")', 'E118:')
+ assert_fails('MyDefaultArgs("one", "two")', 'E118:', '', 3, 'Test_call_default_args')
assert_equal('test', MyDefaultSecond('test'))
assert_equal('test', MyDefaultSecond('test', true))
func Test_call_default_args_from_func()
call assert_equal('string', MyDefaultArgs())
call assert_equal('one', MyDefaultArgs('one'))
- call assert_fails('call MyDefaultArgs("one", "two")', 'E118:')
+ call assert_fails('call MyDefaultArgs("one", "two")', 'E118:', '', 3, 'Test_call_default_args_from_func')
endfunc
def Test_nested_global_function()
enddef
def Test_call_def_varargs()
- assert_fails('MyDefVarargs()', 'E119:')
+ assert_fails('MyDefVarargs()', 'E119:', '', 1, 'Test_call_def_varargs')
assert_equal('one,foo', MyDefVarargs('one'))
assert_equal('one,two', MyDefVarargs('one', 'two'))
assert_equal('one,two,three', MyDefVarargs('one', 'two', 'three'))
def Test_using_var_as_arg()
writefile(['def Func(x: number)', 'let x = 234', 'enddef', 'defcompile'], 'Xdef')
- assert_fails('so Xdef', 'E1006:')
+ assert_fails('so Xdef', 'E1006:', '', 1, 'Func')
delete('Xdef')
enddef
def Test_call_func_defined_later()
assert_equal('one', g:DefinedLater('one'))
- assert_fails('NotDefined("one")', 'E117:')
+ assert_fails('NotDefined("one")', 'E117:', '', 2, 'Test_call_func_defined_later')
enddef
func DefinedLater(arg)
def Test_call_funcref()
assert_equal(3, g:SomeFunc('abc'))
- assert_fails('NotAFunc()', 'E117:') # comment after call
- assert_fails('g:NotAFunc()', 'E117:')
+ assert_fails('NotAFunc()', 'E117:', '', 2, 'Test_call_funcref') # comment after call
+ assert_fails('g:NotAFunc()', 'E117:', '', 3, 'Test_call_funcref')
let lines =<< trim END
vim9script
def Test_error_in_nested_function()
# Error in called function requires unwinding the call stack.
- assert_fails('FuncWithForwardCall()', 'E1096:')
+ assert_fails('FuncWithForwardCall()', 'E1096:', 1, 'FuncWithForwardCall')
enddef
def Test_return_type_wrong()
defcompile
END
writefile(lines, 'Xcall_const.vim')
- assert_fails('source Xcall_const.vim', 'E46:')
+ assert_fails('source Xcall_const.vim', 'E46:', '', 1, 'MyFunc')
delete('Xcall_const.vim')
enddef
CallGoneSoon()
END
writefile(lines, 'XToDelFunc')
- assert_fails('so XToDelFunc', 'E933:')
- assert_fails('so XToDelFunc', 'E933:')
+ assert_fails('so XToDelFunc', 'E933:', '', 1, 'CallGoneSoon')
+ assert_fails('so XToDelFunc', 'E933:', '', 1, 'CallGoneSoon')
delete('XToDelFunc')
enddef
writefile(['def Func1(): string', 'return "Func1"', 'enddef'], 'Xdef')
so Xdef
writefile(['def! Func0(): string', 'enddef', 'defcompile'], 'Xdef')
- assert_fails('so Xdef', 'E1027:')
+ assert_fails('so Xdef', 'E1027:', '', 1, 'Func0')
writefile(['def Func2(): string', 'return "Func2"', 'enddef'], 'Xdef')
so Xdef
delete('Xdef')
defcompile
END
call writefile(l, 'Xinvalidarg')
- call assert_fails('so Xinvalidarg', 'E118:')
+ call assert_fails('so Xinvalidarg', 'E118:', '', 1, 'FArgErr')
let l =<< trim END
def! FArgErr(): float
return ceil()
defcompile
END
call writefile(l, 'Xinvalidarg')
- call assert_fails('so Xinvalidarg', 'E119:')
+ call assert_fails('so Xinvalidarg', 'E119:', '', 1, 'FArgErr')
call delete('Xinvalidarg')
endfunc
char_u buf[NUMBUFLEN];
char_u *expected;
int error_found = FALSE;
- int lnum_error_found = FALSE;
+ int error_found_index = 1;
char_u *actual = emsg_assert_fails_msg == NULL ? (char_u *)"[unknown]"
: emsg_assert_fails_msg;
}
if (!error_found && argvars[2].v_type != VAR_UNKNOWN
- && argvars[3].v_type == VAR_NUMBER
- && argvars[3].vval.v_number >= 0
- && argvars[3].vval.v_number != emsg_assert_fails_lnum)
+ && argvars[3].v_type == VAR_NUMBER)
{
- error_found = TRUE;
- lnum_error_found = TRUE;
+ 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;
+ }
}
if (error_found)
typval_T actual_tv;
prepare_assert_error(&ga);
- if (lnum_error_found)
+ if (error_found_index == 3)
{
actual_tv.v_type = VAR_NUMBER;
actual_tv.vval.v_number = emsg_assert_fails_lnum;
}
+ else if (error_found_index == 4)
+ {
+ actual_tv.v_type = VAR_STRING;
+ actual_tv.vval.v_string = emsg_assert_fails_context;
+ }
else
{
actual_tv.v_type = VAR_STRING;
actual_tv.vval.v_string = actual;
}
fill_assert_error(&ga, &argvars[2], NULL,
- &argvars[lnum_error_found ? 3 : 1],
- &actual_tv, ASSERT_OTHER);
+ &argvars[error_found_index], &actual_tv, ASSERT_OTHER);
ga_concat(&ga, (char_u *)": ");
assert_append_cmd_or_arg(&ga, argvars, cmd);
assert_error(&ga);