1cfe435d7SBram Moolenaar" Test commands that are not compiled in a :def function 2cfe435d7SBram Moolenaar 36378c4feSBram Moolenaarsource check.vim 4cfe435d7SBram Moolenaarsource vim9.vim 5e88c8e80SBram Moolenaarsource term_util.vim 6e9f262bdSBram Moolenaarsource view_util.vim 7cfe435d7SBram Moolenaar 839f3b141SBram Moolenaardef Test_vim9cmd() 939f3b141SBram Moolenaar var lines =<< trim END 1039f3b141SBram Moolenaar vim9cmd var x = 123 1139f3b141SBram Moolenaar let s:y = 'yes' 1239f3b141SBram Moolenaar vim9c assert_equal(123, x) 1339f3b141SBram Moolenaar vim9cm assert_equal('yes', y) 1439f3b141SBram Moolenaar END 1539f3b141SBram Moolenaar CheckScriptSuccess(lines) 16dd9de50fSBram Moolenaar 176d37e8e3SDominique Pelle assert_fails('vim9cmd', 'E1164:') 18dd9de50fSBram Moolenaar assert_fails('legacy', 'E1234:') 192596a4e7SBram Moolenaar assert_fails('vim9cmd echo "con" . "cat"', 'E15:') 20678b207fSBram Moolenaar 21678b207fSBram Moolenaar lines =<< trim END 22dd9de50fSBram Moolenaar let str = 'con' 23dd9de50fSBram Moolenaar vim9cmd str .= 'cat' 24dd9de50fSBram Moolenaar END 25dd9de50fSBram Moolenaar CheckScriptFailure(lines, 'E492:') 26dd9de50fSBram Moolenaar 27dd9de50fSBram Moolenaar lines =<< trim END 28dd9de50fSBram Moolenaar vim9script 29dd9de50fSBram Moolenaar legacy echo "con" . "cat" 30dd9de50fSBram Moolenaar legacy let str = 'con' 31dd9de50fSBram Moolenaar legacy let str .= 'cat' 32dd9de50fSBram Moolenaar END 33dd9de50fSBram Moolenaar CheckScriptSuccess(lines) 34dd9de50fSBram Moolenaar 35dd9de50fSBram Moolenaar lines =<< trim END 36678b207fSBram Moolenaar vim9script 37678b207fSBram Moolenaar def Foo() 38678b207fSBram Moolenaar g:found_bar = "bar" 39678b207fSBram Moolenaar enddef 40678b207fSBram Moolenaar nmap ,; :vim9cmd <SID>Foo()<CR> 41678b207fSBram Moolenaar END 42678b207fSBram Moolenaar CheckScriptSuccess(lines) 43dd9de50fSBram Moolenaar 44678b207fSBram Moolenaar feedkeys(',;', 'xt') 45678b207fSBram Moolenaar assert_equal("bar", g:found_bar) 46678b207fSBram Moolenaar nunmap ,; 47678b207fSBram Moolenaar unlet g:found_bar 48dd9de50fSBram Moolenaar 49dd9de50fSBram Moolenaar lines =<< trim END 50dd9de50fSBram Moolenaar vim9script 51dd9de50fSBram Moolenaar legacy echo 1'000 52dd9de50fSBram Moolenaar END 53dd9de50fSBram Moolenaar CheckScriptFailure(lines, 'E115:') 54dd9de50fSBram Moolenaar 55dd9de50fSBram Moolenaar if has('float') 56dd9de50fSBram Moolenaar lines =<< trim END 57dd9de50fSBram Moolenaar vim9script 58dd9de50fSBram Moolenaar echo .10 59dd9de50fSBram Moolenaar END 60dd9de50fSBram Moolenaar CheckScriptSuccess(lines) 61dd9de50fSBram Moolenaar lines =<< trim END 62dd9de50fSBram Moolenaar vim9cmd echo .10 63dd9de50fSBram Moolenaar END 64dd9de50fSBram Moolenaar CheckScriptSuccess(lines) 65dd9de50fSBram Moolenaar lines =<< trim END 66dd9de50fSBram Moolenaar vim9script 67dd9de50fSBram Moolenaar legacy echo .10 68dd9de50fSBram Moolenaar END 69dd9de50fSBram Moolenaar CheckScriptFailure(lines, 'E15:') 70dd9de50fSBram Moolenaar endif 71dd9de50fSBram Moolenaar 72dd9de50fSBram Moolenaar echo v:version 73dd9de50fSBram Moolenaar assert_fails('vim9cmd echo version', 'E121:') 74dd9de50fSBram Moolenaar lines =<< trim END 75dd9de50fSBram Moolenaar vim9script 76dd9de50fSBram Moolenaar echo version 77dd9de50fSBram Moolenaar END 78dd9de50fSBram Moolenaar CheckScriptFailure(lines, 'E121:') 79dd9de50fSBram Moolenaar lines =<< trim END 80dd9de50fSBram Moolenaar vim9script 81dd9de50fSBram Moolenaar legacy echo version 82dd9de50fSBram Moolenaar END 83dd9de50fSBram Moolenaar CheckScriptSuccess(lines) 8439f3b141SBram Moolenaarenddef 8539f3b141SBram Moolenaar 86cfe435d7SBram Moolenaardef Test_edit_wildcards() 87ac564082SBram Moolenaar var filename = 'Xtest' 88cfe435d7SBram Moolenaar edit `=filename` 89cfe435d7SBram Moolenaar assert_equal('Xtest', bufname()) 90cfe435d7SBram Moolenaar 91ac564082SBram Moolenaar var filenr = 123 92cfe435d7SBram Moolenaar edit Xtest`=filenr` 93cfe435d7SBram Moolenaar assert_equal('Xtest123', bufname()) 94cfe435d7SBram Moolenaar 95cfe435d7SBram Moolenaar filenr = 77 96cfe435d7SBram Moolenaar edit `=filename``=filenr` 97cfe435d7SBram Moolenaar assert_equal('Xtest77', bufname()) 98cfe435d7SBram Moolenaar 99cfe435d7SBram Moolenaar edit X`=filename`xx`=filenr`yy 100cfe435d7SBram Moolenaar assert_equal('XXtestxx77yy', bufname()) 101025cb1caSBram Moolenaar 102025cb1caSBram Moolenaar CheckDefFailure(['edit `=xxx`'], 'E1001:') 103025cb1caSBram Moolenaar CheckDefFailure(['edit `="foo"'], 'E1083:') 104b288ba9fSBram Moolenaar 105b288ba9fSBram Moolenaar var files = ['file 1', 'file%2', 'file# 3'] 106b288ba9fSBram Moolenaar args `=files` 107b288ba9fSBram Moolenaar assert_equal(files, argv()) 108cfe435d7SBram Moolenaarenddef 109cfe435d7SBram Moolenaar 1104389f9cdSBram Moolenaardef Test_expand_alternate_file() 1114389f9cdSBram Moolenaar var lines =<< trim END 1124389f9cdSBram Moolenaar edit Xfileone 1134389f9cdSBram Moolenaar var bone = bufnr() 1144389f9cdSBram Moolenaar edit Xfiletwo 1154389f9cdSBram Moolenaar var btwo = bufnr() 1164389f9cdSBram Moolenaar edit Xfilethree 1174389f9cdSBram Moolenaar var bthree = bufnr() 1184389f9cdSBram Moolenaar 1194389f9cdSBram Moolenaar edit # 1204389f9cdSBram Moolenaar assert_equal(bthree, bufnr()) 1214389f9cdSBram Moolenaar edit %% 1224389f9cdSBram Moolenaar assert_equal(btwo, bufnr()) 1234389f9cdSBram Moolenaar edit %% # comment 1244389f9cdSBram Moolenaar assert_equal(bthree, bufnr()) 1254389f9cdSBram Moolenaar edit %%yy 1264389f9cdSBram Moolenaar assert_equal('Xfiletwoyy', bufname()) 1274389f9cdSBram Moolenaar 1284389f9cdSBram Moolenaar exe "edit %%" .. bone 1294389f9cdSBram Moolenaar assert_equal(bone, bufnr()) 1304389f9cdSBram Moolenaar exe "edit %%" .. btwo .. "xx" 1314389f9cdSBram Moolenaar assert_equal('Xfiletwoxx', bufname()) 1324389f9cdSBram Moolenaar 1334389f9cdSBram Moolenaar next Xfileone Xfiletwo Xfilethree 1344389f9cdSBram Moolenaar assert_equal('Xfileone', argv(0)) 1354389f9cdSBram Moolenaar assert_equal('Xfiletwo', argv(1)) 1364389f9cdSBram Moolenaar assert_equal('Xfilethree', argv(2)) 1374389f9cdSBram Moolenaar next %%%zz 1384389f9cdSBram Moolenaar assert_equal('Xfileone', argv(0)) 1394389f9cdSBram Moolenaar assert_equal('Xfiletwo', argv(1)) 1404389f9cdSBram Moolenaar assert_equal('Xfilethreezz', argv(2)) 1414389f9cdSBram Moolenaar 1424389f9cdSBram Moolenaar v:oldfiles = ['Xonefile', 'Xtwofile'] 1434389f9cdSBram Moolenaar edit %%<1 1444389f9cdSBram Moolenaar assert_equal('Xonefile', bufname()) 1454389f9cdSBram Moolenaar edit %%<2 1464389f9cdSBram Moolenaar assert_equal('Xtwofile', bufname()) 1474389f9cdSBram Moolenaar assert_fails('edit %%<3', 'E684:') 1484389f9cdSBram Moolenaar 1494389f9cdSBram Moolenaar edit Xfileone.vim 1504389f9cdSBram Moolenaar edit Xfiletwo 1514389f9cdSBram Moolenaar edit %%:r 1524389f9cdSBram Moolenaar assert_equal('Xfileone', bufname()) 153dfbc5fd8SBram Moolenaar 154dfbc5fd8SBram Moolenaar assert_false(bufexists('altfoo')) 155dfbc5fd8SBram Moolenaar edit altfoo 156dfbc5fd8SBram Moolenaar edit bar 157dfbc5fd8SBram Moolenaar assert_true(bufexists('altfoo')) 158dfbc5fd8SBram Moolenaar assert_true(buflisted('altfoo')) 159dfbc5fd8SBram Moolenaar bdel %% 160dfbc5fd8SBram Moolenaar assert_true(bufexists('altfoo')) 161dfbc5fd8SBram Moolenaar assert_false(buflisted('altfoo')) 162dfbc5fd8SBram Moolenaar bwipe! altfoo 163dfbc5fd8SBram Moolenaar bwipe! bar 1644389f9cdSBram Moolenaar END 1654389f9cdSBram Moolenaar CheckDefAndScriptSuccess(lines) 1664389f9cdSBram Moolenaarenddef 1674389f9cdSBram Moolenaar 16856ce9ea3SBram Moolenaardef Test_global_backtick_expansion() 16956ce9ea3SBram Moolenaar new 17056ce9ea3SBram Moolenaar setline(1, 'xx') 17156ce9ea3SBram Moolenaar var name = 'foobar' 17256ce9ea3SBram Moolenaar g/^xx/s/.*/`=name` 17356ce9ea3SBram Moolenaar assert_equal('foobar', getline(1)) 17456ce9ea3SBram Moolenaar bwipe! 17556ce9ea3SBram Moolenaarenddef 17656ce9ea3SBram Moolenaar 177ecac591cSBram Moolenaardef Test_folddo_backtick_expansion() 178ecac591cSBram Moolenaar new 179ecac591cSBram Moolenaar var name = 'xxx' 180ecac591cSBram Moolenaar folddoopen edit `=name` 181ecac591cSBram Moolenaar assert_equal('xxx', bufname()) 182ecac591cSBram Moolenaar bwipe! 183ecac591cSBram Moolenaar 184ecac591cSBram Moolenaar new 185ecac591cSBram Moolenaar setline(1, ['one', 'two']) 186ecac591cSBram Moolenaar set nomodified 187ecac591cSBram Moolenaar :1,2fold 188ecac591cSBram Moolenaar foldclose 189ecac591cSBram Moolenaar folddoclose edit `=name` 190ecac591cSBram Moolenaar assert_equal('xxx', bufname()) 191ecac591cSBram Moolenaar bwipe! 192ecac591cSBram Moolenaarenddef 193ecac591cSBram Moolenaar 1946378c4feSBram Moolenaardef Test_hardcopy_wildcards() 1956378c4feSBram Moolenaar CheckUnix 1966378c4feSBram Moolenaar CheckFeature postscript 1976378c4feSBram Moolenaar 198ac564082SBram Moolenaar var outfile = 'print' 1996378c4feSBram Moolenaar hardcopy > X`=outfile`.ps 2006378c4feSBram Moolenaar assert_true(filereadable('Xprint.ps')) 2016378c4feSBram Moolenaar 2026378c4feSBram Moolenaar delete('Xprint.ps') 2036378c4feSBram Moolenaarenddef 2046378c4feSBram Moolenaar 2056378c4feSBram Moolenaardef Test_syn_include_wildcards() 2066378c4feSBram Moolenaar writefile(['syn keyword Found found'], 'Xthemine.vim') 207ac564082SBram Moolenaar var save_rtp = &rtp 2086378c4feSBram Moolenaar &rtp = '.' 2096378c4feSBram Moolenaar 210ac564082SBram Moolenaar var fname = 'mine' 2116378c4feSBram Moolenaar syn include @Group Xthe`=fname`.vim 2126378c4feSBram Moolenaar assert_match('Found.* contained found', execute('syn list Found')) 2136378c4feSBram Moolenaar 2146378c4feSBram Moolenaar &rtp = save_rtp 2156378c4feSBram Moolenaar delete('Xthemine.vim') 2166378c4feSBram Moolenaarenddef 2176378c4feSBram Moolenaar 2187e8967fdSBram Moolenaardef Test_echo_linebreak() 219ac564082SBram Moolenaar var lines =<< trim END 2207e8967fdSBram Moolenaar vim9script 2217e8967fdSBram Moolenaar redir @a 2227e8967fdSBram Moolenaar echo 'one' 2237e8967fdSBram Moolenaar .. 'two' 2247e8967fdSBram Moolenaar redir END 2257e8967fdSBram Moolenaar assert_equal("\nonetwo", @a) 2267e8967fdSBram Moolenaar END 2277e8967fdSBram Moolenaar CheckScriptSuccess(lines) 2287e8967fdSBram Moolenaar 2297e8967fdSBram Moolenaar lines =<< trim END 2307e8967fdSBram Moolenaar vim9script 2317e8967fdSBram Moolenaar redir @a 2327e8967fdSBram Moolenaar echo 11 + 2337e8967fdSBram Moolenaar 77 2347e8967fdSBram Moolenaar - 22 2357e8967fdSBram Moolenaar redir END 2367e8967fdSBram Moolenaar assert_equal("\n66", @a) 2377e8967fdSBram Moolenaar END 2387e8967fdSBram Moolenaar CheckScriptSuccess(lines) 2397e8967fdSBram Moolenaarenddef 2407e8967fdSBram Moolenaar 24113106605SBram Moolenaardef Test_condition_types() 24213106605SBram Moolenaar var lines =<< trim END 24313106605SBram Moolenaar if 'text' 24413106605SBram Moolenaar endif 24513106605SBram Moolenaar END 246ea2d407fSBram Moolenaar CheckDefAndScriptFailure(lines, 'E1135:', 1) 24713106605SBram Moolenaar 24813106605SBram Moolenaar lines =<< trim END 24913106605SBram Moolenaar if [1] 25013106605SBram Moolenaar endif 25113106605SBram Moolenaar END 25213106605SBram Moolenaar CheckDefFailure(lines, 'E1012:', 1) 25313106605SBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E745:', 2) 25413106605SBram Moolenaar 25513106605SBram Moolenaar lines =<< trim END 25613106605SBram Moolenaar g:cond = 'text' 25713106605SBram Moolenaar if g:cond 25813106605SBram Moolenaar endif 25913106605SBram Moolenaar END 260ea2d407fSBram Moolenaar CheckDefExecAndScriptFailure(lines, 'E1135:', 2) 26113106605SBram Moolenaar 26213106605SBram Moolenaar lines =<< trim END 26313106605SBram Moolenaar g:cond = 0 26413106605SBram Moolenaar if g:cond 26513106605SBram Moolenaar elseif 'text' 26613106605SBram Moolenaar endif 26713106605SBram Moolenaar END 26813106605SBram Moolenaar CheckDefFailure(lines, 'E1012:', 3) 269ea2d407fSBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E1135:', 4) 27013106605SBram Moolenaar 27113106605SBram Moolenaar lines =<< trim END 27213106605SBram Moolenaar if g:cond 27313106605SBram Moolenaar elseif [1] 27413106605SBram Moolenaar endif 27513106605SBram Moolenaar END 27613106605SBram Moolenaar CheckDefFailure(lines, 'E1012:', 2) 27713106605SBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E745:', 3) 27813106605SBram Moolenaar 27913106605SBram Moolenaar lines =<< trim END 28013106605SBram Moolenaar g:cond = 'text' 28113106605SBram Moolenaar if 0 28213106605SBram Moolenaar elseif g:cond 28313106605SBram Moolenaar endif 28413106605SBram Moolenaar END 285ea2d407fSBram Moolenaar CheckDefExecAndScriptFailure(lines, 'E1135:', 3) 28613106605SBram Moolenaar 28713106605SBram Moolenaar lines =<< trim END 28813106605SBram Moolenaar while 'text' 28913106605SBram Moolenaar endwhile 29013106605SBram Moolenaar END 29113106605SBram Moolenaar CheckDefFailure(lines, 'E1012:', 1) 292ea2d407fSBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E1135:', 2) 29313106605SBram Moolenaar 29413106605SBram Moolenaar lines =<< trim END 29513106605SBram Moolenaar while [1] 29613106605SBram Moolenaar endwhile 29713106605SBram Moolenaar END 29813106605SBram Moolenaar CheckDefFailure(lines, 'E1012:', 1) 29913106605SBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E745:', 2) 30013106605SBram Moolenaar 30113106605SBram Moolenaar lines =<< trim END 30213106605SBram Moolenaar g:cond = 'text' 30313106605SBram Moolenaar while g:cond 30413106605SBram Moolenaar endwhile 30513106605SBram Moolenaar END 306ea2d407fSBram Moolenaar CheckDefExecAndScriptFailure(lines, 'E1135:', 2) 30713106605SBram Moolenaarenddef 30813106605SBram Moolenaar 309faf8626bSBram Moolenaardef Test_if_linebreak() 310ac564082SBram Moolenaar var lines =<< trim END 311faf8626bSBram Moolenaar vim9script 312faf8626bSBram Moolenaar if 1 && 3132bb2658bSBram Moolenaar true 3142bb2658bSBram Moolenaar || 1 315faf8626bSBram Moolenaar g:res = 42 316faf8626bSBram Moolenaar endif 317faf8626bSBram Moolenaar assert_equal(42, g:res) 318faf8626bSBram Moolenaar END 319faf8626bSBram Moolenaar CheckScriptSuccess(lines) 320faf8626bSBram Moolenaar unlet g:res 321faf8626bSBram Moolenaar 322faf8626bSBram Moolenaar lines =<< trim END 323faf8626bSBram Moolenaar vim9script 324faf8626bSBram Moolenaar if 1 && 325faf8626bSBram Moolenaar 0 326faf8626bSBram Moolenaar g:res = 0 327faf8626bSBram Moolenaar elseif 0 || 328faf8626bSBram Moolenaar 0 329faf8626bSBram Moolenaar || 1 330faf8626bSBram Moolenaar g:res = 12 331faf8626bSBram Moolenaar endif 332faf8626bSBram Moolenaar assert_equal(12, g:res) 333faf8626bSBram Moolenaar END 334faf8626bSBram Moolenaar CheckScriptSuccess(lines) 335faf8626bSBram Moolenaar unlet g:res 336faf8626bSBram Moolenaarenddef 337faf8626bSBram Moolenaar 338faf8626bSBram Moolenaardef Test_while_linebreak() 339ac564082SBram Moolenaar var lines =<< trim END 340faf8626bSBram Moolenaar vim9script 341ac564082SBram Moolenaar var nr = 0 342d5053d01SBram Moolenaar while nr < 343d5053d01SBram Moolenaar 10 + 3 344d5053d01SBram Moolenaar nr = nr 345d5053d01SBram Moolenaar + 4 346d5053d01SBram Moolenaar endwhile 347d5053d01SBram Moolenaar assert_equal(16, nr) 348d5053d01SBram Moolenaar END 349d5053d01SBram Moolenaar CheckScriptSuccess(lines) 350d5053d01SBram Moolenaar 351d5053d01SBram Moolenaar lines =<< trim END 352d5053d01SBram Moolenaar vim9script 353ac564082SBram Moolenaar var nr = 0 354d5053d01SBram Moolenaar while nr 355d5053d01SBram Moolenaar < 356d5053d01SBram Moolenaar 10 357d5053d01SBram Moolenaar + 358d5053d01SBram Moolenaar 3 359d5053d01SBram Moolenaar nr = nr 360d5053d01SBram Moolenaar + 361d5053d01SBram Moolenaar 4 362faf8626bSBram Moolenaar endwhile 363faf8626bSBram Moolenaar assert_equal(16, nr) 364faf8626bSBram Moolenaar END 365faf8626bSBram Moolenaar CheckScriptSuccess(lines) 366faf8626bSBram Moolenaarenddef 367cfe435d7SBram Moolenaar 368b7a78f7aSBram Moolenaardef Test_for_linebreak() 369ac564082SBram Moolenaar var lines =<< trim END 370b7a78f7aSBram Moolenaar vim9script 371ac564082SBram Moolenaar var nr = 0 372b7a78f7aSBram Moolenaar for x 373b7a78f7aSBram Moolenaar in 374b7a78f7aSBram Moolenaar [1, 2, 3, 4] 375b7a78f7aSBram Moolenaar nr = nr + x 376b7a78f7aSBram Moolenaar endfor 377b7a78f7aSBram Moolenaar assert_equal(10, nr) 378b7a78f7aSBram Moolenaar END 379b7a78f7aSBram Moolenaar CheckScriptSuccess(lines) 380b7a78f7aSBram Moolenaar 381b7a78f7aSBram Moolenaar lines =<< trim END 382b7a78f7aSBram Moolenaar vim9script 383ac564082SBram Moolenaar var nr = 0 384b7a78f7aSBram Moolenaar for x 385b7a78f7aSBram Moolenaar in 386b7a78f7aSBram Moolenaar [1, 2, 387b7a78f7aSBram Moolenaar 3, 4 388b7a78f7aSBram Moolenaar ] 389b7a78f7aSBram Moolenaar nr = nr 390b7a78f7aSBram Moolenaar + 391b7a78f7aSBram Moolenaar x 392b7a78f7aSBram Moolenaar endfor 393b7a78f7aSBram Moolenaar assert_equal(10, nr) 394b7a78f7aSBram Moolenaar END 395b7a78f7aSBram Moolenaar CheckScriptSuccess(lines) 396b7a78f7aSBram Moolenaarenddef 397b7a78f7aSBram Moolenaar 398e0890d67SBram Moolenaardef MethodAfterLinebreak(arg: string) 399e0890d67SBram Moolenaar arg 400e0890d67SBram Moolenaar ->setline(1) 401e0890d67SBram Moolenaarenddef 402e0890d67SBram Moolenaar 403d2ef6b32SBram Moolenaardef Test_method_call_linebreak() 404ac564082SBram Moolenaar var lines =<< trim END 4055f195938SBram Moolenaar vim9script 406ac564082SBram Moolenaar var res = [] 4075f195938SBram Moolenaar func RetArg( 4085f195938SBram Moolenaar arg 4095f195938SBram Moolenaar ) 4105f195938SBram Moolenaar let s:res = a:arg 4115f195938SBram Moolenaar endfunc 4125f195938SBram Moolenaar [1, 4135f195938SBram Moolenaar 2, 4145f195938SBram Moolenaar 3]->RetArg() 4155f195938SBram Moolenaar assert_equal([1, 2, 3], res) 4165f195938SBram Moolenaar END 4175f195938SBram Moolenaar CheckScriptSuccess(lines) 418148be9bcSBram Moolenaar 419148be9bcSBram Moolenaar lines =<< trim END 420148be9bcSBram Moolenaar new 421148be9bcSBram Moolenaar var name = [1, 2] 422148be9bcSBram Moolenaar name 423148be9bcSBram Moolenaar ->copy() 424148be9bcSBram Moolenaar ->setline(1) 425148be9bcSBram Moolenaar assert_equal(['1', '2'], getline(1, 2)) 426148be9bcSBram Moolenaar bwipe! 427148be9bcSBram Moolenaar END 428148be9bcSBram Moolenaar CheckDefAndScriptSuccess(lines) 429148be9bcSBram Moolenaar 430148be9bcSBram Moolenaar lines =<< trim END 431148be9bcSBram Moolenaar new 4326914e87dSBram Moolenaar def Foo(): string 4336914e87dSBram Moolenaar return 'the text' 4346914e87dSBram Moolenaar enddef 4356914e87dSBram Moolenaar def Bar(F: func): string 4366914e87dSBram Moolenaar return F() 4376914e87dSBram Moolenaar enddef 4386914e87dSBram Moolenaar def Test() 43977b10ffaSBram Moolenaar Foo ->Bar() 4406914e87dSBram Moolenaar ->setline(1) 4416914e87dSBram Moolenaar enddef 4426914e87dSBram Moolenaar Test() 4436914e87dSBram Moolenaar assert_equal('the text', getline(1)) 4446914e87dSBram Moolenaar bwipe! 4456914e87dSBram Moolenaar END 4466914e87dSBram Moolenaar CheckDefAndScriptSuccess(lines) 4476914e87dSBram Moolenaar 4486914e87dSBram Moolenaar lines =<< trim END 4496914e87dSBram Moolenaar new 450148be9bcSBram Moolenaar g:shortlist 451148be9bcSBram Moolenaar ->copy() 452148be9bcSBram Moolenaar ->setline(1) 453148be9bcSBram Moolenaar assert_equal(['1', '2'], getline(1, 2)) 454148be9bcSBram Moolenaar bwipe! 455148be9bcSBram Moolenaar END 456148be9bcSBram Moolenaar g:shortlist = [1, 2] 457148be9bcSBram Moolenaar CheckDefAndScriptSuccess(lines) 458148be9bcSBram Moolenaar unlet g:shortlist 459e0890d67SBram Moolenaar 460e0890d67SBram Moolenaar new 461e0890d67SBram Moolenaar MethodAfterLinebreak('foobar') 462e0890d67SBram Moolenaar assert_equal('foobar', getline(1)) 463e0890d67SBram Moolenaar bwipe! 4642e2d7589SBram Moolenaar 4652e2d7589SBram Moolenaar lines =<< trim END 4662e2d7589SBram Moolenaar vim9script 4672e2d7589SBram Moolenaar def Foo(): string 4682e2d7589SBram Moolenaar return '# some text' 4692e2d7589SBram Moolenaar enddef 4702e2d7589SBram Moolenaar 4712e2d7589SBram Moolenaar def Bar(F: func): string 4722e2d7589SBram Moolenaar return F() 4732e2d7589SBram Moolenaar enddef 4742e2d7589SBram Moolenaar 47577b10ffaSBram Moolenaar Foo->Bar() 4762e2d7589SBram Moolenaar ->setline(1) 4772e2d7589SBram Moolenaar END 4782e2d7589SBram Moolenaar CheckScriptSuccess(lines) 4792e2d7589SBram Moolenaar assert_equal('# some text', getline(1)) 4802e2d7589SBram Moolenaar bwipe! 4815f195938SBram Moolenaarenddef 4825f195938SBram Moolenaar 4837cebe8baSBram Moolenaardef Test_method_call_whitespace() 4847cebe8baSBram Moolenaar var lines =<< trim END 4857cebe8baSBram Moolenaar new 4867cebe8baSBram Moolenaar var yank = 'text' 4877cebe8baSBram Moolenaar yank->setline(1) 4887cebe8baSBram Moolenaar yank ->setline(2) 4897cebe8baSBram Moolenaar yank-> setline(3) 4907cebe8baSBram Moolenaar yank -> setline(4) 4917cebe8baSBram Moolenaar assert_equal(['text', 'text', 'text', 'text'], getline(1, 4)) 4927cebe8baSBram Moolenaar bwipe! 4937cebe8baSBram Moolenaar END 4947cebe8baSBram Moolenaar CheckDefAndScriptSuccess(lines) 4957cebe8baSBram Moolenaarenddef 4967cebe8baSBram Moolenaar 49777b10ffaSBram Moolenaardef Test_method_and_user_command() 49877b10ffaSBram Moolenaar var lines =<< trim END 49977b10ffaSBram Moolenaar vim9script 50077b10ffaSBram Moolenaar def Cmd() 50177b10ffaSBram Moolenaar g:didFunc = 1 50277b10ffaSBram Moolenaar enddef 50377b10ffaSBram Moolenaar command Cmd g:didCmd = 1 50477b10ffaSBram Moolenaar Cmd 50577b10ffaSBram Moolenaar assert_equal(1, g:didCmd) 50677b10ffaSBram Moolenaar Cmd() 50777b10ffaSBram Moolenaar assert_equal(1, g:didFunc) 50877b10ffaSBram Moolenaar unlet g:didFunc 50977b10ffaSBram Moolenaar unlet g:didCmd 51077b10ffaSBram Moolenaar 51177b10ffaSBram Moolenaar def InDefFunc() 51277b10ffaSBram Moolenaar Cmd 51377b10ffaSBram Moolenaar assert_equal(1, g:didCmd) 51477b10ffaSBram Moolenaar Cmd() 51577b10ffaSBram Moolenaar assert_equal(1, g:didFunc) 51677b10ffaSBram Moolenaar unlet g:didFunc 51777b10ffaSBram Moolenaar unlet g:didCmd 51877b10ffaSBram Moolenaar enddef 51977b10ffaSBram Moolenaar InDefFunc() 52077b10ffaSBram Moolenaar END 52177b10ffaSBram Moolenaar CheckScriptSuccess(lines) 52277b10ffaSBram Moolenaarenddef 52377b10ffaSBram Moolenaar 524bf5f2878SBram Moolenaardef Test_option_use_linebreak() 525bf5f2878SBram Moolenaar var lines =<< trim END 526bf5f2878SBram Moolenaar new 527bf5f2878SBram Moolenaar &matchpairs = '(:)' 528bf5f2878SBram Moolenaar &matchpairs->setline(1) 529bf5f2878SBram Moolenaar &matchpairs = '[:]' 530bf5f2878SBram Moolenaar &matchpairs ->setline(2) 531bf5f2878SBram Moolenaar &matchpairs = '{:}' 532bf5f2878SBram Moolenaar &matchpairs 533bf5f2878SBram Moolenaar ->setline(3) 534bf5f2878SBram Moolenaar assert_equal(['(:)', '[:]', '{:}'], getline(1, '$')) 535bf5f2878SBram Moolenaar bwipe! 536bf5f2878SBram Moolenaar END 537bf5f2878SBram Moolenaar CheckDefAndScriptSuccess(lines) 538bf5f2878SBram Moolenaarenddef 539bf5f2878SBram Moolenaar 5404799cef8SBram Moolenaardef Test_use_register() 54173170917SBram Moolenaar var lines =<< trim END 54273170917SBram Moolenaar new 54373170917SBram Moolenaar @a = 'one' 54473170917SBram Moolenaar @a->setline(1) 54573170917SBram Moolenaar @b = 'two' 54673170917SBram Moolenaar @b ->setline(2) 54773170917SBram Moolenaar @c = 'three' 54873170917SBram Moolenaar @c 54973170917SBram Moolenaar ->setline(3) 55073170917SBram Moolenaar assert_equal(['one', 'two', 'three'], getline(1, '$')) 55173170917SBram Moolenaar bwipe! 55273170917SBram Moolenaar END 55373170917SBram Moolenaar CheckDefAndScriptSuccess(lines) 5544799cef8SBram Moolenaar 5554799cef8SBram Moolenaar lines =<< trim END 5564799cef8SBram Moolenaar @a = 'echo "text"' 5574799cef8SBram Moolenaar @a 5584799cef8SBram Moolenaar END 5594799cef8SBram Moolenaar CheckDefAndScriptFailure(lines, 'E1207:') 56073170917SBram Moolenaarenddef 56173170917SBram Moolenaar 5625ca5cc64SBram Moolenaardef Test_environment_use_linebreak() 5635ca5cc64SBram Moolenaar var lines =<< trim END 5645ca5cc64SBram Moolenaar new 5655ca5cc64SBram Moolenaar $TESTENV = 'one' 5665ca5cc64SBram Moolenaar $TESTENV->setline(1) 5675ca5cc64SBram Moolenaar $TESTENV = 'two' 5685ca5cc64SBram Moolenaar $TESTENV ->setline(2) 5695ca5cc64SBram Moolenaar $TESTENV = 'three' 5705ca5cc64SBram Moolenaar $TESTENV 5715ca5cc64SBram Moolenaar ->setline(3) 5725ca5cc64SBram Moolenaar assert_equal(['one', 'two', 'three'], getline(1, '$')) 5735ca5cc64SBram Moolenaar bwipe! 5745ca5cc64SBram Moolenaar END 5755ca5cc64SBram Moolenaar CheckDefAndScriptSuccess(lines) 5765ca5cc64SBram Moolenaarenddef 5775ca5cc64SBram Moolenaar 578683581ebSBram Moolenaardef Test_skipped_expr_linebreak() 579683581ebSBram Moolenaar if 0 580683581ebSBram Moolenaar var x = [] 5812949cfdbSBram Moolenaar ->map(() => 0) 582683581ebSBram Moolenaar endif 583683581ebSBram Moolenaarenddef 584683581ebSBram Moolenaar 5850a47e097SBram Moolenaardef Test_dict_member() 586e0de171eSBram Moolenaar var test: dict<list<number>> = {data: [3, 1, 2]} 5870a47e097SBram Moolenaar test.data->sort() 588e0de171eSBram Moolenaar assert_equal({data: [1, 2, 3]}, test) 5890a47e097SBram Moolenaar test.data 5900a47e097SBram Moolenaar ->reverse() 591e0de171eSBram Moolenaar assert_equal({data: [3, 2, 1]}, test) 5920a47e097SBram Moolenaar 593ac564082SBram Moolenaar var lines =<< trim END 5940a47e097SBram Moolenaar vim9script 595e0de171eSBram Moolenaar var test: dict<list<number>> = {data: [3, 1, 2]} 5960a47e097SBram Moolenaar test.data->sort() 597e0de171eSBram Moolenaar assert_equal({data: [1, 2, 3]}, test) 5980a47e097SBram Moolenaar END 5990a47e097SBram Moolenaar CheckScriptSuccess(lines) 6000a47e097SBram Moolenaarenddef 6010a47e097SBram Moolenaar 602e9f262bdSBram Moolenaardef Test_bar_after_command() 603e9f262bdSBram Moolenaar def RedrawAndEcho() 604ac564082SBram Moolenaar var x = 'did redraw' 605e9f262bdSBram Moolenaar redraw | echo x 606e9f262bdSBram Moolenaar enddef 607e9f262bdSBram Moolenaar RedrawAndEcho() 608e9f262bdSBram Moolenaar assert_match('did redraw', Screenline(&lines)) 609e9f262bdSBram Moolenaar 610788123c0SBram Moolenaar def CallAndEcho() 611ac564082SBram Moolenaar var x = 'did redraw' 612788123c0SBram Moolenaar reg_executing() | echo x 613788123c0SBram Moolenaar enddef 614788123c0SBram Moolenaar CallAndEcho() 615788123c0SBram Moolenaar assert_match('did redraw', Screenline(&lines)) 616788123c0SBram Moolenaar 617e9f262bdSBram Moolenaar if has('unix') 618e9f262bdSBram Moolenaar # bar in filter write command does not start new command 619e9f262bdSBram Moolenaar def WriteToShell() 620e9f262bdSBram Moolenaar new 621e9f262bdSBram Moolenaar setline(1, 'some text') 622e9f262bdSBram Moolenaar w !cat | cat > Xoutfile 623e9f262bdSBram Moolenaar bwipe! 624e9f262bdSBram Moolenaar enddef 625e9f262bdSBram Moolenaar WriteToShell() 626e9f262bdSBram Moolenaar assert_equal(['some text'], readfile('Xoutfile')) 627e9f262bdSBram Moolenaar delete('Xoutfile') 628e9f262bdSBram Moolenaar 629e9f262bdSBram Moolenaar # bar in filter read command does not start new command 630e9f262bdSBram Moolenaar def ReadFromShell() 631e9f262bdSBram Moolenaar new 632e9f262bdSBram Moolenaar r! echo hello there | cat > Xoutfile 633e9f262bdSBram Moolenaar r !echo again | cat >> Xoutfile 634e9f262bdSBram Moolenaar bwipe! 635e9f262bdSBram Moolenaar enddef 636e9f262bdSBram Moolenaar ReadFromShell() 637e9f262bdSBram Moolenaar assert_equal(['hello there', 'again'], readfile('Xoutfile')) 638e9f262bdSBram Moolenaar delete('Xoutfile') 639e9f262bdSBram Moolenaar endif 640e9f262bdSBram Moolenaarenddef 641e9f262bdSBram Moolenaar 642b074e8b8SBram Moolenaardef Test_filter_is_not_modifier() 643e0de171eSBram Moolenaar var tags = [{a: 1, b: 2}, {x: 3, y: 4}] 6442949cfdbSBram Moolenaar filter(tags, ( _, v) => has_key(v, 'x') ? 1 : 0 ) 645e0de171eSBram Moolenaar assert_equal([{x: 3, y: 4}], tags) 646b074e8b8SBram Moolenaarenddef 647b074e8b8SBram Moolenaar 648e88c8e80SBram Moolenaardef Test_command_modifier_filter() 6494f6b6ed2SBram Moolenaar var lines =<< trim END 6504f6b6ed2SBram Moolenaar final expected = "\nType Name Content\n c \"c piyo" 6514f6b6ed2SBram Moolenaar @a = 'hoge' 6524f6b6ed2SBram Moolenaar @b = 'fuga' 6534f6b6ed2SBram Moolenaar @c = 'piyo' 6544f6b6ed2SBram Moolenaar 6554f6b6ed2SBram Moolenaar assert_equal(execute('filter /piyo/ registers abc'), expected) 6564f6b6ed2SBram Moolenaar END 6574f6b6ed2SBram Moolenaar CheckDefAndScriptSuccess(lines) 658e729ce29SBram Moolenaar 659e729ce29SBram Moolenaar # also do this compiled 660e729ce29SBram Moolenaar lines =<< trim END 661e729ce29SBram Moolenaar @a = 'very specific z3d37dh234 string' 662e729ce29SBram Moolenaar filter z3d37dh234 registers 663e729ce29SBram Moolenaar assert_match('very specific z3d37dh234 string', Screenline(&lines)) 664e729ce29SBram Moolenaar END 665e729ce29SBram Moolenaar CheckDefAndScriptSuccess(lines) 6664f6b6ed2SBram Moolenaarenddef 6674f6b6ed2SBram Moolenaar 668e88c8e80SBram Moolenaardef Test_win_command_modifiers() 669e88c8e80SBram Moolenaar assert_equal(1, winnr('$')) 670e88c8e80SBram Moolenaar 671e88c8e80SBram Moolenaar set splitright 672e88c8e80SBram Moolenaar vsplit 673e88c8e80SBram Moolenaar assert_equal(2, winnr()) 674e88c8e80SBram Moolenaar close 675e88c8e80SBram Moolenaar aboveleft vsplit 676e88c8e80SBram Moolenaar assert_equal(1, winnr()) 677e88c8e80SBram Moolenaar close 678e88c8e80SBram Moolenaar set splitright& 679e88c8e80SBram Moolenaar 680e88c8e80SBram Moolenaar vsplit 681e88c8e80SBram Moolenaar assert_equal(1, winnr()) 682e88c8e80SBram Moolenaar close 683e88c8e80SBram Moolenaar belowright vsplit 684e88c8e80SBram Moolenaar assert_equal(2, winnr()) 685e88c8e80SBram Moolenaar close 686e88c8e80SBram Moolenaar rightbelow vsplit 687e88c8e80SBram Moolenaar assert_equal(2, winnr()) 688e88c8e80SBram Moolenaar close 689e88c8e80SBram Moolenaar 69097a19005SBram Moolenaar if has('browse') 691e88c8e80SBram Moolenaar browse set 692e88c8e80SBram Moolenaar assert_equal('option-window', expand('%')) 693e88c8e80SBram Moolenaar close 69497a19005SBram Moolenaar endif 695e88c8e80SBram Moolenaar 696e88c8e80SBram Moolenaar vsplit 697e88c8e80SBram Moolenaar botright split 698e88c8e80SBram Moolenaar assert_equal(3, winnr()) 699e88c8e80SBram Moolenaar assert_equal(&columns, winwidth(0)) 700e88c8e80SBram Moolenaar close 701e88c8e80SBram Moolenaar close 702e88c8e80SBram Moolenaar 703e88c8e80SBram Moolenaar vsplit 704e88c8e80SBram Moolenaar topleft split 705e88c8e80SBram Moolenaar assert_equal(1, winnr()) 706e88c8e80SBram Moolenaar assert_equal(&columns, winwidth(0)) 707e88c8e80SBram Moolenaar close 708e88c8e80SBram Moolenaar close 709e88c8e80SBram Moolenaar 710e88c8e80SBram Moolenaar gettabinfo()->len()->assert_equal(1) 711e88c8e80SBram Moolenaar tab split 712e88c8e80SBram Moolenaar gettabinfo()->len()->assert_equal(2) 713e88c8e80SBram Moolenaar tabclose 714e88c8e80SBram Moolenaar 715e88c8e80SBram Moolenaar vertical new 716e88c8e80SBram Moolenaar assert_inrange(&columns / 2 - 2, &columns / 2 + 1, winwidth(0)) 717e88c8e80SBram Moolenaar close 718e88c8e80SBram Moolenaarenddef 719e88c8e80SBram Moolenaar 720e88c8e80SBram Moolenaarfunc Test_command_modifier_confirm() 721e88c8e80SBram Moolenaar CheckNotGui 722e88c8e80SBram Moolenaar CheckRunVimInTerminal 723e88c8e80SBram Moolenaar 724e88c8e80SBram Moolenaar " Test for saving all the modified buffers 725e88c8e80SBram Moolenaar let lines =<< trim END 726e88c8e80SBram Moolenaar call setline(1, 'changed') 727e88c8e80SBram Moolenaar def Getout() 728e88c8e80SBram Moolenaar confirm write Xfile 729e88c8e80SBram Moolenaar enddef 730e88c8e80SBram Moolenaar END 731e88c8e80SBram Moolenaar call writefile(lines, 'Xconfirmscript') 732e88c8e80SBram Moolenaar call writefile(['empty'], 'Xfile') 733e88c8e80SBram Moolenaar let buf = RunVimInTerminal('-S Xconfirmscript', {'rows': 8}) 734e88c8e80SBram Moolenaar call term_sendkeys(buf, ":call Getout()\n") 735e88c8e80SBram Moolenaar call WaitForAssert({-> assert_match('(Y)es, \[N\]o: ', term_getline(buf, 8))}, 1000) 736e88c8e80SBram Moolenaar call term_sendkeys(buf, "y") 737645cd3ebSBram Moolenaar call WaitForAssert({-> assert_match('(Y)es, \[N\]o: ', term_getline(buf, 8))}, 1000) 738645cd3ebSBram Moolenaar call term_sendkeys(buf, "\<CR>") 739645cd3ebSBram Moolenaar call TermWait(buf) 740e88c8e80SBram Moolenaar call StopVimInTerminal(buf) 741e88c8e80SBram Moolenaar 742e88c8e80SBram Moolenaar call assert_equal(['changed'], readfile('Xfile')) 743e88c8e80SBram Moolenaar call delete('Xfile') 744645cd3ebSBram Moolenaar call delete('.Xfile.swp') " in case Vim was killed 745e88c8e80SBram Moolenaar call delete('Xconfirmscript') 746e88c8e80SBram Moolenaarendfunc 747e88c8e80SBram Moolenaar 748e88c8e80SBram Moolenaardef Test_command_modifiers_keep() 749e88c8e80SBram Moolenaar if has('unix') 750e88c8e80SBram Moolenaar def DoTest(addRflag: bool, keepMarks: bool, hasMarks: bool) 751e88c8e80SBram Moolenaar new 752e88c8e80SBram Moolenaar setline(1, ['one', 'two', 'three']) 753e88c8e80SBram Moolenaar normal 1Gma 754e88c8e80SBram Moolenaar normal 2Gmb 755e88c8e80SBram Moolenaar normal 3Gmc 756e88c8e80SBram Moolenaar if addRflag 757e88c8e80SBram Moolenaar set cpo+=R 758e88c8e80SBram Moolenaar else 759e88c8e80SBram Moolenaar set cpo-=R 760e88c8e80SBram Moolenaar endif 761e88c8e80SBram Moolenaar if keepMarks 762e88c8e80SBram Moolenaar keepmarks :%!cat 763e88c8e80SBram Moolenaar else 764e88c8e80SBram Moolenaar :%!cat 765e88c8e80SBram Moolenaar endif 766e88c8e80SBram Moolenaar if hasMarks 767e88c8e80SBram Moolenaar assert_equal(1, line("'a")) 768e88c8e80SBram Moolenaar assert_equal(2, line("'b")) 769e88c8e80SBram Moolenaar assert_equal(3, line("'c")) 770e88c8e80SBram Moolenaar else 771e88c8e80SBram Moolenaar assert_equal(0, line("'a")) 772e88c8e80SBram Moolenaar assert_equal(0, line("'b")) 773e88c8e80SBram Moolenaar assert_equal(0, line("'c")) 774e88c8e80SBram Moolenaar endif 775e88c8e80SBram Moolenaar quit! 776e88c8e80SBram Moolenaar enddef 777e88c8e80SBram Moolenaar DoTest(false, false, true) 778e88c8e80SBram Moolenaar DoTest(true, false, false) 779e88c8e80SBram Moolenaar DoTest(false, true, true) 780e88c8e80SBram Moolenaar DoTest(true, true, true) 781e88c8e80SBram Moolenaar set cpo&vim 782f65b35b4SBram Moolenaar 783f65b35b4SBram Moolenaar new 784f65b35b4SBram Moolenaar setline(1, ['one', 'two', 'three', 'four']) 785f65b35b4SBram Moolenaar assert_equal(4, line("$")) 786f65b35b4SBram Moolenaar normal 1Gma 787f65b35b4SBram Moolenaar normal 2Gmb 788f65b35b4SBram Moolenaar normal 3Gmc 789f65b35b4SBram Moolenaar lockmarks :1,2!wc 790f65b35b4SBram Moolenaar # line is deleted, marks don't move 791f65b35b4SBram Moolenaar assert_equal(3, line("$")) 792f65b35b4SBram Moolenaar assert_equal('four', getline(3)) 793f65b35b4SBram Moolenaar assert_equal(1, line("'a")) 794f65b35b4SBram Moolenaar assert_equal(2, line("'b")) 795f65b35b4SBram Moolenaar assert_equal(3, line("'c")) 796f65b35b4SBram Moolenaar quit! 797e88c8e80SBram Moolenaar endif 798e88c8e80SBram Moolenaar 799f65b35b4SBram Moolenaar edit Xone 800f65b35b4SBram Moolenaar edit Xtwo 801f65b35b4SBram Moolenaar assert_equal('Xone', expand('#')) 802f65b35b4SBram Moolenaar keepalt edit Xthree 803f65b35b4SBram Moolenaar assert_equal('Xone', expand('#')) 804f65b35b4SBram Moolenaar 805f65b35b4SBram Moolenaar normal /a*b* 806f65b35b4SBram Moolenaar assert_equal('a*b*', histget("search")) 807f65b35b4SBram Moolenaar keeppatterns normal /c*d* 808f65b35b4SBram Moolenaar assert_equal('a*b*', histget("search")) 809f65b35b4SBram Moolenaar 810f65b35b4SBram Moolenaar new 811f65b35b4SBram Moolenaar setline(1, range(10)) 812f65b35b4SBram Moolenaar :10 813f65b35b4SBram Moolenaar normal gg 814f65b35b4SBram Moolenaar assert_equal(10, getpos("''")[1]) 815f65b35b4SBram Moolenaar keepjumps normal 5G 816f65b35b4SBram Moolenaar assert_equal(10, getpos("''")[1]) 817f65b35b4SBram Moolenaar quit! 818e88c8e80SBram Moolenaarenddef 819e88c8e80SBram Moolenaar 8208242ebbdSBram Moolenaardef Test_bar_line_continuation() 8218242ebbdSBram Moolenaar var lines =<< trim END 82266669fc6SBram Moolenaar au BufNewFile Xfile g:readFile = 1 823dcc58e03SBram Moolenaar | g:readExtra = 2 82466669fc6SBram Moolenaar g:readFile = 0 825dcc58e03SBram Moolenaar g:readExtra = 0 82666669fc6SBram Moolenaar edit Xfile 82766669fc6SBram Moolenaar assert_equal(1, g:readFile) 828dcc58e03SBram Moolenaar assert_equal(2, g:readExtra) 82966669fc6SBram Moolenaar bwipe! 830dcc58e03SBram Moolenaar au! BufNewFile 831dcc58e03SBram Moolenaar 832dcc58e03SBram Moolenaar au BufNewFile Xfile g:readFile = 1 833dcc58e03SBram Moolenaar | g:readExtra = 2 834dcc58e03SBram Moolenaar | g:readMore = 3 835dcc58e03SBram Moolenaar g:readFile = 0 836dcc58e03SBram Moolenaar g:readExtra = 0 837dcc58e03SBram Moolenaar g:readMore = 0 838dcc58e03SBram Moolenaar edit Xfile 839dcc58e03SBram Moolenaar assert_equal(1, g:readFile) 840dcc58e03SBram Moolenaar assert_equal(2, g:readExtra) 841dcc58e03SBram Moolenaar assert_equal(3, g:readMore) 842dcc58e03SBram Moolenaar bwipe! 843dcc58e03SBram Moolenaar au! BufNewFile 844dcc58e03SBram Moolenaar unlet g:readFile 845dcc58e03SBram Moolenaar unlet g:readExtra 846dcc58e03SBram Moolenaar unlet g:readMore 8478242ebbdSBram Moolenaar END 8488242ebbdSBram Moolenaar CheckDefAndScriptSuccess(lines) 8498242ebbdSBram Moolenaarenddef 8508242ebbdSBram Moolenaar 8518242ebbdSBram Moolenaardef Test_command_modifier_other() 8528242ebbdSBram Moolenaar new Xsomefile 8538242ebbdSBram Moolenaar setline(1, 'changed') 8548242ebbdSBram Moolenaar var buf = bufnr() 8558242ebbdSBram Moolenaar hide edit Xotherfile 8568242ebbdSBram Moolenaar var info = getbufinfo(buf) 8578242ebbdSBram Moolenaar assert_equal(1, info[0].hidden) 8588242ebbdSBram Moolenaar assert_equal(1, info[0].changed) 8598242ebbdSBram Moolenaar edit Xsomefile 8608242ebbdSBram Moolenaar bwipe! 8618242ebbdSBram Moolenaar 8628242ebbdSBram Moolenaar au BufNewFile Xfile g:readFile = 1 8638242ebbdSBram Moolenaar g:readFile = 0 8648242ebbdSBram Moolenaar edit Xfile 8658242ebbdSBram Moolenaar assert_equal(1, g:readFile) 8668242ebbdSBram Moolenaar bwipe! 8678242ebbdSBram Moolenaar g:readFile = 0 8688242ebbdSBram Moolenaar noautocmd edit Xfile 8698242ebbdSBram Moolenaar assert_equal(0, g:readFile) 8708242ebbdSBram Moolenaar au! BufNewFile 8718242ebbdSBram Moolenaar unlet g:readFile 87266669fc6SBram Moolenaar 87366669fc6SBram Moolenaar noswapfile edit XnoSwap 874dd1f426bSBram Moolenaar assert_equal(false, &l:swapfile) 87566669fc6SBram Moolenaar bwipe! 87666669fc6SBram Moolenaar 87766669fc6SBram Moolenaar var caught = false 87866669fc6SBram Moolenaar try 87966669fc6SBram Moolenaar sandbox !ls 88066669fc6SBram Moolenaar catch /E48:/ 88166669fc6SBram Moolenaar caught = true 88266669fc6SBram Moolenaar endtry 88366669fc6SBram Moolenaar assert_true(caught) 88466669fc6SBram Moolenaar 88566669fc6SBram Moolenaar :8verbose g:verbose_now = &verbose 88666669fc6SBram Moolenaar assert_equal(8, g:verbose_now) 88766669fc6SBram Moolenaar unlet g:verbose_now 88866669fc6SBram Moolenaarenddef 88966669fc6SBram Moolenaar 89066669fc6SBram Moolenaardef EchoHere() 89166669fc6SBram Moolenaar echomsg 'here' 89266669fc6SBram Moolenaarenddef 89366669fc6SBram Moolenaardef EchoThere() 89466669fc6SBram Moolenaar unsilent echomsg 'there' 89566669fc6SBram Moolenaarenddef 89666669fc6SBram Moolenaar 89766669fc6SBram Moolenaardef Test_modifier_silent_unsilent() 89866669fc6SBram Moolenaar echomsg 'last one' 89966669fc6SBram Moolenaar silent echomsg "text" 90066669fc6SBram Moolenaar assert_equal("\nlast one", execute(':1messages')) 90166669fc6SBram Moolenaar 90266669fc6SBram Moolenaar silent! echoerr "error" 90366669fc6SBram Moolenaar 90466669fc6SBram Moolenaar echomsg 'last one' 90566669fc6SBram Moolenaar silent EchoHere() 90666669fc6SBram Moolenaar assert_equal("\nlast one", execute(':1messages')) 90766669fc6SBram Moolenaar 90866669fc6SBram Moolenaar silent EchoThere() 90966669fc6SBram Moolenaar assert_equal("\nthere", execute(':1messages')) 91020a76298SBram Moolenaar 91120a76298SBram Moolenaar try 91220a76298SBram Moolenaar silent eval [][0] 91320a76298SBram Moolenaar catch 91420a76298SBram Moolenaar echomsg "caught" 91520a76298SBram Moolenaar endtry 91620a76298SBram Moolenaar assert_equal("\ncaught", execute(':1messages')) 917917c46abSBram Moolenaar 918917c46abSBram Moolenaar var lines =<< trim END 919917c46abSBram Moolenaar vim9script 920917c46abSBram Moolenaar set history=11 921917c46abSBram Moolenaar silent! while 0 922917c46abSBram Moolenaar set history=22 923917c46abSBram Moolenaar silent! endwhile 924917c46abSBram Moolenaar assert_equal(11, &history) 925917c46abSBram Moolenaar set history& 926917c46abSBram Moolenaar END 927917c46abSBram Moolenaar CheckScriptSuccess(lines) 928e88c8e80SBram Moolenaarenddef 929e88c8e80SBram Moolenaar 93036113e46SBram Moolenaardef Test_range_after_command_modifier() 9316e2c2c50SBram Moolenaar CheckScriptFailure(['vim9script', 'silent keepjump 1d _'], 'E1050: Colon required before a range: 1d _', 2) 93236113e46SBram Moolenaar new 93336113e46SBram Moolenaar setline(1, 'xxx') 93436113e46SBram Moolenaar CheckScriptSuccess(['vim9script', 'silent keepjump :1d _']) 93536113e46SBram Moolenaar assert_equal('', getline(1)) 93636113e46SBram Moolenaar bwipe! 93736113e46SBram Moolenaarenddef 93836113e46SBram Moolenaar 939ece0b87cSBram Moolenaardef Test_silent_pattern() 940ece0b87cSBram Moolenaar new 941ece0b87cSBram Moolenaar silent! :/pat/put _ 942ece0b87cSBram Moolenaar bwipe! 943ece0b87cSBram Moolenaarenddef 944ece0b87cSBram Moolenaar 945fa984418SBram Moolenaardef Test_useless_command_modifier() 946fa984418SBram Moolenaar g:maybe = true 947fa984418SBram Moolenaar var lines =<< trim END 948fa984418SBram Moolenaar if g:maybe 949fa984418SBram Moolenaar silent endif 950fa984418SBram Moolenaar END 951fa984418SBram Moolenaar CheckDefAndScriptFailure(lines, 'E1176:', 2) 952fa984418SBram Moolenaar 953fa984418SBram Moolenaar lines =<< trim END 954fa984418SBram Moolenaar for i in [0] 955fa984418SBram Moolenaar silent endfor 956fa984418SBram Moolenaar END 957917c46abSBram Moolenaar CheckDefFailure(lines, 'E1176:', 2) 958917c46abSBram Moolenaar CheckScriptSuccess(['vim9script'] + lines) 959fa984418SBram Moolenaar 960fa984418SBram Moolenaar lines =<< trim END 961fa984418SBram Moolenaar while g:maybe 962fa984418SBram Moolenaar silent endwhile 963fa984418SBram Moolenaar END 964917c46abSBram Moolenaar CheckDefFailure(lines, 'E1176:', 2) 965917c46abSBram Moolenaar g:maybe = false 966917c46abSBram Moolenaar CheckScriptSuccess(['vim9script'] + lines) 967fa984418SBram Moolenaar 968fa984418SBram Moolenaar lines =<< trim END 969fa984418SBram Moolenaar silent try 970fa984418SBram Moolenaar finally 971fa984418SBram Moolenaar endtry 972fa984418SBram Moolenaar END 973fa984418SBram Moolenaar CheckDefAndScriptFailure(lines, 'E1176:', 1) 974fa984418SBram Moolenaar 975fa984418SBram Moolenaar lines =<< trim END 976fa984418SBram Moolenaar try 977fa984418SBram Moolenaar silent catch 978fa984418SBram Moolenaar endtry 979fa984418SBram Moolenaar END 980fa984418SBram Moolenaar CheckDefAndScriptFailure(lines, 'E1176:', 2) 981fa984418SBram Moolenaar 982fa984418SBram Moolenaar lines =<< trim END 983fa984418SBram Moolenaar try 984fa984418SBram Moolenaar silent finally 985fa984418SBram Moolenaar endtry 986fa984418SBram Moolenaar END 987fa984418SBram Moolenaar CheckDefAndScriptFailure(lines, 'E1176:', 2) 988fa984418SBram Moolenaar 989fa984418SBram Moolenaar lines =<< trim END 990fa984418SBram Moolenaar try 991fa984418SBram Moolenaar finally 992fa984418SBram Moolenaar silent endtry 993fa984418SBram Moolenaar END 994fa984418SBram Moolenaar CheckDefAndScriptFailure(lines, 'E1176:', 3) 995fa984418SBram Moolenaarenddef 996fa984418SBram Moolenaar 997007f9d6eSBram Moolenaardef Test_eval_command() 998ac564082SBram Moolenaar var from = 3 999ac564082SBram Moolenaar var to = 5 1000007f9d6eSBram Moolenaar g:val = 111 1001007f9d6eSBram Moolenaar def Increment(nrs: list<number>) 1002007f9d6eSBram Moolenaar for nr in nrs 1003007f9d6eSBram Moolenaar g:val += nr 1004007f9d6eSBram Moolenaar endfor 1005007f9d6eSBram Moolenaar enddef 1006007f9d6eSBram Moolenaar eval range(from, to) 1007007f9d6eSBram Moolenaar ->Increment() 1008007f9d6eSBram Moolenaar assert_equal(111 + 3 + 4 + 5, g:val) 1009007f9d6eSBram Moolenaar unlet g:val 1010d0fe620cSBram Moolenaar 1011d0fe620cSBram Moolenaar var lines =<< trim END 1012d0fe620cSBram Moolenaar vim9script 1013d0fe620cSBram Moolenaar g:caught = 'no' 1014d0fe620cSBram Moolenaar try 1015d0fe620cSBram Moolenaar eval 123 || 0 1016d0fe620cSBram Moolenaar catch 1017d0fe620cSBram Moolenaar g:caught = 'yes' 1018d0fe620cSBram Moolenaar endtry 1019d0fe620cSBram Moolenaar assert_equal('yes', g:caught) 1020d0fe620cSBram Moolenaar unlet g:caught 1021d0fe620cSBram Moolenaar END 1022d0fe620cSBram Moolenaar CheckScriptSuccess(lines) 1023007f9d6eSBram Moolenaarenddef 1024007f9d6eSBram Moolenaar 1025b8a9296cSBram Moolenaardef Test_map_command() 1026ac564082SBram Moolenaar var lines =<< trim END 1027b8a9296cSBram Moolenaar nnoremap <F3> :echo 'hit F3 #'<CR> 1028b8a9296cSBram Moolenaar assert_equal(":echo 'hit F3 #'<CR>", maparg("<F3>", "n")) 1029b8a9296cSBram Moolenaar END 1030b8a9296cSBram Moolenaar CheckDefSuccess(lines) 1031b8a9296cSBram Moolenaar CheckScriptSuccess(['vim9script'] + lines) 1032b8a9296cSBram Moolenaarenddef 1033b8a9296cSBram Moolenaar 1034b3ea36c5SBram Moolenaardef Test_normal_command() 1035b3ea36c5SBram Moolenaar new 1036b3ea36c5SBram Moolenaar setline(1, 'doesnotexist') 1037ac564082SBram Moolenaar var caught = 0 1038b3ea36c5SBram Moolenaar try 1039b3ea36c5SBram Moolenaar exe "norm! \<C-]>" 1040b3ea36c5SBram Moolenaar catch /E433/ 1041b3ea36c5SBram Moolenaar caught = 2 1042b3ea36c5SBram Moolenaar endtry 1043b3ea36c5SBram Moolenaar assert_equal(2, caught) 1044b3ea36c5SBram Moolenaar 1045b3ea36c5SBram Moolenaar try 1046b3ea36c5SBram Moolenaar exe "norm! 3\<C-]>" 1047b3ea36c5SBram Moolenaar catch /E433/ 1048b3ea36c5SBram Moolenaar caught = 3 1049b3ea36c5SBram Moolenaar endtry 1050b3ea36c5SBram Moolenaar assert_equal(3, caught) 1051b3ea36c5SBram Moolenaar bwipe! 1052b3ea36c5SBram Moolenaarenddef 1053b3ea36c5SBram Moolenaar 1054c3516f7eSBram Moolenaardef Test_put_command() 1055c3516f7eSBram Moolenaar new 1056c3516f7eSBram Moolenaar @p = 'ppp' 1057c3516f7eSBram Moolenaar put p 1058c3516f7eSBram Moolenaar assert_equal('ppp', getline(2)) 1059c3516f7eSBram Moolenaar 1060c3516f7eSBram Moolenaar put ='below' 1061c3516f7eSBram Moolenaar assert_equal('below', getline(3)) 1062c3516f7eSBram Moolenaar put! ='above' 1063c3516f7eSBram Moolenaar assert_equal('above', getline(3)) 1064c3516f7eSBram Moolenaar assert_equal('below', getline(4)) 1065c3516f7eSBram Moolenaar 1066883cf97fSBram Moolenaar :2put =['a', 'b', 'c'] 1067883cf97fSBram Moolenaar assert_equal(['ppp', 'a', 'b', 'c', 'above'], getline(2, 6)) 1068883cf97fSBram Moolenaar 106908597875SBram Moolenaar # compute range at runtime 107008597875SBram Moolenaar setline(1, range(1, 8)) 107108597875SBram Moolenaar @a = 'aaa' 107208597875SBram Moolenaar :$-2put a 107308597875SBram Moolenaar assert_equal('aaa', getline(7)) 107408597875SBram Moolenaar 107508597875SBram Moolenaar setline(1, range(1, 8)) 107608597875SBram Moolenaar :2 107708597875SBram Moolenaar :+2put! a 107808597875SBram Moolenaar assert_equal('aaa', getline(4)) 107908597875SBram Moolenaar 1080a28639e7SBram Moolenaar []->mapnew(() => 0) 1081a28639e7SBram Moolenaar :$put ='end' 1082a28639e7SBram Moolenaar assert_equal('end', getline('$')) 1083a28639e7SBram Moolenaar 1084c3516f7eSBram Moolenaar bwipe! 1085025cb1caSBram Moolenaar 1086025cb1caSBram Moolenaar CheckDefFailure(['put =xxx'], 'E1001:') 1087025cb1caSBram Moolenaarenddef 1088025cb1caSBram Moolenaar 1089025cb1caSBram Moolenaardef Test_put_with_linebreak() 1090025cb1caSBram Moolenaar new 1091025cb1caSBram Moolenaar var lines =<< trim END 1092025cb1caSBram Moolenaar vim9script 1093025cb1caSBram Moolenaar pu =split('abc', '\zs') 1094025cb1caSBram Moolenaar ->join() 1095025cb1caSBram Moolenaar END 1096025cb1caSBram Moolenaar CheckScriptSuccess(lines) 1097025cb1caSBram Moolenaar getline(2)->assert_equal('a b c') 1098025cb1caSBram Moolenaar bwipe! 1099c3516f7eSBram Moolenaarenddef 1100c3516f7eSBram Moolenaar 11013bd8de40SBram Moolenaardef Test_command_star_range() 11023bd8de40SBram Moolenaar new 11033bd8de40SBram Moolenaar setline(1, ['xxx foo xxx', 'xxx bar xxx', 'xxx foo xx bar']) 11043bd8de40SBram Moolenaar setpos("'<", [0, 1, 0, 0]) 11053bd8de40SBram Moolenaar setpos("'>", [0, 3, 0, 0]) 11063bd8de40SBram Moolenaar :*s/\(foo\|bar\)/baz/g 11073bd8de40SBram Moolenaar getline(1, 3)->assert_equal(['xxx baz xxx', 'xxx baz xxx', 'xxx baz xx baz']) 11083bd8de40SBram Moolenaar 11093bd8de40SBram Moolenaar bwipe! 11103bd8de40SBram Moolenaarenddef 11113bd8de40SBram Moolenaar 111220d89e0aSBram Moolenaardef Test_f_args() 111320d89e0aSBram Moolenaar var lines =<< trim END 111420d89e0aSBram Moolenaar vim9script 111520d89e0aSBram Moolenaar 111620d89e0aSBram Moolenaar func SaveCmdArgs(...) 111720d89e0aSBram Moolenaar let g:args = a:000 111820d89e0aSBram Moolenaar endfunc 111920d89e0aSBram Moolenaar 112020d89e0aSBram Moolenaar command -nargs=* TestFArgs call SaveCmdArgs(<f-args>) 112120d89e0aSBram Moolenaar 112220d89e0aSBram Moolenaar TestFArgs 112320d89e0aSBram Moolenaar assert_equal([], g:args) 112420d89e0aSBram Moolenaar 112520d89e0aSBram Moolenaar TestFArgs one two three 112620d89e0aSBram Moolenaar assert_equal(['one', 'two', 'three'], g:args) 112720d89e0aSBram Moolenaar END 112820d89e0aSBram Moolenaar CheckScriptSuccess(lines) 112920d89e0aSBram Moolenaarenddef 1130c3516f7eSBram Moolenaar 1131d1510ee9SBram Moolenaardef Test_user_command_comment() 1132d1510ee9SBram Moolenaar command -nargs=1 Comd echom <q-args> 1133d1510ee9SBram Moolenaar 1134d1510ee9SBram Moolenaar var lines =<< trim END 1135d1510ee9SBram Moolenaar vim9script 1136d1510ee9SBram Moolenaar Comd # comment 1137d1510ee9SBram Moolenaar END 1138d1510ee9SBram Moolenaar CheckScriptSuccess(lines) 1139d1510ee9SBram Moolenaar 1140d1510ee9SBram Moolenaar lines =<< trim END 1141d1510ee9SBram Moolenaar vim9script 1142d1510ee9SBram Moolenaar Comd# comment 1143d1510ee9SBram Moolenaar END 1144d1510ee9SBram Moolenaar CheckScriptFailure(lines, 'E1144:') 1145d1510ee9SBram Moolenaar delcommand Comd 1146b98cec28SBram Moolenaar 1147b98cec28SBram Moolenaar lines =<< trim END 1148b98cec28SBram Moolenaar vim9script 1149b98cec28SBram Moolenaar command Foo echo 'Foo' 1150b98cec28SBram Moolenaar Foo3Bar 1151b98cec28SBram Moolenaar END 1152b98cec28SBram Moolenaar CheckScriptFailure(lines, 'E1144: Command "Foo" is not followed by white space: Foo3Bar') 1153b98cec28SBram Moolenaar 1154b98cec28SBram Moolenaar delcommand Foo 1155d1510ee9SBram Moolenaarenddef 1156d1510ee9SBram Moolenaar 115795388e31SBram Moolenaardef Test_star_command() 115895388e31SBram Moolenaar var lines =<< trim END 115995388e31SBram Moolenaar vim9script 116095388e31SBram Moolenaar @s = 'g:success = 8' 116195388e31SBram Moolenaar set cpo+=* 116295388e31SBram Moolenaar exe '*s' 116395388e31SBram Moolenaar assert_equal(8, g:success) 116495388e31SBram Moolenaar unlet g:success 116595388e31SBram Moolenaar set cpo-=* 116695388e31SBram Moolenaar assert_fails("exe '*s'", 'E1050:') 116795388e31SBram Moolenaar END 116895388e31SBram Moolenaar CheckScriptSuccess(lines) 116995388e31SBram Moolenaarenddef 117095388e31SBram Moolenaar 117147a2abf0SBram Moolenaardef Test_cmd_argument_without_colon() 117247a2abf0SBram Moolenaar new Xfile 117347a2abf0SBram Moolenaar setline(1, ['a', 'b', 'c', 'd']) 117447a2abf0SBram Moolenaar write 117547a2abf0SBram Moolenaar edit +3 % 117647a2abf0SBram Moolenaar assert_equal(3, getcurpos()[1]) 117747a2abf0SBram Moolenaar edit +/a % 117847a2abf0SBram Moolenaar assert_equal(1, getcurpos()[1]) 117947a2abf0SBram Moolenaar bwipe 118047a2abf0SBram Moolenaar delete('Xfile') 118147a2abf0SBram Moolenaarenddef 118247a2abf0SBram Moolenaar 11831c0aa978SBram Moolenaardef Test_ambiguous_user_cmd() 1184d1510ee9SBram Moolenaar command Cmd1 eval 0 1185d1510ee9SBram Moolenaar command Cmd2 eval 0 11861c0aa978SBram Moolenaar var lines =<< trim END 11871c0aa978SBram Moolenaar Cmd 11881c0aa978SBram Moolenaar END 1189d1510ee9SBram Moolenaar CheckDefAndScriptFailure(lines, 'E464:', 1) 1190d1510ee9SBram Moolenaar delcommand Cmd1 1191d1510ee9SBram Moolenaar delcommand Cmd2 11921c0aa978SBram Moolenaarenddef 11931c0aa978SBram Moolenaar 119452c124d3SBram Moolenaardef Test_command_not_recognized() 119552c124d3SBram Moolenaar var lines =<< trim END 119652c124d3SBram Moolenaar d.key = 'asdf' 119752c124d3SBram Moolenaar END 119852c124d3SBram Moolenaar CheckDefFailure(lines, 'E1146:', 1) 119952c124d3SBram Moolenaar 120052c124d3SBram Moolenaar lines =<< trim END 120152c124d3SBram Moolenaar d['key'] = 'asdf' 120252c124d3SBram Moolenaar END 120352c124d3SBram Moolenaar CheckDefFailure(lines, 'E1146:', 1) 120452c124d3SBram Moolenaarenddef 1205b7a78f7aSBram Moolenaar 1206f4e2099eSBram Moolenaardef Test_magic_not_used() 1207f4e2099eSBram Moolenaar new 1208f4e2099eSBram Moolenaar for cmd in ['set magic', 'set nomagic'] 1209f4e2099eSBram Moolenaar exe cmd 1210f4e2099eSBram Moolenaar setline(1, 'aaa') 1211f4e2099eSBram Moolenaar s/.../bbb/ 1212f4e2099eSBram Moolenaar assert_equal('bbb', getline(1)) 1213f4e2099eSBram Moolenaar endfor 1214f4e2099eSBram Moolenaar 1215f4e2099eSBram Moolenaar set magic 1216f4e2099eSBram Moolenaar setline(1, 'aaa') 1217f4e2099eSBram Moolenaar assert_fails('s/.\M../bbb/', 'E486:') 1218f4e2099eSBram Moolenaar assert_fails('snomagic/.../bbb/', 'E486:') 1219f4e2099eSBram Moolenaar assert_equal('aaa', getline(1)) 1220f4e2099eSBram Moolenaar 1221f4e2099eSBram Moolenaar bwipe! 1222f4e2099eSBram Moolenaarenddef 1223f4e2099eSBram Moolenaar 122460f63100SBram Moolenaardef Test_gdefault_not_used() 122560f63100SBram Moolenaar new 122660f63100SBram Moolenaar for cmd in ['set gdefault', 'set nogdefault'] 122760f63100SBram Moolenaar exe cmd 122860f63100SBram Moolenaar setline(1, 'aaa') 122960f63100SBram Moolenaar s/./b/ 123060f63100SBram Moolenaar assert_equal('baa', getline(1)) 123160f63100SBram Moolenaar endfor 123260f63100SBram Moolenaar 123360f63100SBram Moolenaar set nogdefault 123460f63100SBram Moolenaar bwipe! 123560f63100SBram Moolenaarenddef 123660f63100SBram Moolenaar 1237179eb567SBram Moolenaardef g:SomeComplFunc(findstart: number, base: string): any 1238179eb567SBram Moolenaar if findstart 1239179eb567SBram Moolenaar return 0 1240179eb567SBram Moolenaar else 1241179eb567SBram Moolenaar return ['aaa', 'bbb'] 1242179eb567SBram Moolenaar endif 1243179eb567SBram Moolenaarenddef 1244179eb567SBram Moolenaar 1245179eb567SBram Moolenaardef Test_insert_complete() 1246179eb567SBram Moolenaar # this was running into an error with the matchparen hack 1247179eb567SBram Moolenaar new 1248179eb567SBram Moolenaar set completefunc=SomeComplFunc 1249179eb567SBram Moolenaar feedkeys("i\<c-x>\<c-u>\<Esc>", 'ntx') 1250179eb567SBram Moolenaar assert_equal('aaa', getline(1)) 1251179eb567SBram Moolenaar 1252179eb567SBram Moolenaar set completefunc= 1253179eb567SBram Moolenaar bwipe! 1254179eb567SBram Moolenaarenddef 1255179eb567SBram Moolenaar 1256a11919faSBram Moolenaardef Test_wincmd() 1257a11919faSBram Moolenaar split 1258a11919faSBram Moolenaar var id1 = win_getid() 1259a11919faSBram Moolenaar if true 1260a11919faSBram Moolenaar try | wincmd w | catch | endtry 1261a11919faSBram Moolenaar endif 1262a11919faSBram Moolenaar assert_notequal(id1, win_getid()) 1263a11919faSBram Moolenaar close 12641ff89deeSBram Moolenaar 12651ff89deeSBram Moolenaar split 12661ff89deeSBram Moolenaar var id = win_getid() 12671ff89deeSBram Moolenaar split 12681ff89deeSBram Moolenaar :2wincmd o 12691ff89deeSBram Moolenaar assert_equal(id, win_getid()) 12701ff89deeSBram Moolenaar only 12711ff89deeSBram Moolenaar 12721ff89deeSBram Moolenaar split 12731ff89deeSBram Moolenaar split 12741ff89deeSBram Moolenaar assert_equal(3, winnr('$')) 12751ff89deeSBram Moolenaar :2wincmd c 12761ff89deeSBram Moolenaar assert_equal(2, winnr('$')) 12771ff89deeSBram Moolenaar only 12781ff89deeSBram Moolenaar 12791ff89deeSBram Moolenaar split 12801ff89deeSBram Moolenaar split 12811ff89deeSBram Moolenaar assert_equal(3, winnr('$')) 12821ff89deeSBram Moolenaar :2wincmd q 12831ff89deeSBram Moolenaar assert_equal(2, winnr('$')) 12841ff89deeSBram Moolenaar only 1285a11919faSBram Moolenaarenddef 1286a11919faSBram Moolenaar 12879567efa1SBram Moolenaardef Test_windo_missing_endif() 12889567efa1SBram Moolenaar var lines =<< trim END 12899567efa1SBram Moolenaar windo if 1 12909567efa1SBram Moolenaar END 12919567efa1SBram Moolenaar CheckDefExecFailure(lines, 'E171:', 1) 12929567efa1SBram Moolenaarenddef 12939567efa1SBram Moolenaar 1294b2cb6c8bSBram Moolenaarlet s:theList = [1, 2, 3] 1295b2cb6c8bSBram Moolenaar 1296b2cb6c8bSBram Moolenaardef Test_lockvar() 1297b2cb6c8bSBram Moolenaar s:theList[1] = 22 1298b2cb6c8bSBram Moolenaar assert_equal([1, 22, 3], s:theList) 1299b2cb6c8bSBram Moolenaar lockvar s:theList 1300b2cb6c8bSBram Moolenaar assert_fails('theList[1] = 77', 'E741:') 1301b2cb6c8bSBram Moolenaar unlockvar s:theList 1302b2cb6c8bSBram Moolenaar s:theList[1] = 44 1303b2cb6c8bSBram Moolenaar assert_equal([1, 44, 3], s:theList) 1304b2cb6c8bSBram Moolenaar 1305aacc966cSBram Moolenaar var d = {a: 1, b: 2} 1306aacc966cSBram Moolenaar d.a = 3 1307aacc966cSBram Moolenaar d.b = 4 1308aacc966cSBram Moolenaar assert_equal({a: 3, b: 4}, d) 1309aacc966cSBram Moolenaar lockvar d.a 1310aacc966cSBram Moolenaar d.b = 5 1311aacc966cSBram Moolenaar var ex = '' 1312aacc966cSBram Moolenaar try 1313aacc966cSBram Moolenaar d.a = 6 1314aacc966cSBram Moolenaar catch 1315aacc966cSBram Moolenaar ex = v:exception 1316aacc966cSBram Moolenaar endtry 1317aacc966cSBram Moolenaar assert_match('E1121:', ex) 1318aacc966cSBram Moolenaar unlockvar d.a 1319aacc966cSBram Moolenaar d.a = 7 1320aacc966cSBram Moolenaar assert_equal({a: 7, b: 5}, d) 1321aacc966cSBram Moolenaar 1322b2cb6c8bSBram Moolenaar var lines =<< trim END 1323b2cb6c8bSBram Moolenaar vim9script 1324b2cb6c8bSBram Moolenaar var theList = [1, 2, 3] 1325b2cb6c8bSBram Moolenaar def SetList() 1326b2cb6c8bSBram Moolenaar theList[1] = 22 1327b2cb6c8bSBram Moolenaar assert_equal([1, 22, 3], theList) 1328b2cb6c8bSBram Moolenaar lockvar theList 1329b2cb6c8bSBram Moolenaar theList[1] = 77 1330b2cb6c8bSBram Moolenaar enddef 1331b2cb6c8bSBram Moolenaar SetList() 1332b2cb6c8bSBram Moolenaar END 1333b2cb6c8bSBram Moolenaar CheckScriptFailure(lines, 'E1119', 4) 1334b2cb6c8bSBram Moolenaar 1335b2cb6c8bSBram Moolenaar lines =<< trim END 1336b2cb6c8bSBram Moolenaar var theList = [1, 2, 3] 1337b2cb6c8bSBram Moolenaar lockvar theList 1338b2cb6c8bSBram Moolenaar END 1339b2cb6c8bSBram Moolenaar CheckDefFailure(lines, 'E1178', 2) 1340b2cb6c8bSBram Moolenaar 1341b2cb6c8bSBram Moolenaar lines =<< trim END 1342b2cb6c8bSBram Moolenaar var theList = [1, 2, 3] 1343b2cb6c8bSBram Moolenaar unlockvar theList 1344b2cb6c8bSBram Moolenaar END 1345b2cb6c8bSBram Moolenaar CheckDefFailure(lines, 'E1178', 2) 1346b2cb6c8bSBram Moolenaarenddef 1347b2cb6c8bSBram Moolenaar 13484c137214SBram Moolenaardef Test_substitute_expr() 13494c137214SBram Moolenaar var to = 'repl' 13504c137214SBram Moolenaar new 13514c137214SBram Moolenaar setline(1, 'one from two') 13524c137214SBram Moolenaar s/from/\=to 13534c137214SBram Moolenaar assert_equal('one repl two', getline(1)) 13544c137214SBram Moolenaar 13554c137214SBram Moolenaar setline(1, 'one from two') 13564c137214SBram Moolenaar s/from/\=to .. '_x' 13574c137214SBram Moolenaar assert_equal('one repl_x two', getline(1)) 13584c137214SBram Moolenaar 13594c137214SBram Moolenaar setline(1, 'one from two from three') 13604c137214SBram Moolenaar var also = 'also' 13614c137214SBram Moolenaar s/from/\=to .. '_' .. also/g#e 13624c137214SBram Moolenaar assert_equal('one repl_also two repl_also three', getline(1)) 13634c137214SBram Moolenaar 13648238f088SBram Moolenaar setline(1, 'abc abc abc') 13658238f088SBram Moolenaar for choice in [true, false] 13668238f088SBram Moolenaar :1s/abc/\=choice ? 'yes' : 'no'/ 13678238f088SBram Moolenaar endfor 13688238f088SBram Moolenaar assert_equal('yes no abc', getline(1)) 13698238f088SBram Moolenaar 1370d386e923SBram Moolenaar bwipe! 1371d386e923SBram Moolenaar 13724c137214SBram Moolenaar CheckDefFailure(['s/from/\="x")/'], 'E488:') 13734c137214SBram Moolenaar CheckDefFailure(['s/from/\="x"/9'], 'E488:') 13744c137214SBram Moolenaar 1375d386e923SBram Moolenaar # When calling a function the right instruction list needs to be restored. 13765930ddcdSBram Moolenaar g:cond = true 1377d386e923SBram Moolenaar var lines =<< trim END 1378d386e923SBram Moolenaar vim9script 1379d386e923SBram Moolenaar def Foo() 1380d386e923SBram Moolenaar Bar([]) 1381d386e923SBram Moolenaar enddef 1382d386e923SBram Moolenaar def Bar(l: list<number>) 13835930ddcdSBram Moolenaar if g:cond 1384d386e923SBram Moolenaar s/^/\=Rep()/ 1385d386e923SBram Moolenaar for n in l[:] 1386d386e923SBram Moolenaar endfor 13875930ddcdSBram Moolenaar endif 1388d386e923SBram Moolenaar enddef 1389d386e923SBram Moolenaar def Rep(): string 1390d386e923SBram Moolenaar return 'rep' 1391d386e923SBram Moolenaar enddef 1392d386e923SBram Moolenaar new 1393d386e923SBram Moolenaar Foo() 1394d386e923SBram Moolenaar assert_equal('rep', getline(1)) 13954c137214SBram Moolenaar bwipe! 1396d386e923SBram Moolenaar END 1397d386e923SBram Moolenaar CheckScriptSuccess(lines) 13985930ddcdSBram Moolenaar unlet g:cond 139927523606SBram Moolenaar 140027523606SBram Moolenaar # List results in multiple lines 140127523606SBram Moolenaar new 140227523606SBram Moolenaar setline(1, 'some text here') 140327523606SBram Moolenaar s/text/\=['aaa', 'bbb', 'ccc']/ 140427523606SBram Moolenaar assert_equal(['some aaa', 'bbb', 'ccc', ' here'], getline(1, '$')) 140527523606SBram Moolenaar bwipe! 14064c137214SBram Moolenaarenddef 14074c137214SBram Moolenaar 14082d1c57edSBram Moolenaardef Test_redir_to_var() 14092d1c57edSBram Moolenaar var result: string 14102d1c57edSBram Moolenaar redir => result 14112d1c57edSBram Moolenaar echo 'something' 14122d1c57edSBram Moolenaar redir END 14132d1c57edSBram Moolenaar assert_equal("\nsomething", result) 14142d1c57edSBram Moolenaar 14152d1c57edSBram Moolenaar redir =>> result 14162d1c57edSBram Moolenaar echo 'more' 14172d1c57edSBram Moolenaar redir END 14182d1c57edSBram Moolenaar assert_equal("\nsomething\nmore", result) 14192d1c57edSBram Moolenaar 1420753bcf8cSBram Moolenaar var d: dict<string> 1421753bcf8cSBram Moolenaar redir => d.redir 1422753bcf8cSBram Moolenaar echo 'dict' 1423753bcf8cSBram Moolenaar redir END 1424753bcf8cSBram Moolenaar assert_equal({redir: "\ndict"}, d) 1425753bcf8cSBram Moolenaar 1426753bcf8cSBram Moolenaar var l = ['a', 'b', 'c'] 1427753bcf8cSBram Moolenaar redir => l[1] 1428753bcf8cSBram Moolenaar echo 'list' 1429753bcf8cSBram Moolenaar redir END 1430753bcf8cSBram Moolenaar assert_equal(['a', "\nlist", 'c'], l) 1431753bcf8cSBram Moolenaar 1432753bcf8cSBram Moolenaar var dl = {l: ['x']} 1433753bcf8cSBram Moolenaar redir => dl.l[0] 1434753bcf8cSBram Moolenaar echo 'dict-list' 1435753bcf8cSBram Moolenaar redir END 1436753bcf8cSBram Moolenaar assert_equal({l: ["\ndict-list"]}, dl) 1437753bcf8cSBram Moolenaar 1438a369c3d9SBram Moolenaar redir =>> d.redir 1439a369c3d9SBram Moolenaar echo 'more' 1440a369c3d9SBram Moolenaar redir END 1441a369c3d9SBram Moolenaar assert_equal({redir: "\ndict\nmore"}, d) 1442a369c3d9SBram Moolenaar 14432d1c57edSBram Moolenaar var lines =<< trim END 14442d1c57edSBram Moolenaar redir => notexist 14452d1c57edSBram Moolenaar END 14462d1c57edSBram Moolenaar CheckDefFailure(lines, 'E1089:') 1447753bcf8cSBram Moolenaar 1448753bcf8cSBram Moolenaar lines =<< trim END 1449753bcf8cSBram Moolenaar var ls = 'asdf' 1450753bcf8cSBram Moolenaar redir => ls[1] 1451753bcf8cSBram Moolenaar redir END 1452753bcf8cSBram Moolenaar END 1453753bcf8cSBram Moolenaar CheckDefFailure(lines, 'E1141:') 14542d1c57edSBram Moolenaarenddef 14552d1c57edSBram Moolenaar 145668db996bSBram Moolenaardef Test_echo_void() 145768db996bSBram Moolenaar var lines =<< trim END 145868db996bSBram Moolenaar vim9script 145968db996bSBram Moolenaar def NoReturn() 146068db996bSBram Moolenaar echo 'nothing' 146168db996bSBram Moolenaar enddef 146268db996bSBram Moolenaar echo NoReturn() 146368db996bSBram Moolenaar END 146468db996bSBram Moolenaar CheckScriptFailure(lines, 'E1186:', 5) 146568db996bSBram Moolenaar 146668db996bSBram Moolenaar lines =<< trim END 146768db996bSBram Moolenaar vim9script 146868db996bSBram Moolenaar def NoReturn() 146968db996bSBram Moolenaar echo 'nothing' 147068db996bSBram Moolenaar enddef 147168db996bSBram Moolenaar def Try() 147268db996bSBram Moolenaar echo NoReturn() 147368db996bSBram Moolenaar enddef 147468db996bSBram Moolenaar defcompile 147568db996bSBram Moolenaar END 147668db996bSBram Moolenaar CheckScriptFailure(lines, 'E1186:', 1) 14772c70711eSBram Moolenaarenddef 14782c70711eSBram Moolenaar 14792c70711eSBram Moolenaardef Test_cmdwin_block() 14802c70711eSBram Moolenaar augroup justTesting 14812c70711eSBram Moolenaar autocmd BufEnter * { 14822c70711eSBram Moolenaar echomsg 'in block' 14832c70711eSBram Moolenaar } 14842c70711eSBram Moolenaar augroup END 14852c70711eSBram Moolenaar feedkeys('q:', 'xt') 14862c70711eSBram Moolenaar redraw 14872c70711eSBram Moolenaar feedkeys("aclose\<CR>", 'xt') 14882c70711eSBram Moolenaar 14892c70711eSBram Moolenaar au! justTesting 149068db996bSBram Moolenaarenddef 149168db996bSBram Moolenaar 14927b829268SBram Moolenaardef Test_var_not_cmd() 14937b829268SBram Moolenaar var lines =<< trim END 14947b829268SBram Moolenaar g:notexist:cmd 14957b829268SBram Moolenaar END 14967b829268SBram Moolenaar CheckDefAndScriptFailure2(lines, 'E488: Trailing characters: :cmd', 'E121: Undefined variable: g:notexist', 1) 14977b829268SBram Moolenaar 14987b829268SBram Moolenaar lines =<< trim END 14997b829268SBram Moolenaar g-pat-cmd 15007b829268SBram Moolenaar END 15017b829268SBram Moolenaar CheckDefAndScriptFailure(lines, 'E1241:', 1) 1502051a8a37SBram Moolenaar lines =<< trim END 1503051a8a37SBram Moolenaar g.pat.cmd 1504051a8a37SBram Moolenaar END 1505051a8a37SBram Moolenaar CheckDefAndScriptFailure2(lines, 'E1001: Variable not found: g', 'E121: Undefined variable: g', 1) 15067b829268SBram Moolenaar 15077b829268SBram Moolenaar lines =<< trim END 15087b829268SBram Moolenaar s:notexist:repl 15097b829268SBram Moolenaar END 15107b829268SBram Moolenaar CheckDefAndScriptFailure2(lines, 'E488: Trailing characters: :repl', 'E121: Undefined variable: s:notexist', 1) 15117b829268SBram Moolenaar 15127b829268SBram Moolenaar lines =<< trim END 15137b829268SBram Moolenaar s-pat-repl 15147b829268SBram Moolenaar END 15157b829268SBram Moolenaar CheckDefAndScriptFailure(lines, 'E1241:', 1) 1516051a8a37SBram Moolenaar lines =<< trim END 1517051a8a37SBram Moolenaar s.pat.repl 1518051a8a37SBram Moolenaar END 1519051a8a37SBram Moolenaar CheckDefAndScriptFailure2(lines, 'E1001: Variable not found: s', 'E121: Undefined variable: s', 1) 15207b829268SBram Moolenaar 15217b829268SBram Moolenaar lines =<< trim END 15227b829268SBram Moolenaar w:notexist->len() 15237b829268SBram Moolenaar END 15247b829268SBram Moolenaar CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: w:notexist', 1) 15257b829268SBram Moolenaar 15267b829268SBram Moolenaar lines =<< trim END 15277b829268SBram Moolenaar b:notexist->len() 15287b829268SBram Moolenaar END 15297b829268SBram Moolenaar CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: b:notexist', 1) 15307b829268SBram Moolenaar 15317b829268SBram Moolenaar lines =<< trim END 15327b829268SBram Moolenaar t:notexist->len() 15337b829268SBram Moolenaar END 15347b829268SBram Moolenaar CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: t:notexist', 1) 15357b829268SBram Moolenaarenddef 15367b829268SBram Moolenaar 15377b829268SBram Moolenaardef Test_no_space_after_command() 15387b829268SBram Moolenaar var lines =<< trim END 15397b829268SBram Moolenaar g /pat/cmd 15407b829268SBram Moolenaar END 15417b829268SBram Moolenaar CheckDefAndScriptFailure(lines, 'E1242:', 1) 1542c0abac67SBram Moolenaar lines =<< trim END 1543c0abac67SBram Moolenaar g #pat#cmd 1544c0abac67SBram Moolenaar END 1545c0abac67SBram Moolenaar CheckDefAndScriptFailure(lines, 'E1242:', 1) 1546c0abac67SBram Moolenaar lines =<< trim END 1547c0abac67SBram Moolenaar g#pat#cmd 1548c0abac67SBram Moolenaar END 1549c0abac67SBram Moolenaar CheckDefAndScriptSuccess(lines) 1550c0abac67SBram Moolenaar lines =<< trim END 1551c0abac67SBram Moolenaar g# pat#cmd 1552c0abac67SBram Moolenaar END 1553c0abac67SBram Moolenaar CheckDefAndScriptSuccess(lines) 15547b829268SBram Moolenaar 15557b829268SBram Moolenaar lines =<< trim END 15567b829268SBram Moolenaar s /pat/repl 15577b829268SBram Moolenaar END 15587b829268SBram Moolenaar CheckDefAndScriptFailure(lines, 'E1242:', 1) 1559c0abac67SBram Moolenaar lines =<< trim END 1560c0abac67SBram Moolenaar s #pat#repl 1561c0abac67SBram Moolenaar END 1562c0abac67SBram Moolenaar CheckDefAndScriptFailure(lines, 'E1242:', 1) 1563c0abac67SBram Moolenaar lines =<< trim END 1564c0abac67SBram Moolenaar s#pat#repl 1565c0abac67SBram Moolenaar END 1566c0abac67SBram Moolenaar CheckDefExecAndScriptFailure(lines, 'E486:', 1) 1567c0abac67SBram Moolenaar lines =<< trim END 1568c0abac67SBram Moolenaar s# pat#repl 1569c0abac67SBram Moolenaar END 1570c0abac67SBram Moolenaar CheckDefExecAndScriptFailure(lines, 'E486:', 1) 15717b829268SBram Moolenaarenddef 15727b829268SBram Moolenaar 15732a16dc66SYegappan Lakshmanan" Test for the 'previewpopup' option 15742a16dc66SYegappan Lakshmanandef Test_previewpopup() 1575733b124aSYegappan Lakshmanan set previewpopup=height:10,width:60 1576733b124aSYegappan Lakshmanan pedit Xfile 1577733b124aSYegappan Lakshmanan var id = popup_findpreview() 1578733b124aSYegappan Lakshmanan assert_notequal(id, 0) 1579733b124aSYegappan Lakshmanan assert_match('Xfile', popup_getoptions(id).title) 1580733b124aSYegappan Lakshmanan popup_clear() 1581733b124aSYegappan Lakshmanan set previewpopup& 1582733b124aSYegappan Lakshmananenddef 1583733b124aSYegappan Lakshmanan 1584*c8a9fe54SBram Moolenaardef Test_syntax_enable_clear() 1585*c8a9fe54SBram Moolenaar syntax clear 1586*c8a9fe54SBram Moolenaar syntax enable 1587*c8a9fe54SBram Moolenaar highlight clear String 1588*c8a9fe54SBram Moolenaar assert_equal(true, hlget('String')->get(0, {})->get('default', false)) 1589*c8a9fe54SBram Moolenaar syntax clear 1590*c8a9fe54SBram Moolenaarenddef 1591*c8a9fe54SBram Moolenaar 1592b2cb6c8bSBram Moolenaar 1593cfe435d7SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker 1594