]> granicus.if.org Git - vim/commitdiff
patch 7.4.1300 v7.4.1300
authorBram Moolenaar <Bram@vim.org>
Wed, 10 Feb 2016 21:23:06 +0000 (22:23 +0100)
committerBram Moolenaar <Bram@vim.org>
Wed, 10 Feb 2016 21:23:06 +0000 (22:23 +0100)
Problem:    Cannot test CursorMovedI because there is typeahead.
Solution:   Add disable_char_avail_for_testing().

src/eval.c
src/getchar.c
src/globals.h
src/testdir/README.txt
src/testdir/test_cursor_func.vim
src/version.c

index 8cc8d0519eb499cd720a3135871641fec1e7c8b8..1e82246ef9a8b958105900281d62170b831fc4bf 100644 (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_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},
@@ -10605,6 +10607,15 @@ f_diff_hlID(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
 #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
  */
@@ -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;
index 2c5709003a31ac73d91cf37eb1cd1f783b681094..034751492f90045cc5abf260d7e284e1ad81ac97 100644 (file)
@@ -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;
index 4c1b41fede32fa3af5cd5509d2abd36c4a8795b3..b43f1a270862193d470e90e2bb6a2c968de205ba 100644 (file)
@@ -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
 
 /*
index 7cbc77133e3ab5d34a9ee8885e96c9fdf80bf837..052ccf5a2a24c6b7bd192d41043b803c92f07f34 100644 (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
   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:
index 684391e2a54bcbc379cd08b536104645d69dd755..d3236e6e01163c2fa53a48eedd9c84c3c5e9446e 100644 (file)
@@ -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
+
index 9a77db0bd3ed7ca7e7ad1d9c29c2b8b5ee04c053..e19d205d3074f5299567998267a02d4570892a11 100644 (file)
@@ -747,6 +747,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1300,
 /**/
     1299,
 /**/