xref: /vim-8.2.3635/src/testdir/test_cmdline.vim (revision bc2eada5)
1" Tests for editing the command line.
2
3func Test_complete_tab()
4  call writefile(['testfile'], 'Xtestfile')
5  call feedkeys(":e Xtest\t\r", "tx")
6  call assert_equal('testfile', getline(1))
7  call delete('Xtestfile')
8endfunc
9
10func Test_complete_list()
11  " We can't see the output, but at least we check the code runs properly.
12  call feedkeys(":e test\<C-D>\r", "tx")
13  call assert_equal('test', expand('%:t'))
14endfunc
15
16func Test_complete_wildmenu()
17  call writefile(['testfile1'], 'Xtestfile1')
18  call writefile(['testfile2'], 'Xtestfile2')
19  set wildmenu
20  call feedkeys(":e Xtest\t\t\r", "tx")
21  call assert_equal('testfile2', getline(1))
22
23  call delete('Xtestfile1')
24  call delete('Xtestfile2')
25  set nowildmenu
26endfunc
27
28func Test_getcompletion()
29  if !has('cmdline_compl')
30    return
31  endif
32  let groupcount = len(getcompletion('', 'event'))
33  call assert_true(groupcount > 0)
34  let matchcount = len(getcompletion('File', 'event'))
35  call assert_true(matchcount > 0)
36  call assert_true(groupcount > matchcount)
37
38  if has('menu')
39    source $VIMRUNTIME/menu.vim
40    let matchcount = len(getcompletion('', 'menu'))
41    call assert_true(matchcount > 0)
42    call assert_equal(['File.'], getcompletion('File', 'menu'))
43    call assert_true(matchcount > 0)
44    let matchcount = len(getcompletion('File.', 'menu'))
45    call assert_true(matchcount > 0)
46  endif
47
48  let l = getcompletion('v:n', 'var')
49  call assert_true(index(l, 'v:null') >= 0)
50  let l = getcompletion('v:notexists', 'var')
51  call assert_equal([], l)
52
53  let l = getcompletion('', 'augroup')
54  call assert_true(index(l, 'END') >= 0)
55  let l = getcompletion('blahblah', 'augroup')
56  call assert_equal([], l)
57
58  let l = getcompletion('', 'behave')
59  call assert_true(index(l, 'mswin') >= 0)
60  let l = getcompletion('not', 'behave')
61  call assert_equal([], l)
62
63  let l = getcompletion('', 'color')
64  call assert_true(index(l, 'default') >= 0)
65  let l = getcompletion('dirty', 'color')
66  call assert_equal([], l)
67
68  let l = getcompletion('', 'command')
69  call assert_true(index(l, 'sleep') >= 0)
70  let l = getcompletion('awake', 'command')
71  call assert_equal([], l)
72
73  let l = getcompletion('', 'dir')
74  call assert_true(index(l, 'samples/') >= 0)
75  let l = getcompletion('NoMatch', 'dir')
76  call assert_equal([], l)
77
78  let l = getcompletion('exe', 'expression')
79  call assert_true(index(l, 'executable(') >= 0)
80  let l = getcompletion('kill', 'expression')
81  call assert_equal([], l)
82
83  let l = getcompletion('tag', 'function')
84  call assert_true(index(l, 'taglist(') >= 0)
85  let l = getcompletion('paint', 'function')
86  call assert_equal([], l)
87
88  let Flambda = {-> 'hello'}
89  let l = getcompletion('', 'function')
90  let l = filter(l, {i, v -> v =~ 'lambda'})
91  call assert_equal([], l)
92
93  let l = getcompletion('run', 'file')
94  call assert_true(index(l, 'runtest.vim') >= 0)
95  let l = getcompletion('walk', 'file')
96  call assert_equal([], l)
97  set wildignore=*.vim
98  let l = getcompletion('run', 'file', 1)
99  call assert_true(index(l, 'runtest.vim') < 0)
100  set wildignore&
101
102  let l = getcompletion('ha', 'filetype')
103  call assert_true(index(l, 'hamster') >= 0)
104  let l = getcompletion('horse', 'filetype')
105  call assert_equal([], l)
106
107  let l = getcompletion('z', 'syntax')
108  call assert_true(index(l, 'zimbu') >= 0)
109  let l = getcompletion('emacs', 'syntax')
110  call assert_equal([], l)
111
112  let l = getcompletion('jikes', 'compiler')
113  call assert_true(index(l, 'jikes') >= 0)
114  let l = getcompletion('break', 'compiler')
115  call assert_equal([], l)
116
117  let l = getcompletion('last', 'help')
118  call assert_true(index(l, ':tablast') >= 0)
119  let l = getcompletion('giveup', 'help')
120  call assert_equal([], l)
121
122  let l = getcompletion('time', 'option')
123  call assert_true(index(l, 'timeoutlen') >= 0)
124  let l = getcompletion('space', 'option')
125  call assert_equal([], l)
126
127  let l = getcompletion('er', 'highlight')
128  call assert_true(index(l, 'ErrorMsg') >= 0)
129  let l = getcompletion('dark', 'highlight')
130  call assert_equal([], l)
131
132  let l = getcompletion('', 'messages')
133  call assert_true(index(l, 'clear') >= 0)
134  let l = getcompletion('not', 'messages')
135  call assert_equal([], l)
136
137  if has('cscope')
138    let l = getcompletion('', 'cscope')
139    let cmds = ['add', 'find', 'help', 'kill', 'reset', 'show']
140    call assert_equal(cmds, l)
141    " using cmdline completion must not change the result
142    call feedkeys(":cscope find \<c-d>\<c-c>", 'xt')
143    let l = getcompletion('', 'cscope')
144    call assert_equal(cmds, l)
145    let keys = ['a', 'c', 'd', 'e', 'f', 'g', 'i', 's', 't']
146    let l = getcompletion('find ', 'cscope')
147    call assert_equal(keys, l)
148  endif
149
150  if has('signs')
151    sign define Testing linehl=Comment
152    let l = getcompletion('', 'sign')
153    let cmds = ['define', 'jump', 'list', 'place', 'undefine', 'unplace']
154    call assert_equal(cmds, l)
155    " using cmdline completion must not change the result
156    call feedkeys(":sign list \<c-d>\<c-c>", 'xt')
157    let l = getcompletion('', 'sign')
158    call assert_equal(cmds, l)
159    let l = getcompletion('list ', 'sign')
160    call assert_equal(['Testing'], l)
161  endif
162
163  " For others test if the name is recognized.
164  let names = ['buffer', 'environment', 'file_in_path',
165	\ 'mapping', 'shellcmd', 'tag', 'tag_listfiles', 'user']
166  if has('cmdline_hist')
167    call add(names, 'history')
168  endif
169  if has('gettext')
170    call add(names, 'locale')
171  endif
172  if has('profile')
173    call add(names, 'syntime')
174  endif
175
176  set tags=Xtags
177  call writefile(["!_TAG_FILE_ENCODING\tutf-8\t//", "word\tfile\tcmd"], 'Xtags')
178
179  for name in names
180    let matchcount = len(getcompletion('', name))
181    call assert_true(matchcount >= 0, 'No matches for ' . name)
182  endfor
183
184  call delete('Xtags')
185
186  call assert_fails('call getcompletion("", "burp")', 'E475:')
187endfunc
188
189func Test_expand_star_star()
190  call mkdir('a/b', 'p')
191  call writefile(['asdfasdf'], 'a/b/fileXname')
192  call feedkeys(":find **/fileXname\<Tab>\<CR>", 'xt')
193  call assert_equal('find a/b/fileXname', getreg(':'))
194  bwipe!
195  call delete('a', 'rf')
196endfunc
197
198func Test_paste_in_cmdline()
199  let @a = "def"
200  call feedkeys(":abc \<C-R>a ghi\<C-B>\"\<CR>", 'tx')
201  call assert_equal('"abc def ghi', @:)
202
203  new
204  call setline(1, 'asdf.x /tmp/some verylongword a;b-c*d ')
205
206  call feedkeys(":aaa \<C-R>\<C-W> bbb\<C-B>\"\<CR>", 'tx')
207  call assert_equal('"aaa asdf bbb', @:)
208
209  call feedkeys("ft:aaa \<C-R>\<C-F> bbb\<C-B>\"\<CR>", 'tx')
210  call assert_equal('"aaa /tmp/some bbb', @:)
211
212  set incsearch
213  call feedkeys("fy:aaa veryl\<C-R>\<C-W> bbb\<C-B>\"\<CR>", 'tx')
214  call assert_equal('"aaa verylongword bbb', @:)
215
216  call feedkeys("f;:aaa \<C-R>\<C-A> bbb\<C-B>\"\<CR>", 'tx')
217  call assert_equal('"aaa a;b-c*d bbb', @:)
218
219  call feedkeys(":\<C-\>etoupper(getline(1))\<CR>\<C-B>\"\<CR>", 'tx')
220  call assert_equal('"ASDF.X /TMP/SOME VERYLONGWORD A;B-C*D ', @:)
221  bwipe!
222endfunc
223
224func Test_remove_char_in_cmdline()
225  call feedkeys(":abc def\<S-Left>\<Del>\<C-B>\"\<CR>", 'tx')
226  call assert_equal('"abc ef', @:)
227
228  call feedkeys(":abc def\<S-Left>\<BS>\<C-B>\"\<CR>", 'tx')
229  call assert_equal('"abcdef', @:)
230
231  call feedkeys(":abc def ghi\<S-Left>\<C-W>\<C-B>\"\<CR>", 'tx')
232  call assert_equal('"abc ghi', @:)
233
234  call feedkeys(":abc def\<S-Left>\<C-U>\<C-B>\"\<CR>", 'tx')
235  call assert_equal('"def', @:)
236endfunc
237
238func Test_illegal_address()
239  new
240  2;'(
241  2;')
242  quit
243endfunc
244