1
0
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:
Bram Moolenaar
2016-02-10 22:23:06 +01:00
parent f6157284de
commit 2ab375e54e
6 changed files with 50 additions and 4 deletions

View File

@@ -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,9 +12460,12 @@ 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;
} }

View File

@@ -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;

View File

@@ -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
/* /*

View File

@@ -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:

View File

@@ -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

View File

@@ -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,
/**/ /**/