To: vim_dev@googlegroups.com Subject: Patch 7.4.1300 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ 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\X\" + 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 -- Bram@Moolenaar.net -- 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 ///