diff --git a/src/testdir/test_gui.vim b/src/testdir/test_gui.vim
index c4b59c7..5516c89 100644
--- a/src/testdir/test_gui.vim
+++ b/src/testdir/test_gui.vim
@@ -1255,10 +1255,6 @@
 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 @@
   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 @@
   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 @@
   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 4f3c2cb..5c4f118 100644
--- a/src/testing.c
+++ b/src/testing.c
@@ -1319,7 +1319,7 @@
     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 @@
 	    || 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 @@
     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 @@
 	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 @@
     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 @@
     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 @@
     item = (int)dict_get_number(args, (char_u *)"item");
 
     send_tabline_menu_event(tabnr, item);
-# endif
+#  endif
     return TRUE;
 }
 # endif
@@ -1456,6 +1483,8 @@
     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 159a90e..b37d0a8 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    4263,
+/**/
     4262,
 /**/
     4261,
