1
0
forked from aniani/vim

patch 8.0.1048: no test for what 8.0.1020 fixes

Problem:    No test for what 8.0.1020 fixes.
Solution:   Add test_feedinput().  Add a test. (Ozaki Kiichi, closes #2046)
This commit is contained in:
Bram Moolenaar
2017-09-03 15:48:12 +02:00
parent 00ccf54630
commit 5e80de3f3e
5 changed files with 46 additions and 15 deletions

View File

@@ -2410,6 +2410,7 @@ term_wait({buf} [, {time}]) Number wait for screen to be updated
test_alloc_fail({id}, {countdown}, {repeat}) test_alloc_fail({id}, {countdown}, {repeat})
none make memory allocation fail none make memory allocation fail
test_autochdir() none enable 'autochdir' during startup 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_garbagecollect_now() none free memory right now for testing
test_ignore_error({expr}) none ignore a specific error test_ignore_error({expr}) none ignore a specific error
test_null_channel() Channel null value for testing 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 Set a flag to enable the effect of 'autochdir' before Vim
startup has finished. 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()* test_garbagecollect_now() *test_garbagecollect_now()*
Like garbagecollect(), but executed right away. This must Like garbagecollect(), but executed right away. This must
only be called directly to avoid any structure to exist only be called directly to avoid any structure to exist

View 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_tempname(typval_T *argvars, typval_T *rettv);
static void f_test_alloc_fail(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_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_override(typval_T *argvars, typval_T *rettv);
static void f_test_garbagecollect_now(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); static void f_test_ignore_error(typval_T *argvars, typval_T *rettv);
@@ -851,6 +852,7 @@ static struct fst
#endif #endif
{"test_alloc_fail", 3, 3, f_test_alloc_fail}, {"test_alloc_fail", 3, 3, f_test_alloc_fail},
{"test_autochdir", 0, 0, f_test_autochdir}, {"test_autochdir", 0, 0, f_test_autochdir},
{"test_feedinput", 1, 1, f_test_feedinput},
{"test_garbagecollect_now", 0, 0, f_test_garbagecollect_now}, {"test_garbagecollect_now", 0, 0, f_test_garbagecollect_now},
{"test_ignore_error", 1, 1, f_test_ignore_error}, {"test_ignore_error", 1, 1, f_test_ignore_error},
#ifdef FEAT_JOB_CHANNEL #ifdef FEAT_JOB_CHANNEL
@@ -12517,6 +12519,23 @@ f_test_autochdir(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
#endif #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 * "test_disable({name}, {val})" function
*/ */

View File

@@ -206,5 +206,24 @@ func Test_timer_errors()
call assert_equal(3, g:call_count) call assert_equal(3, g:call_count)
endfunc 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 " vim: shiftwidth=2 sts=2 expandtab

View File

@@ -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 * Add the given bytes to the input buffer
* Special keys start with CSI. A real CSI must have been translated to * 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--) while (len--)
inbuf[inbufcount++] = *s++; 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. * 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) #if defined(FEAT_HANGULIN) || defined(PROTO)
void void
@@ -1744,7 +1730,6 @@ trash_input_buf(void)
/* /*
* Read as much data from the input buffer as possible up to maxlen, and store * Read as much data from the input buffer as possible up to maxlen, and store
* it in buf. * it in buf.
* Note: this function used to be Read() in unix.c
*/ */
int int
read_from_input_buf(char_u *buf, long maxlen) read_from_input_buf(char_u *buf, long maxlen)

View File

@@ -769,6 +769,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1048,
/**/ /**/
1047, 1047,
/**/ /**/