]> granicus.if.org Git - vim/commitdiff
patch 8.0.1048: no test for what 8.0.1020 fixes v8.0.1048
authorBram Moolenaar <Bram@vim.org>
Sun, 3 Sep 2017 13:48:12 +0000 (15:48 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 3 Sep 2017 13:48:12 +0000 (15:48 +0200)
Problem:    No test for what 8.0.1020 fixes.
Solution:   Add test_feedinput().  Add a test. (Ozaki Kiichi, closes #2046)

runtime/doc/eval.txt
src/evalfunc.c
src/testdir/test_timers.vim
src/ui.c
src/version.c

index 445a6808bd407504315500bebf725d58bcfb186f..f9c6ae3b46b9a8d752f63d241db8fa5cc137b1ca 100644 (file)
@@ -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
index 626af7c5005c82768580f226f8dfbc8745f30fab..2692de61f49d64f4f906d62306978e55231742d9 100644 (file)
@@ -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
@@ -12517,6 +12519,23 @@ f_test_autochdir(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
 #endif
 }
 
+/*
+ * "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
  */
index d30325b7bbcdf3b5d410e02f428736dcb7b9def8..0c6bb8338fbb636f85696cc0ce2d60bf001e95bc 100644 (file)
@@ -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
index ddae372664018f2847800f9347edea0371018854..d8deb6a8de1277d59fec5ab425b77f790e9a0bb1 100644 (file)
--- a/src/ui.c
+++ b/src/ui.c
@@ -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)
index 2034504cccd0e0fb65d7333da1dd2492a83868f8..ce53bb81508b39a1ff07e947da4b373bf0b0b7a8 100644 (file)
@@ -769,6 +769,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1048,
 /**/
     1047,
 /**/