From 11fd9655542fd2676e13d00791b4bc9e96772300 Mon Sep 17 00:00:00 2001 From: KillTheMule Date: Mon, 18 Apr 2016 21:06:04 +0200 Subject: [PATCH] vim-patch:7.4.1300 Problem: Cannot test CursorMovedI because there is typeahead. Solution: Add disable_char_avail_for_testing(). https://github.com/vim/vim/commit/2ab375e54ef4eac438d1aef8b99d9e71f2fa0c63 Most of it manually applied. --- src/nvim/eval.c | 11 +++++++++++ src/nvim/getchar.c | 5 +++++ src/nvim/globals.h | 2 ++ src/nvim/testdir/test_cursor_func.vim | 27 +++++++++++++++++++++++---- src/nvim/version.c | 2 +- 5 files changed, 42 insertions(+), 5 deletions(-) diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 9553c7a7ed..60ebc34ea9 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -6707,6 +6707,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 }, @@ -8582,6 +8583,15 @@ static void f_diff_hlID(typval_T *argvars, typval_T *rettv) rettv->vval.v_number = hlID == (hlf_T)0 ? 0 : (int)hlID; } +// +// "disable_char_avail_for_testing({expr})" function +// +static void f_disable_char_avail_for_testing(typval_T *argvars, typval_T *rettv) + FUNC_ATTR_NONNULL_ARG(1) +{ + disable_char_avail_for_testing = get_tv_number(&argvars[0]); +} + /* * "empty({expr})" function */ @@ -10173,6 +10183,7 @@ static void getpos_both(typval_T *argvars, typval_T *rettv, bool getcurpos) list_append_number(l, (fp != NULL) ? (varnumber_T)fp->coladd : (varnumber_T)0); if (getcurpos) { + update_curswant(); list_append_number(l, curwin->w_curswant == MAXCOL ? (varnumber_T)MAXCOL : (varnumber_T)curwin->w_curswant + 1); diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c index 437495faa4..74e5526caa 100644 --- a/src/nvim/getchar.c +++ b/src/nvim/getchar.c @@ -1562,6 +1562,11 @@ int char_avail(void) { int retval; + // When disable_char_avail_for_testing(1) was called pretend + // there is no typeahead + if (disable_char_avail_for_testing) { + return FALSE; + } ++no_mapping; retval = vpeekc(); --no_mapping; diff --git a/src/nvim/globals.h b/src/nvim/globals.h index 49d1de21d9..d8331d608c 100644 --- a/src/nvim/globals.h +++ b/src/nvim/globals.h @@ -1239,6 +1239,8 @@ EXTERN FILE *time_fd INIT(= NULL); /* where to write startup timing */ EXTERN int ignored; EXTERN char *ignoredp; +EXTERN int disable_char_avail_for_testing INIT(= 0); + // If a msgpack-rpc channel should be started over stdin/stdout EXTERN bool embedded_mode INIT(= false); EXTERN Loop loop; diff --git a/src/nvim/testdir/test_cursor_func.vim b/src/nvim/testdir/test_cursor_func.vim index 684391e2a5..d3236e6e01 100644 --- a/src/nvim/testdir/test_cursor_func.vim +++ b/src/nvim/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\X\" + call disable_char_avail_for_testing(0) + call assert_equal('-X---', getline(4)) + autocmd! CursorMovedI * + quit! +endfunc + diff --git a/src/nvim/version.c b/src/nvim/version.c index a492c8d7ec..ed16b1b0d5 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -377,7 +377,7 @@ static int included_patches[] = { // 1303 NA // 1302 NA // 1301 NA - // 1300, + 1300, // 1299 NA // 1298 NA // 1297 NA