blob: 04c8a15995ba7c8f0e1f6b2c8596a0599299ac10 [file] [log] [blame]
Bram Moolenaar6315a9a2017-11-25 15:20:02 +01001source view_util.vim
Bram Moolenaare2a3f362019-12-07 21:40:48 +01002source check.vim
Bram Moolenaar6315a9a2017-11-25 15:20:02 +01003
4let s:imactivatefunc_called = 0
5let s:imstatusfunc_called = 0
Bram Moolenaara3a12462019-09-07 15:08:38 +02006let s:imstatus_active = 0
Bram Moolenaar6315a9a2017-11-25 15:20:02 +01007
8func IM_activatefunc(active)
9 let s:imactivatefunc_called = 1
Bram Moolenaar845e0ee2020-06-20 16:05:32 +020010 let s:imstatus_active = a:active
Bram Moolenaar6315a9a2017-11-25 15:20:02 +010011endfunc
12
13func IM_statusfunc()
14 let s:imstatusfunc_called = 1
Bram Moolenaara3a12462019-09-07 15:08:38 +020015 return s:imstatus_active
Bram Moolenaar6315a9a2017-11-25 15:20:02 +010016endfunc
17
18func Test_iminsert2()
Bram Moolenaara3a12462019-09-07 15:08:38 +020019 let s:imactivatefunc_called = 0
20 let s:imstatusfunc_called = 0
21
Bram Moolenaar6315a9a2017-11-25 15:20:02 +010022 set imactivatefunc=IM_activatefunc
23 set imstatusfunc=IM_statusfunc
24 set iminsert=2
25 normal! i
26 set iminsert=0
27 set imactivatefunc=
28 set imstatusfunc=
Bram Moolenaar2877d332017-11-26 14:56:16 +010029
30 let expected = has('gui_running') ? 0 : 1
31 call assert_equal(expected, s:imactivatefunc_called)
32 call assert_equal(expected, s:imstatusfunc_called)
Bram Moolenaar6315a9a2017-11-25 15:20:02 +010033endfunc
Bram Moolenaara3a12462019-09-07 15:08:38 +020034
Bram Moolenaare2a3f362019-12-07 21:40:48 +010035func Test_getimstatus()
36 if has('win32')
37 CheckFeature multi_byte_ime
38 elseif !has('gui_mac')
39 CheckFeature xim
40 endif
Bram Moolenaara3a12462019-09-07 15:08:38 +020041 if has('gui_running')
42 if !has('win32')
43 throw 'Skipped: running in the GUI, only works on MS-Windows'
44 endif
45 set imactivatefunc=
46 set imstatusfunc=
47 else
48 set imactivatefunc=IM_activatefunc
49 set imstatusfunc=IM_statusfunc
50 let s:imstatus_active = 0
51 endif
52
53 new
54 set iminsert=2
55 call feedkeys("i\<C-R>=getimstatus()\<CR>\<ESC>", 'nx')
56 call assert_equal('1', getline(1))
57 set iminsert=0
58 call feedkeys("o\<C-R>=getimstatus()\<CR>\<ESC>", 'nx')
59 call assert_equal('0', getline(2))
60 bw!
61
62 set imactivatefunc=
63 set imstatusfunc=
64endfunc
Bram Moolenaar0546d7d2020-03-01 16:53:09 +010065
Bram Moolenaar1671f442020-03-10 07:48:13 +010066" Test for using an lmap in insert mode
67func Test_lmap_in_insert_mode()
68 new
69 call setline(1, 'abc')
70 lmap { w
71 set iminsert=1
72 call feedkeys('r{', 'xt')
73 call assert_equal('wbc', getline(1))
74 set iminsert=2
75 call feedkeys('$r{', 'xt')
76 call assert_equal('wb{', getline(1))
77 call setline(1, 'vim web')
78 set iminsert=1
79 call feedkeys('0f{', 'xt')
80 call assert_equal(5, col('.'))
81 set iminsert&
82 lunmap {
83 close!
84endfunc
85
Bram Moolenaar845e0ee2020-06-20 16:05:32 +020086" Test for using CTRL-^ to toggle iminsert in insert mode
87func Test_iminsert_toggle()
88 CheckGui
89 if has('win32')
90 CheckFeature multi_byte_ime
91 elseif !has('gui_mac')
92 CheckFeature xim
93 endif
94 if has('gui_running') && !has('win32')
95 " this works only in Win32 GUI version (for some reason)
96 return
97 endif
98 new
99 let save_imdisable = &imdisable
100 let save_iminsert = &iminsert
101 set noimdisable
102 set iminsert=0
103 exe "normal i\<C-^>"
104 call assert_equal(2, &iminsert)
105 exe "normal i\<C-^>"
106 call assert_equal(0, &iminsert)
107 let &iminsert = save_iminsert
108 let &imdisable = save_imdisable
109 close!
110endfunc
111
Bram Moolenaar0546d7d2020-03-01 16:53:09 +0100112" vim: shiftwidth=2 sts=2 expandtab