blob: 80088c3c0798704f5f5311dfe3aec79f48f1c3da [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
Bram Moolenaarc19fd912020-07-02 20:59:05 +020030 let expected = (has('win32') && has('gui_running')) ? 0 : 1
Bram Moolenaar2877d332017-11-26 14:56:16 +010031 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 Moolenaarc19fd912020-07-02 20:59:05 +020041 if has('win32') && has('gui_running')
Bram Moolenaara3a12462019-09-07 15:08:38 +020042 set imactivatefunc=
43 set imstatusfunc=
44 else
45 set imactivatefunc=IM_activatefunc
46 set imstatusfunc=IM_statusfunc
47 let s:imstatus_active = 0
48 endif
49
50 new
51 set iminsert=2
52 call feedkeys("i\<C-R>=getimstatus()\<CR>\<ESC>", 'nx')
53 call assert_equal('1', getline(1))
54 set iminsert=0
55 call feedkeys("o\<C-R>=getimstatus()\<CR>\<ESC>", 'nx')
56 call assert_equal('0', getline(2))
57 bw!
58
59 set imactivatefunc=
60 set imstatusfunc=
61endfunc
Bram Moolenaar0546d7d2020-03-01 16:53:09 +010062
Bram Moolenaar1671f442020-03-10 07:48:13 +010063" Test for using an lmap in insert mode
64func Test_lmap_in_insert_mode()
65 new
66 call setline(1, 'abc')
67 lmap { w
68 set iminsert=1
69 call feedkeys('r{', 'xt')
70 call assert_equal('wbc', getline(1))
71 set iminsert=2
72 call feedkeys('$r{', 'xt')
73 call assert_equal('wb{', getline(1))
74 call setline(1, 'vim web')
75 set iminsert=1
76 call feedkeys('0f{', 'xt')
77 call assert_equal(5, col('.'))
78 set iminsert&
79 lunmap {
80 close!
81endfunc
82
Bram Moolenaar845e0ee2020-06-20 16:05:32 +020083" Test for using CTRL-^ to toggle iminsert in insert mode
84func Test_iminsert_toggle()
85 CheckGui
86 if has('win32')
87 CheckFeature multi_byte_ime
88 elseif !has('gui_mac')
89 CheckFeature xim
90 endif
91 if has('gui_running') && !has('win32')
92 " this works only in Win32 GUI version (for some reason)
93 return
94 endif
95 new
96 let save_imdisable = &imdisable
97 let save_iminsert = &iminsert
98 set noimdisable
99 set iminsert=0
100 exe "normal i\<C-^>"
101 call assert_equal(2, &iminsert)
102 exe "normal i\<C-^>"
103 call assert_equal(0, &iminsert)
104 let &iminsert = save_iminsert
105 let &imdisable = save_imdisable
106 close!
107endfunc
108
Bram Moolenaar0546d7d2020-03-01 16:53:09 +0100109" vim: shiftwidth=2 sts=2 expandtab