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_match_completion() 29 if !has('cmdline_compl') 30 return 31 endif 32 hi Aardig ctermfg=green 33 call feedkeys(":match \<Tab>\<Home>\"\<CR>", 'xt') 34 call assert_equal('"match Aardig', getreg(':')) 35 call feedkeys(":match \<S-Tab>\<Home>\"\<CR>", 'xt') 36 call assert_equal('"match none', getreg(':')) 37endfunc 38 39func Test_highlight_completion() 40 if !has('cmdline_compl') 41 return 42 endif 43 hi Aardig ctermfg=green 44 call feedkeys(":hi \<Tab>\<Home>\"\<CR>", 'xt') 45 call assert_equal('"hi Aardig', getreg(':')) 46 call feedkeys(":hi li\<S-Tab>\<Home>\"\<CR>", 'xt') 47 call assert_equal('"hi link', getreg(':')) 48 call feedkeys(":hi d\<S-Tab>\<Home>\"\<CR>", 'xt') 49 call assert_equal('"hi default', getreg(':')) 50 call feedkeys(":hi c\<S-Tab>\<Home>\"\<CR>", 'xt') 51 call assert_equal('"hi clear', getreg(':')) 52endfunc 53 54func Test_expr_completion() 55 if !has('cmdline_compl') 56 return 57 endif 58 for cmd in [ 59 \ 'let a = ', 60 \ 'if', 61 \ 'elseif', 62 \ 'while', 63 \ 'for', 64 \ 'echo', 65 \ 'echon', 66 \ 'execute', 67 \ 'echomsg', 68 \ 'echoerr', 69 \ 'call', 70 \ 'return', 71 \ 'cexpr', 72 \ 'caddexpr', 73 \ 'cgetexpr', 74 \ 'lexpr', 75 \ 'laddexpr', 76 \ 'lgetexpr'] 77 call feedkeys(":" . cmd . " getl\<Tab>\<Home>\"\<CR>", 'xt') 78 call assert_equal('"' . cmd . ' getline(', getreg(':')) 79 endfor 80endfunc 81 82func Test_getcompletion() 83 if !has('cmdline_compl') 84 return 85 endif 86 let groupcount = len(getcompletion('', 'event')) 87 call assert_true(groupcount > 0) 88 let matchcount = len(getcompletion('File', 'event')) 89 call assert_true(matchcount > 0) 90 call assert_true(groupcount > matchcount) 91 92 if has('menu') 93 source $VIMRUNTIME/menu.vim 94 let matchcount = len(getcompletion('', 'menu')) 95 call assert_true(matchcount > 0) 96 call assert_equal(['File.'], getcompletion('File', 'menu')) 97 call assert_true(matchcount > 0) 98 let matchcount = len(getcompletion('File.', 'menu')) 99 call assert_true(matchcount > 0) 100 endif 101 102 let l = getcompletion('v:n', 'var') 103 call assert_true(index(l, 'v:null') >= 0) 104 let l = getcompletion('v:notexists', 'var') 105 call assert_equal([], l) 106 107 let l = getcompletion('', 'augroup') 108 call assert_true(index(l, 'END') >= 0) 109 let l = getcompletion('blahblah', 'augroup') 110 call assert_equal([], l) 111 112 let l = getcompletion('', 'behave') 113 call assert_true(index(l, 'mswin') >= 0) 114 let l = getcompletion('not', 'behave') 115 call assert_equal([], l) 116 117 let l = getcompletion('', 'color') 118 call assert_true(index(l, 'default') >= 0) 119 let l = getcompletion('dirty', 'color') 120 call assert_equal([], l) 121 122 let l = getcompletion('', 'command') 123 call assert_true(index(l, 'sleep') >= 0) 124 let l = getcompletion('awake', 'command') 125 call assert_equal([], l) 126 127 let l = getcompletion('', 'dir') 128 call assert_true(index(l, 'samples/') >= 0) 129 let l = getcompletion('NoMatch', 'dir') 130 call assert_equal([], l) 131 132 let l = getcompletion('exe', 'expression') 133 call assert_true(index(l, 'executable(') >= 0) 134 let l = getcompletion('kill', 'expression') 135 call assert_equal([], l) 136 137 let l = getcompletion('tag', 'function') 138 call assert_true(index(l, 'taglist(') >= 0) 139 let l = getcompletion('paint', 'function') 140 call assert_equal([], l) 141 142 let Flambda = {-> 'hello'} 143 let l = getcompletion('', 'function') 144 let l = filter(l, {i, v -> v =~ 'lambda'}) 145 call assert_equal([], l) 146 147 let l = getcompletion('run', 'file') 148 call assert_true(index(l, 'runtest.vim') >= 0) 149 let l = getcompletion('walk', 'file') 150 call assert_equal([], l) 151 set wildignore=*.vim 152 let l = getcompletion('run', 'file', 1) 153 call assert_true(index(l, 'runtest.vim') < 0) 154 set wildignore& 155 156 let l = getcompletion('ha', 'filetype') 157 call assert_true(index(l, 'hamster') >= 0) 158 let l = getcompletion('horse', 'filetype') 159 call assert_equal([], l) 160 161 let l = getcompletion('z', 'syntax') 162 call assert_true(index(l, 'zimbu') >= 0) 163 let l = getcompletion('emacs', 'syntax') 164 call assert_equal([], l) 165 166 let l = getcompletion('jikes', 'compiler') 167 call assert_true(index(l, 'jikes') >= 0) 168 let l = getcompletion('break', 'compiler') 169 call assert_equal([], l) 170 171 let l = getcompletion('last', 'help') 172 call assert_true(index(l, ':tablast') >= 0) 173 let l = getcompletion('giveup', 'help') 174 call assert_equal([], l) 175 176 let l = getcompletion('time', 'option') 177 call assert_true(index(l, 'timeoutlen') >= 0) 178 let l = getcompletion('space', 'option') 179 call assert_equal([], l) 180 181 let l = getcompletion('er', 'highlight') 182 call assert_true(index(l, 'ErrorMsg') >= 0) 183 let l = getcompletion('dark', 'highlight') 184 call assert_equal([], l) 185 186 let l = getcompletion('', 'messages') 187 call assert_true(index(l, 'clear') >= 0) 188 let l = getcompletion('not', 'messages') 189 call assert_equal([], l) 190 191 if has('cscope') 192 let l = getcompletion('', 'cscope') 193 let cmds = ['add', 'find', 'help', 'kill', 'reset', 'show'] 194 call assert_equal(cmds, l) 195 " using cmdline completion must not change the result 196 call feedkeys(":cscope find \<c-d>\<c-c>", 'xt') 197 let l = getcompletion('', 'cscope') 198 call assert_equal(cmds, l) 199 let keys = ['a', 'c', 'd', 'e', 'f', 'g', 'i', 's', 't'] 200 let l = getcompletion('find ', 'cscope') 201 call assert_equal(keys, l) 202 endif 203 204 if has('signs') 205 sign define Testing linehl=Comment 206 let l = getcompletion('', 'sign') 207 let cmds = ['define', 'jump', 'list', 'place', 'undefine', 'unplace'] 208 call assert_equal(cmds, l) 209 " using cmdline completion must not change the result 210 call feedkeys(":sign list \<c-d>\<c-c>", 'xt') 211 let l = getcompletion('', 'sign') 212 call assert_equal(cmds, l) 213 let l = getcompletion('list ', 'sign') 214 call assert_equal(['Testing'], l) 215 endif 216 217 " For others test if the name is recognized. 218 let names = ['buffer', 'environment', 'file_in_path', 219 \ 'mapping', 'shellcmd', 'tag', 'tag_listfiles', 'user'] 220 if has('cmdline_hist') 221 call add(names, 'history') 222 endif 223 if has('gettext') 224 call add(names, 'locale') 225 endif 226 if has('profile') 227 call add(names, 'syntime') 228 endif 229 230 set tags=Xtags 231 call writefile(["!_TAG_FILE_ENCODING\tutf-8\t//", "word\tfile\tcmd"], 'Xtags') 232 233 for name in names 234 let matchcount = len(getcompletion('', name)) 235 call assert_true(matchcount >= 0, 'No matches for ' . name) 236 endfor 237 238 call delete('Xtags') 239 240 call assert_fails('call getcompletion("", "burp")', 'E475:') 241endfunc 242 243func Test_expand_star_star() 244 call mkdir('a/b', 'p') 245 call writefile(['asdfasdf'], 'a/b/fileXname') 246 call feedkeys(":find **/fileXname\<Tab>\<CR>", 'xt') 247 call assert_equal('find a/b/fileXname', getreg(':')) 248 bwipe! 249 call delete('a', 'rf') 250endfunc 251 252func Test_paste_in_cmdline() 253 let @a = "def" 254 call feedkeys(":abc \<C-R>a ghi\<C-B>\"\<CR>", 'tx') 255 call assert_equal('"abc def ghi', @:) 256 257 new 258 call setline(1, 'asdf.x /tmp/some verylongword a;b-c*d ') 259 260 call feedkeys(":aaa \<C-R>\<C-W> bbb\<C-B>\"\<CR>", 'tx') 261 call assert_equal('"aaa asdf bbb', @:) 262 263 call feedkeys("ft:aaa \<C-R>\<C-F> bbb\<C-B>\"\<CR>", 'tx') 264 call assert_equal('"aaa /tmp/some bbb', @:) 265 266 set incsearch 267 call feedkeys("fy:aaa veryl\<C-R>\<C-W> bbb\<C-B>\"\<CR>", 'tx') 268 call assert_equal('"aaa verylongword bbb', @:) 269 270 call feedkeys("f;:aaa \<C-R>\<C-A> bbb\<C-B>\"\<CR>", 'tx') 271 call assert_equal('"aaa a;b-c*d bbb', @:) 272 273 call feedkeys(":\<C-\>etoupper(getline(1))\<CR>\<C-B>\"\<CR>", 'tx') 274 call assert_equal('"ASDF.X /TMP/SOME VERYLONGWORD A;B-C*D ', @:) 275 bwipe! 276endfunc 277 278func Test_remove_char_in_cmdline() 279 call feedkeys(":abc def\<S-Left>\<Del>\<C-B>\"\<CR>", 'tx') 280 call assert_equal('"abc ef', @:) 281 282 call feedkeys(":abc def\<S-Left>\<BS>\<C-B>\"\<CR>", 'tx') 283 call assert_equal('"abcdef', @:) 284 285 call feedkeys(":abc def ghi\<S-Left>\<C-W>\<C-B>\"\<CR>", 'tx') 286 call assert_equal('"abc ghi', @:) 287 288 call feedkeys(":abc def\<S-Left>\<C-U>\<C-B>\"\<CR>", 'tx') 289 call assert_equal('"def', @:) 290endfunc 291 292func Test_illegal_address() 293 new 294 2;'( 295 2;') 296 quit 297endfunc 298 299func Test_cmdline_complete_wildoptions() 300 help 301 call feedkeys(":tag /\<c-a>\<c-b>\"\<cr>", 'tx') 302 let a = join(sort(split(@:)),' ') 303 set wildoptions=tagfile 304 call feedkeys(":tag /\<c-a>\<c-b>\"\<cr>", 'tx') 305 let b = join(sort(split(@:)),' ') 306 call assert_equal(a, b) 307 bw! 308endfunc 309