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 " This does not work with a GUI-only binary, such as on MS-Windows. 113 CheckAnyOf Unix NotGui 114 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 that an error is shown when the defaults.vim file could not be read 280func Test_defaults_error() 281 " Can't catch the output of gvim. 282 CheckNotGui 283 CheckNotMSWindows 284 " For unknown reasons freeing all memory does not work here, even though 285 " EXITFREE is defined. 286 CheckNotAsan 287 288 let out = system('VIMRUNTIME=/tmp ' .. GetVimCommand() .. ' --clean -cq') 289 call assert_match("E1187: Failed to source defaults.vim", out) 290 291 let out = system('VIMRUNTIME=/tmp ' .. GetVimCommand() .. ' -u DEFAULTS -cq') 292 call assert_match("E1187: Failed to source defaults.vim", out) 293endfunc 294 295" Test the '-q [errorfile]' argument. 296func Test_q_arg() 297 CheckFeature quickfix 298 299 let lines =<< trim END 300 /* some file with an error */ 301 main() { 302 functionCall(arg; arg, arg); 303 return 666 304 } 305 END 306 call writefile(lines, 'Xbadfile.c') 307 308 let after =<< trim [CODE] 309 call writefile([&errorfile, string(getpos("."))], "Xtestout") 310 copen 311 w >> Xtestout 312 qall 313 [CODE] 314 315 " Test with default argument '-q'. 316 call assert_equal('errors.err', &errorfile) 317 call writefile(["Xbadfile.c:4:12: error: expected ';' before '}' token"], 'errors.err') 318 if RunVim([], after, '-q') 319 let lines = readfile('Xtestout') 320 call assert_equal(['errors.err', 321 \ '[0, 4, 12, 0]', 322 \ "Xbadfile.c|4 col 12| error: expected ';' before '}' token"], 323 \ lines) 324 endif 325 call delete('Xtestout') 326 call delete('errors.err') 327 328 " Test with explicit argument '-q Xerrors' (with space). 329 call writefile(["Xbadfile.c:4:12: error: expected ';' before '}' token"], 'Xerrors') 330 if RunVim([], after, '-q Xerrors') 331 let lines = readfile('Xtestout') 332 call assert_equal(['Xerrors', 333 \ '[0, 4, 12, 0]', 334 \ "Xbadfile.c|4 col 12| error: expected ';' before '}' token"], 335 \ lines) 336 endif 337 call delete('Xtestout') 338 339 " Test with explicit argument '-qXerrors' (without space). 340 if RunVim([], after, '-qXerrors') 341 let lines = readfile('Xtestout') 342 call assert_equal(['Xerrors', 343 \ '[0, 4, 12, 0]', 344 \ "Xbadfile.c|4 col 12| error: expected ';' before '}' token"], 345 \ lines) 346 endif 347 348 " Test with a non-existing error file (exits with value 3) 349 let out = system(GetVimCommand() .. ' -q xyz.err') 350 call assert_equal(3, v:shell_error) 351 352 call delete('Xbadfile.c') 353 call delete('Xtestout') 354 call delete('Xerrors') 355endfunc 356 357" Test the -V[N]{filename} argument to set the 'verbose' option to N 358" and set 'verbosefile' to filename. 359func Test_V_file_arg() 360 if RunVim([], [], ' --clean -V2Xverbosefile -c "set verbose? verbosefile?" -cq') 361 let out = join(readfile('Xverbosefile'), "\n") 362 call assert_match("sourcing \"$VIMRUNTIME[\\/]defaults\.vim\"\n", out) 363 call assert_match("\n verbose=2\n", out) 364 call assert_match("\n verbosefile=Xverbosefile", out) 365 endif 366 367 call delete('Xverbosefile') 368endfunc 369 370" Test the -m, -M and -R arguments: 371" -m resets 'write' 372" -M resets 'modifiable' and 'write' 373" -R sets 'readonly' 374func Test_m_M_R() 375 let after =<< trim [CODE] 376 call writefile([&write, &modifiable, &readonly, &updatecount], "Xtestout") 377 qall 378 [CODE] 379 380 if RunVim([], after, '') 381 let lines = readfile('Xtestout') 382 call assert_equal(['1', '1', '0', '200'], lines) 383 endif 384 if RunVim([], after, '-m') 385 let lines = readfile('Xtestout') 386 call assert_equal(['0', '1', '0', '200'], lines) 387 endif 388 if RunVim([], after, '-M') 389 let lines = readfile('Xtestout') 390 call assert_equal(['0', '0', '0', '200'], lines) 391 endif 392 if RunVim([], after, '-R') 393 let lines = readfile('Xtestout') 394 call assert_equal(['1', '1', '1', '10000'], lines) 395 endif 396 397 call delete('Xtestout') 398endfunc 399 400" Test the -A, -F and -H arguments (Arabic, Farsi and Hebrew modes). 401func Test_A_F_H_arg() 402 let after =<< trim [CODE] 403 call writefile([&rightleft, &arabic, &fkmap, &hkmap], "Xtestout") 404 qall 405 [CODE] 406 407 " Use silent Ex mode to avoid the hit-Enter prompt for the warning that 408 " 'encoding' is not utf-8. 409 if has('arabic') && &encoding == 'utf-8' && RunVim([], after, '-e -s -A') 410 let lines = readfile('Xtestout') 411 call assert_equal(['1', '1', '0', '0'], lines) 412 endif 413 414 if has('farsi') && RunVim([], after, '-F') 415 let lines = readfile('Xtestout') 416 call assert_equal(['1', '0', '1', '0'], lines) 417 endif 418 419 if has('rightleft') && RunVim([], after, '-H') 420 let lines = readfile('Xtestout') 421 call assert_equal(['1', '0', '0', '1'], lines) 422 endif 423 424 call delete('Xtestout') 425endfunc 426 427" Test the --echo-wid argument (for GTK GUI only). 428func Test_echo_wid() 429 CheckCanRunGui 430 CheckFeature gui_gtk 431 432 if RunVim([], [], '-g --echo-wid -cq >Xtest_echo_wid') 433 let lines = readfile('Xtest_echo_wid') 434 call assert_equal(1, len(lines)) 435 call assert_match('^WID: \d\+$', lines[0]) 436 endif 437 438 call delete('Xtest_echo_wid') 439endfunction 440 441" Test the -reverse and +reverse arguments (for GUI only). 442func Test_reverse() 443 CheckCanRunGui 444 CheckAnyOf Feature:gui_gtk Feature:gui_motif Feature:gui_athena 445 446 let after =<< trim [CODE] 447 call writefile([&background], "Xtest_reverse") 448 qall 449 [CODE] 450 if RunVim([], after, '-f -g -reverse') 451 let lines = readfile('Xtest_reverse') 452 call assert_equal(['dark'], lines) 453 endif 454 if RunVim([], after, '-f -g +reverse') 455 let lines = readfile('Xtest_reverse') 456 call assert_equal(['light'], lines) 457 endif 458 459 call delete('Xtest_reverse') 460endfunc 461 462" Test the -background and -foreground arguments (for GUI only). 463func Test_background_foreground() 464 CheckCanRunGui 465 CheckAnyOf Feature:gui_gtk Feature:gui_motif Feature:gui_athena 466 467 " Is there a better way to check the effect of -background & -foreground 468 " other than merely looking at &background (dark or light)? 469 let after =<< trim [CODE] 470 call writefile([&background], "Xtest_fg_bg") 471 qall 472 [CODE] 473 if RunVim([], after, '-f -g -background darkred -foreground yellow') 474 let lines = readfile('Xtest_fg_bg') 475 call assert_equal(['dark'], lines) 476 endif 477 if RunVim([], after, '-f -g -background ivory -foreground darkgreen') 478 let lines = readfile('Xtest_fg_bg') 479 call assert_equal(['light'], lines) 480 endif 481 482 call delete('Xtest_fg_bg') 483endfunc 484 485" Test the -font argument (for GUI only). 486func Test_font() 487 CheckCanRunGui 488 CheckNotMSWindows 489 490 if has('gui_gtk') 491 let font = 'Courier 14' 492 elseif has('gui_motif') || has('gui_athena') 493 let font = '-misc-fixed-bold-*' 494 else 495 throw 'Skipped: test does not set a valid font for this GUI' 496 endif 497 498 let after =<< trim [CODE] 499 call writefile([&guifont], "Xtest_font") 500 qall 501 [CODE] 502 503 if RunVim([], after, '--nofork -g -font "' .. font .. '"') 504 let lines = readfile('Xtest_font') 505 call assert_equal([font], lines) 506 endif 507 508 call delete('Xtest_font') 509endfunc 510 511" Test the -geometry argument (for GUI only). 512func Test_geometry() 513 CheckCanRunGui 514 CheckAnyOf Feature:gui_gtk Feature:gui_motif Feature:gui_athena 515 516 if has('gui_motif') || has('gui_athena') 517 " FIXME: With GUI Athena or Motif, the value of getwinposx(), 518 " getwinposy() and getwinpos() do not match exactly the 519 " value given in -geometry. Why? 520 " So only check &columns and &lines for those GUIs. 521 let after =<< trim [CODE] 522 call writefile([&columns, &lines], "Xtest_geometry") 523 qall 524 [CODE] 525 if RunVim([], after, '-f -g -geometry 31x13+41+43') 526 let lines = readfile('Xtest_geometry') 527 call assert_equal(['31', '13'], lines) 528 endif 529 else 530 let after =<< trim [CODE] 531 call writefile([&columns, &lines, getwinposx(), getwinposy(), string(getwinpos())], "Xtest_geometry") 532 qall 533 [CODE] 534 if RunVim([], after, '-f -g -geometry 31x13+41+43') 535 let lines = readfile('Xtest_geometry') 536 call assert_equal(['31', '13', '41', '43', '[41, 43]'], lines) 537 endif 538 endif 539 540 call delete('Xtest_geometry') 541endfunc 542 543" Test the -iconic argument (for GUI only). 544func Test_iconic() 545 CheckCanRunGui 546 CheckAnyOf Feature:gui_gtk Feature:gui_motif Feature:gui_athena 547 548 call RunVim([], [], '-f -g -iconic -cq') 549 550 " TODO: currently only start vim iconified, but does not 551 " check that vim is iconified. How could this be checked? 552endfunc 553 554 555func Test_invalid_args() 556 " must be able to get the output of Vim. 557 CheckUnix 558 CheckNotGui 559 560 for opt in ['-Y', '--does-not-exist'] 561 let out = split(system(GetVimCommand() .. ' ' .. opt), "\n") 562 call assert_equal(1, v:shell_error) 563 call assert_match('^VIM - Vi IMproved .* (.*)$', out[0]) 564 call assert_equal('Unknown option argument: "' .. opt .. '"', out[1]) 565 call assert_equal('More info with: "vim -h"', out[2]) 566 endfor 567 568 for opt in ['-c', '-i', '-s', '-t', '-T', '-u', '-U', '-w', '-W', '--cmd', '--startuptime'] 569 let out = split(system(GetVimCommand() .. ' ' .. opt), "\n") 570 call assert_equal(1, v:shell_error) 571 call assert_match('^VIM - Vi IMproved .* (.*)$', out[0]) 572 call assert_equal('Argument missing after: "' .. opt .. '"', out[1]) 573 call assert_equal('More info with: "vim -h"', out[2]) 574 endfor 575 576 if has('clientserver') 577 for opt in ['--remote', '--remote-send', '--remote-silent', '--remote-expr', 578 \ '--remote-tab', '--remote-tab-wait', 579 \ '--remote-tab-wait-silent', '--remote-tab-silent', 580 \ '--remote-wait', '--remote-wait-silent', 581 \ '--servername', 582 \ ] 583 let out = split(system(GetVimCommand() .. ' ' .. opt), "\n") 584 call assert_equal(1, v:shell_error) 585 call assert_match('^VIM - Vi IMproved .* (.*)$', out[0]) 586 call assert_equal('Argument missing after: "' .. opt .. '"', out[1]) 587 call assert_equal('More info with: "vim -h"', out[2]) 588 endfor 589 endif 590 591 if has('gui_gtk') 592 let out = split(system(GetVimCommand() .. ' --display'), "\n") 593 call assert_equal(1, v:shell_error) 594 call assert_match('^VIM - Vi IMproved .* (.*)$', out[0]) 595 call assert_equal('Argument missing after: "--display"', out[1]) 596 call assert_equal('More info with: "vim -h"', out[2]) 597 endif 598 599 if has('xterm_clipboard') 600 let out = split(system(GetVimCommand() .. ' -display'), "\n") 601 call assert_equal(1, v:shell_error) 602 call assert_match('^VIM - Vi IMproved .* (.*)$', out[0]) 603 call assert_equal('Argument missing after: "-display"', out[1]) 604 call assert_equal('More info with: "vim -h"', out[2]) 605 endif 606 607 let out = split(system(GetVimCommand() .. ' -ix'), "\n") 608 call assert_equal(1, v:shell_error) 609 call assert_match('^VIM - Vi IMproved .* (.*)$', out[0]) 610 call assert_equal('Garbage after option argument: "-ix"', out[1]) 611 call assert_equal('More info with: "vim -h"', out[2]) 612 613 let out = split(system(GetVimCommand() .. ' - xxx'), "\n") 614 call assert_equal(1, v:shell_error) 615 call assert_match('^VIM - Vi IMproved .* (.*)$', out[0]) 616 call assert_equal('Too many edit arguments: "xxx"', out[1]) 617 call assert_equal('More info with: "vim -h"', out[2]) 618 619 if has('quickfix') 620 " Detect invalid repeated arguments '-t foo -t foo", '-q foo -q foo'. 621 for opt in ['-t', '-q'] 622 let out = split(system(GetVimCommand() .. repeat(' ' .. opt .. ' foo', 2)), "\n") 623 call assert_equal(1, v:shell_error) 624 call assert_match('^VIM - Vi IMproved .* (.*)$', out[0]) 625 call assert_equal('Too many edit arguments: "' .. opt .. '"', out[1]) 626 call assert_equal('More info with: "vim -h"', out[2]) 627 endfor 628 endif 629 630 for opt in [' -cq', ' --cmd q', ' +', ' -S foo'] 631 let out = split(system(GetVimCommand() .. repeat(opt, 11)), "\n") 632 call assert_equal(1, v:shell_error) 633 " FIXME: The error message given by Vim is not ideal in case of repeated 634 " -S foo since it does not mention -S. 635 call assert_match('^VIM - Vi IMproved .* (.*)$', out[0]) 636 call assert_equal('Too many "+command", "-c command" or "--cmd command" arguments', out[1]) 637 call assert_equal('More info with: "vim -h"', out[2]) 638 endfor 639 640 if has('gui_gtk') 641 let out = split(system(GetVimCommand() .. ' --socketid'), "\n") 642 call assert_equal(1, v:shell_error) 643 call assert_match('^VIM - Vi IMproved .* (.*)$', out[0]) 644 call assert_equal('Argument missing after: "--socketid"', out[1]) 645 call assert_equal('More info with: "vim -h"', out[2]) 646 647 for opt in ['--socketid x', '--socketid 0xg'] 648 let out = split(system(GetVimCommand() .. ' ' .. opt), "\n") 649 call assert_equal(1, v:shell_error) 650 call assert_match('^VIM - Vi IMproved .* (.*)$', out[0]) 651 call assert_equal('Invalid argument for: "--socketid"', out[1]) 652 call assert_equal('More info with: "vim -h"', out[2]) 653 endfor 654 655 endif 656endfunc 657 658func Test_file_args() 659 let after =<< trim [CODE] 660 call writefile(argv(), "Xtestout") 661 qall 662 [CODE] 663 664 if RunVim([], after, '') 665 let lines = readfile('Xtestout') 666 call assert_equal(0, len(lines)) 667 endif 668 669 if RunVim([], after, 'one') 670 let lines = readfile('Xtestout') 671 call assert_equal(1, len(lines)) 672 call assert_equal('one', lines[0]) 673 endif 674 675 if RunVim([], after, 'one two three') 676 let lines = readfile('Xtestout') 677 call assert_equal(3, len(lines)) 678 call assert_equal('one', lines[0]) 679 call assert_equal('two', lines[1]) 680 call assert_equal('three', lines[2]) 681 endif 682 683 if RunVim([], after, 'one -c echo two') 684 let lines = readfile('Xtestout') 685 call assert_equal(2, len(lines)) 686 call assert_equal('one', lines[0]) 687 call assert_equal('two', lines[1]) 688 endif 689 690 if RunVim([], after, 'one -- -c echo two') 691 let lines = readfile('Xtestout') 692 call assert_equal(4, len(lines)) 693 call assert_equal('one', lines[0]) 694 call assert_equal('-c', lines[1]) 695 call assert_equal('echo', lines[2]) 696 call assert_equal('two', lines[3]) 697 endif 698 699 call delete('Xtestout') 700endfunc 701 702func Test_startuptime() 703 CheckFeature startuptime 704 let after = ['qall'] 705 if RunVim([], after, '--startuptime Xtestout one') 706 let lines = readfile('Xtestout') 707 let expected = ['--- VIM STARTING ---', 'parsing arguments', 708 \ 'shell init', 'inits 3', 'start termcap', 'opening buffers'] 709 let found = [] 710 for line in lines 711 for exp in expected 712 if line =~ exp 713 call add(found, exp) 714 endif 715 endfor 716 endfor 717 call assert_equal(expected, found) 718 endif 719 call delete('Xtestout') 720endfunc 721 722func Test_read_stdin() 723 let after =<< trim [CODE] 724 write Xtestout 725 quit! 726 [CODE] 727 728 if RunVimPiped([], after, '-', 'echo something | ') 729 let lines = readfile('Xtestout') 730 " MS-Windows adds a space after the word 731 call assert_equal(['something'], split(lines[0])) 732 endif 733 call delete('Xtestout') 734endfunc 735 736func Test_progpath() 737 " Tests normally run with "./vim" or "../vim", these must have been expanded 738 " to a full path. 739 if has('unix') 740 call assert_equal('/', v:progpath[0]) 741 elseif has('win32') 742 call assert_equal(':', v:progpath[1]) 743 call assert_match('[/\\]', v:progpath[2]) 744 endif 745 746 " Only expect "vim" to appear in v:progname. 747 call assert_match('vim\c', v:progname) 748endfunc 749 750func Test_silent_ex_mode() 751 " must be able to get the output of Vim. 752 CheckUnix 753 CheckNotGui 754 755 " This caused an ml_get error. 756 let out = system(GetVimCommand() . '-u NONE -es -c''set verbose=1|h|exe "%norm\<c-y>\<c-d>"'' -c cq') 757 call assert_notmatch('E315:', out) 758endfunc 759 760func Test_default_term() 761 " must be able to get the output of Vim. 762 CheckUnix 763 CheckNotGui 764 765 let save_term = $TERM 766 let $TERM = 'unknownxxx' 767 let out = system(GetVimCommand() . ' -c''set term'' -c cq') 768 call assert_match("defaulting to 'ansi'", out) 769 let $TERM = save_term 770endfunc 771 772func Test_zzz_startinsert() 773 " Test :startinsert 774 call writefile(['123456'], 'Xtestout') 775 let after =<< trim [CODE] 776 :startinsert 777 call feedkeys("foobar\<c-o>:wq\<cr>","t") 778 [CODE] 779 780 if RunVim([], after, 'Xtestout') 781 let lines = readfile('Xtestout') 782 call assert_equal(['foobar123456'], lines) 783 endif 784 " Test :startinsert! 785 call writefile(['123456'], 'Xtestout') 786 let after =<< trim [CODE] 787 :startinsert! 788 call feedkeys("foobar\<c-o>:wq\<cr>","t") 789 [CODE] 790 791 if RunVim([], after, 'Xtestout') 792 let lines = readfile('Xtestout') 793 call assert_equal(['123456foobar'], lines) 794 endif 795 call delete('Xtestout') 796endfunc 797 798func Test_issue_3969() 799 " Can't catch the output of gvim. 800 CheckNotGui 801 802 " Check that message is not truncated. 803 let out = system(GetVimCommand() . ' -es -X -V1 -c "echon ''hello''" -cq') 804 call assert_equal('hello', out) 805endfunc 806 807func Test_start_with_tabs() 808 CheckRunVimInTerminal 809 810 let buf = RunVimInTerminal('-p a b c', {}) 811 call VerifyScreenDump(buf, 'Test_start_with_tabs', {}) 812 813 " clean up 814 call StopVimInTerminal(buf) 815endfunc 816 817func Test_v_argv() 818 " Can't catch the output of gvim. 819 CheckNotGui 820 821 let out = system(GetVimCommand() . ' -es -V1 -X arg1 --cmd "echo v:argv" --cmd q') 822 let list = out->split("', '") 823 call assert_match('vim', list[0]) 824 let idx = index(list, 'arg1') 825 call assert_true(idx > 2) 826 call assert_equal(['arg1', '--cmd', 'echo v:argv', '--cmd', 'q'']'], list[idx:]) 827endfunc 828 829" Test for the "-r" recovery mode option 830func Test_r_arg() 831 " Can't catch the output of gvim. 832 CheckNotGui 833 CheckUnix 834 CheckEnglish 835 let cmd = GetVimCommand() 836 " There can be swap files anywhere, only check for the headers. 837 let expected =<< trim END 838 Swap files found:.* 839 In current directory:.* 840 In directory \~/tmp:.* 841 In directory /var/tmp:.* 842 In directory /tmp:.* 843 END 844 call assert_match(join(expected, ""), system(cmd .. " -r")->substitute("[\r\n]\\+", '', '')) 845endfunc 846 847" Test for the '-t' option to jump to a tag 848func Test_t_arg() 849 let before =<< trim [CODE] 850 set tags=Xtags 851 [CODE] 852 let after =<< trim [CODE] 853 let s = bufname('') .. ':L' .. line('.') .. 'C' .. col('.') 854 call writefile([s], "Xtestout") 855 qall 856 [CODE] 857 858 call writefile(["!_TAG_FILE_ENCODING\tutf-8\t//", 859 \ "first\tXfile1\t/^ \\zsfirst$/", 860 \ "second\tXfile1\t/^ \\zssecond$/", 861 \ "third\tXfile1\t/^ \\zsthird$/"], 862 \ 'Xtags') 863 call writefile([' first', ' second', ' third'], 'Xfile1') 864 865 for t_arg in ['-t second', '-tsecond'] 866 if RunVim(before, after, '-t second') 867 call assert_equal(['Xfile1:L2C5'], readfile('Xtestout'), t_arg) 868 call delete('Xtestout') 869 endif 870 endfor 871 872 call delete('Xtags') 873 call delete('Xfile1') 874endfunc 875 876" Test the '-T' argument which sets the 'term' option. 877func Test_T_arg() 878 CheckNotGui 879 let after =<< trim [CODE] 880 call writefile([&term], "Xtest_T_arg") 881 qall 882 [CODE] 883 884 for t in ['builtin_dumb', 'builtin_ansi'] 885 if RunVim([], after, '-T ' .. t) 886 let lines = readfile('Xtest_T_arg') 887 call assert_equal([t], lines) 888 endif 889 endfor 890 891 call delete('Xtest_T_arg') 892endfunc 893 894" Test the '-x' argument to read/write encrypted files. 895func Test_x_arg() 896 CheckRunVimInTerminal 897 CheckFeature cryptv 898 899 " Create an encrypted file Xtest_x_arg. 900 let buf = RunVimInTerminal('-n -x Xtest_x_arg', #{rows: 10, wait_for_ruler: 0}) 901 call WaitForAssert({-> assert_match('^Enter encryption key: ', term_getline(buf, 10))}) 902 call term_sendkeys(buf, "foo\n") 903 call WaitForAssert({-> assert_match('^Enter same key again: ', term_getline(buf, 10))}) 904 call term_sendkeys(buf, "foo\n") 905 call WaitForAssert({-> assert_match(' All$', term_getline(buf, 10))}) 906 call term_sendkeys(buf, "itest\<Esc>:w\<Enter>") 907 call WaitForAssert({-> assert_match('"Xtest_x_arg" \[New\]\[blowfish2\] 1L, 5B written', 908 \ term_getline(buf, 10))}) 909 call StopVimInTerminal(buf) 910 911 " Read the encrypted file and check that it contains the expected content "test" 912 let buf = RunVimInTerminal('-n -x Xtest_x_arg', #{rows: 10, wait_for_ruler: 0}) 913 call WaitForAssert({-> assert_match('^Enter encryption key: ', term_getline(buf, 10))}) 914 call term_sendkeys(buf, "foo\n") 915 call WaitForAssert({-> assert_match('^Enter same key again: ', term_getline(buf, 10))}) 916 call term_sendkeys(buf, "foo\n") 917 call WaitForAssert({-> assert_match('^test', term_getline(buf, 1))}) 918 call StopVimInTerminal(buf) 919 920 call delete('Xtest_x_arg') 921endfunc 922 923" Test for entering the insert mode on startup 924func Test_start_insertmode() 925 let before =<< trim [CODE] 926 set insertmode 927 [CODE] 928 let after =<< trim [CODE] 929 call writefile(['insertmode=' .. &insertmode], 'Xtestout') 930 qall 931 [CODE] 932 if RunVim(before, after, '') 933 call assert_equal(['insertmode=1'], readfile('Xtestout')) 934 call delete('Xtestout') 935 endif 936endfunc 937 938" Test for enabling the binary mode on startup 939func Test_b_arg() 940 let after =<< trim [CODE] 941 call writefile(['binary=' .. &binary], 'Xtestout') 942 qall 943 [CODE] 944 if RunVim([], after, '-b') 945 call assert_equal(['binary=1'], readfile('Xtestout')) 946 call delete('Xtestout') 947 endif 948endfunc 949 950" Test for enabling the lisp mode on startup 951func Test_l_arg() 952 let after =<< trim [CODE] 953 let s = 'lisp=' .. &lisp .. ', showmatch=' .. &showmatch 954 call writefile([s], 'Xtestout') 955 qall 956 [CODE] 957 if RunVim([], after, '-l') 958 call assert_equal(['lisp=1, showmatch=1'], readfile('Xtestout')) 959 call delete('Xtestout') 960 endif 961endfunc 962 963" Test for specifying a non-existing vimrc file using "-u" 964func Test_missing_vimrc() 965 CheckRunVimInTerminal 966 let after =<< trim [CODE] 967 call assert_match('^E282:', v:errmsg) 968 call writefile(v:errors, 'Xtestout') 969 [CODE] 970 call writefile(after, 'Xafter') 971 972 let cmd = GetVimCommandCleanTerm() . ' -u Xvimrc_missing -S Xafter' 973 let buf = term_start(cmd, {'term_rows' : 10}) 974 call WaitForAssert({-> assert_equal("running", term_getstatus(buf))}) 975 call TermWait(buf) 976 call term_sendkeys(buf, "\n:") 977 call TermWait(buf) 978 call WaitForAssert({-> assert_match(':', term_getline(buf, 10))}) 979 call StopVimInTerminal(buf) 980 call assert_equal([], readfile('Xtestout')) 981 call delete('Xafter') 982 call delete('Xtestout') 983endfunc 984 985" Test for using the $VIMINIT environment variable 986func Test_VIMINIT() 987 let after =<< trim [CODE] 988 call assert_equal(1, exists('viminit_found')) 989 call assert_equal('yes', viminit_found) 990 call writefile(v:errors, 'Xtestout') 991 qall 992 [CODE] 993 call writefile(after, 'Xafter') 994 let cmd = GetVimProg() . ' --not-a-term -S Xafter --cmd "set enc=utf8"' 995 call setenv('VIMINIT', 'let viminit_found="yes"') 996 exe "silent !" . cmd 997 call assert_equal([], readfile('Xtestout')) 998 call delete('Xtestout') 999 call delete('Xafter') 1000endfunc 1001 1002" Test for using the $EXINIT environment variable 1003func Test_EXINIT() 1004 let after =<< trim [CODE] 1005 call assert_equal(1, exists('exinit_found')) 1006 call assert_equal('yes', exinit_found) 1007 call writefile(v:errors, 'Xtestout') 1008 qall 1009 [CODE] 1010 call writefile(after, 'Xafter') 1011 let cmd = GetVimProg() . ' --not-a-term -S Xafter --cmd "set enc=utf8"' 1012 call setenv('EXINIT', 'let exinit_found="yes"') 1013 exe "silent !" . cmd 1014 call assert_equal([], readfile('Xtestout')) 1015 call delete('Xtestout') 1016 call delete('Xafter') 1017endfunc 1018 1019" Test for using the 'exrc' option 1020func Test_exrc() 1021 let after =<< trim [CODE] 1022 call assert_equal(1, &exrc) 1023 call assert_equal(1, &secure) 1024 call assert_equal(37, exrc_found) 1025 call writefile(v:errors, 'Xtestout') 1026 qall 1027 [CODE] 1028 call mkdir('Xdir') 1029 call writefile(['let exrc_found=37'], 'Xdir/.exrc') 1030 call writefile(after, 'Xdir/Xafter') 1031 let cmd = GetVimProg() . ' --not-a-term -S Xafter --cmd "cd Xdir" --cmd "set enc=utf8 exrc secure"' 1032 exe "silent !" . cmd 1033 call assert_equal([], readfile('Xdir/Xtestout')) 1034 call delete('Xdir', 'rf') 1035endfunc 1036 1037" Test for starting Vim with a non-terminal as input/output 1038func Test_io_not_a_terminal() 1039 " Can't catch the output of gvim. 1040 CheckNotGui 1041 CheckUnix 1042 CheckEnglish 1043 let l = systemlist(GetVimProg() .. ' --ttyfail') 1044 call assert_equal(['Vim: Warning: Output is not to a terminal', 1045 \ 'Vim: Warning: Input is not from a terminal'], l) 1046endfunc 1047 1048" Test for --not-a-term avoiding escape codes. 1049func Test_not_a_term() 1050 CheckUnix 1051 CheckNotGui 1052 1053 if &shellredir =~ '%s' 1054 let redir = printf(&shellredir, 'Xvimout') 1055 else 1056 let redir = &shellredir .. ' Xvimout' 1057 endif 1058 1059 " Without --not-a-term there are a few escape sequences. 1060 " This will take 2 seconds because of the missing --not-a-term 1061 let cmd = GetVimProg() .. ' --cmd quit ' .. redir 1062 exe "silent !" . cmd 1063 call assert_match("\<Esc>", readfile('Xvimout')->join()) 1064 call delete('Xvimout') 1065 1066 " With --not-a-term there are no escape sequences. 1067 let cmd = GetVimProg() .. ' --not-a-term --cmd quit ' .. redir 1068 exe "silent !" . cmd 1069 call assert_notmatch("\<Esc>", readfile('Xvimout')->join()) 1070 call delete('Xvimout') 1071endfunc 1072 1073 1074" Test for the "-w scriptout" argument 1075func Test_w_arg() 1076 " Can't catch the output of gvim. 1077 CheckNotGui 1078 1079 call writefile(["iVim Editor\<Esc>:q!\<CR>"], 'Xscriptin', 'b') 1080 if RunVim([], [], '-s Xscriptin -w Xscriptout') 1081 call assert_equal(["iVim Editor\e:q!\r"], readfile('Xscriptout')) 1082 call delete('Xscriptout') 1083 endif 1084 call delete('Xscriptin') 1085 1086 " Test for failing to open the script output file. This test works only when 1087 " the language is English. 1088 if v:lang == "C" || v:lang =~ '^[Ee]n' 1089 call mkdir("Xdir") 1090 let m = system(GetVimCommand() .. " -w Xdir") 1091 call assert_equal("Cannot open for script output: \"Xdir\"\n", m) 1092 call delete("Xdir", 'rf') 1093 endif 1094 1095 " A number argument sets the 'window' option 1096 call writefile(["iwindow \<C-R>=&window\<CR>\<Esc>:wq! Xresult\<CR>"], 'Xscriptin', 'b') 1097 for w_arg in ['-w 17', '-w17'] 1098 if RunVim([], [], '-s Xscriptin ' .. w_arg) 1099 call assert_equal(["window 17"], readfile('Xresult'), w_arg) 1100 call delete('Xresult') 1101 endif 1102 endfor 1103 call delete('Xscriptin') 1104endfunc 1105 1106" Test for the "-s scriptin" argument 1107func Test_s_arg() 1108 " Can't catch the output of gvim. 1109 CheckNotGui 1110 CheckEnglish 1111 " Test for failing to open the script input file. 1112 let m = system(GetVimCommand() .. " -s abcxyz") 1113 call assert_equal("Cannot open for reading: \"abcxyz\"\n", m) 1114 1115 call writefile([], 'Xinput') 1116 let m = system(GetVimCommand() .. " -s Xinput -s Xinput") 1117 call assert_equal("Attempt to open script file again: \"-s Xinput\"\n", m) 1118 call delete('Xinput') 1119endfunc 1120 1121" Test for the "-n" (no swap file) argument 1122func Test_n_arg() 1123 let after =<< trim [CODE] 1124 call assert_equal(0, &updatecount) 1125 call writefile(v:errors, 'Xtestout') 1126 qall 1127 [CODE] 1128 if RunVim([], after, '-n') 1129 call assert_equal([], readfile('Xtestout')) 1130 call delete('Xtestout') 1131 endif 1132endfunc 1133 1134" Test for the "-h" (help) argument 1135func Test_h_arg() 1136 " Can't catch the output of gvim. 1137 CheckNotGui 1138 let l = systemlist(GetVimProg() .. ' -h') 1139 call assert_match('^VIM - Vi IMproved', l[0]) 1140 let l = systemlist(GetVimProg() .. ' -?') 1141 call assert_match('^VIM - Vi IMproved', l[0]) 1142endfunc 1143 1144" Test for the "-F" (farsi) argument 1145func Test_F_arg() 1146 " Can't catch the output of gvim. 1147 CheckNotGui 1148 let l = systemlist(GetVimProg() .. ' -F') 1149 call assert_match('^E27:', l[0]) 1150endfunc 1151 1152" Test for the "-E" (improved Ex mode) argument 1153func Test_E_arg() 1154 let after =<< trim [CODE] 1155 call assert_equal('cv', mode(1)) 1156 call writefile(v:errors, 'Xtestout') 1157 qall 1158 [CODE] 1159 if RunVim([], after, '-E') 1160 call assert_equal([], readfile('Xtestout')) 1161 call delete('Xtestout') 1162 endif 1163endfunc 1164 1165" Test for the "-D" (debugger) argument 1166func Test_D_arg() 1167 CheckRunVimInTerminal 1168 1169 let cmd = GetVimCommandCleanTerm() .. ' -D' 1170 let buf = term_start(cmd, {'term_rows' : 10}) 1171 call WaitForAssert({-> assert_equal("running", term_getstatus(buf))}) 1172 1173 call WaitForAssert({-> assert_equal('Entering Debug mode. Type "cont" to continue.', 1174 \ term_getline(buf, 7))}) 1175 call WaitForAssert({-> assert_equal('>', term_getline(buf, 10))}) 1176 1177 call StopVimInTerminal(buf) 1178endfunc 1179 1180" Test for too many edit argument errors 1181func Test_too_many_edit_args() 1182 " Can't catch the output of gvim. 1183 CheckNotGui 1184 CheckEnglish 1185 let l = systemlist(GetVimProg() .. ' - -') 1186 call assert_match('^Too many edit arguments: "-"', l[1]) 1187endfunc 1188 1189" Test starting vim with various names: vim, ex, view, evim, etc. 1190func Test_progname() 1191 CheckUnix 1192 1193 call mkdir('Xprogname', 'p') 1194 call writefile(['silent !date', 1195 \ 'call writefile([mode(1), ' 1196 \ .. '&insertmode, &diff, &readonly, &updatecount, ' 1197 \ .. 'join(split(execute("message"), "\n")[1:])], "Xprogname_out")', 1198 \ 'qall'], 'Xprogname_after') 1199 1200 " +---------------------------------------------- progname 1201 " | +--------------------------------- mode(1) 1202 " | | +--------------------------- &insertmode 1203 " | | | +---------------------- &diff 1204 " | | | | +----------------- &readonly 1205 " | | | | | +-------- &updatecount 1206 " | | | | | | +--- :messages 1207 " | | | | | | | 1208 let expectations = { 1209 \ 'vim': ['n', '0', '0', '0', '200', ''], 1210 \ 'gvim': ['n', '0', '0', '0', '200', ''], 1211 \ 'ex': ['ce', '0', '0', '0', '200', ''], 1212 \ 'exim': ['cv', '0', '0', '0', '200', ''], 1213 \ 'view': ['n', '0', '0', '1', '10000', ''], 1214 \ 'gview': ['n', '0', '0', '1', '10000', ''], 1215 \ 'evim': ['n', '1', '0', '0', '200', ''], 1216 \ 'eview': ['n', '1', '0', '1', '10000', ''], 1217 \ 'rvim': ['n', '0', '0', '0', '200', 'line 1: E145: Shell commands and some functionality not allowed in rvim'], 1218 \ 'rgvim': ['n', '0', '0', '0', '200', 'line 1: E145: Shell commands and some functionality not allowed in rvim'], 1219 \ 'rview': ['n', '0', '0', '1', '10000', 'line 1: E145: Shell commands and some functionality not allowed in rvim'], 1220 \ 'rgview': ['n', '0', '0', '1', '10000', 'line 1: E145: Shell commands and some functionality not allowed in rvim'], 1221 \ 'vimdiff': ['n', '0', '1', '0', '200', ''], 1222 \ 'gvimdiff': ['n', '0', '1', '0', '200', '']} 1223 1224 let prognames = ['vim', 'gvim', 'ex', 'exim', 'view', 'gview', 1225 \ 'evim', 'eview', 'rvim', 'rgvim', 'rview', 'rgview', 1226 \ 'vimdiff', 'gvimdiff'] 1227 1228 for progname in prognames 1229 let run_with_gui = (progname =~# 'g') || (has('gui') && (progname ==# 'evim' || progname ==# 'eview')) 1230 1231 if empty($DISPLAY) && run_with_gui 1232 " Can't run gvim, gview (etc.) if $DISPLAY is not setup. 1233 continue 1234 endif 1235 1236 exe 'silent !ln -s -f ' ..exepath(GetVimProg()) .. ' Xprogname/' .. progname 1237 1238 let stdout_stderr = '' 1239 if progname =~# 'g' 1240 let stdout_stderr = system('Xprogname/'..progname..' -f --clean --not-a-term -S Xprogname_after') 1241 else 1242 exe 'sil !Xprogname/'..progname..' -f --clean --not-a-term -S Xprogname_after' 1243 endif 1244 1245 if progname =~# 'g' && !has('gui') 1246 call assert_equal("E25: GUI cannot be used: Not enabled at compile time\n", stdout_stderr, progname) 1247 else 1248 " GUI motif can output some warnings like this: 1249 " Warning: 1250 " Name: subMenu 1251 " Class: XmCascadeButton 1252 " Illegal mnemonic character; Could not convert X KEYSYM to a keycode 1253 " So don't check that stderr is empty with GUI Motif. 1254 if run_with_gui && !has('gui_motif') 1255 call assert_equal('', stdout_stderr, progname) 1256 endif 1257 call assert_equal(expectations[progname], readfile('Xprogname_out'), progname) 1258 endif 1259 1260 call delete('Xprogname/' .. progname) 1261 call delete('Xprogname_out') 1262 endfor 1263 1264 call delete('Xprogname_after') 1265 call delete('Xprogname', 'd') 1266endfunc 1267 1268" Test for doing a write from .vimrc 1269func Test_write_in_vimrc() 1270 call writefile(['silent! write'], 'Xvimrc') 1271 let after =<< trim [CODE] 1272 call assert_match('E32: ', v:errmsg) 1273 call writefile(v:errors, 'Xtestout') 1274 qall 1275 [CODE] 1276 if RunVim([], after, '-u Xvimrc') 1277 call assert_equal([], readfile('Xtestout')) 1278 call delete('Xtestout') 1279 endif 1280 call delete('Xvimrc') 1281endfunc 1282 1283func Test_echo_true_in_cmd() 1284 CheckNotGui 1285 1286 let lines =<< trim END 1287 echo v:true 1288 call writefile(['done'], 'Xresult') 1289 quit 1290 END 1291 call writefile(lines, 'Xscript') 1292 if RunVim([], [], '--cmd "source Xscript"') 1293 call assert_equal(['done'], readfile('Xresult')) 1294 endif 1295 call delete('Xscript') 1296 call delete('Xresult') 1297endfunc 1298 1299" vim: shiftwidth=2 sts=2 expandtab 1300