blob: 92af227345dad4d7ce911a09e1d0eed81ab97e47 [file] [log] [blame]
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +02001" Test for 'iminsert'
2
Bram Moolenaar6315a9a2017-11-25 15:20:02 +01003source view_util.vim
Bram Moolenaare2a3f362019-12-07 21:40:48 +01004source check.vim
Bram Moolenaar6315a9a2017-11-25 15:20:02 +01005
6let s:imactivatefunc_called = 0
7let s:imstatusfunc_called = 0
Bram Moolenaara3a12462019-09-07 15:08:38 +02008let s:imstatus_active = 0
Bram Moolenaar6315a9a2017-11-25 15:20:02 +01009
10func IM_activatefunc(active)
11 let s:imactivatefunc_called = 1
Bram Moolenaar845e0ee2020-06-20 16:05:32 +020012 let s:imstatus_active = a:active
Bram Moolenaar6315a9a2017-11-25 15:20:02 +010013endfunc
14
15func IM_statusfunc()
16 let s:imstatusfunc_called = 1
Bram Moolenaara3a12462019-09-07 15:08:38 +020017 return s:imstatus_active
Bram Moolenaar6315a9a2017-11-25 15:20:02 +010018endfunc
19
20func Test_iminsert2()
Bram Moolenaara3a12462019-09-07 15:08:38 +020021 let s:imactivatefunc_called = 0
22 let s:imstatusfunc_called = 0
23
Bram Moolenaar6315a9a2017-11-25 15:20:02 +010024 set imactivatefunc=IM_activatefunc
25 set imstatusfunc=IM_statusfunc
26 set iminsert=2
27 normal! i
28 set iminsert=0
29 set imactivatefunc=
30 set imstatusfunc=
Bram Moolenaar2877d332017-11-26 14:56:16 +010031
Bram Moolenaarc19fd912020-07-02 20:59:05 +020032 let expected = (has('win32') && has('gui_running')) ? 0 : 1
Bram Moolenaar2877d332017-11-26 14:56:16 +010033 call assert_equal(expected, s:imactivatefunc_called)
34 call assert_equal(expected, s:imstatusfunc_called)
Bram Moolenaar6315a9a2017-11-25 15:20:02 +010035endfunc
Bram Moolenaara3a12462019-09-07 15:08:38 +020036
Bram Moolenaare2a3f362019-12-07 21:40:48 +010037func Test_getimstatus()
38 if has('win32')
39 CheckFeature multi_byte_ime
40 elseif !has('gui_mac')
41 CheckFeature xim
42 endif
Bram Moolenaarc19fd912020-07-02 20:59:05 +020043 if has('win32') && has('gui_running')
Bram Moolenaara3a12462019-09-07 15:08:38 +020044 set imactivatefunc=
45 set imstatusfunc=
46 else
47 set imactivatefunc=IM_activatefunc
48 set imstatusfunc=IM_statusfunc
49 let s:imstatus_active = 0
50 endif
51
52 new
53 set iminsert=2
54 call feedkeys("i\<C-R>=getimstatus()\<CR>\<ESC>", 'nx')
55 call assert_equal('1', getline(1))
56 set iminsert=0
57 call feedkeys("o\<C-R>=getimstatus()\<CR>\<ESC>", 'nx')
58 call assert_equal('0', getline(2))
59 bw!
60
61 set imactivatefunc=
62 set imstatusfunc=
63endfunc
Bram Moolenaar0546d7d2020-03-01 16:53:09 +010064
Bram Moolenaar1671f442020-03-10 07:48:13 +010065" Test for using an lmap in insert mode
66func Test_lmap_in_insert_mode()
67 new
68 call setline(1, 'abc')
69 lmap { w
70 set iminsert=1
71 call feedkeys('r{', 'xt')
72 call assert_equal('wbc', getline(1))
73 set iminsert=2
74 call feedkeys('$r{', 'xt')
75 call assert_equal('wb{', getline(1))
76 call setline(1, 'vim web')
77 set iminsert=1
78 call feedkeys('0f{', 'xt')
79 call assert_equal(5, col('.'))
80 set iminsert&
81 lunmap {
82 close!
83endfunc
84
Bram Moolenaar845e0ee2020-06-20 16:05:32 +020085" Test for using CTRL-^ to toggle iminsert in insert mode
86func Test_iminsert_toggle()
87 CheckGui
88 if has('win32')
89 CheckFeature multi_byte_ime
90 elseif !has('gui_mac')
91 CheckFeature xim
92 endif
93 if has('gui_running') && !has('win32')
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +020094 throw 'Skipped: works only in Win32 GUI version (for some reason)'
Bram Moolenaar845e0ee2020-06-20 16:05:32 +020095 endif
96 new
97 let save_imdisable = &imdisable
98 let save_iminsert = &iminsert
99 set noimdisable
100 set iminsert=0
101 exe "normal i\<C-^>"
102 call assert_equal(2, &iminsert)
103 exe "normal i\<C-^>"
104 call assert_equal(0, &iminsert)
105 let &iminsert = save_iminsert
106 let &imdisable = save_imdisable
107 close!
108endfunc
109
Bram Moolenaar0546d7d2020-03-01 16:53:09 +0100110" vim: shiftwidth=2 sts=2 expandtab