Patch 7.4.1300
Problem:    Cannot test CursorMovedI because there is typeahead.
Solution:   Add disable_char_avail_for_testing().
Files:      src/eval.c, src/getchar.c, src/globals.h,
            src/testdir/test_cursor_func.vim, src/testdir/README.txt


*** ../vim-7.4.1299/src/eval.c  2016-02-09 20:39:21.684933663 +0100
--- src/eval.c  2016-02-10 22:15:17.201532242 +0100
***************
*** 532,537 ****
--- 532,538 ----
  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,8116 ****
--- 8112,8118 ----
      {"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,10611 ****
--- 10608,10622 ----
  }
  
  /*
+  * "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,12456 ****
--- 12460,12470 ----
  #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;
*** ../vim-7.4.1299/src/getchar.c       2016-01-31 18:08:30.279202960 +0100
--- src/getchar.c       2016-02-10 22:05:39.263644140 +0100
***************
*** 1888,1893 ****
--- 1888,1899 ----
  {
      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;
*** ../vim-7.4.1299/src/globals.h       2016-01-31 14:55:35.231538430 +0100
--- src/globals.h       2016-02-10 22:05:17.279876692 +0100
***************
*** 1621,1626 ****
--- 1621,1628 ----
  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
  
  /*
*** ../vim-7.4.1299/src/testdir/test_cursor_func.vim    2016-01-15 
15:37:16.975521267 +0100
--- src/testdir/test_cursor_func.vim    2016-02-10 22:14:30.510025903 +0100
***************
*** 20,35 ****
    call assert_equal([4, 3, 0, 3], getcurpos()[1:])
  
    call cursor(2, 2)
!   call assert_equal([2, 2, 0, 3], getcurpos()[1:])
    " line number zero keeps the line number
    call cursor(0, 1)
!   call assert_equal([2, 1, 0, 3], getcurpos()[1:])
    " col number zero keeps the column
    call cursor(3, 0)
!   call assert_equal([3, 1, 0, 3], getcurpos()[1:])
    " below last line goes to last line
    call cursor(9, 1)
!   call assert_equal([4, 1, 0, 3], getcurpos()[1:])
  
    quit!
  endfunc
--- 20,54 ----
    call assert_equal([4, 3, 0, 3], getcurpos()[1:])
  
    call cursor(2, 2)
!   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, 1], getcurpos()[1:])
    " col number zero keeps the column
    call cursor(3, 0)
!   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, 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
+ 
*** ../vim-7.4.1299/src/testdir/README.txt      2016-01-07 22:00:57.805984639 
+0100
--- src/testdir/README.txt      2016-02-10 22:20:53.417971574 +0100
***************
*** 25,30 ****
--- 25,33 ----
    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:
*** ../vim-7.4.1299/src/version.c       2016-02-10 21:07:09.016869231 +0100
--- src/version.c       2016-02-10 21:58:36.880113173 +0100
***************
*** 749,750 ****
--- 749,752 ----
  {   /* Add new patch number below this line */
+ /**/
+     1300,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
217. Your sex life has drastically improved...so what if it's only cyber-sex!

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui