diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/testdir/test_gui.vim | 71 | ||||
-rw-r--r-- | src/testing.c | 55 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 111 insertions, 17 deletions
diff --git a/src/testdir/test_gui.vim b/src/testdir/test_gui.vim index c4b59c758b..5516c8904a 100644 --- a/src/testdir/test_gui.vim +++ b/src/testdir/test_gui.vim @@ -1255,10 +1255,6 @@ endfunc func Test_gui_drop_files() CheckFeature drop_file - call assert_false(test_gui_event("dropfiles", {})) - let d = #{row: 1, col: 1, modifiers: 0} - call assert_false(test_gui_event("dropfiles", d)) - %bw! %argdelete let d = #{files: [], row: 1, col: 1, modifiers: 0} @@ -1345,6 +1341,15 @@ func Test_gui_drop_files() call feedkeys('k', 'Lx!') call assert_equal('"a.c b.c', @:) cunmap <buffer> <F4> + + " Invalid arguments + call assert_false(test_gui_event("dropfiles", {})) + let d = #{row: 1, col: 1, modifiers: 0} + call assert_false(test_gui_event("dropfiles", d)) + let d = #{files: test_null_list(), row: 1, col: 1, modifiers: 0} + call assert_false(test_gui_event("dropfiles", d)) + let d = #{files: [test_null_string()], row: 1, col: 1, modifiers: 0} + call assert_true(test_gui_event("dropfiles", d)) endfunc " Test for generating a GUI tabline event to select a tab page @@ -1367,6 +1372,10 @@ func Test_gui_tabline_event() call feedkeys("q::let t = test_gui_event('tabline', #{tabnr: 2})\<CR>:q\<CR>", 'x!') call assert_equal(v:false, t) + " Invalid arguments + call assert_false(test_gui_event('tabline', {})) + call assert_false(test_gui_event('tabline', #{abc: 1})) + %bw! endfunc @@ -1397,7 +1406,61 @@ func Test_gui_tabmenu_event() call feedkeys("y", "Lx!") call assert_equal(2, tabpagenr('$')) + " Invalid arguments + call assert_false(test_gui_event('tabmenu', {})) + call assert_false(test_gui_event('tabmenu', #{tabnr: 1})) + call assert_false(test_gui_event('tabmenu', #{item: 1})) + call assert_false(test_gui_event('tabmenu', #{abc: 1})) + %bw! endfunc +" Test for find/replace text dialog event +func Test_gui_findrepl() + new + call setline(1, ['one two one', 'Twoo One two oneo']) + + " Replace all instances of a string with another + let args = #{find_text: 'one', repl_text: 'ONE', flags: 0x4, forward: 1} + call test_gui_event('findrepl', args) + call assert_equal(['ONE two ONE', 'Twoo ONE two ONEo'], getline(1, '$')) + + " Replace all instances of a whole string with another + call cursor(1, 1) + let args = #{find_text: 'two', repl_text: 'TWO', flags: 0xC, forward: 1} + call test_gui_event('findrepl', args) + call assert_equal(['ONE TWO ONE', 'Twoo ONE TWO ONEo'], getline(1, '$')) + + " Find next occurance of a string (in a find dialog) + call cursor(1, 11) + let args = #{find_text: 'TWO', repl_text: '', flags: 0x11, forward: 1} + call test_gui_event('findrepl', args) + call assert_equal([2, 10], [line('.'), col('.')]) + + " Find previous occurances of a string (in a find dialog) + call cursor(1, 11) + let args = #{find_text: 'TWO', repl_text: '', flags: 0x11, forward: 0} + call test_gui_event('findrepl', args) + call assert_equal([1, 5], [line('.'), col('.')]) + + " Find next occurance of a string (in a replace dialog) + call cursor(1, 1) + let args = #{find_text: 'Twoo', repl_text: '', flags: 0x2, forward: 1} + call test_gui_event('findrepl', args) + call assert_equal([2, 1], [line('.'), col('.')]) + + " Replace only the next occurance of a string (once) + call cursor(1, 5) + let args = #{find_text: 'TWO', repl_text: 'two', flags: 0x3, forward: 1} + call test_gui_event('findrepl', args) + call assert_equal(['ONE two ONE', 'Twoo ONE TWO ONEo'], getline(1, '$')) + + " Replace all instances of a whole string with another matching case + call cursor(1, 1) + let args = #{find_text: 'TWO', repl_text: 'two', flags: 0x1C, forward: 1} + call test_gui_event('findrepl', args) + call assert_equal(['ONE two ONE', 'Twoo ONE two ONEo'], getline(1, '$')) + bw! +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/testing.c b/src/testing.c index 4f3c2cbe92..5c4f118cef 100644 --- a/src/testing.c +++ b/src/testing.c @@ -1319,7 +1319,7 @@ f_test_setmouse(typval_T *argvars, typval_T *rettv UNUSED) static int test_gui_drop_files(dict_T *args UNUSED) { -#if defined(HAVE_DROP_FILE) +# if defined(HAVE_DROP_FILE) int row; int col; int_u mods; @@ -1335,16 +1335,15 @@ test_gui_drop_files(dict_T *args UNUSED) || dict_find(args, (char_u *)"modifiers", -1) == NULL) return FALSE; - if (dict_get_tv(args, (char_u *)"files", &t) == FAIL) - return FALSE; + (void)dict_get_tv(args, (char_u *)"files", &t); row = (int)dict_get_number(args, (char_u *)"row"); col = (int)dict_get_number(args, (char_u *)"col"); mods = (int)dict_get_number(args, (char_u *)"modifiers"); - l = t.vval.v_list; - if (list_len(l) == 0) + if (t.v_type != VAR_LIST || list_len(t.vval.v_list) == 0) return FALSE; + l = t.vval.v_list; fnames = ALLOC_MULT(char_u *, list_len(l)); if (fnames == NULL) return FALSE; @@ -1352,7 +1351,8 @@ test_gui_drop_files(dict_T *args UNUSED) FOR_ALL_LIST_ITEMS(l, li) { // ignore non-string items - if (li->li_tv.v_type != VAR_STRING) + if (li->li_tv.v_type != VAR_STRING + || li->li_tv.vval.v_string == NULL) continue; fnames[count] = vim_strsave(li->li_tv.vval.v_string); @@ -1370,13 +1370,40 @@ test_gui_drop_files(dict_T *args UNUSED) gui_handle_drop(TEXT_X(col - 1), TEXT_Y(row - 1), mods, fnames, count); else vim_free(fnames); -# endif +# endif return TRUE; } static int -test_gui_mouse_event(dict_T *args UNUSED) +test_gui_find_repl(dict_T *args) +{ + int flags; + char_u *find_text; + char_u *repl_text; + int forward; + int retval; + + if (dict_find(args, (char_u *)"find_text", -1) == NULL + || dict_find(args, (char_u *)"repl_text", -1) == NULL + || dict_find(args, (char_u *)"flags", -1) == NULL + || dict_find(args, (char_u *)"forward", -1) == NULL) + return FALSE; + + find_text = dict_get_string(args, (char_u *)"find_text", TRUE); + repl_text = dict_get_string(args, (char_u *)"repl_text", TRUE); + flags = (int)dict_get_number(args, (char_u *)"flags"); + forward = (int)dict_get_number(args, (char_u *)"forward"); + + retval = gui_do_findrepl(flags, find_text, repl_text, forward); + vim_free(find_text); + vim_free(repl_text); + + return retval; +} + + static int +test_gui_mouse_event(dict_T *args) { int button; int row; @@ -1405,7 +1432,7 @@ test_gui_mouse_event(dict_T *args UNUSED) static int test_gui_tabline_event(dict_T *args UNUSED) { -# ifdef FEAT_GUI_TABLINE +# ifdef FEAT_GUI_TABLINE int tabnr; if (dict_find(args, (char_u *)"tabnr", -1) == NULL) @@ -1414,15 +1441,15 @@ test_gui_tabline_event(dict_T *args UNUSED) tabnr = (int)dict_get_number(args, (char_u *)"tabnr"); return send_tabline_event(tabnr); -# else +# else return FALSE; -# endif +# endif } static int test_gui_tabmenu_event(dict_T *args UNUSED) { -# ifdef FEAT_GUI_TABLINE +# ifdef FEAT_GUI_TABLINE int tabnr; int item; @@ -1434,7 +1461,7 @@ test_gui_tabmenu_event(dict_T *args UNUSED) item = (int)dict_get_number(args, (char_u *)"item"); send_tabline_menu_event(tabnr, item); -# endif +# endif return TRUE; } # endif @@ -1456,6 +1483,8 @@ f_test_gui_event(typval_T *argvars UNUSED, typval_T *rettv UNUSED) event = tv_get_string(&argvars[0]); if (STRCMP(event, "dropfiles") == 0) rettv->vval.v_number = test_gui_drop_files(argvars[1].vval.v_dict); + else if (STRCMP(event, "findrepl") == 0) + rettv->vval.v_number = test_gui_find_repl(argvars[1].vval.v_dict); else if (STRCMP(event, "mouse") == 0) rettv->vval.v_number = test_gui_mouse_event(argvars[1].vval.v_dict); else if (STRCMP(event, "tabline") == 0) diff --git a/src/version.c b/src/version.c index 159a90e03b..b37d0a849a 100644 --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4263, +/**/ 4262, /**/ 4261, |