1" Tests for startup. 2 3source shared.vim 4source screendump.vim 5source term_util.vim 6source check.vim 7 8" Check that loading startup.vim works. 9func Test_startup_script() 10 set compatible 11 source $VIMRUNTIME/defaults.vim 12 13 call assert_equal(0, &compatible) 14 " Restore some options, so that the following tests doesn't break 15 set nomore 16 set noshowmode 17endfunc 18 19" Verify the order in which plugins are loaded: 20" 1. plugins in non-after directories 21" 2. packages 22" 3. plugins in after directories 23func Test_after_comes_later() 24 CheckFeature packages 25 let before =<< trim [CODE] 26 set nocp viminfo+=nviminfo 27 set guioptions+=M 28 let $HOME = "/does/not/exist" 29 set loadplugins 30 set rtp=Xhere,Xafter,Xanother 31 set packpath=Xhere,Xafter 32 set nomore 33 let g:sequence = "" 34 [CODE] 35 36 let after =<< trim [CODE] 37 redir! > Xtestout 38 scriptnames 39 redir END 40 redir! > Xsequence 41 echo g:sequence 42 redir END 43 quit 44 [CODE] 45 46 call mkdir('Xhere/plugin', 'p') 47 call writefile(['let g:sequence .= "here "'], 'Xhere/plugin/here.vim') 48 call mkdir('Xanother/plugin', 'p') 49 call writefile(['let g:sequence .= "another "'], 'Xanother/plugin/another.vim') 50 call mkdir('Xhere/pack/foo/start/foobar/plugin', 'p') 51 call writefile(['let g:sequence .= "pack "'], 'Xhere/pack/foo/start/foobar/plugin/foo.vim') 52 53 call mkdir('Xafter/plugin', 'p') 54 call writefile(['let g:sequence .= "after "'], 'Xafter/plugin/later.vim') 55 56 if RunVim(before, after, '') 57 58 let lines = readfile('Xtestout') 59 let expected = ['Xbefore.vim', 'here.vim', 'another.vim', 'foo.vim', 'later.vim', 'Xafter.vim'] 60 let found = [] 61 for line in lines 62 for one in expected 63 if line =~ one 64 call add(found, one) 65 endif 66 endfor 67 endfor 68 call assert_equal(expected, found) 69 endif 70 71 call assert_equal('here another pack after', substitute(join(readfile('Xsequence', 1), ''), '\s\+$', '', '')) 72 73 call delete('Xtestout') 74 call delete('Xsequence') 75 call delete('Xhere', 'rf') 76 call delete('Xanother', 'rf') 77 call delete('Xafter', 'rf') 78endfunc 79 80func Test_pack_in_rtp_when_plugins_run() 81 CheckFeature packages 82 let before =<< trim [CODE] 83 set nocp viminfo+=nviminfo 84 set guioptions+=M 85 let $HOME = "/does/not/exist" 86 set loadplugins 87 set rtp=Xhere 88 set packpath=Xhere 89 set nomore 90 [CODE] 91 92 let after = [ 93 \ 'quit', 94 \ ] 95 call mkdir('Xhere/plugin', 'p') 96 call writefile(['redir! > Xtestout', 'silent set runtimepath?', 'silent! call foo#Trigger()', 'redir END'], 'Xhere/plugin/here.vim') 97 call mkdir('Xhere/pack/foo/start/foobar/autoload', 'p') 98 call writefile(['function! foo#Trigger()', 'echo "autoloaded foo"', 'endfunction'], 'Xhere/pack/foo/start/foobar/autoload/foo.vim') 99 100 if RunVim(before, after, '') 101 102 let lines = filter(readfile('Xtestout'), '!empty(v:val)') 103 call assert_match('Xhere[/\\]pack[/\\]foo[/\\]start[/\\]foobar', get(lines, 0)) 104 call assert_match('autoloaded foo', get(lines, 1)) 105 endif 106 107 call delete('Xtestout') 108 call delete('Xhere', 'rf') 109endfunc 110 111func Test_help_arg() 112 if !has('unix') && has('gui_running') 113 throw 'Skipped: does not work with gvim on MS-Windows' 114 endif 115 if RunVim([], [], '--help >Xtestout') 116 let lines = readfile('Xtestout') 117 call assert_true(len(lines) > 20) 118 call assert_match('Vi IMproved', lines[0]) 119 120 " check if couple of lines are there 121 let found = [] 122 for line in lines 123 if line =~ '-R.*Readonly mode' 124 call add(found, 'Readonly mode') 125 endif 126 " Watch out for a second --version line in the Gnome version. 127 if line =~ '--version.*Print version information and exit' 128 call add(found, "--version") 129 endif 130 endfor 131 call assert_equal(['Readonly mode', '--version'], found) 132 endif 133 call delete('Xtestout') 134endfunc 135 136func Test_compatible_args() 137 let after =<< trim [CODE] 138 call writefile([string(&compatible)], "Xtestout") 139 set viminfo+=nviminfo 140 quit 141 [CODE] 142 143 if RunVim([], after, '-C') 144 let lines = readfile('Xtestout') 145 call assert_equal('1', lines[0]) 146 endif 147 148 if RunVim([], after, '-N') 149 let lines = readfile('Xtestout') 150 call assert_equal('0', lines[0]) 151 endif 152 153 call delete('Xtestout') 154endfunc 155 156" Test the -o[N] and -O[N] arguments to open N windows split 157" horizontally or vertically. 158func Test_o_arg() 159 let after =<< trim [CODE] 160 set cpo&vim 161 call writefile([winnr("$"), 162 \ winheight(1), winheight(2), &lines, 163 \ winwidth(1), winwidth(2), &columns, 164 \ bufname(winbufnr(1)), bufname(winbufnr(2))], 165 \ "Xtestout") 166 qall 167 [CODE] 168 169 if RunVim([], after, '-o2') 170 " Open 2 windows split horizontally. Expect: 171 " - 2 windows 172 " - both windows should have the same or almost the same height 173 " - sum of both windows height (+ 3 for both statusline and Ex command) 174 " should be equal to the number of lines 175 " - both windows should have the same width which should be equal to the 176 " number of columns 177 " - buffer of both windows should have no name 178 let [wn, wh1, wh2, ln, ww1, ww2, cn, bn1, bn2] = readfile('Xtestout') 179 call assert_equal('2', wn) 180 call assert_inrange(0, 1, wh1 - wh2) 181 call assert_equal(string(wh1 + wh2 + 3), ln) 182 call assert_equal(ww1, ww2) 183 call assert_equal(ww1, cn) 184 call assert_equal('', bn1) 185 call assert_equal('', bn2) 186 endif 187 188 if RunVim([], after, '-o foo bar') 189 " Same expectations as for -o2 but buffer names should be foo and bar 190 let [wn, wh1, wh2, ln, ww1, ww2, cn, bn1, bn2] = readfile('Xtestout') 191 call assert_equal('2', wn) 192 call assert_inrange(0, 1, wh1 - wh2) 193 call assert_equal(string(wh1 + wh2 + 3), ln) 194 call assert_equal(ww1, ww2) 195 call assert_equal(ww1, cn) 196 call assert_equal('foo', bn1) 197 call assert_equal('bar', bn2) 198 endif 199 200 if RunVim([], after, '-O2') 201 " Open 2 windows split vertically. Expect: 202 " - 2 windows 203 " - both windows should have the same or almost the same width 204 " - sum of both windows width (+ 1 for the separator) should be equal to 205 " the number of columns 206 " - both windows should have the same height 207 " - window height (+ 2 for the statusline and Ex command) should be equal 208 " to the number of lines 209 " - buffer of both windows should have no name 210 let [wn, wh1, wh2, ln, ww1, ww2, cn, bn1, bn2] = readfile('Xtestout') 211 call assert_equal('2', wn) 212 call assert_inrange(0, 1, ww1 - ww2) 213 call assert_equal(string(ww1 + ww2 + 1), cn) 214 call assert_equal(wh1, wh2) 215 call assert_equal(string(wh1 + 2), ln) 216 call assert_equal('', bn1) 217 call assert_equal('', bn2) 218 endif 219 220 if RunVim([], after, '-O foo bar') 221 " Same expectations as for -O2 but buffer names should be foo and bar 222 let [wn, wh1, wh2, ln, ww1, ww2, cn, bn1, bn2] = readfile('Xtestout') 223 call assert_equal('2', wn) 224 call assert_inrange(0, 1, ww1 - ww2) 225 call assert_equal(string(ww1 + ww2 + 1), cn) 226 call assert_equal(wh1, wh2) 227 call assert_equal(string(wh1 + 2), ln) 228 call assert_equal('foo', bn1) 229 call assert_equal('bar', bn2) 230 endif 231 232 call delete('Xtestout') 233endfunc 234 235" Test the -p[N] argument to open N tabpages. 236func Test_p_arg() 237 let after =<< trim [CODE] 238 call writefile(split(execute("tabs"), "\n"), "Xtestout") 239 qall 240 [CODE] 241 242 if RunVim([], after, '-p2') 243 let lines = readfile('Xtestout') 244 call assert_equal(4, len(lines)) 245 call assert_equal('Tab page 1', lines[0]) 246 call assert_equal('> [No Name]', lines[1]) 247 call assert_equal('Tab page 2', lines[2]) 248 call assert_equal(' [No Name]', lines[3]) 249 endif 250 251 if RunVim([], after, '-p foo bar') 252 let lines = readfile('Xtestout') 253 call assert_equal(4, len(lines)) 254 call assert_equal('Tab page 1', lines[0]) 255 call assert_equal('> foo', lines[1]) 256 call assert_equal('Tab page 2', lines[2]) 257 call assert_equal(' bar', lines[3]) 258 endif 259 260 call delete('Xtestout') 261endfunc 262 263" Test the -V[N] argument to set the 'verbose' option to [N] 264func Test_V_arg() 265 " Can't catch the output of gvim. 266 CheckNotGui 267 268 let out = system(GetVimCommand() . ' --clean -es -X -V0 -c "set verbose?" -cq') 269 call assert_equal(" verbose=0\n", out) 270 271 let out = system(GetVimCommand() . ' --clean -es -X -V2 -c "set verbose?" -cq') 272 call assert_match("sourcing \"$VIMRUNTIME[\\/]defaults\.vim\"\r\nline \\d\\+: sourcing \"[^\"]*runtime[\\/]filetype\.vim\".*\n", out) 273 call assert_match(" verbose=2\n", out) 274 275 let out = system(GetVimCommand() . ' --clean -es -X -V15 -c "set verbose?" -cq') 276 call assert_match("sourcing \"$VIMRUNTIME[\\/]defaults\.vim\"\r\nline 1: \" The default vimrc file\..* verbose=15\n", out) 277endfunc 278 279" Test the '-q [errorfile]' argument. 280func Test_q_arg() 281 CheckFeature quickfix 282 283 let lines =<< trim END 284 /* some file with an error */ 285 main() { 286 functionCall(arg; arg, arg); 287 return 666 288 } 289 END 290 call writefile(lines, 'Xbadfile.c') 291 292 let after =<< trim [CODE] 293 call writefile([&errorfile, string(getpos("."))], "Xtestout") 294 copen 295 w >> Xtestout 296 qall 297 [CODE] 298 299 " Test with default argument '-q'. 300 call assert_equal('errors.err', &errorfile) 301 call writefile(["Xbadfile.c:4:12: error: expected ';' before '}' token"], 'errors.err') 302 if RunVim([], after, '-q') 303 let lines = readfile('Xtestout') 304 call assert_equal(['errors.err', 305 \ '[0, 4, 12, 0]', 306 \ "Xbadfile.c|4 col 12| error: expected ';' before '}' token"], 307 \ lines) 308 endif 309 call delete('Xtestout') 310 call delete('errors.err') 311 312 " Test with explicit argument '-q Xerrors' (with space). 313 call writefile(["Xbadfile.c:4:12: error: expected ';' before '}' token"], 'Xerrors') 314 if RunVim([], after, '-q Xerrors') 315 let lines = readfile('Xtestout') 316 call assert_equal(['Xerrors', 317 \ '[0, 4, 12, 0]', 318 \ "Xbadfile.c|4 col 12| error: expected ';' before '}' token"], 319 \ lines) 320 endif 321 call delete('Xtestout') 322 323 " Test with explicit argument '-qXerrors' (without space). 324 if RunVim([], after, '-qXerrors') 325 let lines = readfile('Xtestout') 326 call assert_equal(['Xerrors', 327 \ '[0, 4, 12, 0]', 328 \ "Xbadfile.c|4 col 12| error: expected ';' before '}' token"], 329 \ lines) 330 endif 331 332 " Test with a non-existing error file (exits with value 3) 333 let out = system(GetVimCommand() .. ' -q xyz.err') 334 call assert_equal(3, v:shell_error) 335 336 call delete('Xbadfile.c') 337 call delete('Xtestout') 338 call delete('Xerrors') 339endfunc 340 341" Test the -V[N]{filename} argument to set the 'verbose' option to N 342" and set 'verbosefile' to filename. 343func Test_V_file_arg() 344 if RunVim([], [], ' --clean -V2Xverbosefile -c "set verbose? verbosefile?" -cq') 345 let out = join(readfile('Xverbosefile'), "\n") 346 call assert_match("sourcing \"$VIMRUNTIME[\\/]defaults\.vim\"\n", out) 347 call assert_match("\n verbose=2\n", out) 348 call assert_match("\n verbosefile=Xverbosefile", out) 349 endif 350 351 call delete('Xverbosefile') 352endfunc 353 354" Test the -m, -M and -R arguments: 355" -m resets 'write' 356" -M resets 'modifiable' and 'write' 357" -R sets 'readonly' 358func Test_m_M_R() 359 let after =<< trim [CODE] 360 call writefile([&write, &modifiable, &readonly, &updatecount], "Xtestout") 361 qall 362 [CODE] 363 364 if RunVim([], after, '') 365 let lines = readfile('Xtestout') 366 call assert_equal(['1', '1', '0', '200'], lines) 367 endif 368 if RunVim([], after, '-m') 369 let lines = readfile('Xtestout') 370 call assert_equal(['0', '1', '0', '200'], lines) 371 endif 372 if RunVim([], after, '-M') 373 let lines = readfile('Xtestout') 374 call assert_equal(['0', '0', '0', '200'], lines) 375 endif 376 if RunVim([], after, '-R') 377 let lines = readfile('Xtestout') 378 call assert_equal(['1', '1', '1', '10000'], lines) 379 endif 380 381 call delete('Xtestout') 382endfunc 383 384" Test the -A, -F and -H arguments (Arabic, Farsi and Hebrew modes). 385func Test_A_F_H_arg() 386 let after =<< trim [CODE] 387 call writefile([&rightleft, &arabic, &fkmap, &hkmap], "Xtestout") 388 qall 389 [CODE] 390 391 " Use silent Ex mode to avoid the hit-Enter prompt for the warning that 392 " 'encoding' is not utf-8. 393 if has('arabic') && &encoding == 'utf-8' && RunVim([], after, '-e -s -A') 394 let lines = readfile('Xtestout') 395 call assert_equal(['1', '1', '0', '0'], lines) 396 endif 397 398 if has('farsi') && RunVim([], after, '-F') 399 let lines = readfile('Xtestout') 400 call assert_equal(['1', '0', '1', '0'], lines) 401 endif 402 403 if has('rightleft') && RunVim([], after, '-H') 404 let lines = readfile('Xtestout') 405 call assert_equal(['1', '0', '0', '1'], lines) 406 endif 407 408 call delete('Xtestout') 409endfunc 410 411func Test_invalid_args() 412 " must be able to get the output of Vim. 413 CheckUnix 414 CheckNotGui 415 416 for opt in ['-Y', '--does-not-exist'] 417 let out = split(system(GetVimCommand() .. ' ' .. opt), "\n") 418 call assert_equal(1, v:shell_error) 419 call assert_match('^VIM - Vi IMproved .* (.*)$', out[0]) 420 call assert_equal('Unknown option argument: "' .. opt .. '"', out[1]) 421 call assert_equal('More info with: "vim -h"', out[2]) 422 endfor 423 424 for opt in ['-c', '-i', '-s', '-t', '-T', '-u', '-U', '-w', '-W', '--cmd', '--startuptime'] 425 let out = split(system(GetVimCommand() .. ' ' .. opt), "\n") 426 call assert_equal(1, v:shell_error) 427 call assert_match('^VIM - Vi IMproved .* (.*)$', out[0]) 428 call assert_equal('Argument missing after: "' .. opt .. '"', out[1]) 429 call assert_equal('More info with: "vim -h"', out[2]) 430 endfor 431 432 if has('clientserver') 433 for opt in ['--remote', '--remote-send', '--remote-silent', '--remote-expr', 434 \ '--remote-tab', '--remote-tab-wait', 435 \ '--remote-tab-wait-silent', '--remote-tab-silent', 436 \ '--remote-wait', '--remote-wait-silent', 437 \ '--servername', 438 \ ] 439 let out = split(system(GetVimCommand() .. ' ' .. opt), "\n") 440 call assert_equal(1, v:shell_error) 441 call assert_match('^VIM - Vi IMproved .* (.*)$', out[0]) 442 call assert_equal('Argument missing after: "' .. opt .. '"', out[1]) 443 call assert_equal('More info with: "vim -h"', out[2]) 444 endfor 445 endif 446 447 if has('gui_gtk') 448 let out = split(system(GetVimCommand() .. ' --display'), "\n") 449 call assert_equal(1, v:shell_error) 450 call assert_match('^VIM - Vi IMproved .* (.*)$', out[0]) 451 call assert_equal('Argument missing after: "--display"', out[1]) 452 call assert_equal('More info with: "vim -h"', out[2]) 453 endif 454 455 if has('xterm_clipboard') 456 let out = split(system(GetVimCommand() .. ' -display'), "\n") 457 call assert_equal(1, v:shell_error) 458 call assert_match('^VIM - Vi IMproved .* (.*)$', out[0]) 459 call assert_equal('Argument missing after: "-display"', out[1]) 460 call assert_equal('More info with: "vim -h"', out[2]) 461 endif 462 463 let out = split(system(GetVimCommand() .. ' -ix'), "\n") 464 call assert_equal(1, v:shell_error) 465 call assert_match('^VIM - Vi IMproved .* (.*)$', out[0]) 466 call assert_equal('Garbage after option argument: "-ix"', out[1]) 467 call assert_equal('More info with: "vim -h"', out[2]) 468 469 let out = split(system(GetVimCommand() .. ' - xxx'), "\n") 470 call assert_equal(1, v:shell_error) 471 call assert_match('^VIM - Vi IMproved .* (.*)$', out[0]) 472 call assert_equal('Too many edit arguments: "xxx"', out[1]) 473 call assert_equal('More info with: "vim -h"', out[2]) 474 475 if has('quickfix') 476 " Detect invalid repeated arguments '-t foo -t foo", '-q foo -q foo'. 477 for opt in ['-t', '-q'] 478 let out = split(system(GetVimCommand() .. repeat(' ' .. opt .. ' foo', 2)), "\n") 479 call assert_equal(1, v:shell_error) 480 call assert_match('^VIM - Vi IMproved .* (.*)$', out[0]) 481 call assert_equal('Too many edit arguments: "' .. opt .. '"', out[1]) 482 call assert_equal('More info with: "vim -h"', out[2]) 483 endfor 484 endif 485 486 for opt in [' -cq', ' --cmd q', ' +', ' -S foo'] 487 let out = split(system(GetVimCommand() .. repeat(opt, 11)), "\n") 488 call assert_equal(1, v:shell_error) 489 " FIXME: The error message given by Vim is not ideal in case of repeated 490 " -S foo since it does not mention -S. 491 call assert_match('^VIM - Vi IMproved .* (.*)$', out[0]) 492 call assert_equal('Too many "+command", "-c command" or "--cmd command" arguments', out[1]) 493 call assert_equal('More info with: "vim -h"', out[2]) 494 endfor 495 496 if has('gui_gtk') 497 for opt in ['--socketid x', '--socketid 0xg'] 498 let out = split(system(GetVimCommand() .. ' ' .. opt), "\n") 499 call assert_equal(1, v:shell_error) 500 call assert_match('^VIM - Vi IMproved .* (.*)$', out[0]) 501 call assert_equal('Invalid argument for: "--socketid"', out[1]) 502 call assert_equal('More info with: "vim -h"', out[2]) 503 endfor 504 endif 505endfunc 506 507func Test_file_args() 508 let after =<< trim [CODE] 509 call writefile(argv(), "Xtestout") 510 qall 511 [CODE] 512 513 if RunVim([], after, '') 514 let lines = readfile('Xtestout') 515 call assert_equal(0, len(lines)) 516 endif 517 518 if RunVim([], after, 'one') 519 let lines = readfile('Xtestout') 520 call assert_equal(1, len(lines)) 521 call assert_equal('one', lines[0]) 522 endif 523 524 if RunVim([], after, 'one two three') 525 let lines = readfile('Xtestout') 526 call assert_equal(3, len(lines)) 527 call assert_equal('one', lines[0]) 528 call assert_equal('two', lines[1]) 529 call assert_equal('three', lines[2]) 530 endif 531 532 if RunVim([], after, 'one -c echo two') 533 let lines = readfile('Xtestout') 534 call assert_equal(2, len(lines)) 535 call assert_equal('one', lines[0]) 536 call assert_equal('two', lines[1]) 537 endif 538 539 if RunVim([], after, 'one -- -c echo two') 540 let lines = readfile('Xtestout') 541 call assert_equal(4, len(lines)) 542 call assert_equal('one', lines[0]) 543 call assert_equal('-c', lines[1]) 544 call assert_equal('echo', lines[2]) 545 call assert_equal('two', lines[3]) 546 endif 547 548 call delete('Xtestout') 549endfunc 550 551func Test_startuptime() 552 CheckFeature startuptime 553 let after = ['qall'] 554 if RunVim([], after, '--startuptime Xtestout one') 555 let lines = readfile('Xtestout') 556 let expected = ['--- VIM STARTING ---', 'parsing arguments', 557 \ 'shell init', 'inits 3', 'start termcap', 'opening buffers'] 558 let found = [] 559 for line in lines 560 for exp in expected 561 if line =~ exp 562 call add(found, exp) 563 endif 564 endfor 565 endfor 566 call assert_equal(expected, found) 567 endif 568 call delete('Xtestout') 569endfunc 570 571func Test_read_stdin() 572 let after =<< trim [CODE] 573 write Xtestout 574 quit! 575 [CODE] 576 577 if RunVimPiped([], after, '-', 'echo something | ') 578 let lines = readfile('Xtestout') 579 " MS-Windows adds a space after the word 580 call assert_equal(['something'], split(lines[0])) 581 endif 582 call delete('Xtestout') 583endfunc 584 585func Test_set_shell() 586 let after =<< trim [CODE] 587 call writefile([&shell], "Xtestout") 588 quit! 589 [CODE] 590 591 if has('win32') 592 let $SHELL = 'C:\with space\cmd.exe' 593 let expected = '"C:\with space\cmd.exe"' 594 else 595 let $SHELL = '/bin/with space/sh' 596 let expected = '/bin/with\ space/sh' 597 endif 598 599 if RunVimPiped([], after, '', '') 600 let lines = readfile('Xtestout') 601 call assert_equal(expected, lines[0]) 602 endif 603 call delete('Xtestout') 604endfunc 605 606func Test_progpath() 607 " Tests normally run with "./vim" or "../vim", these must have been expanded 608 " to a full path. 609 if has('unix') 610 call assert_equal('/', v:progpath[0]) 611 elseif has('win32') 612 call assert_equal(':', v:progpath[1]) 613 call assert_match('[/\\]', v:progpath[2]) 614 endif 615 616 " Only expect "vim" to appear in v:progname. 617 call assert_match('vim\c', v:progname) 618endfunc 619 620func Test_silent_ex_mode() 621 " must be able to get the output of Vim. 622 CheckUnix 623 CheckNotGui 624 625 " This caused an ml_get error. 626 let out = system(GetVimCommand() . '-u NONE -es -c''set verbose=1|h|exe "%norm\<c-y>\<c-d>"'' -c cq') 627 call assert_notmatch('E315:', out) 628endfunc 629 630func Test_default_term() 631 " must be able to get the output of Vim. 632 CheckUnix 633 CheckNotGui 634 635 let save_term = $TERM 636 let $TERM = 'unknownxxx' 637 let out = system(GetVimCommand() . ' -c''set term'' -c cq') 638 call assert_match("defaulting to 'ansi'", out) 639 let $TERM = save_term 640endfunc 641 642func Test_zzz_startinsert() 643 " Test :startinsert 644 call writefile(['123456'], 'Xtestout') 645 let after =<< trim [CODE] 646 :startinsert 647 call feedkeys("foobar\<c-o>:wq\<cr>","t") 648 [CODE] 649 650 if RunVim([], after, 'Xtestout') 651 let lines = readfile('Xtestout') 652 call assert_equal(['foobar123456'], lines) 653 endif 654 " Test :startinsert! 655 call writefile(['123456'], 'Xtestout') 656 let after =<< trim [CODE] 657 :startinsert! 658 call feedkeys("foobar\<c-o>:wq\<cr>","t") 659 [CODE] 660 661 if RunVim([], after, 'Xtestout') 662 let lines = readfile('Xtestout') 663 call assert_equal(['123456foobar'], lines) 664 endif 665 call delete('Xtestout') 666endfunc 667 668func Test_issue_3969() 669 " Can't catch the output of gvim. 670 CheckNotGui 671 672 " Check that message is not truncated. 673 let out = system(GetVimCommand() . ' -es -X -V1 -c "echon ''hello''" -cq') 674 call assert_equal('hello', out) 675endfunc 676 677func Test_start_with_tabs() 678 CheckRunVimInTerminal 679 680 let buf = RunVimInTerminal('-p a b c', {}) 681 call VerifyScreenDump(buf, 'Test_start_with_tabs', {}) 682 683 " clean up 684 call StopVimInTerminal(buf) 685endfunc 686 687func Test_v_argv() 688 " Can't catch the output of gvim. 689 CheckNotGui 690 691 let out = system(GetVimCommand() . ' -es -V1 -X arg1 --cmd "echo v:argv" --cmd q') 692 let list = out->split("', '") 693 call assert_match('vim', list[0]) 694 let idx = index(list, 'arg1') 695 call assert_true(idx > 2) 696 call assert_equal(['arg1', '--cmd', 'echo v:argv', '--cmd', 'q'']'], list[idx:]) 697endfunc 698 699" Test for the "-r" recovery mode option 700func Test_r_arg() 701 " Can't catch the output of gvim. 702 CheckNotGui 703 CheckUnix 704 CheckEnglish 705 let cmd = GetVimCommand() 706 " There can be swap files anywhere, only check for the headers. 707 let expected =<< trim END 708 Swap files found:.* 709 In current directory:.* 710 In directory \~/tmp:.* 711 In directory /var/tmp:.* 712 In directory /tmp:.* 713 END 714 call assert_match(join(expected, ""), system(cmd .. " -r")->substitute("[\r\n]\\+", '', '')) 715endfunc 716 717" Test for the '-t' option to jump to a tag 718func Test_t_arg() 719 let before =<< trim [CODE] 720 set tags=Xtags 721 [CODE] 722 let after =<< trim [CODE] 723 let s = bufname('') .. ':L' .. line('.') .. 'C' .. col('.') 724 call writefile([s], "Xtestout") 725 qall 726 [CODE] 727 728 call writefile(["!_TAG_FILE_ENCODING\tutf-8\t//", 729 \ "first\tXfile1\t/^ \\zsfirst$/", 730 \ "second\tXfile1\t/^ \\zssecond$/", 731 \ "third\tXfile1\t/^ \\zsthird$/"], 732 \ 'Xtags') 733 call writefile([' first', ' second', ' third'], 'Xfile1') 734 735 if RunVim(before, after, '-t second') 736 call assert_equal(['Xfile1:L2C5'], readfile('Xtestout')) 737 call delete('Xtestout') 738 endif 739 740 call delete('Xtags') 741 call delete('Xfile1') 742endfunc 743 744" Test for entering the insert mode on startup 745func Test_start_insertmode() 746 let before =<< trim [CODE] 747 set insertmode 748 [CODE] 749 let after =<< trim [CODE] 750 call writefile(['insertmode=' .. &insertmode], 'Xtestout') 751 qall 752 [CODE] 753 if RunVim(before, after, '') 754 call assert_equal(['insertmode=1'], readfile('Xtestout')) 755 call delete('Xtestout') 756 endif 757endfunc 758 759" Test for enabling the binary mode on startup 760func Test_b_arg() 761 let after =<< trim [CODE] 762 call writefile(['binary=' .. &binary], 'Xtestout') 763 qall 764 [CODE] 765 if RunVim([], after, '-b') 766 call assert_equal(['binary=1'], readfile('Xtestout')) 767 call delete('Xtestout') 768 endif 769endfunc 770 771" Test for enabling the lisp mode on startup 772func Test_l_arg() 773 let after =<< trim [CODE] 774 let s = 'lisp=' .. &lisp .. ', showmatch=' .. &showmatch 775 call writefile([s], 'Xtestout') 776 qall 777 [CODE] 778 if RunVim([], after, '-l') 779 call assert_equal(['lisp=1, showmatch=1'], readfile('Xtestout')) 780 call delete('Xtestout') 781 endif 782endfunc 783 784" Test for specifying a non-existing vimrc file using "-u" 785func Test_missing_vimrc() 786 CheckRunVimInTerminal 787 let after =<< trim [CODE] 788 call assert_match('^E282:', v:errmsg) 789 call writefile(v:errors, 'Xtestout') 790 [CODE] 791 call writefile(after, 'Xafter') 792 793 let cmd = GetVimCommandCleanTerm() . ' -u Xvimrc_missing -S Xafter' 794 let buf = term_start(cmd, {'term_rows' : 10}) 795 call WaitForAssert({-> assert_equal("running", term_getstatus(buf))}) 796 call TermWait(buf) 797 call term_sendkeys(buf, "\n:") 798 call TermWait(buf) 799 call WaitForAssert({-> assert_match(':', term_getline(buf, 10))}) 800 call StopVimInTerminal(buf) 801 call assert_equal([], readfile('Xtestout')) 802 call delete('Xafter') 803 call delete('Xtestout') 804endfunc 805 806" Test for using the $VIMINIT environment variable 807func Test_VIMINIT() 808 let after =<< trim [CODE] 809 call assert_equal(1, exists('viminit_found')) 810 call assert_equal('yes', viminit_found) 811 call writefile(v:errors, 'Xtestout') 812 qall 813 [CODE] 814 call writefile(after, 'Xafter') 815 let cmd = GetVimProg() . ' --not-a-term -S Xafter --cmd "set enc=utf8"' 816 call setenv('VIMINIT', 'let viminit_found="yes"') 817 exe "silent !" . cmd 818 call assert_equal([], readfile('Xtestout')) 819 call delete('Xtestout') 820 call delete('Xafter') 821endfunc 822 823" Test for using the $EXINIT environment variable 824func Test_EXINIT() 825 let after =<< trim [CODE] 826 call assert_equal(1, exists('exinit_found')) 827 call assert_equal('yes', exinit_found) 828 call writefile(v:errors, 'Xtestout') 829 qall 830 [CODE] 831 call writefile(after, 'Xafter') 832 let cmd = GetVimProg() . ' --not-a-term -S Xafter --cmd "set enc=utf8"' 833 call setenv('EXINIT', 'let exinit_found="yes"') 834 exe "silent !" . cmd 835 call assert_equal([], readfile('Xtestout')) 836 call delete('Xtestout') 837 call delete('Xafter') 838endfunc 839 840" Test for using the 'exrc' option 841func Test_exrc() 842 let after =<< trim [CODE] 843 call assert_equal(1, &exrc) 844 call assert_equal(1, &secure) 845 call assert_equal(37, exrc_found) 846 call writefile(v:errors, 'Xtestout') 847 qall 848 [CODE] 849 call mkdir('Xdir') 850 call writefile(['let exrc_found=37'], 'Xdir/.exrc') 851 call writefile(after, 'Xdir/Xafter') 852 let cmd = GetVimProg() . ' --not-a-term -S Xafter --cmd "cd Xdir" --cmd "set enc=utf8 exrc secure"' 853 exe "silent !" . cmd 854 call assert_equal([], readfile('Xdir/Xtestout')) 855 call delete('Xdir', 'rf') 856endfunc 857 858" Test for starting Vim with a non-terminal as input/output 859func Test_io_not_a_terminal() 860 " Can't catch the output of gvim. 861 CheckNotGui 862 CheckUnix 863 CheckEnglish 864 let l = systemlist(GetVimProg() .. ' --ttyfail') 865 call assert_equal(['Vim: Warning: Output is not to a terminal', 866 \ 'Vim: Warning: Input is not from a terminal'], l) 867endfunc 868 869" Test for the "-w scriptout" argument 870func Test_w_arg() 871 " Can't catch the output of gvim. 872 CheckNotGui 873 call writefile(["iVim Editor\<Esc>:q!\<CR>"], 'Xscriptin', 'b') 874 if RunVim([], [], '-s Xscriptin -w Xscriptout') 875 call assert_equal(["iVim Editor\e:q!\r"], readfile('Xscriptout')) 876 call delete('Xscriptout') 877 endif 878 call delete('Xscriptin') 879 880 " Test for failing to open the script output file. This test works only when 881 " the language is English. 882 if v:lang == "C" || v:lang =~ '^[Ee]n' 883 call mkdir("Xdir") 884 let m = system(GetVimCommand() .. " -w Xdir") 885 call assert_equal("Cannot open for script output: \"Xdir\"\n", m) 886 call delete("Xdir", 'rf') 887 endif 888endfunc 889 890" Test for the "-s scriptin" argument 891func Test_s_arg() 892 " Can't catch the output of gvim. 893 CheckNotGui 894 CheckEnglish 895 " Test for failing to open the script input file. 896 let m = system(GetVimCommand() .. " -s abcxyz") 897 call assert_equal("Cannot open for reading: \"abcxyz\"\n", m) 898 899 call writefile([], 'Xinput') 900 let m = system(GetVimCommand() .. " -s Xinput -s Xinput") 901 call assert_equal("Attempt to open script file again: \"-s Xinput\"\n", m) 902 call delete('Xinput') 903endfunc 904 905" Test for the "-n" (no swap file) argument 906func Test_n_arg() 907 let after =<< trim [CODE] 908 call assert_equal(0, &updatecount) 909 call writefile(v:errors, 'Xtestout') 910 qall 911 [CODE] 912 if RunVim([], after, '-n') 913 call assert_equal([], readfile('Xtestout')) 914 call delete('Xtestout') 915 endif 916 call delete('Xafter') 917endfunc 918 919" Test for the "-h" (help) argument 920func Test_h_arg() 921 " Can't catch the output of gvim. 922 CheckNotGui 923 let l = systemlist(GetVimProg() .. ' -h') 924 call assert_match('^VIM - Vi IMproved', l[0]) 925 let l = systemlist(GetVimProg() .. ' -?') 926 call assert_match('^VIM - Vi IMproved', l[0]) 927endfunc 928 929" Test for the "-F" (farsi) argument 930func Test_F_arg() 931 " Can't catch the output of gvim. 932 CheckNotGui 933 let l = systemlist(GetVimProg() .. ' -F') 934 call assert_match('^E27:', l[0]) 935endfunc 936 937" Test for the "-E" (improved Ex mode) argument 938func Test_E_arg() 939 let after =<< trim [CODE] 940 call assert_equal('cv', mode(1)) 941 call writefile(v:errors, 'Xtestout') 942 qall 943 [CODE] 944 if RunVim([], after, '-E') 945 call assert_equal([], readfile('Xtestout')) 946 call delete('Xtestout') 947 endif 948 call delete('Xafter') 949endfunc 950 951" Test for too many edit argument errors 952func Test_too_many_edit_args() 953 " Can't catch the output of gvim. 954 CheckNotGui 955 CheckEnglish 956 let l = systemlist(GetVimProg() .. ' - -') 957 call assert_match('^Too many edit arguments: "-"', l[1]) 958endfunc 959 960" vim: shiftwidth=2 sts=2 expandtab 961