diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-02-10 22:23:06 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-02-10 22:23:06 +0100 |
commit | 2ab375e54ef4eac438d1aef8b99d9e71f2fa0c63 (patch) | |
tree | d62682f35f89d4821d4b1a5a8f71c71fb7b9745b | |
parent | f6157284de71d8881f3b89fbd79d1ecbf842929f (diff) | |
download | vim-2ab375e54ef4eac438d1aef8b99d9e71f2fa0c63.zip |
patch 7.4.1300
Problem: Cannot test CursorMovedI because there is typeahead.
Solution: Add disable_char_avail_for_testing().
-rw-r--r-- | src/eval.c | 14 | ||||
-rw-r--r-- | src/getchar.c | 6 | ||||
-rw-r--r-- | src/globals.h | 2 | ||||
-rw-r--r-- | src/testdir/README.txt | 3 | ||||
-rw-r--r-- | src/testdir/test_cursor_func.vim | 27 | ||||
-rw-r--r-- | src/version.c | 2 |
6 files changed, 50 insertions, 4 deletions
diff --git a/src/eval.c b/src/eval.c index 8cc8d0519..1e82246ef 100644 --- a/src/eval.c +++ b/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_diff_filler(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_escape(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}, {"diff_filler", 1, 1, f_diff_filler}, {"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}, {"escape", 2, 2, f_escape}, {"eval", 1, 1, f_eval}, @@ -10606,6 +10608,15 @@ f_diff_hlID(typval_T *argvars UNUSED, typval_T *rettv UNUSED) } /* + * "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 */ static void @@ -12449,8 +12460,11 @@ getpos_both( #endif (varnumber_T)0); if (getcurpos) + { + update_curswant(); list_append_number(l, curwin->w_curswant == MAXCOL ? (varnumber_T)MAXCOL : (varnumber_T)curwin->w_curswant + 1); + } } else rettv->vval.v_number = FALSE; diff --git a/src/getchar.c b/src/getchar.c index 2c5709003..034751492 100644 --- a/src/getchar.c +++ b/src/getchar.c @@ -1888,6 +1888,12 @@ char_avail(void) { 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; retval = vpeekc(); --no_mapping; diff --git a/src/globals.h b/src/globals.h index 4c1b41fed..b43f1a270 100644 --- a/src/globals.h +++ b/src/globals.h @@ -1621,6 +1621,8 @@ EXTERN alloc_id_T alloc_fail_id INIT(= aid_none); EXTERN int alloc_fail_countdown INIT(= -1); /* set by alloc_fail(), number of times alloc() returns NULL */ EXTERN int alloc_fail_repeat INIT(= 0); + +EXTERN int disable_char_avail_for_testing INIT(= 0); #endif /* diff --git a/src/testdir/README.txt b/src/testdir/README.txt index 7cbc77133..052ccf5a2 100644 --- a/src/testdir/README.txt +++ b/src/testdir/README.txt @@ -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 change the source code to add an ID to the allocation. Update LAST_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: diff --git a/src/testdir/test_cursor_func.vim b/src/testdir/test_cursor_func.vim index 684391e2a..d3236e6e0 100644 --- a/src/testdir/test_cursor_func.vim +++ b/src/testdir/test_cursor_func.vim @@ -20,16 +20,35 @@ func Test_move_cursor() call assert_equal([4, 3, 0, 3], getcurpos()[1:]) 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 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 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 call cursor(9, 1) - call assert_equal([4, 1, 0, 3], getcurpos()[1:]) + call assert_equal([4, 1, 0, 1], getcurpos()[1:]) quit! 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 + diff --git a/src/version.c b/src/version.c index 9a77db0bd..e19d205d3 100644 --- a/src/version.c +++ b/src/version.c @@ -748,6 +748,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1300, +/**/ 1299, /**/ 1298, |