1source view_util.vim
2source check.vim
3
4let s:imactivatefunc_called = 0
5let s:imstatusfunc_called = 0
6let s:imstatus_active = 0
7
8func IM_activatefunc(active)
9  let s:imactivatefunc_called = 1
10  let s:imstatus_active = a:active
11endfunc
12
13func IM_statusfunc()
14  let s:imstatusfunc_called = 1
15  return s:imstatus_active
16endfunc
17
18func Test_iminsert2()
19  let s:imactivatefunc_called = 0
20  let s:imstatusfunc_called = 0
21
22  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=
29
30  let expected = (has('win32') && has('gui_running')) ? 0 : 1
31  call assert_equal(expected, s:imactivatefunc_called)
32  call assert_equal(expected, s:imstatusfunc_called)
33endfunc
34
35func Test_getimstatus()
36  if has('win32')
37    CheckFeature multi_byte_ime
38  elseif !has('gui_mac')
39    CheckFeature xim
40  endif
41  if has('win32') && has('gui_running')
42    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
62
63" 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
83" 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
109" vim: shiftwidth=2 sts=2 expandtab
110