diff options
author | Bram Moolenaar <Bram@vim.org> | 2017-09-03 15:48:12 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2017-09-03 15:48:12 +0200 |
commit | 5e80de3f3e572805fe734b66bc42c13303ad9bdb (patch) | |
tree | 038a05f77d6493f69928517044d021f37ec19112 | |
parent | 00ccf54630dc68a9b8aedb92b268f3b697081f68 (diff) |
patch 8.0.1048: no test for what 8.0.1020 fixesv8.0.1048
Problem: No test for what 8.0.1020 fixes.
Solution: Add test_feedinput(). Add a test. (Ozaki Kiichi, closes #2046)
-rw-r--r-- | runtime/doc/eval.txt | 6 | ||||
-rw-r--r-- | src/evalfunc.c | 19 | ||||
-rw-r--r-- | src/testdir/test_timers.vim | 19 | ||||
-rw-r--r-- | src/ui.c | 15 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 46 insertions, 15 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt index 445a6808bd..f9c6ae3b46 100644 --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -2410,6 +2410,7 @@ term_wait({buf} [, {time}]) Number wait for screen to be updated test_alloc_fail({id}, {countdown}, {repeat}) none make memory allocation fail test_autochdir() none enable 'autochdir' during startup +test_feedinput() none add key sequence to input buffer test_garbagecollect_now() none free memory right now for testing test_ignore_error({expr}) none ignore a specific error test_null_channel() Channel null value for testing @@ -8196,6 +8197,11 @@ test_autochdir() *test_autochdir()* Set a flag to enable the effect of 'autochdir' before Vim startup has finished. +test_feedinput({string}) *test_feedinput()* + Characters in {string} are queued for processing as if they + were typed by the user. This uses a low level input buffer. + This function works only when with |+unix| or GUI is running. + test_garbagecollect_now() *test_garbagecollect_now()* Like garbagecollect(), but executed right away. This must only be called directly to avoid any structure to exist diff --git a/src/evalfunc.c b/src/evalfunc.c index 626af7c500..2692de61f4 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -393,6 +393,7 @@ static void f_tagfiles(typval_T *argvars, typval_T *rettv); static void f_tempname(typval_T *argvars, typval_T *rettv); static void f_test_alloc_fail(typval_T *argvars, typval_T *rettv); static void f_test_autochdir(typval_T *argvars, typval_T *rettv); +static void f_test_feedinput(typval_T *argvars, typval_T *rettv); static void f_test_override(typval_T *argvars, typval_T *rettv); static void f_test_garbagecollect_now(typval_T *argvars, typval_T *rettv); static void f_test_ignore_error(typval_T *argvars, typval_T *rettv); @@ -851,6 +852,7 @@ static struct fst #endif {"test_alloc_fail", 3, 3, f_test_alloc_fail}, {"test_autochdir", 0, 0, f_test_autochdir}, + {"test_feedinput", 1, 1, f_test_feedinput}, {"test_garbagecollect_now", 0, 0, f_test_garbagecollect_now}, {"test_ignore_error", 1, 1, f_test_ignore_error}, #ifdef FEAT_JOB_CHANNEL @@ -12518,6 +12520,23 @@ f_test_autochdir(typval_T *argvars UNUSED, typval_T *rettv UNUSED) } /* + * "test_feedinput()" + */ + static void +f_test_feedinput(typval_T *argvars, typval_T *rettv UNUSED) +{ +#ifdef USE_INPUT_BUF + char_u *val = get_tv_string_chk(&argvars[0]); + + if (val != NULL) + { + trash_input_buf(); + add_to_input_buf_csi(val, (int)STRLEN(val)); + } +#endif +} + +/* * "test_disable({name}, {val})" function */ static void diff --git a/src/testdir/test_timers.vim b/src/testdir/test_timers.vim index d30325b7bb..0c6bb8338f 100644 --- a/src/testdir/test_timers.vim +++ b/src/testdir/test_timers.vim @@ -206,5 +206,24 @@ func Test_timer_errors() call assert_equal(3, g:call_count) endfunc +func FeedAndPeek(timer) + call test_feedinput('a') + call getchar(1) +endfunc + +func Interrupt(timer) + call test_feedinput("\<C-C>") +endfunc + +func Test_peek_and_get_char() + if !has('unix') && !has('gui_running') + return + endif + call timer_start(0, 'FeedAndPeek') + let intr = timer_start(100, 'Interrupt') + let c = getchar() + call assert_equal(char2nr('a'), c) + call timer_stop(intr) +endfunc " vim: shiftwidth=2 sts=2 expandtab @@ -1651,11 +1651,6 @@ set_input_buf(char_u *p) } } -#if defined(FEAT_GUI) \ - || defined(FEAT_MOUSE_GPM) || defined(FEAT_SYSMOUSE) \ - || defined(FEAT_XCLIPBOARD) || defined(VMS) \ - || defined(FEAT_CLIENTSERVER) \ - || defined(PROTO) /* * Add the given bytes to the input buffer * Special keys start with CSI. A real CSI must have been translated to @@ -1676,15 +1671,7 @@ add_to_input_buf(char_u *s, int len) while (len--) inbuf[inbufcount++] = *s++; } -#endif -#if ((defined(FEAT_XIM) || defined(FEAT_DND)) && defined(FEAT_GUI_GTK)) \ - || defined(FEAT_GUI_MSWIN) \ - || defined(FEAT_GUI_MAC) \ - || (defined(FEAT_MBYTE) && defined(FEAT_MBYTE_IME)) \ - || (defined(FEAT_GUI) && (!defined(USE_ON_FLY_SCROLL) \ - || defined(FEAT_MENU))) \ - || defined(PROTO) /* * Add "str[len]" to the input buffer while escaping CSI bytes. */ @@ -1706,7 +1693,6 @@ add_to_input_buf_csi(char_u *str, int len) } } } -#endif #if defined(FEAT_HANGULIN) || defined(PROTO) void @@ -1744,7 +1730,6 @@ trash_input_buf(void) /* * Read as much data from the input buffer as possible up to maxlen, and store * it in buf. - * Note: this function used to be Read() in unix.c */ int read_from_input_buf(char_u *buf, long maxlen) diff --git a/src/version.c b/src/version.c index 2034504ccc..ce53bb8150 100644 --- a/src/version.c +++ b/src/version.c @@ -770,6 +770,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1048, +/**/ 1047, /**/ 1046, |