mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 7.4.1096
Problem: Need several lines to verify a command produces an error. Solution: Add assert_fails(). (suggested by Nikolay Pavlov) Make the quickfix alloc test actually work.
This commit is contained in:
parent
3d6d5cc3a4
commit
a260b87d9d
@ -1752,6 +1752,7 @@ argv( {nr}) String {nr} entry of the argument list
|
|||||||
argv( ) List the argument list
|
argv( ) List the argument list
|
||||||
assert_equal( {exp}, {act} [, {msg}]) none assert {exp} equals {act}
|
assert_equal( {exp}, {act} [, {msg}]) none assert {exp} equals {act}
|
||||||
assert_exception({error} [, {msg}]) none assert {error} is in v:exception
|
assert_exception({error} [, {msg}]) none assert {error} is in v:exception
|
||||||
|
assert_fails( {cmd} [, {error}]) none assert {cmd} fails
|
||||||
assert_false( {actual} [, {msg}]) none assert {actual} is false
|
assert_false( {actual} [, {msg}]) none assert {actual} is false
|
||||||
assert_true( {actual} [, {msg}]) none assert {actual} is true
|
assert_true( {actual} [, {msg}]) none assert {actual} is true
|
||||||
asin( {expr}) Float arc sine of {expr}
|
asin( {expr}) Float arc sine of {expr}
|
||||||
@ -2207,6 +2208,11 @@ assert_exception({error} [, {msg}]) *assert_exception()*
|
|||||||
call assert_exception('E492:')
|
call assert_exception('E492:')
|
||||||
endtry
|
endtry
|
||||||
|
|
||||||
|
assert_fails({cmd} [, {error}]) *assert_fails()*
|
||||||
|
Run {cmd} and add an error message to |v:errors| if it does
|
||||||
|
NOT produce an error.
|
||||||
|
When {error} is given it must match |v:errmsg|.
|
||||||
|
|
||||||
assert_false({actual} [, {msg}]) *assert_false()*
|
assert_false({actual} [, {msg}]) *assert_false()*
|
||||||
When {actual} is not false an error message is added to
|
When {actual} is not false an error message is added to
|
||||||
|v:errors|, like with |assert_equal()|.
|
|v:errors|, like with |assert_equal()|.
|
||||||
|
@ -17,4 +17,5 @@ typedef enum {
|
|||||||
aid_qf_namebuf,
|
aid_qf_namebuf,
|
||||||
aid_qf_errmsg,
|
aid_qf_errmsg,
|
||||||
aid_qf_pattern,
|
aid_qf_pattern,
|
||||||
|
aid_last,
|
||||||
} alloc_id_T;
|
} alloc_id_T;
|
||||||
|
50
src/eval.c
50
src/eval.c
@ -476,6 +476,7 @@ static void f_arglistid __ARGS((typval_T *argvars, typval_T *rettv));
|
|||||||
static void f_argv __ARGS((typval_T *argvars, typval_T *rettv));
|
static void f_argv __ARGS((typval_T *argvars, typval_T *rettv));
|
||||||
static void f_assert_equal __ARGS((typval_T *argvars, typval_T *rettv));
|
static void f_assert_equal __ARGS((typval_T *argvars, typval_T *rettv));
|
||||||
static void f_assert_exception __ARGS((typval_T *argvars, typval_T *rettv));
|
static void f_assert_exception __ARGS((typval_T *argvars, typval_T *rettv));
|
||||||
|
static void f_assert_fails __ARGS((typval_T *argvars, typval_T *rettv));
|
||||||
static void f_assert_false __ARGS((typval_T *argvars, typval_T *rettv));
|
static void f_assert_false __ARGS((typval_T *argvars, typval_T *rettv));
|
||||||
static void f_assert_true __ARGS((typval_T *argvars, typval_T *rettv));
|
static void f_assert_true __ARGS((typval_T *argvars, typval_T *rettv));
|
||||||
#ifdef FEAT_FLOAT
|
#ifdef FEAT_FLOAT
|
||||||
@ -8090,6 +8091,7 @@ static struct fst
|
|||||||
#endif
|
#endif
|
||||||
{"assert_equal", 2, 3, f_assert_equal},
|
{"assert_equal", 2, 3, f_assert_equal},
|
||||||
{"assert_exception", 1, 2, f_assert_exception},
|
{"assert_exception", 1, 2, f_assert_exception},
|
||||||
|
{"assert_fails", 1, 2, f_assert_fails},
|
||||||
{"assert_false", 1, 2, f_assert_false},
|
{"assert_false", 1, 2, f_assert_false},
|
||||||
{"assert_true", 1, 2, f_assert_true},
|
{"assert_true", 1, 2, f_assert_true},
|
||||||
#ifdef FEAT_FLOAT
|
#ifdef FEAT_FLOAT
|
||||||
@ -9009,8 +9011,11 @@ f_alloc_fail(argvars, rettv)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
alloc_fail_id = argvars[0].vval.v_number;
|
alloc_fail_id = argvars[0].vval.v_number;
|
||||||
|
if (alloc_fail_id >= aid_last)
|
||||||
|
EMSG(_(e_invarg));
|
||||||
alloc_fail_countdown = argvars[1].vval.v_number;
|
alloc_fail_countdown = argvars[1].vval.v_number;
|
||||||
alloc_fail_repeat = argvars[2].vval.v_number;
|
alloc_fail_repeat = argvars[2].vval.v_number;
|
||||||
|
did_outofmem_msg = FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -9300,6 +9305,51 @@ f_assert_exception(argvars, rettv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* "assert_fails(cmd [, error])" function
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
f_assert_fails(argvars, rettv)
|
||||||
|
typval_T *argvars;
|
||||||
|
typval_T *rettv UNUSED;
|
||||||
|
{
|
||||||
|
char_u *cmd = get_tv_string_chk(&argvars[0]);
|
||||||
|
garray_T ga;
|
||||||
|
|
||||||
|
called_emsg = FALSE;
|
||||||
|
suppress_errthrow = TRUE;
|
||||||
|
emsg_silent = TRUE;
|
||||||
|
do_cmdline_cmd(cmd);
|
||||||
|
if (!called_emsg)
|
||||||
|
{
|
||||||
|
prepare_assert_error(&ga);
|
||||||
|
ga_concat(&ga, (char_u *)"command did not fail: ");
|
||||||
|
ga_concat(&ga, cmd);
|
||||||
|
assert_error(&ga);
|
||||||
|
ga_clear(&ga);
|
||||||
|
}
|
||||||
|
else if (argvars[1].v_type != VAR_UNKNOWN)
|
||||||
|
{
|
||||||
|
char_u buf[NUMBUFLEN];
|
||||||
|
char *error = (char *)get_tv_string_buf_chk(&argvars[1], buf);
|
||||||
|
|
||||||
|
if (strstr((char *)vimvars[VV_ERRMSG].vv_str, error) == NULL)
|
||||||
|
{
|
||||||
|
prepare_assert_error(&ga);
|
||||||
|
fill_assert_error(&ga, &argvars[2], NULL, &argvars[1],
|
||||||
|
&vimvars[VV_ERRMSG].vv_tv);
|
||||||
|
assert_error(&ga);
|
||||||
|
ga_clear(&ga);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
called_emsg = FALSE;
|
||||||
|
suppress_errthrow = FALSE;
|
||||||
|
emsg_silent = FALSE;
|
||||||
|
emsg_on_display = FALSE;
|
||||||
|
set_vim_var_string(VV_ERRMSG, NULL, 0);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Common for assert_true() and assert_false().
|
* Common for assert_true() and assert_false().
|
||||||
*/
|
*/
|
||||||
|
10
src/misc2.c
10
src/misc2.c
@ -798,13 +798,17 @@ vim_mem_profile_dump()
|
|||||||
#endif /* MEM_PROFILE */
|
#endif /* MEM_PROFILE */
|
||||||
|
|
||||||
#ifdef FEAT_EVAL
|
#ifdef FEAT_EVAL
|
||||||
|
static int alloc_does_fail __ARGS((long_u size));
|
||||||
|
|
||||||
static int
|
static int
|
||||||
alloc_does_fail()
|
alloc_does_fail(size)
|
||||||
|
long_u size;
|
||||||
{
|
{
|
||||||
if (alloc_fail_countdown == 0)
|
if (alloc_fail_countdown == 0)
|
||||||
{
|
{
|
||||||
if (--alloc_fail_repeat <= 0)
|
if (--alloc_fail_repeat <= 0)
|
||||||
alloc_fail_id = 0;
|
alloc_fail_id = 0;
|
||||||
|
do_outofmem_msg(size);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
--alloc_fail_countdown;
|
--alloc_fail_countdown;
|
||||||
@ -844,7 +848,7 @@ alloc_id(size, id)
|
|||||||
alloc_id_T id UNUSED;
|
alloc_id_T id UNUSED;
|
||||||
{
|
{
|
||||||
#ifdef FEAT_EVAL
|
#ifdef FEAT_EVAL
|
||||||
if (alloc_fail_id == id && alloc_does_fail())
|
if (alloc_fail_id == id && alloc_does_fail((long_u)size))
|
||||||
return NULL;
|
return NULL;
|
||||||
#endif
|
#endif
|
||||||
return (lalloc((long_u)size, TRUE));
|
return (lalloc((long_u)size, TRUE));
|
||||||
@ -1008,7 +1012,7 @@ lalloc_id(size, message, id)
|
|||||||
alloc_id_T id UNUSED;
|
alloc_id_T id UNUSED;
|
||||||
{
|
{
|
||||||
#ifdef FEAT_EVAL
|
#ifdef FEAT_EVAL
|
||||||
if (alloc_fail_id == id && alloc_does_fail())
|
if (alloc_fail_id == id && alloc_does_fail(size))
|
||||||
return NULL;
|
return NULL;
|
||||||
#endif
|
#endif
|
||||||
return (lalloc((long_u)size, message));
|
return (lalloc((long_u)size, message));
|
||||||
|
@ -279,39 +279,19 @@ endfunction
|
|||||||
|
|
||||||
function Test_nomem()
|
function Test_nomem()
|
||||||
call alloc_fail(GetAllocId('qf_dirname_start'), 0, 0)
|
call alloc_fail(GetAllocId('qf_dirname_start'), 0, 0)
|
||||||
try
|
call assert_fails('vimgrep vim runtest.vim', 'E342:')
|
||||||
vimgrep vim runtest.vim
|
|
||||||
catch
|
|
||||||
call assert_true(v:exception =~ 'E342')
|
|
||||||
endtry
|
|
||||||
|
|
||||||
call alloc_fail(GetAllocId('qf_dirname_now'), 0, 0)
|
call alloc_fail(GetAllocId('qf_dirname_now'), 0, 0)
|
||||||
try
|
call assert_fails('vimgrep vim runtest.vim', 'E342:')
|
||||||
vimgrep vim runtest.vim
|
|
||||||
catch
|
|
||||||
call assert_true(v:exception =~ 'E342')
|
|
||||||
endtry
|
|
||||||
|
|
||||||
call alloc_fail(GetAllocId('qf_namebuf'), 0, 0)
|
call alloc_fail(GetAllocId('qf_namebuf'), 0, 0)
|
||||||
try
|
call assert_fails('cfile runtest.vim', 'E342:')
|
||||||
cfile runtest.vim
|
|
||||||
catch
|
|
||||||
call assert_true(v:exception =~ 'E342')
|
|
||||||
endtry
|
|
||||||
|
|
||||||
call alloc_fail(GetAllocId('qf_errmsg'), 0, 0)
|
call alloc_fail(GetAllocId('qf_errmsg'), 0, 0)
|
||||||
try
|
call assert_fails('cfile runtest.vim', 'E342:')
|
||||||
cfile runtest.vim
|
|
||||||
catch
|
|
||||||
call assert_true(v:exception =~ 'E342')
|
|
||||||
endtry
|
|
||||||
|
|
||||||
call alloc_fail(GetAllocId('qf_pattern'), 0, 0)
|
call alloc_fail(GetAllocId('qf_pattern'), 0, 0)
|
||||||
try
|
call assert_fails('cfile runtest.vim', 'E342:')
|
||||||
cfile runtest.vim
|
|
||||||
catch
|
|
||||||
call assert_true(v:exception =~ 'E342')
|
|
||||||
endtry
|
|
||||||
|
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
@ -741,6 +741,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1096,
|
||||||
/**/
|
/**/
|
||||||
1095,
|
1095,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user