@@ -304,4 +304,89 @@ func Test_toupper()
304304 call assert_equal (" Ⱥ Ⱦ" , toupper (" ⱥ ⱦ" ))
305305endfunc
306306
307+ " Tests for the mode() function
308+ let current_modes = ' '
309+ func ! Save_mode ()
310+ let g: current_modes = mode (0 ) . ' -' . mode (1 )
311+ return ' '
312+ endfunc
307313
314+ func ! Test_mode ()
315+ new
316+ call append (0 , [" Blue Ball Black" , " Brown Band Bowl" , " " ])
317+
318+ inoremap <F2> <C-R> =Save_mode()<CR>
319+
320+ normal ! 3 G
321+ exe " normal i\<F2>\<Esc> "
322+ call assert_equal (' i-i' , g: current_modes )
323+ exe " normal i\<C-G> uBa\<C-P>\<F2>\<Esc> u"
324+ call assert_equal (' i-ic' , g: current_modes )
325+ exe " normal iBro\<C-P>\<F2>\<Esc> u"
326+ call assert_equal (' i-ic' , g: current_modes )
327+ exe " normal iBa\<C-X>\<F2>\<Esc> u"
328+ call assert_equal (' i-ix' , g: current_modes )
329+ exe " normal iBa\<C-X>\<C-P>\<F2>\<Esc> u"
330+ call assert_equal (' i-ic' , g: current_modes )
331+ exe " normal iBro\<C-X>\<C-P>\<F2>\<Esc> u"
332+ call assert_equal (' i-ic' , g: current_modes )
333+ exe " normal iBro\<C-X>\<C-P>\<C-P>\<F2>\<Esc> u"
334+ call assert_equal (' i-ic' , g: current_modes )
335+ exe " normal iCom\<C-P>\<F2>\<Esc> u"
336+ call assert_equal (' i-ic' , g: current_modes )
337+ exe " normal iCom\<C-X>\<C-P>\<F2>\<Esc> u"
338+ call assert_equal (' i-ic' , g: current_modes )
339+
340+ exe " normal RBa\<C-P>\<F2>\<Esc> u"
341+ call assert_equal (' R-Rc' , g: current_modes )
342+ exe " normal RBro\<C-P>\<F2>\<Esc> u"
343+ call assert_equal (' R-Rc' , g: current_modes )
344+ exe " normal RBa\<C-X>\<F2>\<Esc> u"
345+ call assert_equal (' R-Rx' , g: current_modes )
346+ exe " normal RBa\<C-X>\<C-P>\<F2>\<Esc> u"
347+ call assert_equal (' R-Rc' , g: current_modes )
348+ exe " normal RBro\<C-X>\<C-P>\<F2>\<Esc> u"
349+ call assert_equal (' R-Rc' , g: current_modes )
350+ exe " normal RBro\<C-X>\<C-P>\<C-P>\<F2>\<Esc> u"
351+ call assert_equal (' R-Rc' , g: current_modes )
352+ exe " normal RCom\<C-P>\<F2>\<Esc> u"
353+ call assert_equal (' R-Rc' , g: current_modes )
354+ exe " normal RCom\<C-X>\<C-P>\<F2>\<Esc> u"
355+ call assert_equal (' R-Rc' , g: current_modes )
356+
357+ call assert_equal (' n' , mode (0 ))
358+ call assert_equal (' n' , mode (1 ))
359+
360+ " How to test operator-pending mode?
361+
362+ call feedkeys (" v" , ' xt' )
363+ call assert_equal (' v' , mode ())
364+ call assert_equal (' v' , mode (1 ))
365+ call feedkeys (" \<Esc> V" , ' xt' )
366+ call assert_equal (' V' , mode ())
367+ call assert_equal (' V' , mode (1 ))
368+ call feedkeys (" \<Esc>\<C-V> " , ' xt' )
369+ call assert_equal (" \<C-V> " , mode ())
370+ call assert_equal (" \<C-V> " , mode (1 ))
371+ call feedkeys (" \<Esc> " , ' xt' )
372+
373+ call feedkeys (" gh" , ' xt' )
374+ call assert_equal (' s' , mode ())
375+ call assert_equal (' s' , mode (1 ))
376+ call feedkeys (" \<Esc> gH" , ' xt' )
377+ call assert_equal (' S' , mode ())
378+ call assert_equal (' S' , mode (1 ))
379+ call feedkeys (" \<Esc> g\<C-H> " , ' xt' )
380+ call assert_equal (" \<C-S> " , mode ())
381+ call assert_equal (" \<C-S> " , mode (1 ))
382+ call feedkeys (" \<Esc> " , ' xt' )
383+
384+ call feedkeys (" :echo \<C-R> =Save_mode()\<C-U>\<CR> " , ' xt' )
385+ call assert_equal (' c-c' , g: current_modes )
386+ call feedkeys (" gQecho \<C-R> =Save_mode()\<CR>\<CR> vi\<CR> " , ' xt' )
387+ call assert_equal (' c-cv' , g: current_modes )
388+ " How to test Ex mode?
389+
390+ bwipe!
391+ iunmap <F2>
392+ endfunc
0 commit comments