1" Test for 'iminsert'
2
3source view_util.vim
4source check.vim
5
6let s:imactivatefunc_called = 0
7let s:imstatusfunc_called = 0
8let s:imstatus_active = 0
9
10func IM_activatefunc(active)
11  let s:imactivatefunc_called = 1
12  let s:imstatus_active = a:active
13endfunc
14
15func IM_statusfunc()
16  let s:imstatusfunc_called = 1
17  return s:imstatus_active
18endfunc
19
20func Test_iminsert2()
21  let s:imactivatefunc_called = 0
22  let s:imstatusfunc_called = 0
23
24  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=
31
32  let expected = (has('win32') && has('gui_running')) ? 0 : 1
33  call assert_equal(expected, s:imactivatefunc_called)
34  call assert_equal(expected, s:imstatusfunc_called)
35endfunc
36
37func Test_getimstatus()
38  if has('win32')
39    CheckFeature multi_byte_ime
40  else
41    CheckFeature xim
42  endif
43  if has('win32') && has('gui_running')
44    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
64
65" 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
85" 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  else
91    CheckFeature xim
92  endif
93  if has('gui_running') && !has('win32')
94    throw 'Skipped: works only in Win32 GUI version (for some reason)'
95  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
110" vim: shiftwidth=2 sts=2 expandtab
111