forked from aniani/vim
patch 7.4.1300
Problem: Cannot test CursorMovedI because there is typeahead. Solution: Add disable_char_avail_for_testing().
This commit is contained in:
14
src/eval.c
14
src/eval.c
@@ -532,6 +532,7 @@ static void f_delete(typval_T *argvars, typval_T *rettv);
|
|||||||
static void f_did_filetype(typval_T *argvars, typval_T *rettv);
|
static void f_did_filetype(typval_T *argvars, typval_T *rettv);
|
||||||
static void f_diff_filler(typval_T *argvars, typval_T *rettv);
|
static void f_diff_filler(typval_T *argvars, typval_T *rettv);
|
||||||
static void f_diff_hlID(typval_T *argvars, typval_T *rettv);
|
static void f_diff_hlID(typval_T *argvars, typval_T *rettv);
|
||||||
|
static void f_disable_char_avail_for_testing(typval_T *argvars, typval_T *rettv);
|
||||||
static void f_empty(typval_T *argvars, typval_T *rettv);
|
static void f_empty(typval_T *argvars, typval_T *rettv);
|
||||||
static void f_escape(typval_T *argvars, typval_T *rettv);
|
static void f_escape(typval_T *argvars, typval_T *rettv);
|
||||||
static void f_eval(typval_T *argvars, typval_T *rettv);
|
static void f_eval(typval_T *argvars, typval_T *rettv);
|
||||||
@@ -8111,6 +8112,7 @@ static struct fst
|
|||||||
{"did_filetype", 0, 0, f_did_filetype},
|
{"did_filetype", 0, 0, f_did_filetype},
|
||||||
{"diff_filler", 1, 1, f_diff_filler},
|
{"diff_filler", 1, 1, f_diff_filler},
|
||||||
{"diff_hlID", 2, 2, f_diff_hlID},
|
{"diff_hlID", 2, 2, f_diff_hlID},
|
||||||
|
{"disable_char_avail_for_testing", 1, 1, f_disable_char_avail_for_testing},
|
||||||
{"empty", 1, 1, f_empty},
|
{"empty", 1, 1, f_empty},
|
||||||
{"escape", 2, 2, f_escape},
|
{"escape", 2, 2, f_escape},
|
||||||
{"eval", 1, 1, f_eval},
|
{"eval", 1, 1, f_eval},
|
||||||
@@ -10605,6 +10607,15 @@ f_diff_hlID(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* "disable_char_avail_for_testing({expr})" function
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
f_disable_char_avail_for_testing(typval_T *argvars, typval_T *rettv UNUSED)
|
||||||
|
{
|
||||||
|
disable_char_avail_for_testing = get_tv_number(&argvars[0]);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* "empty({expr})" function
|
* "empty({expr})" function
|
||||||
*/
|
*/
|
||||||
@@ -12449,8 +12460,11 @@ getpos_both(
|
|||||||
#endif
|
#endif
|
||||||
(varnumber_T)0);
|
(varnumber_T)0);
|
||||||
if (getcurpos)
|
if (getcurpos)
|
||||||
|
{
|
||||||
|
update_curswant();
|
||||||
list_append_number(l, curwin->w_curswant == MAXCOL ?
|
list_append_number(l, curwin->w_curswant == MAXCOL ?
|
||||||
(varnumber_T)MAXCOL : (varnumber_T)curwin->w_curswant + 1);
|
(varnumber_T)MAXCOL : (varnumber_T)curwin->w_curswant + 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
rettv->vval.v_number = FALSE;
|
rettv->vval.v_number = FALSE;
|
||||||
|
@@ -1888,6 +1888,12 @@ char_avail(void)
|
|||||||
{
|
{
|
||||||
int retval;
|
int retval;
|
||||||
|
|
||||||
|
#ifdef FEAT_EVAL
|
||||||
|
/* When disable_char_avail_for_testing(1) was called pretend there is no
|
||||||
|
* typeahead. */
|
||||||
|
if (disable_char_avail_for_testing)
|
||||||
|
return FALSE;
|
||||||
|
#endif
|
||||||
++no_mapping;
|
++no_mapping;
|
||||||
retval = vpeekc();
|
retval = vpeekc();
|
||||||
--no_mapping;
|
--no_mapping;
|
||||||
|
@@ -1621,6 +1621,8 @@ EXTERN alloc_id_T alloc_fail_id INIT(= aid_none);
|
|||||||
EXTERN int alloc_fail_countdown INIT(= -1);
|
EXTERN int alloc_fail_countdown INIT(= -1);
|
||||||
/* set by alloc_fail(), number of times alloc() returns NULL */
|
/* set by alloc_fail(), number of times alloc() returns NULL */
|
||||||
EXTERN int alloc_fail_repeat INIT(= 0);
|
EXTERN int alloc_fail_repeat INIT(= 0);
|
||||||
|
|
||||||
|
EXTERN int disable_char_avail_for_testing INIT(= 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -25,6 +25,9 @@ What you can use (see test_assert.vim for an example):
|
|||||||
to check memory allocation failures are handled gracefully. You need to
|
to check memory allocation failures are handled gracefully. You need to
|
||||||
change the source code to add an ID to the allocation. Update LAST_ID_USED
|
change the source code to add an ID to the allocation. Update LAST_ID_USED
|
||||||
above alloc_id() to the highest ID used.
|
above alloc_id() to the highest ID used.
|
||||||
|
- Use disable_char_avail_for_testing(1) if char_avail() must return FALSE for
|
||||||
|
a while. E.g. to trigger the CursorMovedI autocommand event.
|
||||||
|
See test_cursor_func.vim for an example
|
||||||
|
|
||||||
|
|
||||||
TO ADD AN OLD STYLE TEST:
|
TO ADD AN OLD STYLE TEST:
|
||||||
|
@@ -20,16 +20,35 @@ func Test_move_cursor()
|
|||||||
call assert_equal([4, 3, 0, 3], getcurpos()[1:])
|
call assert_equal([4, 3, 0, 3], getcurpos()[1:])
|
||||||
|
|
||||||
call cursor(2, 2)
|
call cursor(2, 2)
|
||||||
call assert_equal([2, 2, 0, 3], getcurpos()[1:])
|
call assert_equal([2, 2, 0, 2], getcurpos()[1:])
|
||||||
" line number zero keeps the line number
|
" line number zero keeps the line number
|
||||||
call cursor(0, 1)
|
call cursor(0, 1)
|
||||||
call assert_equal([2, 1, 0, 3], getcurpos()[1:])
|
call assert_equal([2, 1, 0, 1], getcurpos()[1:])
|
||||||
" col number zero keeps the column
|
" col number zero keeps the column
|
||||||
call cursor(3, 0)
|
call cursor(3, 0)
|
||||||
call assert_equal([3, 1, 0, 3], getcurpos()[1:])
|
call assert_equal([3, 1, 0, 1], getcurpos()[1:])
|
||||||
" below last line goes to last line
|
" below last line goes to last line
|
||||||
call cursor(9, 1)
|
call cursor(9, 1)
|
||||||
call assert_equal([4, 1, 0, 3], getcurpos()[1:])
|
call assert_equal([4, 1, 0, 1], getcurpos()[1:])
|
||||||
|
|
||||||
quit!
|
quit!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Very short version of what matchparen does.
|
||||||
|
function s:Highlight_Matching_Pair()
|
||||||
|
let save_cursor = getcurpos()
|
||||||
|
call setpos('.', save_cursor)
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_curswant_with_autocommand()
|
||||||
|
new
|
||||||
|
call setline(1, ['func()', '{', '}', '----'])
|
||||||
|
autocmd! CursorMovedI * call s:Highlight_Matching_Pair()
|
||||||
|
call disable_char_avail_for_testing(1)
|
||||||
|
exe "normal! 3Ga\<Down>X\<Esc>"
|
||||||
|
call disable_char_avail_for_testing(0)
|
||||||
|
call assert_equal('-X---', getline(4))
|
||||||
|
autocmd! CursorMovedI *
|
||||||
|
quit!
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
@@ -747,6 +747,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 */
|
||||||
|
/**/
|
||||||
|
1300,
|
||||||
/**/
|
/**/
|
||||||
1299,
|
1299,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user