summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-02-10 22:23:06 +0100
committerBram Moolenaar <Bram@vim.org>2016-02-10 22:23:06 +0100
commit2ab375e54ef4eac438d1aef8b99d9e71f2fa0c63 (patch)
treed62682f35f89d4821d4b1a5a8f71c71fb7b9745b
parentf6157284de71d8881f3b89fbd79d1ecbf842929f (diff)
downloadvim-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.c14
-rw-r--r--src/getchar.c6
-rw-r--r--src/globals.h2
-rw-r--r--src/testdir/README.txt3
-rw-r--r--src/testdir/test_cursor_func.vim27
-rw-r--r--src/version.c2
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,