18a7d6542SBram Moolenaar" Test various aspects of the Vim9 script language. 28a7d6542SBram Moolenaar 3673660abSBram Moolenaarsource check.vim 4101f4810SBram Moolenaarsource term_util.vim 5ad39c094SBram Moolenaarsource view_util.vim 6cfe435d7SBram Moolenaarsource vim9.vim 7e3d4685fSBram Moolenaarsource shared.vim 88a7d6542SBram Moolenaar 95d72ce69SBram Moolenaardef Test_range_only() 105d72ce69SBram Moolenaar new 115d72ce69SBram Moolenaar setline(1, ['blah', 'Blah']) 125d72ce69SBram Moolenaar :/Blah/ 135d72ce69SBram Moolenaar assert_equal(2, getcurpos()[1]) 14c2af0affSBram Moolenaar bwipe! 15c2af0affSBram Moolenaar 16c2af0affSBram Moolenaar # without range commands use current line 17c2af0affSBram Moolenaar new 18c2af0affSBram Moolenaar setline(1, ['one', 'two', 'three']) 19c2af0affSBram Moolenaar :2 20c2af0affSBram Moolenaar print 21c2af0affSBram Moolenaar assert_equal('two', Screenline(&lines)) 22c2af0affSBram Moolenaar :3 23c2af0affSBram Moolenaar list 24c2af0affSBram Moolenaar assert_equal('three$', Screenline(&lines)) 25b8554304SBram Moolenaar 26b8554304SBram Moolenaar # missing command does not print the line 27b8554304SBram Moolenaar var lines =<< trim END 28b8554304SBram Moolenaar vim9script 29b8554304SBram Moolenaar :1| 30b8554304SBram Moolenaar assert_equal('three$', Screenline(&lines)) 31b8554304SBram Moolenaar :| 32b8554304SBram Moolenaar assert_equal('three$', Screenline(&lines)) 33b8554304SBram Moolenaar END 34b8554304SBram Moolenaar CheckScriptSuccess(lines) 35b8554304SBram Moolenaar 36c2af0affSBram Moolenaar bwipe! 37025cb1caSBram Moolenaar 38025cb1caSBram Moolenaar # won't generate anything 39025cb1caSBram Moolenaar if false 40025cb1caSBram Moolenaar :123 41025cb1caSBram Moolenaar endif 425d72ce69SBram Moolenaarenddef 435d72ce69SBram Moolenaar 44a6e67e4fSBram Moolenaarlet g:alist = [7] 45a6e67e4fSBram Moolenaarlet g:astring = 'text' 46f0b9f43cSBram Moolenaarlet g:anumber = 123 476e587dcbSBram Moolenaar 484c17ad94SBram Moolenaardef Test_delfunction() 49f5be8cdbSBram Moolenaar # Check function is defined in script namespace 504c17ad94SBram Moolenaar CheckScriptSuccess([ 514c17ad94SBram Moolenaar 'vim9script', 524c17ad94SBram Moolenaar 'func CheckMe()', 534c17ad94SBram Moolenaar ' return 123', 544c17ad94SBram Moolenaar 'endfunc', 554c17ad94SBram Moolenaar 'assert_equal(123, s:CheckMe())', 564c17ad94SBram Moolenaar ]) 574c17ad94SBram Moolenaar 58f5be8cdbSBram Moolenaar # Check function in script namespace cannot be deleted 594c17ad94SBram Moolenaar CheckScriptFailure([ 604c17ad94SBram Moolenaar 'vim9script', 614c17ad94SBram Moolenaar 'func DeleteMe1()', 624c17ad94SBram Moolenaar 'endfunc', 634c17ad94SBram Moolenaar 'delfunction DeleteMe1', 644c17ad94SBram Moolenaar ], 'E1084:') 654c17ad94SBram Moolenaar CheckScriptFailure([ 664c17ad94SBram Moolenaar 'vim9script', 674c17ad94SBram Moolenaar 'func DeleteMe2()', 684c17ad94SBram Moolenaar 'endfunc', 694c17ad94SBram Moolenaar 'def DoThat()', 704c17ad94SBram Moolenaar ' delfunction DeleteMe2', 714c17ad94SBram Moolenaar 'enddef', 724c17ad94SBram Moolenaar 'DoThat()', 734c17ad94SBram Moolenaar ], 'E1084:') 744c17ad94SBram Moolenaar CheckScriptFailure([ 754c17ad94SBram Moolenaar 'vim9script', 764c17ad94SBram Moolenaar 'def DeleteMe3()', 774c17ad94SBram Moolenaar 'enddef', 784c17ad94SBram Moolenaar 'delfunction DeleteMe3', 794c17ad94SBram Moolenaar ], 'E1084:') 804c17ad94SBram Moolenaar CheckScriptFailure([ 814c17ad94SBram Moolenaar 'vim9script', 824c17ad94SBram Moolenaar 'def DeleteMe4()', 834c17ad94SBram Moolenaar 'enddef', 844c17ad94SBram Moolenaar 'def DoThat()', 854c17ad94SBram Moolenaar ' delfunction DeleteMe4', 864c17ad94SBram Moolenaar 'enddef', 874c17ad94SBram Moolenaar 'DoThat()', 884c17ad94SBram Moolenaar ], 'E1084:') 89925e9fd6SBram Moolenaar 90925e9fd6SBram Moolenaar # Check that global :def function can be replaced and deleted 91cfcd011fSBram Moolenaar var lines =<< trim END 92925e9fd6SBram Moolenaar vim9script 93925e9fd6SBram Moolenaar def g:Global(): string 94925e9fd6SBram Moolenaar return "yes" 95925e9fd6SBram Moolenaar enddef 96925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 97925e9fd6SBram Moolenaar def! g:Global(): string 98925e9fd6SBram Moolenaar return "no" 99925e9fd6SBram Moolenaar enddef 100925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 101925e9fd6SBram Moolenaar delfunc g:Global 102925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 103925e9fd6SBram Moolenaar END 104925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 105925e9fd6SBram Moolenaar 106925e9fd6SBram Moolenaar # Check that global function can be replaced by a :def function and deleted 107925e9fd6SBram Moolenaar lines =<< trim END 108925e9fd6SBram Moolenaar vim9script 109925e9fd6SBram Moolenaar func g:Global() 110925e9fd6SBram Moolenaar return "yes" 111925e9fd6SBram Moolenaar endfunc 112925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 113925e9fd6SBram Moolenaar def! g:Global(): string 114925e9fd6SBram Moolenaar return "no" 115925e9fd6SBram Moolenaar enddef 116925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 117925e9fd6SBram Moolenaar delfunc g:Global 118925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 119925e9fd6SBram Moolenaar END 120925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 121925e9fd6SBram Moolenaar 122925e9fd6SBram Moolenaar # Check that global :def function can be replaced by a function and deleted 123925e9fd6SBram Moolenaar lines =<< trim END 124925e9fd6SBram Moolenaar vim9script 125925e9fd6SBram Moolenaar def g:Global(): string 126925e9fd6SBram Moolenaar return "yes" 127925e9fd6SBram Moolenaar enddef 128925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 129925e9fd6SBram Moolenaar func! g:Global() 130925e9fd6SBram Moolenaar return "no" 131925e9fd6SBram Moolenaar endfunc 132925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 133925e9fd6SBram Moolenaar delfunc g:Global 134925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 135925e9fd6SBram Moolenaar END 136925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 1374c17ad94SBram Moolenaarenddef 1384c17ad94SBram Moolenaar 13908052228SBram Moolenaardef Test_wrong_type() 140cfcd011fSBram Moolenaar CheckDefFailure(['var name: list<nothing>'], 'E1010:') 141cfcd011fSBram Moolenaar CheckDefFailure(['var name: list<list<nothing>>'], 'E1010:') 142cfcd011fSBram Moolenaar CheckDefFailure(['var name: dict<nothing>'], 'E1010:') 143cfcd011fSBram Moolenaar CheckDefFailure(['var name: dict<dict<nothing>>'], 'E1010:') 144599c89c8SBram Moolenaar 145cfcd011fSBram Moolenaar CheckDefFailure(['var name: dict<number'], 'E1009:') 146cfcd011fSBram Moolenaar CheckDefFailure(['var name: dict<list<number>'], 'E1009:') 14742a480bfSBram Moolenaar 148cfcd011fSBram Moolenaar CheckDefFailure(['var name: ally'], 'E1010:') 149cfcd011fSBram Moolenaar CheckDefFailure(['var name: bram'], 'E1010:') 150cfcd011fSBram Moolenaar CheckDefFailure(['var name: cathy'], 'E1010:') 151cfcd011fSBram Moolenaar CheckDefFailure(['var name: dom'], 'E1010:') 152cfcd011fSBram Moolenaar CheckDefFailure(['var name: freddy'], 'E1010:') 153cfcd011fSBram Moolenaar CheckDefFailure(['var name: john'], 'E1010:') 154cfcd011fSBram Moolenaar CheckDefFailure(['var name: larry'], 'E1010:') 155cfcd011fSBram Moolenaar CheckDefFailure(['var name: ned'], 'E1010:') 156cfcd011fSBram Moolenaar CheckDefFailure(['var name: pam'], 'E1010:') 157cfcd011fSBram Moolenaar CheckDefFailure(['var name: sam'], 'E1010:') 158cfcd011fSBram Moolenaar CheckDefFailure(['var name: vim'], 'E1010:') 159a0a9f43aSBram Moolenaar 160cfcd011fSBram Moolenaar CheckDefFailure(['var Ref: number', 'Ref()'], 'E1085:') 161cfcd011fSBram Moolenaar CheckDefFailure(['var Ref: string', 'var res = Ref()'], 'E1085:') 16208052228SBram Moolenaarenddef 1638a7d6542SBram Moolenaar 16410c65860SBram Moolenaardef Test_script_wrong_type() 16510c65860SBram Moolenaar var lines =<< trim END 16610c65860SBram Moolenaar vim9script 16710c65860SBram Moolenaar var s:dict: dict<string> 16810c65860SBram Moolenaar s:dict['a'] = ['x'] 16910c65860SBram Moolenaar END 17010c65860SBram Moolenaar CheckScriptFailure(lines, 'E1012: Type mismatch; expected string but got list<string>', 3) 17110c65860SBram Moolenaarenddef 17210c65860SBram Moolenaar 17308052228SBram Moolenaardef Test_const() 174cfcd011fSBram Moolenaar CheckDefFailure(['final name = 234', 'name = 99'], 'E1018:') 175cfcd011fSBram Moolenaar CheckDefFailure(['final one = 234', 'var one = 99'], 'E1017:') 176cfcd011fSBram Moolenaar CheckDefFailure(['final list = [1, 2]', 'var list = [3, 4]'], 'E1017:') 17730fd8204SBram Moolenaar CheckDefFailure(['final two'], 'E1125:') 17830fd8204SBram Moolenaar CheckDefFailure(['final &option'], 'E996:') 179dbeecb2bSBram Moolenaar 180cfcd011fSBram Moolenaar var lines =<< trim END 18130fd8204SBram Moolenaar final list = [1, 2, 3] 182dbeecb2bSBram Moolenaar list[0] = 4 1830b4c66c6SBram Moolenaar list->assert_equal([4, 2, 3]) 18430fd8204SBram Moolenaar const other = [5, 6, 7] 1850b4c66c6SBram Moolenaar other->assert_equal([5, 6, 7]) 18671abe482SBram Moolenaar 187cfcd011fSBram Moolenaar var varlist = [7, 8] 18830fd8204SBram Moolenaar const constlist = [1, varlist, 3] 18971abe482SBram Moolenaar varlist[0] = 77 19071abe482SBram Moolenaar # TODO: does not work yet 19171abe482SBram Moolenaar # constlist[1][1] = 88 192cfcd011fSBram Moolenaar var cl = constlist[1] 19371abe482SBram Moolenaar cl[1] = 88 19471abe482SBram Moolenaar constlist->assert_equal([1, [77, 88], 3]) 19571abe482SBram Moolenaar 196e0de171eSBram Moolenaar var vardict = {five: 5, six: 6} 197e0de171eSBram Moolenaar const constdict = {one: 1, two: vardict, three: 3} 19871abe482SBram Moolenaar vardict['five'] = 55 19971abe482SBram Moolenaar # TODO: does not work yet 20071abe482SBram Moolenaar # constdict['two']['six'] = 66 201cfcd011fSBram Moolenaar var cd = constdict['two'] 20271abe482SBram Moolenaar cd['six'] = 66 203e0de171eSBram Moolenaar constdict->assert_equal({one: 1, two: {five: 55, six: 66}, three: 3}) 204dbeecb2bSBram Moolenaar END 205dbeecb2bSBram Moolenaar CheckDefAndScriptSuccess(lines) 20608052228SBram Moolenaarenddef 2078a7d6542SBram Moolenaar 2080b4c66c6SBram Moolenaardef Test_const_bang() 209cfcd011fSBram Moolenaar var lines =<< trim END 21030fd8204SBram Moolenaar const var = 234 2110b4c66c6SBram Moolenaar var = 99 2120b4c66c6SBram Moolenaar END 2130b4c66c6SBram Moolenaar CheckDefExecFailure(lines, 'E1018:', 2) 2140b4c66c6SBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E46:', 3) 2150b4c66c6SBram Moolenaar 2160b4c66c6SBram Moolenaar lines =<< trim END 21730fd8204SBram Moolenaar const ll = [2, 3, 4] 2180b4c66c6SBram Moolenaar ll[0] = 99 2190b4c66c6SBram Moolenaar END 2200b4c66c6SBram Moolenaar CheckDefExecFailure(lines, 'E1119:', 2) 2210b4c66c6SBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E741:', 3) 2220b4c66c6SBram Moolenaar 2230b4c66c6SBram Moolenaar lines =<< trim END 22430fd8204SBram Moolenaar const ll = [2, 3, 4] 2250b4c66c6SBram Moolenaar ll[3] = 99 2260b4c66c6SBram Moolenaar END 2270b4c66c6SBram Moolenaar CheckDefExecFailure(lines, 'E1118:', 2) 2280b4c66c6SBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E684:', 3) 2290b4c66c6SBram Moolenaar 2300b4c66c6SBram Moolenaar lines =<< trim END 231e0de171eSBram Moolenaar const dd = {one: 1, two: 2} 2320b4c66c6SBram Moolenaar dd["one"] = 99 2330b4c66c6SBram Moolenaar END 2340b4c66c6SBram Moolenaar CheckDefExecFailure(lines, 'E1121:', 2) 2350b4c66c6SBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E741:', 3) 2360b4c66c6SBram Moolenaar 2370b4c66c6SBram Moolenaar lines =<< trim END 238e0de171eSBram Moolenaar const dd = {one: 1, two: 2} 2390b4c66c6SBram Moolenaar dd["three"] = 99 2400b4c66c6SBram Moolenaar END 2410b4c66c6SBram Moolenaar CheckDefExecFailure(lines, 'E1120:') 2420b4c66c6SBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E741:', 3) 2430b4c66c6SBram Moolenaarenddef 2440b4c66c6SBram Moolenaar 245df069eecSBram Moolenaardef Test_range_no_colon() 246d2c61705SBram Moolenaar CheckDefFailure(['%s/a/b/'], 'E1050:') 247d2c61705SBram Moolenaar CheckDefFailure(['+ s/a/b/'], 'E1050:') 248d2c61705SBram Moolenaar CheckDefFailure(['- s/a/b/'], 'E1050:') 249d2c61705SBram Moolenaar CheckDefFailure(['. s/a/b/'], 'E1050:') 250df069eecSBram Moolenaarenddef 251df069eecSBram Moolenaar 252df069eecSBram Moolenaar 2538a7d6542SBram Moolenaardef Test_block() 254cfcd011fSBram Moolenaar var outer = 1 2558a7d6542SBram Moolenaar { 256cfcd011fSBram Moolenaar var inner = 2 2578a7d6542SBram Moolenaar assert_equal(1, outer) 2588a7d6542SBram Moolenaar assert_equal(2, inner) 2598a7d6542SBram Moolenaar } 2608a7d6542SBram Moolenaar assert_equal(1, outer) 2613f1e9f00SBram Moolenaar 2623f1e9f00SBram Moolenaar {|echo 'yes'|} 2638a7d6542SBram Moolenaarenddef 2648a7d6542SBram Moolenaar 26508052228SBram Moolenaardef Test_block_failure() 266cfcd011fSBram Moolenaar CheckDefFailure(['{', 'var inner = 1', '}', 'echo inner'], 'E1001:') 26708052228SBram Moolenaar CheckDefFailure(['}'], 'E1025:') 26808052228SBram Moolenaar CheckDefFailure(['{', 'echo 1'], 'E1026:') 26908052228SBram Moolenaarenddef 2708a7d6542SBram Moolenaar 271fbbcd003SBram Moolenaardef Test_block_local_vars() 272fbbcd003SBram Moolenaar var lines =<< trim END 273fbbcd003SBram Moolenaar vim9script 274ed234f24SBram Moolenaar v:testing = 1 275fbbcd003SBram Moolenaar if true 276ed234f24SBram Moolenaar var text = ['hello'] 277ed234f24SBram Moolenaar def SayHello(): list<string> 278fbbcd003SBram Moolenaar return text 279fbbcd003SBram Moolenaar enddef 280fbbcd003SBram Moolenaar def SetText(v: string) 281ed234f24SBram Moolenaar text = [v] 282fbbcd003SBram Moolenaar enddef 283fbbcd003SBram Moolenaar endif 284fbbcd003SBram Moolenaar 285fbbcd003SBram Moolenaar if true 286ed234f24SBram Moolenaar var text = ['again'] 287ed234f24SBram Moolenaar def SayAgain(): list<string> 288fbbcd003SBram Moolenaar return text 289fbbcd003SBram Moolenaar enddef 290fbbcd003SBram Moolenaar endif 291ed234f24SBram Moolenaar 292ed234f24SBram Moolenaar # test that the "text" variables are not cleaned up 293ed234f24SBram Moolenaar test_garbagecollect_now() 294ed234f24SBram Moolenaar 295fbbcd003SBram Moolenaar defcompile 296fbbcd003SBram Moolenaar 297ed234f24SBram Moolenaar assert_equal(['hello'], SayHello()) 298ed234f24SBram Moolenaar assert_equal(['again'], SayAgain()) 299fbbcd003SBram Moolenaar 300fbbcd003SBram Moolenaar SetText('foobar') 301ed234f24SBram Moolenaar assert_equal(['foobar'], SayHello()) 302ed234f24SBram Moolenaar 303ed234f24SBram Moolenaar call writefile(['ok'], 'Xdidit') 304ed234f24SBram Moolenaar qall! 305fbbcd003SBram Moolenaar END 306ed234f24SBram Moolenaar 307ed234f24SBram Moolenaar # need to execute this with a separate Vim instance to avoid the current 308ed234f24SBram Moolenaar # context gets garbage collected. 309ed234f24SBram Moolenaar writefile(lines, 'Xscript') 310ed234f24SBram Moolenaar RunVim([], [], '-S Xscript') 311ed234f24SBram Moolenaar assert_equal(['ok'], readfile('Xdidit')) 312ed234f24SBram Moolenaar 313ed234f24SBram Moolenaar delete('Xscript') 314ed234f24SBram Moolenaar delete('Xdidit') 315fbbcd003SBram Moolenaarenddef 316fbbcd003SBram Moolenaar 31739ca4127SBram Moolenaardef Test_block_local_vars_with_func() 31839ca4127SBram Moolenaar var lines =<< trim END 31939ca4127SBram Moolenaar vim9script 32039ca4127SBram Moolenaar if true 32139ca4127SBram Moolenaar var foo = 'foo' 32239ca4127SBram Moolenaar if true 32339ca4127SBram Moolenaar var bar = 'bar' 32439ca4127SBram Moolenaar def Func(): list<string> 32539ca4127SBram Moolenaar return [foo, bar] 32639ca4127SBram Moolenaar enddef 32739ca4127SBram Moolenaar endif 32839ca4127SBram Moolenaar endif 32939ca4127SBram Moolenaar # function is compiled here, after blocks have finished, can still access 33039ca4127SBram Moolenaar # "foo" and "bar" 33139ca4127SBram Moolenaar assert_equal(['foo', 'bar'], Func()) 33239ca4127SBram Moolenaar END 33339ca4127SBram Moolenaar CheckScriptSuccess(lines) 33439ca4127SBram Moolenaarenddef 33539ca4127SBram Moolenaar 336d032f34aSBram Moolenaarfunc g:NoSuchFunc() 337d032f34aSBram Moolenaar echo 'none' 338d032f34aSBram Moolenaarendfunc 339d032f34aSBram Moolenaar 3409e1d9e34SBram Moolenaardef Test_try_catch_throw() 341cfcd011fSBram Moolenaar var l = [] 3427a092245SBram Moolenaar try # comment 3438a7d6542SBram Moolenaar add(l, '1') 3448a7d6542SBram Moolenaar throw 'wrong' 3458a7d6542SBram Moolenaar add(l, '2') 3467a092245SBram Moolenaar catch # comment 3478a7d6542SBram Moolenaar add(l, v:exception) 3487a092245SBram Moolenaar finally # comment 3498a7d6542SBram Moolenaar add(l, '3') 3507a092245SBram Moolenaar endtry # comment 3518a7d6542SBram Moolenaar assert_equal(['1', 'wrong', '3'], l) 35268d130c6SBram Moolenaar 353e859312eSBram Moolenaar l = [] 354e859312eSBram Moolenaar try 355e859312eSBram Moolenaar try 356e859312eSBram Moolenaar add(l, '1') 357e859312eSBram Moolenaar throw 'wrong' 358e859312eSBram Moolenaar add(l, '2') 359e859312eSBram Moolenaar catch /right/ 360e859312eSBram Moolenaar add(l, v:exception) 361e859312eSBram Moolenaar endtry 362e859312eSBram Moolenaar catch /wrong/ 363e859312eSBram Moolenaar add(l, 'caught') 364373863edSBram Moolenaar fina 365e859312eSBram Moolenaar add(l, 'finally') 366e859312eSBram Moolenaar endtry 367e859312eSBram Moolenaar assert_equal(['1', 'caught', 'finally'], l) 368e859312eSBram Moolenaar 369cfcd011fSBram Moolenaar var n: number 37068d130c6SBram Moolenaar try 37168d130c6SBram Moolenaar n = l[3] 37268d130c6SBram Moolenaar catch /E684:/ 37368d130c6SBram Moolenaar n = 99 37468d130c6SBram Moolenaar endtry 37568d130c6SBram Moolenaar assert_equal(99, n) 37668d130c6SBram Moolenaar 37769f7050cSBram Moolenaar var done = 'no' 37869f7050cSBram Moolenaar if 0 37969f7050cSBram Moolenaar try | catch | endtry 38069f7050cSBram Moolenaar else 38169f7050cSBram Moolenaar done = 'yes' 38269f7050cSBram Moolenaar endif 38369f7050cSBram Moolenaar assert_equal('yes', done) 38469f7050cSBram Moolenaar 38569f7050cSBram Moolenaar done = 'no' 38669f7050cSBram Moolenaar if 1 38769f7050cSBram Moolenaar done = 'yes' 38869f7050cSBram Moolenaar else 38969f7050cSBram Moolenaar try | catch | endtry 39069f7050cSBram Moolenaar done = 'never' 39169f7050cSBram Moolenaar endif 39269f7050cSBram Moolenaar assert_equal('yes', done) 39369f7050cSBram Moolenaar 39469f7050cSBram Moolenaar if 1 39569f7050cSBram Moolenaar else 39669f7050cSBram Moolenaar try | catch /pat/ | endtry 39769f7050cSBram Moolenaar try | catch /pat/ 39869f7050cSBram Moolenaar endtry 39969f7050cSBram Moolenaar try 40069f7050cSBram Moolenaar catch /pat/ | endtry 40169f7050cSBram Moolenaar try 40269f7050cSBram Moolenaar catch /pat/ 40369f7050cSBram Moolenaar endtry 40469f7050cSBram Moolenaar endif 40569f7050cSBram Moolenaar 40668d130c6SBram Moolenaar try 407cc673e74SBram Moolenaar # string slice returns a string, not a number 40868d130c6SBram Moolenaar n = g:astring[3] 4095e654230SBram Moolenaar catch /E1012:/ 41068d130c6SBram Moolenaar n = 77 41168d130c6SBram Moolenaar endtry 41268d130c6SBram Moolenaar assert_equal(77, n) 41368d130c6SBram Moolenaar 41468d130c6SBram Moolenaar try 41568d130c6SBram Moolenaar n = l[g:astring] 4165e654230SBram Moolenaar catch /E1012:/ 41756acb094SBram Moolenaar n = 88 41868d130c6SBram Moolenaar endtry 41956acb094SBram Moolenaar assert_equal(88, n) 42068d130c6SBram Moolenaar 42168d130c6SBram Moolenaar try 42268d130c6SBram Moolenaar n = s:does_not_exist 42368d130c6SBram Moolenaar catch /E121:/ 424f0b9f43cSBram Moolenaar n = 111 425f0b9f43cSBram Moolenaar endtry 426f0b9f43cSBram Moolenaar assert_equal(111, n) 427f0b9f43cSBram Moolenaar 428f0b9f43cSBram Moolenaar try 429f0b9f43cSBram Moolenaar n = g:does_not_exist 430f0b9f43cSBram Moolenaar catch /E121:/ 43168d130c6SBram Moolenaar n = 121 43268d130c6SBram Moolenaar endtry 43368d130c6SBram Moolenaar assert_equal(121, n) 43468d130c6SBram Moolenaar 435e0de171eSBram Moolenaar var d = {one: 1} 43668d130c6SBram Moolenaar try 43768d130c6SBram Moolenaar n = d[g:astring] 43868d130c6SBram Moolenaar catch /E716:/ 43968d130c6SBram Moolenaar n = 222 44068d130c6SBram Moolenaar endtry 44168d130c6SBram Moolenaar assert_equal(222, n) 442f0b9f43cSBram Moolenaar 443f0b9f43cSBram Moolenaar try 444f0b9f43cSBram Moolenaar n = -g:astring 445f0b9f43cSBram Moolenaar catch /E39:/ 446f0b9f43cSBram Moolenaar n = 233 447f0b9f43cSBram Moolenaar endtry 448f0b9f43cSBram Moolenaar assert_equal(233, n) 449f0b9f43cSBram Moolenaar 450f0b9f43cSBram Moolenaar try 451f0b9f43cSBram Moolenaar n = +g:astring 452f0b9f43cSBram Moolenaar catch /E1030:/ 453f0b9f43cSBram Moolenaar n = 244 454f0b9f43cSBram Moolenaar endtry 455f0b9f43cSBram Moolenaar assert_equal(244, n) 456f0b9f43cSBram Moolenaar 457f0b9f43cSBram Moolenaar try 458f0b9f43cSBram Moolenaar n = +g:alist 459f0b9f43cSBram Moolenaar catch /E745:/ 460f0b9f43cSBram Moolenaar n = 255 461f0b9f43cSBram Moolenaar endtry 462f0b9f43cSBram Moolenaar assert_equal(255, n) 463f0b9f43cSBram Moolenaar 464cfcd011fSBram Moolenaar var nd: dict<any> 465f0b9f43cSBram Moolenaar try 4662e5910bfSBram Moolenaar nd = {[g:alist]: 1} 4672e5910bfSBram Moolenaar catch /E1105:/ 468f0b9f43cSBram Moolenaar n = 266 469f0b9f43cSBram Moolenaar endtry 470f0b9f43cSBram Moolenaar assert_equal(266, n) 471f0b9f43cSBram Moolenaar 472f0b9f43cSBram Moolenaar try 473f0b9f43cSBram Moolenaar [n] = [1, 2, 3] 474f0b9f43cSBram Moolenaar catch /E1093:/ 475f0b9f43cSBram Moolenaar n = 277 476f0b9f43cSBram Moolenaar endtry 477f0b9f43cSBram Moolenaar assert_equal(277, n) 478f0b9f43cSBram Moolenaar 479e859312eSBram Moolenaar try 480e859312eSBram Moolenaar &ts = g:astring 4815e654230SBram Moolenaar catch /E1012:/ 482e859312eSBram Moolenaar n = 288 483e859312eSBram Moolenaar endtry 484e859312eSBram Moolenaar assert_equal(288, n) 485e859312eSBram Moolenaar 486e859312eSBram Moolenaar try 487e859312eSBram Moolenaar &backspace = 'asdf' 488e859312eSBram Moolenaar catch /E474:/ 489e859312eSBram Moolenaar n = 299 490e859312eSBram Moolenaar endtry 491e859312eSBram Moolenaar assert_equal(299, n) 492e859312eSBram Moolenaar 493e859312eSBram Moolenaar l = [1] 494e859312eSBram Moolenaar try 495e859312eSBram Moolenaar l[3] = 3 496e859312eSBram Moolenaar catch /E684:/ 497e859312eSBram Moolenaar n = 300 498e859312eSBram Moolenaar endtry 499e859312eSBram Moolenaar assert_equal(300, n) 500e859312eSBram Moolenaar 501e859312eSBram Moolenaar try 502e859312eSBram Moolenaar unlet g:does_not_exist 503e859312eSBram Moolenaar catch /E108:/ 504e859312eSBram Moolenaar n = 322 505e859312eSBram Moolenaar endtry 506e859312eSBram Moolenaar assert_equal(322, n) 507e859312eSBram Moolenaar 508e859312eSBram Moolenaar try 5092bede173SBram Moolenaar d = {text: 1, [g:astring]: 2} 510e859312eSBram Moolenaar catch /E721:/ 511e859312eSBram Moolenaar n = 333 512e859312eSBram Moolenaar endtry 513e859312eSBram Moolenaar assert_equal(333, n) 514e859312eSBram Moolenaar 515e859312eSBram Moolenaar try 516e859312eSBram Moolenaar l = DeletedFunc() 517e859312eSBram Moolenaar catch /E933:/ 518e859312eSBram Moolenaar n = 344 519e859312eSBram Moolenaar endtry 520e859312eSBram Moolenaar assert_equal(344, n) 521d032f34aSBram Moolenaar 522d032f34aSBram Moolenaar try 523d032f34aSBram Moolenaar echo len(v:true) 524d032f34aSBram Moolenaar catch /E701:/ 525d032f34aSBram Moolenaar n = 355 526d032f34aSBram Moolenaar endtry 527d032f34aSBram Moolenaar assert_equal(355, n) 528d032f34aSBram Moolenaar 529cfcd011fSBram Moolenaar var P = function('g:NoSuchFunc') 530d032f34aSBram Moolenaar delfunc g:NoSuchFunc 531d032f34aSBram Moolenaar try 532d032f34aSBram Moolenaar echo P() 533d032f34aSBram Moolenaar catch /E117:/ 534d032f34aSBram Moolenaar n = 366 535d032f34aSBram Moolenaar endtry 536d032f34aSBram Moolenaar assert_equal(366, n) 537d032f34aSBram Moolenaar 538d032f34aSBram Moolenaar try 539d032f34aSBram Moolenaar echo g:NoSuchFunc() 540d032f34aSBram Moolenaar catch /E117:/ 541d032f34aSBram Moolenaar n = 377 542d032f34aSBram Moolenaar endtry 543d032f34aSBram Moolenaar assert_equal(377, n) 544d032f34aSBram Moolenaar 545d032f34aSBram Moolenaar try 546d032f34aSBram Moolenaar echo g:alist + 4 547d032f34aSBram Moolenaar catch /E745:/ 548d032f34aSBram Moolenaar n = 388 549d032f34aSBram Moolenaar endtry 550d032f34aSBram Moolenaar assert_equal(388, n) 551d032f34aSBram Moolenaar 552d032f34aSBram Moolenaar try 553d032f34aSBram Moolenaar echo 4 + g:alist 554d032f34aSBram Moolenaar catch /E745:/ 555d032f34aSBram Moolenaar n = 399 556d032f34aSBram Moolenaar endtry 557d032f34aSBram Moolenaar assert_equal(399, n) 558d032f34aSBram Moolenaar 559d032f34aSBram Moolenaar try 560d032f34aSBram Moolenaar echo g:alist.member 561d032f34aSBram Moolenaar catch /E715:/ 562d032f34aSBram Moolenaar n = 400 563d032f34aSBram Moolenaar endtry 564d032f34aSBram Moolenaar assert_equal(400, n) 565d032f34aSBram Moolenaar 566d032f34aSBram Moolenaar try 567d032f34aSBram Moolenaar echo d.member 568d032f34aSBram Moolenaar catch /E716:/ 569d032f34aSBram Moolenaar n = 411 570d032f34aSBram Moolenaar endtry 571d032f34aSBram Moolenaar assert_equal(411, n) 572d9d7789bSBram Moolenaar 573d9d7789bSBram Moolenaar var counter = 0 574d9d7789bSBram Moolenaar for i in range(4) 575d9d7789bSBram Moolenaar try 576d9d7789bSBram Moolenaar eval [][0] 577d9d7789bSBram Moolenaar catch 578d9d7789bSBram Moolenaar endtry 579d9d7789bSBram Moolenaar counter += 1 580d9d7789bSBram Moolenaar endfor 581d9d7789bSBram Moolenaar assert_equal(4, counter) 5827e82c5f3SBram Moolenaar 5837e82c5f3SBram Moolenaar # return in finally after empty catch 5847e82c5f3SBram Moolenaar def ReturnInFinally(): number 5857e82c5f3SBram Moolenaar try 5867e82c5f3SBram Moolenaar finally 5877e82c5f3SBram Moolenaar return 4 5887e82c5f3SBram Moolenaar endtry 5897e82c5f3SBram Moolenaar return 2 5907e82c5f3SBram Moolenaar enddef 5917e82c5f3SBram Moolenaar assert_equal(4, ReturnInFinally()) 5928a7d6542SBram Moolenaarenddef 5938a7d6542SBram Moolenaar 5949cb577a6SBram Moolenaardef Test_nocatch_return_in_try() 5959cb577a6SBram Moolenaar # return in try block returns normally 5969cb577a6SBram Moolenaar def ReturnInTry(): string 5979cb577a6SBram Moolenaar try 5989cb577a6SBram Moolenaar return '"some message"' 5999cb577a6SBram Moolenaar catch 6009cb577a6SBram Moolenaar endtry 6019cb577a6SBram Moolenaar return 'not reached' 6029cb577a6SBram Moolenaar enddef 6039cb577a6SBram Moolenaar exe 'echoerr ' .. ReturnInTry() 6049cb577a6SBram Moolenaarenddef 6059cb577a6SBram Moolenaar 6061430ceebSBram Moolenaardef Test_cnext_works_in_catch() 6071430ceebSBram Moolenaar var lines =<< trim END 6081430ceebSBram Moolenaar vim9script 6091430ceebSBram Moolenaar au BufEnter * eval 0 6101430ceebSBram Moolenaar writefile(['text'], 'Xfile1') 6111430ceebSBram Moolenaar writefile(['text'], 'Xfile2') 6121430ceebSBram Moolenaar var items = [ 6131430ceebSBram Moolenaar {lnum: 1, filename: 'Xfile1', valid: true}, 6141430ceebSBram Moolenaar {lnum: 1, filename: 'Xfile2', valid: true} 6151430ceebSBram Moolenaar ] 6161430ceebSBram Moolenaar setqflist([], ' ', {items: items}) 6171430ceebSBram Moolenaar cwindow 6181430ceebSBram Moolenaar 6191430ceebSBram Moolenaar def CnextOrCfirst() 6201430ceebSBram Moolenaar # if cnext fails, cfirst is used 6211430ceebSBram Moolenaar try 6221430ceebSBram Moolenaar cnext 6231430ceebSBram Moolenaar catch 6241430ceebSBram Moolenaar cfirst 6251430ceebSBram Moolenaar endtry 6261430ceebSBram Moolenaar enddef 6271430ceebSBram Moolenaar 6281430ceebSBram Moolenaar CnextOrCfirst() 6291430ceebSBram Moolenaar CnextOrCfirst() 6301430ceebSBram Moolenaar writefile([getqflist({idx: 0}).idx], 'Xresult') 6311430ceebSBram Moolenaar qall 6321430ceebSBram Moolenaar END 6331430ceebSBram Moolenaar writefile(lines, 'XCatchCnext') 6341430ceebSBram Moolenaar RunVim([], [], '--clean -S XCatchCnext') 6351430ceebSBram Moolenaar assert_equal(['1'], readfile('Xresult')) 6361430ceebSBram Moolenaar 6371430ceebSBram Moolenaar delete('Xfile1') 6381430ceebSBram Moolenaar delete('Xfile2') 6391430ceebSBram Moolenaar delete('XCatchCnext') 6401430ceebSBram Moolenaar delete('Xresult') 6411430ceebSBram Moolenaarenddef 6421430ceebSBram Moolenaar 6439e1d9e34SBram Moolenaardef Test_throw_skipped() 6449e1d9e34SBram Moolenaar if 0 6459e1d9e34SBram Moolenaar throw dontgethere 6469e1d9e34SBram Moolenaar endif 6479e1d9e34SBram Moolenaarenddef 6489e1d9e34SBram Moolenaar 6498f81b22eSBram Moolenaardef Test_nocatch_throw_silenced() 6508f81b22eSBram Moolenaar var lines =<< trim END 6518f81b22eSBram Moolenaar vim9script 6528f81b22eSBram Moolenaar def Func() 6538f81b22eSBram Moolenaar throw 'error' 6548f81b22eSBram Moolenaar enddef 6558f81b22eSBram Moolenaar silent! Func() 6568f81b22eSBram Moolenaar END 6578f81b22eSBram Moolenaar writefile(lines, 'XthrowSilenced') 6588f81b22eSBram Moolenaar source XthrowSilenced 6598f81b22eSBram Moolenaar delete('XthrowSilenced') 6608f81b22eSBram Moolenaarenddef 6618f81b22eSBram Moolenaar 662e859312eSBram Moolenaardef DeletedFunc(): list<any> 663e859312eSBram Moolenaar return ['delete me'] 664e859312eSBram Moolenaarenddef 665e859312eSBram Moolenaardefcompile 666e859312eSBram Moolenaardelfunc DeletedFunc 667e859312eSBram Moolenaar 668257cc5eeSBram Moolenaardef ThrowFromDef() 669a72cfb80SBram Moolenaar throw "getout" # comment 670257cc5eeSBram Moolenaarenddef 671257cc5eeSBram Moolenaar 672257cc5eeSBram Moolenaarfunc CatchInFunc() 673257cc5eeSBram Moolenaar try 674257cc5eeSBram Moolenaar call ThrowFromDef() 675257cc5eeSBram Moolenaar catch 676257cc5eeSBram Moolenaar let g:thrown_func = v:exception 677257cc5eeSBram Moolenaar endtry 678257cc5eeSBram Moolenaarendfunc 679257cc5eeSBram Moolenaar 680257cc5eeSBram Moolenaardef CatchInDef() 681257cc5eeSBram Moolenaar try 682257cc5eeSBram Moolenaar ThrowFromDef() 683257cc5eeSBram Moolenaar catch 684257cc5eeSBram Moolenaar g:thrown_def = v:exception 685257cc5eeSBram Moolenaar endtry 686257cc5eeSBram Moolenaarenddef 687257cc5eeSBram Moolenaar 688f575adffSBram Moolenaardef ReturnFinally(): string 689f575adffSBram Moolenaar try 690f575adffSBram Moolenaar return 'intry' 691373863edSBram Moolenaar finall 692f575adffSBram Moolenaar g:in_finally = 'finally' 693f575adffSBram Moolenaar endtry 694f575adffSBram Moolenaar return 'end' 695f575adffSBram Moolenaarenddef 696f575adffSBram Moolenaar 697257cc5eeSBram Moolenaardef Test_try_catch_nested() 698257cc5eeSBram Moolenaar CatchInFunc() 699257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_func) 700257cc5eeSBram Moolenaar 701257cc5eeSBram Moolenaar CatchInDef() 702257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_def) 703f575adffSBram Moolenaar 704f575adffSBram Moolenaar assert_equal('intry', ReturnFinally()) 705f575adffSBram Moolenaar assert_equal('finally', g:in_finally) 706f575adffSBram Moolenaarenddef 707f575adffSBram Moolenaar 7089939f57bSBram Moolenaardef TryOne(): number 7099939f57bSBram Moolenaar try 7109939f57bSBram Moolenaar return 0 7119939f57bSBram Moolenaar catch 7129939f57bSBram Moolenaar endtry 7139939f57bSBram Moolenaar return 0 7149939f57bSBram Moolenaarenddef 7159939f57bSBram Moolenaar 7169939f57bSBram Moolenaardef TryTwo(n: number): string 7179939f57bSBram Moolenaar try 718cfcd011fSBram Moolenaar var x = {} 7199939f57bSBram Moolenaar catch 7209939f57bSBram Moolenaar endtry 7219939f57bSBram Moolenaar return 'text' 7229939f57bSBram Moolenaarenddef 7239939f57bSBram Moolenaar 7249939f57bSBram Moolenaardef Test_try_catch_twice() 7259939f57bSBram Moolenaar assert_equal('text', TryOne()->TryTwo()) 7269939f57bSBram Moolenaarenddef 7279939f57bSBram Moolenaar 728f575adffSBram Moolenaardef Test_try_catch_match() 729cfcd011fSBram Moolenaar var seq = 'a' 730f575adffSBram Moolenaar try 731f575adffSBram Moolenaar throw 'something' 732f575adffSBram Moolenaar catch /nothing/ 733f575adffSBram Moolenaar seq ..= 'x' 734f575adffSBram Moolenaar catch /some/ 735f575adffSBram Moolenaar seq ..= 'b' 736f575adffSBram Moolenaar catch /asdf/ 737f575adffSBram Moolenaar seq ..= 'x' 738e8c4abbbSBram Moolenaar catch ?a\?sdf? 739e8c4abbbSBram Moolenaar seq ..= 'y' 740f575adffSBram Moolenaar finally 741f575adffSBram Moolenaar seq ..= 'c' 742f575adffSBram Moolenaar endtry 743f575adffSBram Moolenaar assert_equal('abc', seq) 744257cc5eeSBram Moolenaarenddef 745257cc5eeSBram Moolenaar 746e8c4abbbSBram Moolenaardef Test_try_catch_fails() 747d2c61705SBram Moolenaar CheckDefFailure(['catch'], 'E603:') 748d2c61705SBram Moolenaar CheckDefFailure(['try', 'echo 0', 'catch', 'catch'], 'E1033:') 749d2c61705SBram Moolenaar CheckDefFailure(['try', 'echo 0', 'catch /pat'], 'E1067:') 750d2c61705SBram Moolenaar CheckDefFailure(['finally'], 'E606:') 751d2c61705SBram Moolenaar CheckDefFailure(['try', 'echo 0', 'finally', 'echo 1', 'finally'], 'E607:') 752d2c61705SBram Moolenaar CheckDefFailure(['endtry'], 'E602:') 753d2c61705SBram Moolenaar CheckDefFailure(['while 1', 'endtry'], 'E170:') 754d2c61705SBram Moolenaar CheckDefFailure(['for i in range(5)', 'endtry'], 'E170:') 75513106605SBram Moolenaar CheckDefFailure(['if 1', 'endtry'], 'E171:') 756d2c61705SBram Moolenaar CheckDefFailure(['try', 'echo 1', 'endtry'], 'E1032:') 757585fea7bSBram Moolenaar 758e4984290SBram Moolenaar CheckDefFailure(['throw'], 'E1143:') 759d2c61705SBram Moolenaar CheckDefFailure(['throw xxx'], 'E1001:') 760e8c4abbbSBram Moolenaarenddef 761e8c4abbbSBram Moolenaar 7627c5b3c03SBram Moolenaardef Try_catch_skipped() 7637c5b3c03SBram Moolenaar var l = [] 7647c5b3c03SBram Moolenaar try 7657c5b3c03SBram Moolenaar finally 7667c5b3c03SBram Moolenaar endtry 7677c5b3c03SBram Moolenaar 7687c5b3c03SBram Moolenaar if 1 7697c5b3c03SBram Moolenaar else 7707c5b3c03SBram Moolenaar try 7717c5b3c03SBram Moolenaar endtry 7727c5b3c03SBram Moolenaar endif 7737c5b3c03SBram Moolenaarenddef 7747c5b3c03SBram Moolenaar 7757c5b3c03SBram Moolenaar" The skipped try/endtry was updating the wrong instruction. 7767c5b3c03SBram Moolenaardef Test_try_catch_skipped() 7777c5b3c03SBram Moolenaar var instr = execute('disassemble Try_catch_skipped') 7787c5b3c03SBram Moolenaar assert_match("NEWLIST size 0\n", instr) 7797c5b3c03SBram Moolenaarenddef 7807c5b3c03SBram Moolenaar 7817c5b3c03SBram Moolenaar 7827c5b3c03SBram Moolenaar 783006ad48bSBram Moolenaardef Test_throw_vimscript() 784f5be8cdbSBram Moolenaar # only checks line continuation 785cfcd011fSBram Moolenaar var lines =<< trim END 786006ad48bSBram Moolenaar vim9script 787006ad48bSBram Moolenaar try 788006ad48bSBram Moolenaar throw 'one' 789006ad48bSBram Moolenaar .. 'two' 790006ad48bSBram Moolenaar catch 791006ad48bSBram Moolenaar assert_equal('onetwo', v:exception) 792006ad48bSBram Moolenaar endtry 793006ad48bSBram Moolenaar END 794006ad48bSBram Moolenaar CheckScriptSuccess(lines) 7951e021e63SBram Moolenaar 7961e021e63SBram Moolenaar lines =<< trim END 7971e021e63SBram Moolenaar vim9script 798352134bbSBram Moolenaar @r = '' 7991e021e63SBram Moolenaar def Func() 8001e021e63SBram Moolenaar throw @r 8011e021e63SBram Moolenaar enddef 8021e021e63SBram Moolenaar var result = '' 8031e021e63SBram Moolenaar try 8041e021e63SBram Moolenaar Func() 8051e021e63SBram Moolenaar catch /E1129:/ 8061e021e63SBram Moolenaar result = 'caught' 8071e021e63SBram Moolenaar endtry 8081e021e63SBram Moolenaar assert_equal('caught', result) 8091e021e63SBram Moolenaar END 8101e021e63SBram Moolenaar CheckScriptSuccess(lines) 811006ad48bSBram Moolenaarenddef 812006ad48bSBram Moolenaar 813ed677f55SBram Moolenaardef Test_error_in_nested_function() 81403dfde2bSBram Moolenaar # an error in a nested :function aborts executing in the calling :def function 815cfcd011fSBram Moolenaar var lines =<< trim END 816ed677f55SBram Moolenaar vim9script 817ed677f55SBram Moolenaar def Func() 818ed677f55SBram Moolenaar Error() 819ed677f55SBram Moolenaar g:test_var = 1 820ed677f55SBram Moolenaar enddef 821ed677f55SBram Moolenaar func Error() abort 822ed677f55SBram Moolenaar eval [][0] 823ed677f55SBram Moolenaar endfunc 824ed677f55SBram Moolenaar Func() 825ed677f55SBram Moolenaar END 826ed677f55SBram Moolenaar g:test_var = 0 827ed677f55SBram Moolenaar CheckScriptFailure(lines, 'E684:') 828ed677f55SBram Moolenaar assert_equal(0, g:test_var) 829ed677f55SBram Moolenaarenddef 830ed677f55SBram Moolenaar 83137c83711SBram Moolenaardef Test_cexpr_vimscript() 832f5be8cdbSBram Moolenaar # only checks line continuation 83337c83711SBram Moolenaar set errorformat=File\ %f\ line\ %l 834cfcd011fSBram Moolenaar var lines =<< trim END 83537c83711SBram Moolenaar vim9script 83637c83711SBram Moolenaar cexpr 'File' 83737c83711SBram Moolenaar .. ' someFile' .. 83837c83711SBram Moolenaar ' line 19' 83937c83711SBram Moolenaar assert_equal(19, getqflist()[0].lnum) 84037c83711SBram Moolenaar END 84137c83711SBram Moolenaar CheckScriptSuccess(lines) 84237c83711SBram Moolenaar set errorformat& 84337c83711SBram Moolenaarenddef 84437c83711SBram Moolenaar 845c9edd6b5SBram Moolenaardef Test_statusline_syntax() 846c9edd6b5SBram Moolenaar # legacy syntax is used for 'statusline' 847cfcd011fSBram Moolenaar var lines =<< trim END 848c9edd6b5SBram Moolenaar vim9script 849c9edd6b5SBram Moolenaar func g:Status() 850c9edd6b5SBram Moolenaar return '%{"x" is# "x"}' 851c9edd6b5SBram Moolenaar endfunc 852c9edd6b5SBram Moolenaar set laststatus=2 statusline=%!Status() 853c9edd6b5SBram Moolenaar redrawstatus 854c9edd6b5SBram Moolenaar set laststatus statusline= 855c9edd6b5SBram Moolenaar END 856c9edd6b5SBram Moolenaar CheckScriptSuccess(lines) 857c9edd6b5SBram Moolenaarenddef 858c9edd6b5SBram Moolenaar 859b209750bSBram Moolenaardef Test_list_vimscript() 860b209750bSBram Moolenaar # checks line continuation and comments 861cfcd011fSBram Moolenaar var lines =<< trim END 862b209750bSBram Moolenaar vim9script 863cfcd011fSBram Moolenaar var mylist = [ 864b209750bSBram Moolenaar 'one', 865b209750bSBram Moolenaar # comment 866b209750bSBram Moolenaar 'two', # empty line follows 867b209750bSBram Moolenaar 868b209750bSBram Moolenaar 'three', 869b209750bSBram Moolenaar ] 870b209750bSBram Moolenaar assert_equal(['one', 'two', 'three'], mylist) 871b209750bSBram Moolenaar END 872b209750bSBram Moolenaar CheckScriptSuccess(lines) 87366250c93SBram Moolenaar 87466250c93SBram Moolenaar # check all lines from heredoc are kept 87566250c93SBram Moolenaar lines =<< trim END 87666250c93SBram Moolenaar # comment 1 87766250c93SBram Moolenaar two 87866250c93SBram Moolenaar # comment 3 87966250c93SBram Moolenaar 88066250c93SBram Moolenaar five 88166250c93SBram Moolenaar # comment 6 88266250c93SBram Moolenaar END 88366250c93SBram Moolenaar assert_equal(['# comment 1', 'two', '# comment 3', '', 'five', '# comment 6'], lines) 8844bce26bbSBram Moolenaar 8854bce26bbSBram Moolenaar lines =<< trim END 8864bce26bbSBram Moolenaar [{ 8874bce26bbSBram Moolenaar a: 0}]->string()->assert_equal("[{'a': 0}]") 8884bce26bbSBram Moolenaar END 8894bce26bbSBram Moolenaar CheckDefAndScriptSuccess(lines) 890b209750bSBram Moolenaarenddef 891b209750bSBram Moolenaar 8922a1381c3SBram Moolenaarif has('channel') 89340ee466cSBram Moolenaar let someJob = test_null_job() 89440ee466cSBram Moolenaar 89540ee466cSBram Moolenaar def FuncWithError() 89640ee466cSBram Moolenaar echomsg g:someJob 89740ee466cSBram Moolenaar enddef 89840ee466cSBram Moolenaar 89940ee466cSBram Moolenaar func Test_convert_emsg_to_exception() 90040ee466cSBram Moolenaar try 90140ee466cSBram Moolenaar call FuncWithError() 90240ee466cSBram Moolenaar catch 90340ee466cSBram Moolenaar call assert_match('Vim:E908:', v:exception) 90440ee466cSBram Moolenaar endtry 90540ee466cSBram Moolenaar endfunc 9062a1381c3SBram Moolenaarendif 90740ee466cSBram Moolenaar 9088a7d6542SBram Moolenaarlet s:export_script_lines =<< trim END 9098a7d6542SBram Moolenaar vim9script 910cfcd011fSBram Moolenaar var name: string = 'bob' 9118a7d6542SBram Moolenaar def Concat(arg: string): string 9128a7d6542SBram Moolenaar return name .. arg 9138a7d6542SBram Moolenaar enddef 914227a69deSBram Moolenaar g:result = Concat('bie') 915227a69deSBram Moolenaar g:localname = name 9168a7d6542SBram Moolenaar 9178a7d6542SBram Moolenaar export const CONST = 1234 918cfcd011fSBram Moolenaar export var exported = 9876 919cfcd011fSBram Moolenaar export var exp_name = 'John' 9208a7d6542SBram Moolenaar export def Exported(): string 9218a7d6542SBram Moolenaar return 'Exported' 9228a7d6542SBram Moolenaar enddef 9230f2a5cc6SBram Moolenaar export final theList = [1] 9248a7d6542SBram MoolenaarEND 9258a7d6542SBram Moolenaar 926b3ca9824SBram Moolenaardef Undo_export_script_lines() 927b3ca9824SBram Moolenaar unlet g:result 928b3ca9824SBram Moolenaar unlet g:localname 929b3ca9824SBram Moolenaarenddef 930b3ca9824SBram Moolenaar 9315269bd2aSBram Moolenaardef Test_vim9_import_export() 932cfcd011fSBram Moolenaar var import_script_lines =<< trim END 9338a7d6542SBram Moolenaar vim9script 9348a7d6542SBram Moolenaar import {exported, Exported} from './Xexport.vim' 9358a7d6542SBram Moolenaar g:imported = exported 9366e587dcbSBram Moolenaar exported += 3 9376e587dcbSBram Moolenaar g:imported_added = exported 9388a7d6542SBram Moolenaar g:imported_func = Exported() 9396e587dcbSBram Moolenaar 94040f4f7a4SBram Moolenaar def GetExported(): string 941e0de171eSBram Moolenaar var local_dict = {ref: Exported} 94240f4f7a4SBram Moolenaar return local_dict.ref() 94340f4f7a4SBram Moolenaar enddef 94440f4f7a4SBram Moolenaar g:funcref_result = GetExported() 94540f4f7a4SBram Moolenaar 9466e587dcbSBram Moolenaar import {exp_name} from './Xexport.vim' 9476e587dcbSBram Moolenaar g:imported_name = exp_name 9486e587dcbSBram Moolenaar exp_name ..= ' Doe' 9496e587dcbSBram Moolenaar g:imported_name_appended = exp_name 9505381c7a1SBram Moolenaar g:imported_later = exported 9510f2a5cc6SBram Moolenaar 9520f2a5cc6SBram Moolenaar import theList from './Xexport.vim' 9530f2a5cc6SBram Moolenaar theList->add(2) 9540f2a5cc6SBram Moolenaar assert_equal([1, 2], theList) 9558a7d6542SBram Moolenaar END 9568a7d6542SBram Moolenaar 9578a7d6542SBram Moolenaar writefile(import_script_lines, 'Ximport.vim') 9588a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport.vim') 9598a7d6542SBram Moolenaar 9608a7d6542SBram Moolenaar source Ximport.vim 9618a7d6542SBram Moolenaar 9628a7d6542SBram Moolenaar assert_equal('bobbie', g:result) 9638a7d6542SBram Moolenaar assert_equal('bob', g:localname) 9648a7d6542SBram Moolenaar assert_equal(9876, g:imported) 9656e587dcbSBram Moolenaar assert_equal(9879, g:imported_added) 9665381c7a1SBram Moolenaar assert_equal(9879, g:imported_later) 9678a7d6542SBram Moolenaar assert_equal('Exported', g:imported_func) 96840f4f7a4SBram Moolenaar assert_equal('Exported', g:funcref_result) 9696e587dcbSBram Moolenaar assert_equal('John', g:imported_name) 9706e587dcbSBram Moolenaar assert_equal('John Doe', g:imported_name_appended) 9718a7d6542SBram Moolenaar assert_false(exists('g:name')) 9728a7d6542SBram Moolenaar 973b3ca9824SBram Moolenaar Undo_export_script_lines() 9748a7d6542SBram Moolenaar unlet g:imported 9756e587dcbSBram Moolenaar unlet g:imported_added 9765381c7a1SBram Moolenaar unlet g:imported_later 9778a7d6542SBram Moolenaar unlet g:imported_func 9786e587dcbSBram Moolenaar unlet g:imported_name g:imported_name_appended 9798a7d6542SBram Moolenaar delete('Ximport.vim') 980f2d5c240SBram Moolenaar 9811c991144SBram Moolenaar # similar, with line breaks 982cfcd011fSBram Moolenaar var import_line_break_script_lines =<< trim END 9831c991144SBram Moolenaar vim9script 9841c991144SBram Moolenaar import { 9851c991144SBram Moolenaar exported, 9861c991144SBram Moolenaar Exported, 9871c991144SBram Moolenaar } 9881c991144SBram Moolenaar from 9891c991144SBram Moolenaar './Xexport.vim' 9901c991144SBram Moolenaar g:imported = exported 9911c991144SBram Moolenaar exported += 5 9921c991144SBram Moolenaar g:imported_added = exported 9931c991144SBram Moolenaar g:imported_func = Exported() 9941c991144SBram Moolenaar END 9951c991144SBram Moolenaar writefile(import_line_break_script_lines, 'Ximport_lbr.vim') 9961c991144SBram Moolenaar source Ximport_lbr.vim 9971c991144SBram Moolenaar 9981c991144SBram Moolenaar assert_equal(9876, g:imported) 9991c991144SBram Moolenaar assert_equal(9881, g:imported_added) 10001c991144SBram Moolenaar assert_equal('Exported', g:imported_func) 10011c991144SBram Moolenaar 10021c991144SBram Moolenaar # exported script not sourced again 10031c991144SBram Moolenaar assert_false(exists('g:result')) 10041c991144SBram Moolenaar unlet g:imported 10051c991144SBram Moolenaar unlet g:imported_added 10061c991144SBram Moolenaar unlet g:imported_func 10071c991144SBram Moolenaar delete('Ximport_lbr.vim') 10081c991144SBram Moolenaar 10091c991144SBram Moolenaar # import inside :def function 1010cfcd011fSBram Moolenaar var import_in_def_lines =<< trim END 10115381c7a1SBram Moolenaar vim9script 10125381c7a1SBram Moolenaar def ImportInDef() 10135381c7a1SBram Moolenaar import exported from './Xexport.vim' 10145381c7a1SBram Moolenaar g:imported = exported 10155381c7a1SBram Moolenaar exported += 7 10165381c7a1SBram Moolenaar g:imported_added = exported 10175381c7a1SBram Moolenaar enddef 10185381c7a1SBram Moolenaar ImportInDef() 10195381c7a1SBram Moolenaar END 10205381c7a1SBram Moolenaar writefile(import_in_def_lines, 'Ximport2.vim') 10215381c7a1SBram Moolenaar source Ximport2.vim 1022f5be8cdbSBram Moolenaar # TODO: this should be 9879 10235381c7a1SBram Moolenaar assert_equal(9876, g:imported) 10245381c7a1SBram Moolenaar assert_equal(9883, g:imported_added) 10255381c7a1SBram Moolenaar unlet g:imported 10265381c7a1SBram Moolenaar unlet g:imported_added 10275381c7a1SBram Moolenaar delete('Ximport2.vim') 10285381c7a1SBram Moolenaar 1029cfcd011fSBram Moolenaar var import_star_as_lines =<< trim END 1030f2d5c240SBram Moolenaar vim9script 1031f2d5c240SBram Moolenaar import * as Export from './Xexport.vim' 1032f2d5c240SBram Moolenaar def UseExport() 1033f2d5c240SBram Moolenaar g:imported = Export.exported 1034f2d5c240SBram Moolenaar enddef 1035f2d5c240SBram Moolenaar UseExport() 1036f2d5c240SBram Moolenaar END 1037f2d5c240SBram Moolenaar writefile(import_star_as_lines, 'Ximport.vim') 1038f2d5c240SBram Moolenaar source Ximport.vim 10395381c7a1SBram Moolenaar assert_equal(9883, g:imported) 1040f2d5c240SBram Moolenaar 1041cfcd011fSBram Moolenaar var import_star_as_lines_no_dot =<< trim END 1042599c89c8SBram Moolenaar vim9script 1043599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 1044599c89c8SBram Moolenaar def Func() 1045cfcd011fSBram Moolenaar var dummy = 1 1046cfcd011fSBram Moolenaar var imported = Export + dummy 1047599c89c8SBram Moolenaar enddef 1048822ba247SBram Moolenaar defcompile 1049599c89c8SBram Moolenaar END 1050599c89c8SBram Moolenaar writefile(import_star_as_lines_no_dot, 'Ximport.vim') 105144d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1060:', '', 2, 'Func') 1052599c89c8SBram Moolenaar 1053cfcd011fSBram Moolenaar var import_star_as_lines_dot_space =<< trim END 1054599c89c8SBram Moolenaar vim9script 1055599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 1056599c89c8SBram Moolenaar def Func() 1057cfcd011fSBram Moolenaar var imported = Export . exported 1058599c89c8SBram Moolenaar enddef 1059822ba247SBram Moolenaar defcompile 1060599c89c8SBram Moolenaar END 1061599c89c8SBram Moolenaar writefile(import_star_as_lines_dot_space, 'Ximport.vim') 106244d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1074:', '', 1, 'Func') 1063599c89c8SBram Moolenaar 1064a6294955SBram Moolenaar var import_star_as_duplicated =<< trim END 1065a6294955SBram Moolenaar vim9script 1066a6294955SBram Moolenaar import * as Export from './Xexport.vim' 1067a6294955SBram Moolenaar var some = 'other' 1068a6294955SBram Moolenaar import * as Export from './Xexport.vim' 1069a6294955SBram Moolenaar defcompile 1070a6294955SBram Moolenaar END 1071a6294955SBram Moolenaar writefile(import_star_as_duplicated, 'Ximport.vim') 1072a6294955SBram Moolenaar assert_fails('source Ximport.vim', 'E1073:', '', 4, 'Ximport.vim') 1073a6294955SBram Moolenaar 1074cfcd011fSBram Moolenaar var import_star_as_lines_missing_name =<< trim END 1075599c89c8SBram Moolenaar vim9script 1076599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 1077599c89c8SBram Moolenaar def Func() 1078cfcd011fSBram Moolenaar var imported = Export. 1079599c89c8SBram Moolenaar enddef 1080822ba247SBram Moolenaar defcompile 1081599c89c8SBram Moolenaar END 1082599c89c8SBram Moolenaar writefile(import_star_as_lines_missing_name, 'Ximport.vim') 108344d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1048:', '', 1, 'Func') 1084599c89c8SBram Moolenaar 1085cfcd011fSBram Moolenaar var import_star_as_lbr_lines =<< trim END 10861c991144SBram Moolenaar vim9script 10871c991144SBram Moolenaar import * 10881c991144SBram Moolenaar as Export 10891c991144SBram Moolenaar from 10901c991144SBram Moolenaar './Xexport.vim' 10911c991144SBram Moolenaar def UseExport() 10921c991144SBram Moolenaar g:imported = Export.exported 10931c991144SBram Moolenaar enddef 10941c991144SBram Moolenaar UseExport() 10951c991144SBram Moolenaar END 10961c991144SBram Moolenaar writefile(import_star_as_lbr_lines, 'Ximport.vim') 10971c991144SBram Moolenaar source Ximport.vim 10981c991144SBram Moolenaar assert_equal(9883, g:imported) 10991c991144SBram Moolenaar 1100cfcd011fSBram Moolenaar var import_star_lines =<< trim END 1101f2d5c240SBram Moolenaar vim9script 1102f2d5c240SBram Moolenaar import * from './Xexport.vim' 1103f2d5c240SBram Moolenaar END 1104f2d5c240SBram Moolenaar writefile(import_star_lines, 'Ximport.vim') 110544d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1045:', '', 2, 'Ximport.vim') 1106f2d5c240SBram Moolenaar 1107f5be8cdbSBram Moolenaar # try to import something that exists but is not exported 1108cfcd011fSBram Moolenaar var import_not_exported_lines =<< trim END 1109fa29c8abSBram Moolenaar vim9script 1110fa29c8abSBram Moolenaar import name from './Xexport.vim' 1111fa29c8abSBram Moolenaar END 1112fa29c8abSBram Moolenaar writefile(import_not_exported_lines, 'Ximport.vim') 111344d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1049:', '', 2, 'Ximport.vim') 1114fa29c8abSBram Moolenaar 1115f5be8cdbSBram Moolenaar # try to import something that is already defined 1116cfcd011fSBram Moolenaar var import_already_defined =<< trim END 11175269bd2aSBram Moolenaar vim9script 1118cfcd011fSBram Moolenaar var exported = 'something' 11195269bd2aSBram Moolenaar import exported from './Xexport.vim' 11205269bd2aSBram Moolenaar END 11215269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 1122057e84afSBram Moolenaar assert_fails('source Ximport.vim', 'E1054:', '', 3, 'Ximport.vim') 11235269bd2aSBram Moolenaar 1124f5be8cdbSBram Moolenaar # try to import something that is already defined 11255269bd2aSBram Moolenaar import_already_defined =<< trim END 11265269bd2aSBram Moolenaar vim9script 1127cfcd011fSBram Moolenaar var exported = 'something' 11285269bd2aSBram Moolenaar import * as exported from './Xexport.vim' 11295269bd2aSBram Moolenaar END 11305269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 1131057e84afSBram Moolenaar assert_fails('source Ximport.vim', 'E1054:', '', 3, 'Ximport.vim') 11325269bd2aSBram Moolenaar 1133f5be8cdbSBram Moolenaar # try to import something that is already defined 11345269bd2aSBram Moolenaar import_already_defined =<< trim END 11355269bd2aSBram Moolenaar vim9script 1136cfcd011fSBram Moolenaar var exported = 'something' 11375269bd2aSBram Moolenaar import {exported} from './Xexport.vim' 11385269bd2aSBram Moolenaar END 11395269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 1140057e84afSBram Moolenaar assert_fails('source Ximport.vim', 'E1054:', '', 3, 'Ximport.vim') 11415269bd2aSBram Moolenaar 1142918a4249SBram Moolenaar # try changing an imported const 1143918a4249SBram Moolenaar var import_assign_to_const =<< trim END 1144918a4249SBram Moolenaar vim9script 1145918a4249SBram Moolenaar import CONST from './Xexport.vim' 1146918a4249SBram Moolenaar def Assign() 1147918a4249SBram Moolenaar CONST = 987 1148918a4249SBram Moolenaar enddef 1149918a4249SBram Moolenaar defcompile 1150918a4249SBram Moolenaar END 1151918a4249SBram Moolenaar writefile(import_assign_to_const, 'Ximport.vim') 1152918a4249SBram Moolenaar assert_fails('source Ximport.vim', 'E46:', '', 1, '_Assign') 1153918a4249SBram Moolenaar 11540f2a5cc6SBram Moolenaar # try changing an imported final 11550f2a5cc6SBram Moolenaar var import_assign_to_final =<< trim END 11560f2a5cc6SBram Moolenaar vim9script 11570f2a5cc6SBram Moolenaar import theList from './Xexport.vim' 11580f2a5cc6SBram Moolenaar def Assign() 11590f2a5cc6SBram Moolenaar theList = [2] 11600f2a5cc6SBram Moolenaar enddef 11610f2a5cc6SBram Moolenaar defcompile 11620f2a5cc6SBram Moolenaar END 11630f2a5cc6SBram Moolenaar writefile(import_assign_to_final, 'Ximport.vim') 11640f2a5cc6SBram Moolenaar assert_fails('source Ximport.vim', 'E46:', '', 1, '_Assign') 11650f2a5cc6SBram Moolenaar 1166f5be8cdbSBram Moolenaar # import a very long name, requires making a copy 1167cfcd011fSBram Moolenaar var import_long_name_lines =<< trim END 1168fa29c8abSBram Moolenaar vim9script 1169fa29c8abSBram Moolenaar import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim' 1170fa29c8abSBram Moolenaar END 1171fa29c8abSBram Moolenaar writefile(import_long_name_lines, 'Ximport.vim') 117244d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1048:', '', 2, 'Ximport.vim') 1173fa29c8abSBram Moolenaar 1174cfcd011fSBram Moolenaar var import_no_from_lines =<< trim END 1175fa29c8abSBram Moolenaar vim9script 1176fa29c8abSBram Moolenaar import name './Xexport.vim' 1177fa29c8abSBram Moolenaar END 1178fa29c8abSBram Moolenaar writefile(import_no_from_lines, 'Ximport.vim') 117944d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1070:', '', 2, 'Ximport.vim') 1180fa29c8abSBram Moolenaar 1181cfcd011fSBram Moolenaar var import_invalid_string_lines =<< trim END 1182fa29c8abSBram Moolenaar vim9script 1183fa29c8abSBram Moolenaar import name from Xexport.vim 1184fa29c8abSBram Moolenaar END 1185fa29c8abSBram Moolenaar writefile(import_invalid_string_lines, 'Ximport.vim') 118644d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1071:', '', 2, 'Ximport.vim') 1187fa29c8abSBram Moolenaar 1188cfcd011fSBram Moolenaar var import_wrong_name_lines =<< trim END 1189fa29c8abSBram Moolenaar vim9script 1190fa29c8abSBram Moolenaar import name from './XnoExport.vim' 1191fa29c8abSBram Moolenaar END 1192fa29c8abSBram Moolenaar writefile(import_wrong_name_lines, 'Ximport.vim') 119344d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1053:', '', 2, 'Ximport.vim') 1194fa29c8abSBram Moolenaar 1195cfcd011fSBram Moolenaar var import_missing_comma_lines =<< trim END 1196fa29c8abSBram Moolenaar vim9script 1197fa29c8abSBram Moolenaar import {exported name} from './Xexport.vim' 1198fa29c8abSBram Moolenaar END 11995269bd2aSBram Moolenaar writefile(import_missing_comma_lines, 'Ximport3.vim') 120044d6652dSBram Moolenaar assert_fails('source Ximport3.vim', 'E1046:', '', 2, 'Ximport3.vim') 1201fa29c8abSBram Moolenaar 1202f2d5c240SBram Moolenaar delete('Ximport.vim') 12035269bd2aSBram Moolenaar delete('Ximport3.vim') 12048a7d6542SBram Moolenaar delete('Xexport.vim') 12058a7d6542SBram Moolenaar 1206f5be8cdbSBram Moolenaar # Check that in a Vim9 script 'cpo' is set to the Vim default. 1207750802b5SBram Moolenaar set cpo&vi 1208cfcd011fSBram Moolenaar var cpo_before = &cpo 1209cfcd011fSBram Moolenaar var lines =<< trim END 1210750802b5SBram Moolenaar vim9script 1211750802b5SBram Moolenaar g:cpo_in_vim9script = &cpo 1212750802b5SBram Moolenaar END 1213750802b5SBram Moolenaar writefile(lines, 'Xvim9_script') 1214750802b5SBram Moolenaar source Xvim9_script 1215750802b5SBram Moolenaar assert_equal(cpo_before, &cpo) 1216750802b5SBram Moolenaar set cpo&vim 1217750802b5SBram Moolenaar assert_equal(&cpo, g:cpo_in_vim9script) 1218750802b5SBram Moolenaar delete('Xvim9_script') 1219750802b5SBram Moolenaarenddef 1220750802b5SBram Moolenaar 12210a84284eSBram Moolenaardef Test_import_as() 12220a84284eSBram Moolenaar var export_lines =<< trim END 12230a84284eSBram Moolenaar vim9script 12240a84284eSBram Moolenaar export var one = 1 12250a84284eSBram Moolenaar export var yes = 'yes' 12260a84284eSBram Moolenaar END 12270a84284eSBram Moolenaar writefile(export_lines, 'XexportAs') 12280a84284eSBram Moolenaar 12290a84284eSBram Moolenaar var import_lines =<< trim END 12300a84284eSBram Moolenaar vim9script 12310a84284eSBram Moolenaar import one as thatOne from './XexportAs' 12320a84284eSBram Moolenaar assert_equal(1, thatOne) 12330a84284eSBram Moolenaar import yes as yesYes from './XexportAs' 12340a84284eSBram Moolenaar assert_equal('yes', yesYes) 12350a84284eSBram Moolenaar END 12360a84284eSBram Moolenaar CheckScriptSuccess(import_lines) 12370a84284eSBram Moolenaar 12380a84284eSBram Moolenaar import_lines =<< trim END 12390a84284eSBram Moolenaar vim9script 12400a84284eSBram Moolenaar import {one as thatOne, yes as yesYes} from './XexportAs' 12410a84284eSBram Moolenaar assert_equal(1, thatOne) 12420a84284eSBram Moolenaar assert_equal('yes', yesYes) 12430a84284eSBram Moolenaar assert_fails('echo one', 'E121:') 12440a84284eSBram Moolenaar assert_fails('echo yes', 'E121:') 12450a84284eSBram Moolenaar END 12460a84284eSBram Moolenaar CheckScriptSuccess(import_lines) 12470a84284eSBram Moolenaar 12480a84284eSBram Moolenaar delete('XexportAs') 12490a84284eSBram Moolenaarenddef 12500a84284eSBram Moolenaar 1251803af686SBram Moolenaarfunc g:Trigger() 1252803af686SBram Moolenaar source Ximport.vim 1253803af686SBram Moolenaar return "echo 'yes'\<CR>" 1254803af686SBram Moolenaarendfunc 1255803af686SBram Moolenaar 1256803af686SBram Moolenaardef Test_import_export_expr_map() 1257803af686SBram Moolenaar # check that :import and :export work when buffer is locked 1258cfcd011fSBram Moolenaar var export_lines =<< trim END 1259803af686SBram Moolenaar vim9script 1260803af686SBram Moolenaar export def That(): string 1261803af686SBram Moolenaar return 'yes' 1262803af686SBram Moolenaar enddef 1263803af686SBram Moolenaar END 1264803af686SBram Moolenaar writefile(export_lines, 'Xexport_that.vim') 1265803af686SBram Moolenaar 1266cfcd011fSBram Moolenaar var import_lines =<< trim END 1267803af686SBram Moolenaar vim9script 1268803af686SBram Moolenaar import That from './Xexport_that.vim' 1269803af686SBram Moolenaar assert_equal('yes', That()) 1270803af686SBram Moolenaar END 1271803af686SBram Moolenaar writefile(import_lines, 'Ximport.vim') 1272803af686SBram Moolenaar 1273803af686SBram Moolenaar nnoremap <expr> trigger g:Trigger() 1274803af686SBram Moolenaar feedkeys('trigger', "xt") 1275803af686SBram Moolenaar 1276730b2483SBram Moolenaar delete('Xexport_that.vim') 1277803af686SBram Moolenaar delete('Ximport.vim') 1278803af686SBram Moolenaar nunmap trigger 1279803af686SBram Moolenaarenddef 1280803af686SBram Moolenaar 12818e1986e3SBram Moolenaardef Test_import_in_filetype() 12828e1986e3SBram Moolenaar # check that :import works when the buffer is locked 12838e1986e3SBram Moolenaar mkdir('ftplugin', 'p') 1284cfcd011fSBram Moolenaar var export_lines =<< trim END 12858e1986e3SBram Moolenaar vim9script 1286cfcd011fSBram Moolenaar export var That = 'yes' 12878e1986e3SBram Moolenaar END 1288730b2483SBram Moolenaar writefile(export_lines, 'ftplugin/Xexport_ft.vim') 12898e1986e3SBram Moolenaar 1290cfcd011fSBram Moolenaar var import_lines =<< trim END 12918e1986e3SBram Moolenaar vim9script 1292730b2483SBram Moolenaar import That from './Xexport_ft.vim' 12938e1986e3SBram Moolenaar assert_equal('yes', That) 12948e1986e3SBram Moolenaar g:did_load_mytpe = 1 12958e1986e3SBram Moolenaar END 12968e1986e3SBram Moolenaar writefile(import_lines, 'ftplugin/qf.vim') 12978e1986e3SBram Moolenaar 1298cfcd011fSBram Moolenaar var save_rtp = &rtp 12998e1986e3SBram Moolenaar &rtp = getcwd() .. ',' .. &rtp 13008e1986e3SBram Moolenaar 13018e1986e3SBram Moolenaar filetype plugin on 13028e1986e3SBram Moolenaar copen 13038e1986e3SBram Moolenaar assert_equal(1, g:did_load_mytpe) 13048e1986e3SBram Moolenaar 13058e1986e3SBram Moolenaar quit! 1306730b2483SBram Moolenaar delete('Xexport_ft.vim') 13078e1986e3SBram Moolenaar delete('ftplugin', 'rf') 13088e1986e3SBram Moolenaar &rtp = save_rtp 13098e1986e3SBram Moolenaarenddef 13108e1986e3SBram Moolenaar 1311efa94447SBram Moolenaardef Test_use_import_in_mapping() 1312cfcd011fSBram Moolenaar var lines =<< trim END 1313efa94447SBram Moolenaar vim9script 1314efa94447SBram Moolenaar export def Funcx() 1315efa94447SBram Moolenaar g:result = 42 1316efa94447SBram Moolenaar enddef 1317efa94447SBram Moolenaar END 1318efa94447SBram Moolenaar writefile(lines, 'XsomeExport.vim') 1319efa94447SBram Moolenaar lines =<< trim END 1320efa94447SBram Moolenaar vim9script 1321efa94447SBram Moolenaar import Funcx from './XsomeExport.vim' 1322b3ca9824SBram Moolenaar nnoremap <F3> :call <sid>Funcx()<cr> 1323efa94447SBram Moolenaar END 1324efa94447SBram Moolenaar writefile(lines, 'Xmapscript.vim') 1325efa94447SBram Moolenaar 1326efa94447SBram Moolenaar source Xmapscript.vim 1327b3ca9824SBram Moolenaar feedkeys("\<F3>", "xt") 1328efa94447SBram Moolenaar assert_equal(42, g:result) 1329efa94447SBram Moolenaar 1330efa94447SBram Moolenaar unlet g:result 1331efa94447SBram Moolenaar delete('XsomeExport.vim') 1332efa94447SBram Moolenaar delete('Xmapscript.vim') 1333b3ca9824SBram Moolenaar nunmap <F3> 1334efa94447SBram Moolenaarenddef 1335efa94447SBram Moolenaar 1336d3f8a9eeSBram Moolenaardef Test_vim9script_mix() 1337d3f8a9eeSBram Moolenaar var lines =<< trim END 1338d3f8a9eeSBram Moolenaar if has(g:feature) 1339d3f8a9eeSBram Moolenaar " legacy script 1340d3f8a9eeSBram Moolenaar let g:legacy = 1 1341d3f8a9eeSBram Moolenaar finish 1342d3f8a9eeSBram Moolenaar endif 1343d3f8a9eeSBram Moolenaar vim9script 1344d3f8a9eeSBram Moolenaar g:legacy = 0 1345d3f8a9eeSBram Moolenaar END 1346d3f8a9eeSBram Moolenaar g:feature = 'eval' 1347d3f8a9eeSBram Moolenaar g:legacy = -1 1348d3f8a9eeSBram Moolenaar CheckScriptSuccess(lines) 1349d3f8a9eeSBram Moolenaar assert_equal(1, g:legacy) 1350d3f8a9eeSBram Moolenaar 1351d3f8a9eeSBram Moolenaar g:feature = 'noteval' 1352d3f8a9eeSBram Moolenaar g:legacy = -1 1353d3f8a9eeSBram Moolenaar CheckScriptSuccess(lines) 1354d3f8a9eeSBram Moolenaar assert_equal(0, g:legacy) 1355d3f8a9eeSBram Moolenaarenddef 1356d3f8a9eeSBram Moolenaar 1357750802b5SBram Moolenaardef Test_vim9script_fails() 13588a7d6542SBram Moolenaar CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:') 13598a7d6542SBram Moolenaar CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:') 1360cfcd011fSBram Moolenaar CheckScriptFailure(['export var some = 123'], 'E1042:') 13619721fb4eSBram Moolenaar CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1048:') 1362cfcd011fSBram Moolenaar CheckScriptFailure(['vim9script', 'export var g:some'], 'E1022:') 1363750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:') 1364750802b5SBram Moolenaar 1365cfcd011fSBram Moolenaar CheckScriptFailure(['vim9script', 'var str: string', 'str = 1234'], 'E1012:') 1366c785b9a7SBram Moolenaar CheckScriptFailure(['vim9script', 'const str = "asdf"', 'str = "xxx"'], 'E46:') 1367c785b9a7SBram Moolenaar 1368e2e4075fSBram Moolenaar assert_fails('vim9script', 'E1038:') 1369e2e4075fSBram Moolenaar assert_fails('export something', 'E1043:') 13708a7d6542SBram Moolenaarenddef 13718a7d6542SBram Moolenaar 1372f7d267efSBram Moolenaarfunc Test_import_fails_without_script() 1373101f4810SBram Moolenaar CheckRunVimInTerminal 1374101f4810SBram Moolenaar 13759bb3eb3eSBram Moolenaar " call indirectly to avoid compilation error for missing functions 1376c620c055SBram Moolenaar call Run_Test_import_fails_on_command_line() 13779bb3eb3eSBram Moolenaarendfunc 13789bb3eb3eSBram Moolenaar 1379c620c055SBram Moolenaardef Run_Test_import_fails_on_command_line() 1380cfcd011fSBram Moolenaar var export =<< trim END 1381101f4810SBram Moolenaar vim9script 1382101f4810SBram Moolenaar export def Foo(): number 1383101f4810SBram Moolenaar return 0 1384101f4810SBram Moolenaar enddef 1385101f4810SBram Moolenaar END 1386730b2483SBram Moolenaar writefile(export, 'XexportCmd.vim') 1387101f4810SBram Moolenaar 1388e0de171eSBram Moolenaar var buf = RunVimInTerminal('-c "import Foo from ''./XexportCmd.vim''"', { 13899bb3eb3eSBram Moolenaar rows: 6, wait_for_ruler: 0}) 13902949cfdbSBram Moolenaar WaitForAssert(() => assert_match('^E1094:', term_getline(buf, 5))) 1391101f4810SBram Moolenaar 1392730b2483SBram Moolenaar delete('XexportCmd.vim') 13939bb3eb3eSBram Moolenaar StopVimInTerminal(buf) 13949bb3eb3eSBram Moolenaarenddef 1395101f4810SBram Moolenaar 13962b32700dSBram Moolenaardef Test_vim9script_reload_noclear() 13972b32700dSBram Moolenaar var lines =<< trim END 1398a6294955SBram Moolenaar vim9script 1399a6294955SBram Moolenaar export var exported = 'thexport' 1400a6294955SBram Moolenaar END 1401a6294955SBram Moolenaar writefile(lines, 'XExportReload') 1402a6294955SBram Moolenaar lines =<< trim END 14032b32700dSBram Moolenaar vim9script noclear 14042b32700dSBram Moolenaar g:loadCount += 1 14052b32700dSBram Moolenaar var s:reloaded = 'init' 1406a6294955SBram Moolenaar import exported from './XExportReload' 14072b32700dSBram Moolenaar 14082b32700dSBram Moolenaar def Again(): string 14092b32700dSBram Moolenaar return 'again' 14102b32700dSBram Moolenaar enddef 14112b32700dSBram Moolenaar 14122b32700dSBram Moolenaar if exists('s:loaded') | finish | endif 14132b32700dSBram Moolenaar var s:loaded = true 14142b32700dSBram Moolenaar 14152b32700dSBram Moolenaar var s:notReloaded = 'yes' 14162b32700dSBram Moolenaar s:reloaded = 'first' 14172b32700dSBram Moolenaar def g:Values(): list<string> 1418a6294955SBram Moolenaar return [s:reloaded, s:notReloaded, Again(), Once(), exported] 14192b32700dSBram Moolenaar enddef 14202b32700dSBram Moolenaar 14212b32700dSBram Moolenaar def Once(): string 14222b32700dSBram Moolenaar return 'once' 14232b32700dSBram Moolenaar enddef 14242b32700dSBram Moolenaar END 14252b32700dSBram Moolenaar writefile(lines, 'XReloaded') 14262b32700dSBram Moolenaar g:loadCount = 0 14272b32700dSBram Moolenaar source XReloaded 14282b32700dSBram Moolenaar assert_equal(1, g:loadCount) 1429a6294955SBram Moolenaar assert_equal(['first', 'yes', 'again', 'once', 'thexport'], g:Values()) 14302b32700dSBram Moolenaar source XReloaded 14312b32700dSBram Moolenaar assert_equal(2, g:loadCount) 1432a6294955SBram Moolenaar assert_equal(['init', 'yes', 'again', 'once', 'thexport'], g:Values()) 14332b32700dSBram Moolenaar source XReloaded 14342b32700dSBram Moolenaar assert_equal(3, g:loadCount) 1435a6294955SBram Moolenaar assert_equal(['init', 'yes', 'again', 'once', 'thexport'], g:Values()) 14362b32700dSBram Moolenaar 143748e11c10SBram Moolenaar delete('XReloaded') 1438a6294955SBram Moolenaar delete('XExportReload') 14392b32700dSBram Moolenaar delfunc g:Values 14402b32700dSBram Moolenaar unlet g:loadCount 14412b32700dSBram Moolenaarenddef 14422b32700dSBram Moolenaar 14434c17ad94SBram Moolenaardef Test_vim9script_reload_import() 1444cfcd011fSBram Moolenaar var lines =<< trim END 14458a7d6542SBram Moolenaar vim9script 14468a7d6542SBram Moolenaar const var = '' 1447cfcd011fSBram Moolenaar var valone = 1234 14488a7d6542SBram Moolenaar def MyFunc(arg: string) 14498a7d6542SBram Moolenaar valone = 5678 14508a7d6542SBram Moolenaar enddef 14518a7d6542SBram Moolenaar END 1452cfcd011fSBram Moolenaar var morelines =<< trim END 1453cfcd011fSBram Moolenaar var valtwo = 222 14548a7d6542SBram Moolenaar export def GetValtwo(): number 14558a7d6542SBram Moolenaar return valtwo 14568a7d6542SBram Moolenaar enddef 14578a7d6542SBram Moolenaar END 145803afdcf1SBram Moolenaar writefile(lines + morelines, 'Xreload.vim') 14598a7d6542SBram Moolenaar source Xreload.vim 14608a7d6542SBram Moolenaar source Xreload.vim 14618a7d6542SBram Moolenaar source Xreload.vim 14628a7d6542SBram Moolenaar 1463cfcd011fSBram Moolenaar var testlines =<< trim END 14648a7d6542SBram Moolenaar vim9script 14658a7d6542SBram Moolenaar def TheFunc() 14668a7d6542SBram Moolenaar import GetValtwo from './Xreload.vim' 14678a7d6542SBram Moolenaar assert_equal(222, GetValtwo()) 14688a7d6542SBram Moolenaar enddef 14698a7d6542SBram Moolenaar TheFunc() 14708a7d6542SBram Moolenaar END 14718a7d6542SBram Moolenaar writefile(testlines, 'Ximport.vim') 14728a7d6542SBram Moolenaar source Ximport.vim 14738a7d6542SBram Moolenaar 1474f5be8cdbSBram Moolenaar # Test that when not using "morelines" GetValtwo() and valtwo are still 1475f5be8cdbSBram Moolenaar # defined, because import doesn't reload a script. 14768a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 14778a7d6542SBram Moolenaar source Ximport.vim 14788a7d6542SBram Moolenaar 1479f5be8cdbSBram Moolenaar # cannot declare a var twice 14808a7d6542SBram Moolenaar lines =<< trim END 14818a7d6542SBram Moolenaar vim9script 1482cfcd011fSBram Moolenaar var valone = 1234 1483cfcd011fSBram Moolenaar var valone = 5678 14848a7d6542SBram Moolenaar END 14858a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 148644d6652dSBram Moolenaar assert_fails('source Xreload.vim', 'E1041:', '', 3, 'Xreload.vim') 14878a7d6542SBram Moolenaar 14888a7d6542SBram Moolenaar delete('Xreload.vim') 14898a7d6542SBram Moolenaar delete('Ximport.vim') 14908a7d6542SBram Moolenaarenddef 14918a7d6542SBram Moolenaar 149207a65d26SBram Moolenaar" if a script is reloaded with a script-local variable that changed its type, a 149307a65d26SBram Moolenaar" compiled function using that variable must fail. 149407a65d26SBram Moolenaardef Test_script_reload_change_type() 149507a65d26SBram Moolenaar var lines =<< trim END 149607a65d26SBram Moolenaar vim9script noclear 149707a65d26SBram Moolenaar var str = 'string' 149807a65d26SBram Moolenaar def g:GetStr(): string 149907a65d26SBram Moolenaar return str .. 'xxx' 150007a65d26SBram Moolenaar enddef 150107a65d26SBram Moolenaar END 150207a65d26SBram Moolenaar writefile(lines, 'Xreload.vim') 150307a65d26SBram Moolenaar source Xreload.vim 150407a65d26SBram Moolenaar echo g:GetStr() 150507a65d26SBram Moolenaar 150607a65d26SBram Moolenaar lines =<< trim END 150707a65d26SBram Moolenaar vim9script noclear 150807a65d26SBram Moolenaar var str = 1234 150907a65d26SBram Moolenaar END 151007a65d26SBram Moolenaar writefile(lines, 'Xreload.vim') 151107a65d26SBram Moolenaar source Xreload.vim 151207a65d26SBram Moolenaar assert_fails('echo g:GetStr()', 'E1150:') 151307a65d26SBram Moolenaar 151407a65d26SBram Moolenaar delfunc g:GetStr 151507a65d26SBram Moolenaar delete('Xreload.vim') 151607a65d26SBram Moolenaarenddef 151707a65d26SBram Moolenaar 15186c3843caSBram Moolenaardef Test_script_var_shadows_function() 15196c3843caSBram Moolenaar var lines =<< trim END 15206c3843caSBram Moolenaar vim9script 15216c3843caSBram Moolenaar def Func(): number 15226c3843caSBram Moolenaar return 123 15236c3843caSBram Moolenaar enddef 15246c3843caSBram Moolenaar var Func = 1 15256c3843caSBram Moolenaar END 15266c3843caSBram Moolenaar CheckScriptFailure(lines, 'E1041:', 5) 15276c3843caSBram Moolenaarenddef 15286c3843caSBram Moolenaar 152995006e3dSBram Moolenaardef s:RetSome(): string 153095006e3dSBram Moolenaar return 'some' 153195006e3dSBram Moolenaarenddef 153295006e3dSBram Moolenaar 1533fe465a01SBram Moolenaar" Not exported function that is referenced needs to be accessed by the 1534fe465a01SBram Moolenaar" script-local name. 1535fe465a01SBram Moolenaardef Test_vim9script_funcref() 1536cfcd011fSBram Moolenaar var sortlines =<< trim END 1537fe465a01SBram Moolenaar vim9script 1538fe465a01SBram Moolenaar def Compare(i1: number, i2: number): number 1539bed36b93SBram Moolenaar return i2 - i1 1540fe465a01SBram Moolenaar enddef 1541fe465a01SBram Moolenaar 1542fe465a01SBram Moolenaar export def FastSort(): list<number> 1543fe465a01SBram Moolenaar return range(5)->sort(Compare) 1544fe465a01SBram Moolenaar enddef 1545fe465a01SBram Moolenaar END 1546fe465a01SBram Moolenaar writefile(sortlines, 'Xsort.vim') 1547fe465a01SBram Moolenaar 1548cfcd011fSBram Moolenaar var lines =<< trim END 1549fe465a01SBram Moolenaar vim9script 1550fe465a01SBram Moolenaar import FastSort from './Xsort.vim' 1551fe465a01SBram Moolenaar def Test() 1552fe465a01SBram Moolenaar g:result = FastSort() 1553fe465a01SBram Moolenaar enddef 1554fe465a01SBram Moolenaar Test() 1555fe465a01SBram Moolenaar END 1556fe465a01SBram Moolenaar writefile(lines, 'Xscript.vim') 1557fe465a01SBram Moolenaar 1558fe465a01SBram Moolenaar source Xscript.vim 1559fe465a01SBram Moolenaar assert_equal([4, 3, 2, 1, 0], g:result) 1560fe465a01SBram Moolenaar 1561fe465a01SBram Moolenaar unlet g:result 1562fe465a01SBram Moolenaar delete('Xsort.vim') 1563fe465a01SBram Moolenaar delete('Xscript.vim') 156495006e3dSBram Moolenaar 1565cfcd011fSBram Moolenaar var Funcref = function('s:RetSome') 156695006e3dSBram Moolenaar assert_equal('some', Funcref()) 1567fe465a01SBram Moolenaarenddef 1568fe465a01SBram Moolenaar 1569601e76acSBram Moolenaar" Check that when searching for "FilterFunc" it finds the import in the 1570601e76acSBram Moolenaar" script where FastFilter() is called from, both as a string and as a direct 1571601e76acSBram Moolenaar" function reference. 1572c620c055SBram Moolenaardef Test_vim9script_funcref_other_script() 1573cfcd011fSBram Moolenaar var filterLines =<< trim END 1574c620c055SBram Moolenaar vim9script 1575c620c055SBram Moolenaar export def FilterFunc(idx: number, val: number): bool 1576c620c055SBram Moolenaar return idx % 2 == 1 1577c620c055SBram Moolenaar enddef 1578c620c055SBram Moolenaar export def FastFilter(): list<number> 1579c620c055SBram Moolenaar return range(10)->filter('FilterFunc') 1580c620c055SBram Moolenaar enddef 1581601e76acSBram Moolenaar export def FastFilterDirect(): list<number> 1582601e76acSBram Moolenaar return range(10)->filter(FilterFunc) 1583601e76acSBram Moolenaar enddef 1584c620c055SBram Moolenaar END 1585c620c055SBram Moolenaar writefile(filterLines, 'Xfilter.vim') 1586c620c055SBram Moolenaar 1587cfcd011fSBram Moolenaar var lines =<< trim END 1588c620c055SBram Moolenaar vim9script 1589601e76acSBram Moolenaar import {FilterFunc, FastFilter, FastFilterDirect} from './Xfilter.vim' 1590c620c055SBram Moolenaar def Test() 1591cfcd011fSBram Moolenaar var x: list<number> = FastFilter() 1592c620c055SBram Moolenaar enddef 1593c620c055SBram Moolenaar Test() 1594601e76acSBram Moolenaar def TestDirect() 1595cfcd011fSBram Moolenaar var x: list<number> = FastFilterDirect() 1596601e76acSBram Moolenaar enddef 1597601e76acSBram Moolenaar TestDirect() 1598c620c055SBram Moolenaar END 1599601e76acSBram Moolenaar CheckScriptSuccess(lines) 1600c620c055SBram Moolenaar delete('Xfilter.vim') 1601c620c055SBram Moolenaarenddef 1602c620c055SBram Moolenaar 16034c17ad94SBram Moolenaardef Test_vim9script_reload_delfunc() 1604cfcd011fSBram Moolenaar var first_lines =<< trim END 16054c17ad94SBram Moolenaar vim9script 16064c17ad94SBram Moolenaar def FuncYes(): string 16074c17ad94SBram Moolenaar return 'yes' 16084c17ad94SBram Moolenaar enddef 16094c17ad94SBram Moolenaar END 1610cfcd011fSBram Moolenaar var withno_lines =<< trim END 16114c17ad94SBram Moolenaar def FuncNo(): string 16124c17ad94SBram Moolenaar return 'no' 16134c17ad94SBram Moolenaar enddef 16144c17ad94SBram Moolenaar def g:DoCheck(no_exists: bool) 16154c17ad94SBram Moolenaar assert_equal('yes', FuncYes()) 16164c17ad94SBram Moolenaar assert_equal('no', FuncNo()) 161703afdcf1SBram Moolenaar enddef 161803afdcf1SBram Moolenaar END 1619cfcd011fSBram Moolenaar var nono_lines =<< trim END 162003afdcf1SBram Moolenaar def g:DoCheck(no_exists: bool) 162103afdcf1SBram Moolenaar assert_equal('yes', FuncYes()) 162244d6652dSBram Moolenaar assert_fails('FuncNo()', 'E117:', '', 2, 'DoCheck') 16234c17ad94SBram Moolenaar enddef 16244c17ad94SBram Moolenaar END 16254c17ad94SBram Moolenaar 16264c17ad94SBram Moolenaar # FuncNo() is defined 162703afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 16284c17ad94SBram Moolenaar source Xreloaded.vim 16294c17ad94SBram Moolenaar g:DoCheck(true) 16304c17ad94SBram Moolenaar 16314c17ad94SBram Moolenaar # FuncNo() is not redefined 163203afdcf1SBram Moolenaar writefile(first_lines + nono_lines, 'Xreloaded.vim') 16334c17ad94SBram Moolenaar source Xreloaded.vim 16345082471fSBram Moolenaar g:DoCheck(false) 16354c17ad94SBram Moolenaar 16364c17ad94SBram Moolenaar # FuncNo() is back 163703afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 16384c17ad94SBram Moolenaar source Xreloaded.vim 16395082471fSBram Moolenaar g:DoCheck(false) 16404c17ad94SBram Moolenaar 16414c17ad94SBram Moolenaar delete('Xreloaded.vim') 16424c17ad94SBram Moolenaarenddef 16434c17ad94SBram Moolenaar 164489483d40SBram Moolenaardef Test_vim9script_reload_delvar() 164589483d40SBram Moolenaar # write the script with a script-local variable 1646cfcd011fSBram Moolenaar var lines =<< trim END 164789483d40SBram Moolenaar vim9script 1648cfcd011fSBram Moolenaar var name = 'string' 164989483d40SBram Moolenaar END 165089483d40SBram Moolenaar writefile(lines, 'XreloadVar.vim') 165189483d40SBram Moolenaar source XreloadVar.vim 165289483d40SBram Moolenaar 165389483d40SBram Moolenaar # now write the script using the same variable locally - works 165489483d40SBram Moolenaar lines =<< trim END 165589483d40SBram Moolenaar vim9script 165689483d40SBram Moolenaar def Func() 1657cfcd011fSBram Moolenaar var name = 'string' 165889483d40SBram Moolenaar enddef 165989483d40SBram Moolenaar END 166089483d40SBram Moolenaar writefile(lines, 'XreloadVar.vim') 166189483d40SBram Moolenaar source XreloadVar.vim 166289483d40SBram Moolenaar 166389483d40SBram Moolenaar delete('XreloadVar.vim') 166489483d40SBram Moolenaarenddef 166589483d40SBram Moolenaar 16668a7d6542SBram Moolenaardef Test_import_absolute() 1667cfcd011fSBram Moolenaar var import_lines = [ 1668e6085c53SBram Moolenaar 'vim9script', 1669e6085c53SBram Moolenaar 'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"', 1670e6085c53SBram Moolenaar 'def UseExported()', 1671e6085c53SBram Moolenaar ' g:imported_abs = exported', 1672e6085c53SBram Moolenaar ' exported = 8888', 1673e6085c53SBram Moolenaar ' g:imported_after = exported', 1674e6085c53SBram Moolenaar 'enddef', 1675e6085c53SBram Moolenaar 'UseExported()', 1676e6085c53SBram Moolenaar 'g:import_disassembled = execute("disass UseExported")', 1677e6085c53SBram Moolenaar ] 16788a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_abs.vim') 16798a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport_abs.vim') 16808a7d6542SBram Moolenaar 16818a7d6542SBram Moolenaar source Ximport_abs.vim 16828a7d6542SBram Moolenaar 16838a7d6542SBram Moolenaar assert_equal(9876, g:imported_abs) 16844e12a5dfSBram Moolenaar assert_equal(8888, g:imported_after) 1685fbbcd003SBram Moolenaar assert_match('<SNR>\d\+_UseExported\_s*' .. 1686fbbcd003SBram Moolenaar 'g:imported_abs = exported\_s*' .. 1687fbbcd003SBram Moolenaar '0 LOADSCRIPT exported-2 from .*Xexport_abs.vim\_s*' .. 1688fbbcd003SBram Moolenaar '1 STOREG g:imported_abs\_s*' .. 1689fbbcd003SBram Moolenaar 'exported = 8888\_s*' .. 1690fbbcd003SBram Moolenaar '2 PUSHNR 8888\_s*' .. 1691fbbcd003SBram Moolenaar '3 STORESCRIPT exported-2 in .*Xexport_abs.vim\_s*' .. 1692fbbcd003SBram Moolenaar 'g:imported_after = exported\_s*' .. 1693fbbcd003SBram Moolenaar '4 LOADSCRIPT exported-2 from .*Xexport_abs.vim\_s*' .. 1694fbbcd003SBram Moolenaar '5 STOREG g:imported_after', 1695e6085c53SBram Moolenaar g:import_disassembled) 1696b3ca9824SBram Moolenaar 1697b3ca9824SBram Moolenaar Undo_export_script_lines() 16988a7d6542SBram Moolenaar unlet g:imported_abs 16994e12a5dfSBram Moolenaar unlet g:import_disassembled 17008a7d6542SBram Moolenaar 17018a7d6542SBram Moolenaar delete('Ximport_abs.vim') 17028a7d6542SBram Moolenaar delete('Xexport_abs.vim') 17038a7d6542SBram Moolenaarenddef 17048a7d6542SBram Moolenaar 17058a7d6542SBram Moolenaardef Test_import_rtp() 1706cfcd011fSBram Moolenaar var import_lines = [ 1707e6085c53SBram Moolenaar 'vim9script', 1708e6085c53SBram Moolenaar 'import exported from "Xexport_rtp.vim"', 1709e6085c53SBram Moolenaar 'g:imported_rtp = exported', 1710e6085c53SBram Moolenaar ] 17118a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_rtp.vim') 17128a7d6542SBram Moolenaar mkdir('import') 17138a7d6542SBram Moolenaar writefile(s:export_script_lines, 'import/Xexport_rtp.vim') 17148a7d6542SBram Moolenaar 1715cfcd011fSBram Moolenaar var save_rtp = &rtp 17168a7d6542SBram Moolenaar &rtp = getcwd() 17178a7d6542SBram Moolenaar source Ximport_rtp.vim 17188a7d6542SBram Moolenaar &rtp = save_rtp 17198a7d6542SBram Moolenaar 17208a7d6542SBram Moolenaar assert_equal(9876, g:imported_rtp) 17218a7d6542SBram Moolenaar 1722b3ca9824SBram Moolenaar Undo_export_script_lines() 1723b3ca9824SBram Moolenaar unlet g:imported_rtp 17248a7d6542SBram Moolenaar delete('Ximport_rtp.vim') 172589483d40SBram Moolenaar delete('import', 'rf') 17268a7d6542SBram Moolenaarenddef 17278a7d6542SBram Moolenaar 172825e0f586SBram Moolenaardef Test_import_compile_error() 1729cfcd011fSBram Moolenaar var export_lines = [ 173025e0f586SBram Moolenaar 'vim9script', 173125e0f586SBram Moolenaar 'export def ExpFunc(): string', 173225e0f586SBram Moolenaar ' return notDefined', 173325e0f586SBram Moolenaar 'enddef', 173425e0f586SBram Moolenaar ] 173525e0f586SBram Moolenaar writefile(export_lines, 'Xexported.vim') 173625e0f586SBram Moolenaar 1737cfcd011fSBram Moolenaar var import_lines = [ 173825e0f586SBram Moolenaar 'vim9script', 173925e0f586SBram Moolenaar 'import ExpFunc from "./Xexported.vim"', 174025e0f586SBram Moolenaar 'def ImpFunc()', 174125e0f586SBram Moolenaar ' echo ExpFunc()', 174225e0f586SBram Moolenaar 'enddef', 174325e0f586SBram Moolenaar 'defcompile', 174425e0f586SBram Moolenaar ] 174525e0f586SBram Moolenaar writefile(import_lines, 'Ximport.vim') 174625e0f586SBram Moolenaar 174725e0f586SBram Moolenaar try 174825e0f586SBram Moolenaar source Ximport.vim 174925e0f586SBram Moolenaar catch /E1001/ 1750f5be8cdbSBram Moolenaar # Error should be fore the Xexported.vim file. 17517707228aSBram Moolenaar assert_match('E1001: Variable not found: notDefined', v:exception) 175225e0f586SBram Moolenaar assert_match('function <SNR>\d\+_ImpFunc\[1\]..<SNR>\d\+_ExpFunc, line 1', v:throwpoint) 175325e0f586SBram Moolenaar endtry 175425e0f586SBram Moolenaar 175525e0f586SBram Moolenaar delete('Xexported.vim') 175625e0f586SBram Moolenaar delete('Ximport.vim') 175725e0f586SBram Moolenaarenddef 175825e0f586SBram Moolenaar 1759c4ce36d4SBram Moolenaardef Test_func_redefine_error() 1760cfcd011fSBram Moolenaar var lines = [ 1761c4ce36d4SBram Moolenaar 'vim9script', 1762c4ce36d4SBram Moolenaar 'def Func()', 1763c4ce36d4SBram Moolenaar ' eval [][0]', 1764c4ce36d4SBram Moolenaar 'enddef', 1765c4ce36d4SBram Moolenaar 'Func()', 1766c4ce36d4SBram Moolenaar ] 1767c4ce36d4SBram Moolenaar writefile(lines, 'Xtestscript.vim') 1768c4ce36d4SBram Moolenaar 1769c4ce36d4SBram Moolenaar for count in range(3) 1770c4ce36d4SBram Moolenaar try 1771c4ce36d4SBram Moolenaar source Xtestscript.vim 1772c4ce36d4SBram Moolenaar catch /E684/ 1773c4ce36d4SBram Moolenaar # function name should contain <SNR> every time 1774c4ce36d4SBram Moolenaar assert_match('E684: list index out of range', v:exception) 1775c4ce36d4SBram Moolenaar assert_match('function <SNR>\d\+_Func, line 1', v:throwpoint) 1776c4ce36d4SBram Moolenaar endtry 1777c4ce36d4SBram Moolenaar endfor 1778c4ce36d4SBram Moolenaar 1779c4ce36d4SBram Moolenaar delete('Xtestscript.vim') 1780c4ce36d4SBram Moolenaarenddef 1781c4ce36d4SBram Moolenaar 1782eef2102eSBram Moolenaardef Test_func_overrules_import_fails() 1783cfcd011fSBram Moolenaar var export_lines =<< trim END 1784eef2102eSBram Moolenaar vim9script 1785eef2102eSBram Moolenaar export def Func() 1786eef2102eSBram Moolenaar echo 'imported' 1787eef2102eSBram Moolenaar enddef 1788eef2102eSBram Moolenaar END 1789eef2102eSBram Moolenaar writefile(export_lines, 'XexportedFunc.vim') 1790eef2102eSBram Moolenaar 1791cfcd011fSBram Moolenaar var lines =<< trim END 1792eef2102eSBram Moolenaar vim9script 1793eef2102eSBram Moolenaar import Func from './XexportedFunc.vim' 1794eef2102eSBram Moolenaar def Func() 1795eef2102eSBram Moolenaar echo 'local to function' 1796eef2102eSBram Moolenaar enddef 1797eef2102eSBram Moolenaar END 1798eef2102eSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1799eef2102eSBram Moolenaar 1800eef2102eSBram Moolenaar lines =<< trim END 1801eef2102eSBram Moolenaar vim9script 1802eef2102eSBram Moolenaar import Func from './XexportedFunc.vim' 1803eef2102eSBram Moolenaar def Outer() 1804eef2102eSBram Moolenaar def Func() 1805eef2102eSBram Moolenaar echo 'local to function' 1806eef2102eSBram Moolenaar enddef 1807eef2102eSBram Moolenaar enddef 1808eef2102eSBram Moolenaar defcompile 1809eef2102eSBram Moolenaar END 1810eef2102eSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1811eef2102eSBram Moolenaar 1812eef2102eSBram Moolenaar delete('XexportedFunc.vim') 1813eef2102eSBram Moolenaarenddef 1814eef2102eSBram Moolenaar 1815b9a2cac3SBram Moolenaardef Test_func_redefine_fails() 1816cfcd011fSBram Moolenaar var lines =<< trim END 1817b9a2cac3SBram Moolenaar vim9script 1818b9a2cac3SBram Moolenaar def Func() 1819b9a2cac3SBram Moolenaar echo 'one' 1820b9a2cac3SBram Moolenaar enddef 1821b9a2cac3SBram Moolenaar def Func() 1822b9a2cac3SBram Moolenaar echo 'two' 1823b9a2cac3SBram Moolenaar enddef 1824b9a2cac3SBram Moolenaar END 1825b9a2cac3SBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1826fa211f3cSBram Moolenaar 1827fa211f3cSBram Moolenaar lines =<< trim END 1828fa211f3cSBram Moolenaar vim9script 1829fa211f3cSBram Moolenaar def Foo(): string 1830fa211f3cSBram Moolenaar return 'foo' 1831fa211f3cSBram Moolenaar enddef 1832fa211f3cSBram Moolenaar def Func() 1833cfcd011fSBram Moolenaar var Foo = {-> 'lambda'} 1834fa211f3cSBram Moolenaar enddef 1835fa211f3cSBram Moolenaar defcompile 1836fa211f3cSBram Moolenaar END 1837fa211f3cSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1838b9a2cac3SBram Moolenaarenddef 1839b9a2cac3SBram Moolenaar 18408a7d6542SBram Moolenaardef Test_fixed_size_list() 1841f5be8cdbSBram Moolenaar # will be allocated as one piece of memory, check that changes work 1842cfcd011fSBram Moolenaar var l = [1, 2, 3, 4] 18438a7d6542SBram Moolenaar l->remove(0) 18448a7d6542SBram Moolenaar l->add(5) 18458a7d6542SBram Moolenaar l->insert(99, 1) 18460f18b6d1SBram Moolenaar assert_equal([2, 99, 3, 4, 5], l) 18478a7d6542SBram Moolenaarenddef 18488a7d6542SBram Moolenaar 1849ae616494SBram Moolenaardef Test_no_insert_xit() 1850d2c61705SBram Moolenaar CheckDefExecFailure(['a = 1'], 'E1100:') 1851d2c61705SBram Moolenaar CheckDefExecFailure(['c = 1'], 'E1100:') 1852d2c61705SBram Moolenaar CheckDefExecFailure(['i = 1'], 'E1100:') 1853d2c61705SBram Moolenaar CheckDefExecFailure(['t = 1'], 'E1100:') 1854d2c61705SBram Moolenaar CheckDefExecFailure(['x = 1'], 'E1100:') 1855ae616494SBram Moolenaar 1856ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'a = 1'], 'E488:') 1857ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'a'], 'E1100:') 1858ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'c = 1'], 'E488:') 1859ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'c'], 'E1100:') 1860f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'i = 1'], 'E488:') 1861f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'i'], 'E1100:') 1862f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 't'], 'E1100:') 1863f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 't = 1'], 'E1100:') 1864f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'x = 1'], 'E1100:') 1865ae616494SBram Moolenaarenddef 1866ae616494SBram Moolenaar 1867158906cfSBram Moolenaardef IfElse(what: number): string 1868cfcd011fSBram Moolenaar var res = '' 1869158906cfSBram Moolenaar if what == 1 1870158906cfSBram Moolenaar res = "one" 1871158906cfSBram Moolenaar elseif what == 2 1872158906cfSBram Moolenaar res = "two" 1873a259d8d3SBram Moolenaar else 1874158906cfSBram Moolenaar res = "three" 1875a259d8d3SBram Moolenaar endif 1876158906cfSBram Moolenaar return res 1877a259d8d3SBram Moolenaarenddef 1878a259d8d3SBram Moolenaar 1879158906cfSBram Moolenaardef Test_if_elseif_else() 1880158906cfSBram Moolenaar assert_equal('one', IfElse(1)) 1881158906cfSBram Moolenaar assert_equal('two', IfElse(2)) 1882158906cfSBram Moolenaar assert_equal('three', IfElse(3)) 18830f18b6d1SBram Moolenaarenddef 18840f18b6d1SBram Moolenaar 1885e8c4abbbSBram Moolenaardef Test_if_elseif_else_fails() 1886d2c61705SBram Moolenaar CheckDefFailure(['elseif true'], 'E582:') 1887d2c61705SBram Moolenaar CheckDefFailure(['else'], 'E581:') 1888d2c61705SBram Moolenaar CheckDefFailure(['endif'], 'E580:') 1889ced68a00SBram Moolenaar CheckDefFailure(['if g:abool', 'elseif xxx'], 'E1001:') 1890d2c61705SBram Moolenaar CheckDefFailure(['if true', 'echo 1'], 'E171:') 18916628b7ebSBram Moolenaar 18926628b7ebSBram Moolenaar var lines =<< trim END 18936628b7ebSBram Moolenaar var s = '' 18946628b7ebSBram Moolenaar if s = '' 18956628b7ebSBram Moolenaar endif 18966628b7ebSBram Moolenaar END 18976628b7ebSBram Moolenaar CheckDefFailure(lines, 'E488:') 18986628b7ebSBram Moolenaar 18996628b7ebSBram Moolenaar lines =<< trim END 19006628b7ebSBram Moolenaar var s = '' 19016628b7ebSBram Moolenaar if s == '' 19026628b7ebSBram Moolenaar elseif s = '' 19036628b7ebSBram Moolenaar endif 19046628b7ebSBram Moolenaar END 19056628b7ebSBram Moolenaar CheckDefFailure(lines, 'E488:') 1906e8c4abbbSBram Moolenaarenddef 1907e8c4abbbSBram Moolenaar 19086d69bf60SBram Moolenaarlet g:bool_true = v:true 19096d69bf60SBram Moolenaarlet g:bool_false = v:false 19106d69bf60SBram Moolenaar 19116d69bf60SBram Moolenaardef Test_if_const_expr() 1912cfcd011fSBram Moolenaar var res = false 19136d69bf60SBram Moolenaar if true ? true : false 19146d69bf60SBram Moolenaar res = true 19156d69bf60SBram Moolenaar endif 19166d69bf60SBram Moolenaar assert_equal(true, res) 19176d69bf60SBram Moolenaar 1918585fea7bSBram Moolenaar g:glob = 2 1919585fea7bSBram Moolenaar if false 19206797966dSBram Moolenaar execute('g:glob = 3') 1921585fea7bSBram Moolenaar endif 1922585fea7bSBram Moolenaar assert_equal(2, g:glob) 1923585fea7bSBram Moolenaar if true 19246797966dSBram Moolenaar execute('g:glob = 3') 1925585fea7bSBram Moolenaar endif 1926585fea7bSBram Moolenaar assert_equal(3, g:glob) 1927585fea7bSBram Moolenaar 19286d69bf60SBram Moolenaar res = false 19296d69bf60SBram Moolenaar if g:bool_true ? true : false 19306d69bf60SBram Moolenaar res = true 19316d69bf60SBram Moolenaar endif 19326d69bf60SBram Moolenaar assert_equal(true, res) 19336d69bf60SBram Moolenaar 19346d69bf60SBram Moolenaar res = false 19356d69bf60SBram Moolenaar if true ? g:bool_true : false 19366d69bf60SBram Moolenaar res = true 19376d69bf60SBram Moolenaar endif 19386d69bf60SBram Moolenaar assert_equal(true, res) 19396d69bf60SBram Moolenaar 19406d69bf60SBram Moolenaar res = false 19416d69bf60SBram Moolenaar if true ? true : g:bool_false 19426d69bf60SBram Moolenaar res = true 19436d69bf60SBram Moolenaar endif 19446d69bf60SBram Moolenaar assert_equal(true, res) 19456d69bf60SBram Moolenaar 19466d69bf60SBram Moolenaar res = false 19476d69bf60SBram Moolenaar if true ? false : true 19486d69bf60SBram Moolenaar res = true 19496d69bf60SBram Moolenaar endif 19506d69bf60SBram Moolenaar assert_equal(false, res) 19516d69bf60SBram Moolenaar 19526d69bf60SBram Moolenaar res = false 19536d69bf60SBram Moolenaar if false ? false : true 19546d69bf60SBram Moolenaar res = true 19556d69bf60SBram Moolenaar endif 19566d69bf60SBram Moolenaar assert_equal(true, res) 19576d69bf60SBram Moolenaar 19586d69bf60SBram Moolenaar res = false 19596d69bf60SBram Moolenaar if false ? true : false 19606d69bf60SBram Moolenaar res = true 19616d69bf60SBram Moolenaar endif 19626d69bf60SBram Moolenaar assert_equal(false, res) 19636d69bf60SBram Moolenaar 19646d69bf60SBram Moolenaar res = false 1965e8c4abbbSBram Moolenaar if has('xyz') ? true : false 1966e8c4abbbSBram Moolenaar res = true 1967e8c4abbbSBram Moolenaar endif 1968e8c4abbbSBram Moolenaar assert_equal(false, res) 1969e8c4abbbSBram Moolenaar 1970e8c4abbbSBram Moolenaar res = false 19716d69bf60SBram Moolenaar if true && true 19726d69bf60SBram Moolenaar res = true 19736d69bf60SBram Moolenaar endif 19746d69bf60SBram Moolenaar assert_equal(true, res) 19756d69bf60SBram Moolenaar 19766d69bf60SBram Moolenaar res = false 19776d69bf60SBram Moolenaar if true && false 19786d69bf60SBram Moolenaar res = true 19796d69bf60SBram Moolenaar endif 19806d69bf60SBram Moolenaar assert_equal(false, res) 19816d69bf60SBram Moolenaar 19826d69bf60SBram Moolenaar res = false 19836d69bf60SBram Moolenaar if g:bool_true && false 19846d69bf60SBram Moolenaar res = true 19856d69bf60SBram Moolenaar endif 19866d69bf60SBram Moolenaar assert_equal(false, res) 19876d69bf60SBram Moolenaar 19886d69bf60SBram Moolenaar res = false 19896d69bf60SBram Moolenaar if true && g:bool_false 19906d69bf60SBram Moolenaar res = true 19916d69bf60SBram Moolenaar endif 19926d69bf60SBram Moolenaar assert_equal(false, res) 19936d69bf60SBram Moolenaar 19946d69bf60SBram Moolenaar res = false 19956d69bf60SBram Moolenaar if false && false 19966d69bf60SBram Moolenaar res = true 19976d69bf60SBram Moolenaar endif 19986d69bf60SBram Moolenaar assert_equal(false, res) 19996d69bf60SBram Moolenaar 20006d69bf60SBram Moolenaar res = false 20016d69bf60SBram Moolenaar if true || false 20026d69bf60SBram Moolenaar res = true 20036d69bf60SBram Moolenaar endif 20046d69bf60SBram Moolenaar assert_equal(true, res) 20056d69bf60SBram Moolenaar 20066d69bf60SBram Moolenaar res = false 20076d69bf60SBram Moolenaar if g:bool_true || false 20086d69bf60SBram Moolenaar res = true 20096d69bf60SBram Moolenaar endif 20106d69bf60SBram Moolenaar assert_equal(true, res) 20116d69bf60SBram Moolenaar 20126d69bf60SBram Moolenaar res = false 20136d69bf60SBram Moolenaar if true || g:bool_false 20146d69bf60SBram Moolenaar res = true 20156d69bf60SBram Moolenaar endif 20166d69bf60SBram Moolenaar assert_equal(true, res) 20176d69bf60SBram Moolenaar 20186d69bf60SBram Moolenaar res = false 20196d69bf60SBram Moolenaar if false || false 20206d69bf60SBram Moolenaar res = true 20216d69bf60SBram Moolenaar endif 20226d69bf60SBram Moolenaar assert_equal(false, res) 20233988f64fSBram Moolenaar 20243988f64fSBram Moolenaar # with constant "false" expression may be invalid so long as the syntax is OK 20253988f64fSBram Moolenaar if false | eval 0 | endif 20263988f64fSBram Moolenaar if false | eval burp + 234 | endif 20273988f64fSBram Moolenaar if false | echo burp 234 'asd' | endif 20283988f64fSBram Moolenaar if false 20293988f64fSBram Moolenaar burp 20303988f64fSBram Moolenaar endif 203180c34ca3SBram Moolenaarenddef 20326d69bf60SBram Moolenaar 203380c34ca3SBram Moolenaardef Test_if_const_expr_fails() 2034d2c61705SBram Moolenaar CheckDefFailure(['if "aaa" == "bbb'], 'E114:') 2035d2c61705SBram Moolenaar CheckDefFailure(["if 'aaa' == 'bbb"], 'E115:') 2036d2c61705SBram Moolenaar CheckDefFailure(["if has('aaa'"], 'E110:') 2037d2c61705SBram Moolenaar CheckDefFailure(["if has('aaa') ? true false"], 'E109:') 20386d69bf60SBram Moolenaarenddef 20396d69bf60SBram Moolenaar 204072abcf42SBram Moolenaardef RunNested(i: number): number 2041cfcd011fSBram Moolenaar var x: number = 0 204272abcf42SBram Moolenaar if i % 2 204372abcf42SBram Moolenaar if 1 2044f5be8cdbSBram Moolenaar # comment 204572abcf42SBram Moolenaar else 2046f5be8cdbSBram Moolenaar # comment 204772abcf42SBram Moolenaar endif 204872abcf42SBram Moolenaar x += 1 204972abcf42SBram Moolenaar else 205072abcf42SBram Moolenaar x += 1000 205172abcf42SBram Moolenaar endif 205272abcf42SBram Moolenaar return x 205372abcf42SBram Moolenaarenddef 205472abcf42SBram Moolenaar 205572abcf42SBram Moolenaardef Test_nested_if() 205672abcf42SBram Moolenaar assert_equal(1, RunNested(1)) 205772abcf42SBram Moolenaar assert_equal(1000, RunNested(2)) 205872abcf42SBram Moolenaarenddef 205972abcf42SBram Moolenaar 2060ad39c094SBram Moolenaardef Test_execute_cmd() 2061e4984290SBram Moolenaar # missing argument is ignored 2062e4984290SBram Moolenaar execute 2063e4984290SBram Moolenaar execute # comment 2064e4984290SBram Moolenaar 2065ad39c094SBram Moolenaar new 2066ad39c094SBram Moolenaar setline(1, 'default') 2067d2c61705SBram Moolenaar execute 'setline(1, "execute-string")' 2068ad39c094SBram Moolenaar assert_equal('execute-string', getline(1)) 2069a72cfb80SBram Moolenaar 2070d2c61705SBram Moolenaar execute "setline(1, 'execute-string')" 2071a72cfb80SBram Moolenaar assert_equal('execute-string', getline(1)) 2072a72cfb80SBram Moolenaar 2073cfcd011fSBram Moolenaar var cmd1 = 'setline(1,' 2074cfcd011fSBram Moolenaar var cmd2 = '"execute-var")' 2075a72cfb80SBram Moolenaar execute cmd1 cmd2 # comment 2076ad39c094SBram Moolenaar assert_equal('execute-var', getline(1)) 2077a72cfb80SBram Moolenaar 2078d2c61705SBram Moolenaar execute cmd1 cmd2 '|setline(1, "execute-var-string")' 2079ad39c094SBram Moolenaar assert_equal('execute-var-string', getline(1)) 2080a72cfb80SBram Moolenaar 2081cfcd011fSBram Moolenaar var cmd_first = 'call ' 2082cfcd011fSBram Moolenaar var cmd_last = 'setline(1, "execute-var-var")' 2083ad39c094SBram Moolenaar execute cmd_first .. cmd_last 2084ad39c094SBram Moolenaar assert_equal('execute-var-var', getline(1)) 2085ad39c094SBram Moolenaar bwipe! 2086585fea7bSBram Moolenaar 2087cfcd011fSBram Moolenaar var n = true 20882d6b20d6SBram Moolenaar execute 'echomsg' (n ? '"true"' : '"no"') 20892d6b20d6SBram Moolenaar assert_match('^true$', Screenline(&lines)) 20902d6b20d6SBram Moolenaar 2091e0de171eSBram Moolenaar echomsg [1, 2, 3] {a: 1, b: 2} 2092e5abf7afSBram Moolenaar assert_match('^\[1, 2, 3\] {''a'': 1, ''b'': 2}$', Screenline(&lines)) 2093e5abf7afSBram Moolenaar 2094d2c61705SBram Moolenaar CheckDefFailure(['execute xxx'], 'E1001:', 1) 2095d2c61705SBram Moolenaar CheckDefExecFailure(['execute "tabnext " .. 8'], 'E475:', 1) 2096d2c61705SBram Moolenaar CheckDefFailure(['execute "cmd"# comment'], 'E488:', 1) 2097ad39c094SBram Moolenaarenddef 2098ad39c094SBram Moolenaar 209947e880d6SBram Moolenaardef Test_execute_cmd_vimscript() 2100f5be8cdbSBram Moolenaar # only checks line continuation 2101cfcd011fSBram Moolenaar var lines =<< trim END 210247e880d6SBram Moolenaar vim9script 210347e880d6SBram Moolenaar execute 'g:someVar' 210447e880d6SBram Moolenaar .. ' = ' .. 210547e880d6SBram Moolenaar '28' 210647e880d6SBram Moolenaar assert_equal(28, g:someVar) 210747e880d6SBram Moolenaar unlet g:someVar 210847e880d6SBram Moolenaar END 210947e880d6SBram Moolenaar CheckScriptSuccess(lines) 211047e880d6SBram Moolenaarenddef 211147e880d6SBram Moolenaar 2112ad39c094SBram Moolenaardef Test_echo_cmd() 2113a72cfb80SBram Moolenaar echo 'some' # comment 2114585fea7bSBram Moolenaar echon 'thing' 2115ad39c094SBram Moolenaar assert_match('^something$', Screenline(&lines)) 2116ad39c094SBram Moolenaar 2117a72cfb80SBram Moolenaar echo "some" # comment 2118a72cfb80SBram Moolenaar echon "thing" 2119a72cfb80SBram Moolenaar assert_match('^something$', Screenline(&lines)) 2120a72cfb80SBram Moolenaar 2121cfcd011fSBram Moolenaar var str1 = 'some' 2122cfcd011fSBram Moolenaar var str2 = 'more' 2123ad39c094SBram Moolenaar echo str1 str2 2124ad39c094SBram Moolenaar assert_match('^some more$', Screenline(&lines)) 2125a72cfb80SBram Moolenaar 2126d2c61705SBram Moolenaar CheckDefFailure(['echo "xxx"# comment'], 'E488:') 2127ad39c094SBram Moolenaarenddef 2128ad39c094SBram Moolenaar 2129f93c7feaSBram Moolenaardef Test_echomsg_cmd() 2130f93c7feaSBram Moolenaar echomsg 'some' 'more' # comment 2131f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 2132f93c7feaSBram Moolenaar echo 'clear' 2133df069eecSBram Moolenaar :1messages 2134f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 2135f93c7feaSBram Moolenaar 2136d2c61705SBram Moolenaar CheckDefFailure(['echomsg "xxx"# comment'], 'E488:') 2137f93c7feaSBram Moolenaarenddef 2138f93c7feaSBram Moolenaar 213947e880d6SBram Moolenaardef Test_echomsg_cmd_vimscript() 2140f5be8cdbSBram Moolenaar # only checks line continuation 2141cfcd011fSBram Moolenaar var lines =<< trim END 214247e880d6SBram Moolenaar vim9script 214347e880d6SBram Moolenaar echomsg 'here' 214447e880d6SBram Moolenaar .. ' is ' .. 214547e880d6SBram Moolenaar 'a message' 214647e880d6SBram Moolenaar assert_match('^here is a message$', Screenline(&lines)) 214747e880d6SBram Moolenaar END 214847e880d6SBram Moolenaar CheckScriptSuccess(lines) 214947e880d6SBram Moolenaarenddef 215047e880d6SBram Moolenaar 2151f93c7feaSBram Moolenaardef Test_echoerr_cmd() 215240ee466cSBram Moolenaar try 215340ee466cSBram Moolenaar echoerr 'something' 'wrong' # comment 215440ee466cSBram Moolenaar catch 215540ee466cSBram Moolenaar assert_match('something wrong', v:exception) 215640ee466cSBram Moolenaar endtry 2157f93c7feaSBram Moolenaarenddef 2158f93c7feaSBram Moolenaar 215947e880d6SBram Moolenaardef Test_echoerr_cmd_vimscript() 2160f5be8cdbSBram Moolenaar # only checks line continuation 2161cfcd011fSBram Moolenaar var lines =<< trim END 216247e880d6SBram Moolenaar vim9script 216347e880d6SBram Moolenaar try 216447e880d6SBram Moolenaar echoerr 'this' 216547e880d6SBram Moolenaar .. ' is ' .. 216647e880d6SBram Moolenaar 'wrong' 216747e880d6SBram Moolenaar catch 216847e880d6SBram Moolenaar assert_match('this is wrong', v:exception) 216947e880d6SBram Moolenaar endtry 217047e880d6SBram Moolenaar END 217147e880d6SBram Moolenaar CheckScriptSuccess(lines) 217247e880d6SBram Moolenaarenddef 217347e880d6SBram Moolenaar 217441fe0617SBram Moolenaardef Test_for_outside_of_function() 2175cfcd011fSBram Moolenaar var lines =<< trim END 217641fe0617SBram Moolenaar vim9script 217741fe0617SBram Moolenaar new 217841fe0617SBram Moolenaar for var in range(0, 3) 217941fe0617SBram Moolenaar append(line('$'), var) 218041fe0617SBram Moolenaar endfor 218141fe0617SBram Moolenaar assert_equal(['', '0', '1', '2', '3'], getline(1, '$')) 218241fe0617SBram Moolenaar bwipe! 218341fe0617SBram Moolenaar END 218441fe0617SBram Moolenaar writefile(lines, 'Xvim9for.vim') 218541fe0617SBram Moolenaar source Xvim9for.vim 218641fe0617SBram Moolenaar delete('Xvim9for.vim') 218741fe0617SBram Moolenaarenddef 21888a7d6542SBram Moolenaar 2189e8c4abbbSBram Moolenaardef Test_for_loop() 2190cfcd011fSBram Moolenaar var result = '' 2191e8c4abbbSBram Moolenaar for cnt in range(7) 2192e8c4abbbSBram Moolenaar if cnt == 4 2193e8c4abbbSBram Moolenaar break 2194e8c4abbbSBram Moolenaar endif 2195e8c4abbbSBram Moolenaar if cnt == 2 2196e8c4abbbSBram Moolenaar continue 2197e8c4abbbSBram Moolenaar endif 2198e8c4abbbSBram Moolenaar result ..= cnt .. '_' 2199e8c4abbbSBram Moolenaar endfor 2200e8c4abbbSBram Moolenaar assert_equal('0_1_3_', result) 22010ad3e894SBram Moolenaar 2202cfcd011fSBram Moolenaar var concat = '' 22030ad3e894SBram Moolenaar for str in eval('["one", "two"]') 22040ad3e894SBram Moolenaar concat ..= str 22050ad3e894SBram Moolenaar endfor 22060ad3e894SBram Moolenaar assert_equal('onetwo', concat) 220738bd8de5SBram Moolenaar 220838bd8de5SBram Moolenaar var total = 0 220938bd8de5SBram Moolenaar for nr in 221038bd8de5SBram Moolenaar [1, 2, 3] 221138bd8de5SBram Moolenaar total += nr 221238bd8de5SBram Moolenaar endfor 221338bd8de5SBram Moolenaar assert_equal(6, total) 221438bd8de5SBram Moolenaar 221538bd8de5SBram Moolenaar total = 0 221638bd8de5SBram Moolenaar for nr 221738bd8de5SBram Moolenaar in [1, 2, 3] 221838bd8de5SBram Moolenaar total += nr 221938bd8de5SBram Moolenaar endfor 222038bd8de5SBram Moolenaar assert_equal(6, total) 222138bd8de5SBram Moolenaar 222238bd8de5SBram Moolenaar total = 0 222338bd8de5SBram Moolenaar for nr 222438bd8de5SBram Moolenaar in 222538bd8de5SBram Moolenaar [1, 2, 3] 222638bd8de5SBram Moolenaar total += nr 222738bd8de5SBram Moolenaar endfor 222838bd8de5SBram Moolenaar assert_equal(6, total) 2229036d0714SBram Moolenaar 2230036d0714SBram Moolenaar var res = "" 2231036d0714SBram Moolenaar for [n: number, s: string] in [[1, 'a'], [2, 'b']] 2232036d0714SBram Moolenaar res ..= n .. s 2233036d0714SBram Moolenaar endfor 2234036d0714SBram Moolenaar assert_equal('1a2b', res) 2235e8c4abbbSBram Moolenaarenddef 2236e8c4abbbSBram Moolenaar 2237e8c4abbbSBram Moolenaardef Test_for_loop_fails() 2238025cb1caSBram Moolenaar CheckDefFailure(['for '], 'E1097:') 2239025cb1caSBram Moolenaar CheckDefFailure(['for x'], 'E1097:') 2240025cb1caSBram Moolenaar CheckDefFailure(['for x in'], 'E1097:') 2241675f716eSBram Moolenaar CheckDefFailure(['for # in range(5)'], 'E690:') 2242675f716eSBram Moolenaar CheckDefFailure(['for i In range(5)'], 'E690:') 2243cfcd011fSBram Moolenaar CheckDefFailure(['var x = 5', 'for x in range(5)'], 'E1017:') 2244822ba247SBram Moolenaar CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef', 'defcompile'], 'E1006:') 22452d870f8dSBram Moolenaar delfunc! g:Func 2246451c2e35SBram Moolenaar CheckDefFailure(['for i in "text"'], 'E1012:') 2247675f716eSBram Moolenaar CheckDefFailure(['for i in xxx'], 'E1001:') 2248675f716eSBram Moolenaar CheckDefFailure(['endfor'], 'E588:') 2249675f716eSBram Moolenaar CheckDefFailure(['for i in range(3)', 'echo 3'], 'E170:') 2250e8c4abbbSBram Moolenaarenddef 2251e8c4abbbSBram Moolenaar 2252ea87069dSBram Moolenaardef Test_for_loop_script_var() 2253ea87069dSBram Moolenaar # cannot use s:var in a :def function 2254ea87069dSBram Moolenaar CheckDefFailure(['for s:var in range(3)', 'echo 3'], 'E1101:') 2255ea87069dSBram Moolenaar 2256ea87069dSBram Moolenaar # can use s:var in Vim9 script, with or without s: 2257ea87069dSBram Moolenaar var lines =<< trim END 2258ea87069dSBram Moolenaar vim9script 2259ea87069dSBram Moolenaar var total = 0 2260ea87069dSBram Moolenaar for s:var in [1, 2, 3] 2261ea87069dSBram Moolenaar total += s:var 2262ea87069dSBram Moolenaar endfor 2263ea87069dSBram Moolenaar assert_equal(6, total) 2264ea87069dSBram Moolenaar 2265ea87069dSBram Moolenaar total = 0 2266ea87069dSBram Moolenaar for var in [1, 2, 3] 2267ea87069dSBram Moolenaar total += var 2268ea87069dSBram Moolenaar endfor 2269ea87069dSBram Moolenaar assert_equal(6, total) 2270ea87069dSBram Moolenaar END 2271ea87069dSBram Moolenaarenddef 2272ea87069dSBram Moolenaar 2273792f786aSBram Moolenaardef Test_for_loop_unpack() 22744b8a0651SBram Moolenaar var lines =<< trim END 2275792f786aSBram Moolenaar var result = [] 2276792f786aSBram Moolenaar for [v1, v2] in [[1, 2], [3, 4]] 2277792f786aSBram Moolenaar result->add(v1) 2278792f786aSBram Moolenaar result->add(v2) 2279792f786aSBram Moolenaar endfor 2280792f786aSBram Moolenaar assert_equal([1, 2, 3, 4], result) 2281792f786aSBram Moolenaar 2282792f786aSBram Moolenaar result = [] 2283792f786aSBram Moolenaar for [v1, v2; v3] in [[1, 2], [3, 4, 5, 6]] 2284792f786aSBram Moolenaar result->add(v1) 2285792f786aSBram Moolenaar result->add(v2) 2286792f786aSBram Moolenaar result->add(v3) 2287792f786aSBram Moolenaar endfor 2288792f786aSBram Moolenaar assert_equal([1, 2, [], 3, 4, [5, 6]], result) 2289792f786aSBram Moolenaar 22904b8a0651SBram Moolenaar result = [] 22914b8a0651SBram Moolenaar for [&ts, &sw] in [[1, 2], [3, 4]] 22924b8a0651SBram Moolenaar result->add(&ts) 22934b8a0651SBram Moolenaar result->add(&sw) 22944b8a0651SBram Moolenaar endfor 22954b8a0651SBram Moolenaar assert_equal([1, 2, 3, 4], result) 22964b8a0651SBram Moolenaar 22974b8a0651SBram Moolenaar var slist: list<string> 22984b8a0651SBram Moolenaar for [$LOOPVAR, @r, v:errmsg] in [['a', 'b', 'c'], ['d', 'e', 'f']] 22994b8a0651SBram Moolenaar slist->add($LOOPVAR) 23004b8a0651SBram Moolenaar slist->add(@r) 23014b8a0651SBram Moolenaar slist->add(v:errmsg) 23024b8a0651SBram Moolenaar endfor 23034b8a0651SBram Moolenaar assert_equal(['a', 'b', 'c', 'd', 'e', 'f'], slist) 23044b8a0651SBram Moolenaar 23054b8a0651SBram Moolenaar slist = [] 23064b8a0651SBram Moolenaar for [g:globalvar, b:bufvar, w:winvar, t:tabvar] in [['global', 'buf', 'win', 'tab'], ['1', '2', '3', '4']] 23074b8a0651SBram Moolenaar slist->add(g:globalvar) 23084b8a0651SBram Moolenaar slist->add(b:bufvar) 23094b8a0651SBram Moolenaar slist->add(w:winvar) 23104b8a0651SBram Moolenaar slist->add(t:tabvar) 23114b8a0651SBram Moolenaar endfor 23124b8a0651SBram Moolenaar assert_equal(['global', 'buf', 'win', 'tab', '1', '2', '3', '4'], slist) 2313f6c177abSBram Moolenaar unlet! g:globalvar b:bufvar w:winvar t:tabvar 23144b8a0651SBram Moolenaar END 23154b8a0651SBram Moolenaar CheckDefAndScriptSuccess(lines) 23164b8a0651SBram Moolenaar 23174b8a0651SBram Moolenaar lines =<< trim END 2318792f786aSBram Moolenaar for [v1, v2] in [[1, 2, 3], [3, 4]] 2319792f786aSBram Moolenaar echo v1 v2 2320792f786aSBram Moolenaar endfor 2321792f786aSBram Moolenaar END 2322792f786aSBram Moolenaar CheckDefExecFailure(lines, 'E710:', 1) 2323792f786aSBram Moolenaar 2324792f786aSBram Moolenaar lines =<< trim END 2325792f786aSBram Moolenaar for [v1, v2] in [[1], [3, 4]] 2326792f786aSBram Moolenaar echo v1 v2 2327792f786aSBram Moolenaar endfor 2328792f786aSBram Moolenaar END 2329792f786aSBram Moolenaar CheckDefExecFailure(lines, 'E711:', 1) 2330792f786aSBram Moolenaar 2331792f786aSBram Moolenaar lines =<< trim END 2332792f786aSBram Moolenaar for [v1, v1] in [[1, 2], [3, 4]] 2333792f786aSBram Moolenaar echo v1 2334792f786aSBram Moolenaar endfor 2335792f786aSBram Moolenaar END 2336792f786aSBram Moolenaar CheckDefExecFailure(lines, 'E1017:', 1) 2337792f786aSBram Moolenaarenddef 2338792f786aSBram Moolenaar 2339c150c09eSBram Moolenaardef Test_for_loop_with_try_continue() 2340c150c09eSBram Moolenaar var looped = 0 2341c150c09eSBram Moolenaar var cleanup = 0 2342c150c09eSBram Moolenaar for i in range(3) 2343c150c09eSBram Moolenaar looped += 1 2344c150c09eSBram Moolenaar try 2345c150c09eSBram Moolenaar eval [][0] 2346c150c09eSBram Moolenaar catch 2347c150c09eSBram Moolenaar continue 2348c150c09eSBram Moolenaar finally 2349c150c09eSBram Moolenaar cleanup += 1 2350c150c09eSBram Moolenaar endtry 2351c150c09eSBram Moolenaar endfor 2352c150c09eSBram Moolenaar assert_equal(3, looped) 2353c150c09eSBram Moolenaar assert_equal(3, cleanup) 2354c150c09eSBram Moolenaarenddef 2355c150c09eSBram Moolenaar 2356d0df1aacSBram Moolenaardef Test_while_loop() 2357cfcd011fSBram Moolenaar var result = '' 2358cfcd011fSBram Moolenaar var cnt = 0 2359d0df1aacSBram Moolenaar while cnt < 555 2360d0df1aacSBram Moolenaar if cnt == 3 2361d0df1aacSBram Moolenaar break 2362d0df1aacSBram Moolenaar endif 2363d0df1aacSBram Moolenaar cnt += 1 2364d0df1aacSBram Moolenaar if cnt == 2 2365d0df1aacSBram Moolenaar continue 2366d0df1aacSBram Moolenaar endif 2367d0df1aacSBram Moolenaar result ..= cnt .. '_' 2368d0df1aacSBram Moolenaar endwhile 2369d0df1aacSBram Moolenaar assert_equal('1_3_', result) 2370dee37dc7SBram Moolenaar 2371dee37dc7SBram Moolenaar var s = '' 23720123cc1eSBram Moolenaar while s == 'x' #{comment} 2373dee37dc7SBram Moolenaar endwhile 2374d0df1aacSBram Moolenaarenddef 2375d0df1aacSBram Moolenaar 2376e8c4abbbSBram Moolenaardef Test_while_loop_fails() 2377675f716eSBram Moolenaar CheckDefFailure(['while xxx'], 'E1001:') 2378675f716eSBram Moolenaar CheckDefFailure(['endwhile'], 'E588:') 2379675f716eSBram Moolenaar CheckDefFailure(['continue'], 'E586:') 2380675f716eSBram Moolenaar CheckDefFailure(['if true', 'continue'], 'E586:') 2381675f716eSBram Moolenaar CheckDefFailure(['break'], 'E587:') 2382675f716eSBram Moolenaar CheckDefFailure(['if true', 'break'], 'E587:') 2383675f716eSBram Moolenaar CheckDefFailure(['while 1', 'echo 3'], 'E170:') 23846628b7ebSBram Moolenaar 23856628b7ebSBram Moolenaar var lines =<< trim END 23866628b7ebSBram Moolenaar var s = '' 23876628b7ebSBram Moolenaar while s = '' 23886628b7ebSBram Moolenaar endwhile 23896628b7ebSBram Moolenaar END 23906628b7ebSBram Moolenaar CheckDefFailure(lines, 'E488:') 2391bd5da371SBram Moolenaarenddef 2392bd5da371SBram Moolenaar 23939645e2d9SBram Moolenaardef Test_interrupt_loop() 2394cfcd011fSBram Moolenaar var caught = false 2395cfcd011fSBram Moolenaar var x = 0 239697acfc78SBram Moolenaar try 23979645e2d9SBram Moolenaar while 1 23989645e2d9SBram Moolenaar x += 1 23999645e2d9SBram Moolenaar if x == 100 24009645e2d9SBram Moolenaar feedkeys("\<C-C>", 'Lt') 24019645e2d9SBram Moolenaar endif 24029645e2d9SBram Moolenaar endwhile 240397acfc78SBram Moolenaar catch 240497acfc78SBram Moolenaar caught = true 240597acfc78SBram Moolenaar assert_equal(100, x) 240697acfc78SBram Moolenaar endtry 240797acfc78SBram Moolenaar assert_true(caught, 'should have caught an exception') 240825859dd7SBram Moolenaar # consume the CTRL-C 240925859dd7SBram Moolenaar getchar(0) 24109645e2d9SBram Moolenaarenddef 241120431c9dSBram Moolenaar 24124fdae999SBram Moolenaardef Test_automatic_line_continuation() 2413cfcd011fSBram Moolenaar var mylist = [ 24144fdae999SBram Moolenaar 'one', 24154fdae999SBram Moolenaar 'two', 24164fdae999SBram Moolenaar 'three', 2417f5be8cdbSBram Moolenaar ] # comment 24184fdae999SBram Moolenaar assert_equal(['one', 'two', 'three'], mylist) 24194fdae999SBram Moolenaar 2420cfcd011fSBram Moolenaar var mydict = { 2421e0de171eSBram Moolenaar ['one']: 1, 2422e0de171eSBram Moolenaar ['two']: 2, 2423e0de171eSBram Moolenaar ['three']: 24244fdae999SBram Moolenaar 3, 2425f5be8cdbSBram Moolenaar } # comment 2426e0de171eSBram Moolenaar assert_equal({one: 1, two: 2, three: 3}, mydict) 2427e0de171eSBram Moolenaar mydict = { 24282c330432SBram Moolenaar one: 1, # comment 24292c330432SBram Moolenaar two: # comment 24302c330432SBram Moolenaar 2, # comment 24312c330432SBram Moolenaar three: 3 # comment 24322c330432SBram Moolenaar } 2433e0de171eSBram Moolenaar assert_equal({one: 1, two: 2, three: 3}, mydict) 2434e0de171eSBram Moolenaar mydict = { 24352c330432SBram Moolenaar one: 1, 24364fdae999SBram Moolenaar two: 24374fdae999SBram Moolenaar 2, 24382c330432SBram Moolenaar three: 3 24394fdae999SBram Moolenaar } 2440e0de171eSBram Moolenaar assert_equal({one: 1, two: 2, three: 3}, mydict) 2441e6085c53SBram Moolenaar 2442e6085c53SBram Moolenaar assert_equal( 2443e6085c53SBram Moolenaar ['one', 'two', 'three'], 2444e6085c53SBram Moolenaar split('one two three') 2445e6085c53SBram Moolenaar ) 24464fdae999SBram Moolenaarenddef 24474fdae999SBram Moolenaar 24487a092245SBram Moolenaardef Test_vim9_comment() 24497a092245SBram Moolenaar CheckScriptSuccess([ 24507a092245SBram Moolenaar 'vim9script', 24517a092245SBram Moolenaar '# something', 245293f82cbeSBram Moolenaar '#something', 245393f82cbeSBram Moolenaar '#{something', 24547a092245SBram Moolenaar ]) 245593f82cbeSBram Moolenaar 245693f82cbeSBram Moolenaar split Xfile 245793f82cbeSBram Moolenaar CheckScriptSuccess([ 245893f82cbeSBram Moolenaar 'vim9script', 245993f82cbeSBram Moolenaar 'edit #something', 246093f82cbeSBram Moolenaar ]) 246193f82cbeSBram Moolenaar CheckScriptSuccess([ 246293f82cbeSBram Moolenaar 'vim9script', 246393f82cbeSBram Moolenaar 'edit #{something', 246493f82cbeSBram Moolenaar ]) 246593f82cbeSBram Moolenaar close 246693f82cbeSBram Moolenaar 24677a092245SBram Moolenaar CheckScriptFailure([ 24687a092245SBram Moolenaar 'vim9script', 24697a092245SBram Moolenaar ':# something', 24707a092245SBram Moolenaar ], 'E488:') 24717a092245SBram Moolenaar CheckScriptFailure([ 24727a092245SBram Moolenaar '# something', 24737a092245SBram Moolenaar ], 'E488:') 24747a092245SBram Moolenaar CheckScriptFailure([ 24757a092245SBram Moolenaar ':# something', 24767a092245SBram Moolenaar ], 'E488:') 24777a092245SBram Moolenaar 24784a8d9f2eSBram Moolenaar { # block start 24794a8d9f2eSBram Moolenaar } # block end 24804a8d9f2eSBram Moolenaar CheckDefFailure([ 24814a8d9f2eSBram Moolenaar '{# comment', 24824a8d9f2eSBram Moolenaar ], 'E488:') 24834a8d9f2eSBram Moolenaar CheckDefFailure([ 24844a8d9f2eSBram Moolenaar '{', 24854a8d9f2eSBram Moolenaar '}# comment', 24864a8d9f2eSBram Moolenaar ], 'E488:') 24874a8d9f2eSBram Moolenaar 24884a8d9f2eSBram Moolenaar echo "yes" # comment 24894a8d9f2eSBram Moolenaar CheckDefFailure([ 24904a8d9f2eSBram Moolenaar 'echo "yes"# comment', 24914a8d9f2eSBram Moolenaar ], 'E488:') 24927a092245SBram Moolenaar CheckScriptSuccess([ 24937a092245SBram Moolenaar 'vim9script', 24947a092245SBram Moolenaar 'echo "yes" # something', 24957a092245SBram Moolenaar ]) 24967a092245SBram Moolenaar CheckScriptFailure([ 24977a092245SBram Moolenaar 'vim9script', 24987a092245SBram Moolenaar 'echo "yes"# something', 24997a092245SBram Moolenaar ], 'E121:') 25007a092245SBram Moolenaar CheckScriptFailure([ 25017a092245SBram Moolenaar 'vim9script', 25027a092245SBram Moolenaar 'echo# something', 2503f8103f27SBram Moolenaar ], 'E1144:') 25047a092245SBram Moolenaar CheckScriptFailure([ 25057a092245SBram Moolenaar 'echo "yes" # something', 25067a092245SBram Moolenaar ], 'E121:') 25077a092245SBram Moolenaar 25084a8d9f2eSBram Moolenaar exe "echo" # comment 25094a8d9f2eSBram Moolenaar CheckDefFailure([ 25104a8d9f2eSBram Moolenaar 'exe "echo"# comment', 25114a8d9f2eSBram Moolenaar ], 'E488:') 25124a8d9f2eSBram Moolenaar CheckScriptSuccess([ 25134a8d9f2eSBram Moolenaar 'vim9script', 25144a8d9f2eSBram Moolenaar 'exe "echo" # something', 25154a8d9f2eSBram Moolenaar ]) 25164a8d9f2eSBram Moolenaar CheckScriptFailure([ 25174a8d9f2eSBram Moolenaar 'vim9script', 25184a8d9f2eSBram Moolenaar 'exe "echo"# something', 25194a8d9f2eSBram Moolenaar ], 'E121:') 25204a8d9f2eSBram Moolenaar CheckScriptFailure([ 25214a8d9f2eSBram Moolenaar 'vim9script', 25224a8d9f2eSBram Moolenaar 'exe# something', 2523f8103f27SBram Moolenaar ], 'E1144:') 25244a8d9f2eSBram Moolenaar CheckScriptFailure([ 25254a8d9f2eSBram Moolenaar 'exe "echo" # something', 25264a8d9f2eSBram Moolenaar ], 'E121:') 25274a8d9f2eSBram Moolenaar 25287a092245SBram Moolenaar CheckDefFailure([ 25297a092245SBram Moolenaar 'try# comment', 25307a092245SBram Moolenaar ' echo "yes"', 25317a092245SBram Moolenaar 'catch', 25327a092245SBram Moolenaar 'endtry', 2533f8103f27SBram Moolenaar ], 'E1144:') 25342c5ed4e3SBram Moolenaar CheckScriptFailure([ 25352c5ed4e3SBram Moolenaar 'vim9script', 25362c5ed4e3SBram Moolenaar 'try# comment', 25372c5ed4e3SBram Moolenaar 'echo "yes"', 2538f8103f27SBram Moolenaar ], 'E1144:') 25397a092245SBram Moolenaar CheckDefFailure([ 25407a092245SBram Moolenaar 'try', 2541a72cfb80SBram Moolenaar ' throw#comment', 2542a72cfb80SBram Moolenaar 'catch', 2543a72cfb80SBram Moolenaar 'endtry', 2544f8103f27SBram Moolenaar ], 'E1144:') 2545a72cfb80SBram Moolenaar CheckDefFailure([ 2546a72cfb80SBram Moolenaar 'try', 2547a72cfb80SBram Moolenaar ' throw "yes"#comment', 2548a72cfb80SBram Moolenaar 'catch', 2549a72cfb80SBram Moolenaar 'endtry', 2550a72cfb80SBram Moolenaar ], 'E488:') 2551a72cfb80SBram Moolenaar CheckDefFailure([ 2552a72cfb80SBram Moolenaar 'try', 25537a092245SBram Moolenaar ' echo "yes"', 25547a092245SBram Moolenaar 'catch# comment', 25557a092245SBram Moolenaar 'endtry', 2556f8103f27SBram Moolenaar ], 'E1144:') 25572c5ed4e3SBram Moolenaar CheckScriptFailure([ 25582c5ed4e3SBram Moolenaar 'vim9script', 25592c5ed4e3SBram Moolenaar 'try', 25602c5ed4e3SBram Moolenaar ' echo "yes"', 25612c5ed4e3SBram Moolenaar 'catch# comment', 25622c5ed4e3SBram Moolenaar 'endtry', 2563f8103f27SBram Moolenaar ], 'E1144:') 25642c5ed4e3SBram Moolenaar CheckDefFailure([ 25652c5ed4e3SBram Moolenaar 'try', 25662c5ed4e3SBram Moolenaar ' echo "yes"', 25672c5ed4e3SBram Moolenaar 'catch /pat/# comment', 25682c5ed4e3SBram Moolenaar 'endtry', 25692c5ed4e3SBram Moolenaar ], 'E488:') 25707a092245SBram Moolenaar CheckDefFailure([ 25717a092245SBram Moolenaar 'try', 25727a092245SBram Moolenaar 'echo "yes"', 25737a092245SBram Moolenaar 'catch', 25747a092245SBram Moolenaar 'endtry# comment', 2575f8103f27SBram Moolenaar ], 'E1144:') 25762c5ed4e3SBram Moolenaar CheckScriptFailure([ 25772c5ed4e3SBram Moolenaar 'vim9script', 25782c5ed4e3SBram Moolenaar 'try', 25792c5ed4e3SBram Moolenaar ' echo "yes"', 25802c5ed4e3SBram Moolenaar 'catch', 25812c5ed4e3SBram Moolenaar 'endtry# comment', 2582f8103f27SBram Moolenaar ], 'E1144:') 25832c5ed4e3SBram Moolenaar 25842c5ed4e3SBram Moolenaar CheckScriptSuccess([ 25852c5ed4e3SBram Moolenaar 'vim9script', 25862c5ed4e3SBram Moolenaar 'hi # comment', 25872c5ed4e3SBram Moolenaar ]) 25882c5ed4e3SBram Moolenaar CheckScriptFailure([ 25892c5ed4e3SBram Moolenaar 'vim9script', 25902c5ed4e3SBram Moolenaar 'hi# comment', 2591f8103f27SBram Moolenaar ], 'E1144:') 25921966c248SBram Moolenaar CheckScriptSuccess([ 25931966c248SBram Moolenaar 'vim9script', 25941966c248SBram Moolenaar 'hi Search # comment', 25951966c248SBram Moolenaar ]) 25961966c248SBram Moolenaar CheckScriptFailure([ 25971966c248SBram Moolenaar 'vim9script', 25981966c248SBram Moolenaar 'hi Search# comment', 25991966c248SBram Moolenaar ], 'E416:') 26001966c248SBram Moolenaar CheckScriptSuccess([ 26011966c248SBram Moolenaar 'vim9script', 26021966c248SBram Moolenaar 'hi link This Search # comment', 26031966c248SBram Moolenaar ]) 26041966c248SBram Moolenaar CheckScriptFailure([ 26051966c248SBram Moolenaar 'vim9script', 26061966c248SBram Moolenaar 'hi link This That# comment', 26071966c248SBram Moolenaar ], 'E413:') 26081966c248SBram Moolenaar CheckScriptSuccess([ 26091966c248SBram Moolenaar 'vim9script', 26101966c248SBram Moolenaar 'hi clear This # comment', 26111966c248SBram Moolenaar 'hi clear # comment', 26121966c248SBram Moolenaar ]) 2613f5be8cdbSBram Moolenaar # not tested, because it doesn't give an error but a warning: 2614f5be8cdbSBram Moolenaar # hi clear This# comment', 26151966c248SBram Moolenaar CheckScriptFailure([ 26161966c248SBram Moolenaar 'vim9script', 26171966c248SBram Moolenaar 'hi clear# comment', 26181966c248SBram Moolenaar ], 'E416:') 26191966c248SBram Moolenaar 26201966c248SBram Moolenaar CheckScriptSuccess([ 26211966c248SBram Moolenaar 'vim9script', 26221966c248SBram Moolenaar 'hi Group term=bold', 26231966c248SBram Moolenaar 'match Group /todo/ # comment', 26241966c248SBram Moolenaar ]) 26251966c248SBram Moolenaar CheckScriptFailure([ 26261966c248SBram Moolenaar 'vim9script', 26271966c248SBram Moolenaar 'hi Group term=bold', 26281966c248SBram Moolenaar 'match Group /todo/# comment', 26291966c248SBram Moolenaar ], 'E488:') 26301966c248SBram Moolenaar CheckScriptSuccess([ 26311966c248SBram Moolenaar 'vim9script', 26321966c248SBram Moolenaar 'match # comment', 26331966c248SBram Moolenaar ]) 26341966c248SBram Moolenaar CheckScriptFailure([ 26351966c248SBram Moolenaar 'vim9script', 26361966c248SBram Moolenaar 'match# comment', 2637f8103f27SBram Moolenaar ], 'E1144:') 26381966c248SBram Moolenaar CheckScriptSuccess([ 26391966c248SBram Moolenaar 'vim9script', 26401966c248SBram Moolenaar 'match none # comment', 26411966c248SBram Moolenaar ]) 26421966c248SBram Moolenaar CheckScriptFailure([ 26431966c248SBram Moolenaar 'vim9script', 26441966c248SBram Moolenaar 'match none# comment', 26451966c248SBram Moolenaar ], 'E475:') 26461966c248SBram Moolenaar 26471966c248SBram Moolenaar CheckScriptSuccess([ 26481966c248SBram Moolenaar 'vim9script', 26491966c248SBram Moolenaar 'menutrans clear # comment', 26501966c248SBram Moolenaar ]) 26511966c248SBram Moolenaar CheckScriptFailure([ 26521966c248SBram Moolenaar 'vim9script', 26531966c248SBram Moolenaar 'menutrans clear# comment text', 26541966c248SBram Moolenaar ], 'E474:') 26551966c248SBram Moolenaar 26561966c248SBram Moolenaar CheckScriptSuccess([ 26571966c248SBram Moolenaar 'vim9script', 26581966c248SBram Moolenaar 'syntax clear # comment', 26591966c248SBram Moolenaar ]) 26601966c248SBram Moolenaar CheckScriptFailure([ 26611966c248SBram Moolenaar 'vim9script', 26621966c248SBram Moolenaar 'syntax clear# comment text', 26631966c248SBram Moolenaar ], 'E28:') 26641966c248SBram Moolenaar CheckScriptSuccess([ 26651966c248SBram Moolenaar 'vim9script', 26661966c248SBram Moolenaar 'syntax keyword Word some', 26671966c248SBram Moolenaar 'syntax clear Word # comment', 26681966c248SBram Moolenaar ]) 26691966c248SBram Moolenaar CheckScriptFailure([ 26701966c248SBram Moolenaar 'vim9script', 26711966c248SBram Moolenaar 'syntax keyword Word some', 26721966c248SBram Moolenaar 'syntax clear Word# comment text', 26731966c248SBram Moolenaar ], 'E28:') 26741966c248SBram Moolenaar 26751966c248SBram Moolenaar CheckScriptSuccess([ 26761966c248SBram Moolenaar 'vim9script', 26771966c248SBram Moolenaar 'syntax list # comment', 26781966c248SBram Moolenaar ]) 26791966c248SBram Moolenaar CheckScriptFailure([ 26801966c248SBram Moolenaar 'vim9script', 26811966c248SBram Moolenaar 'syntax list# comment text', 26821966c248SBram Moolenaar ], 'E28:') 26831966c248SBram Moolenaar 26841966c248SBram Moolenaar CheckScriptSuccess([ 26851966c248SBram Moolenaar 'vim9script', 26861966c248SBram Moolenaar 'syntax match Word /pat/ oneline # comment', 26871966c248SBram Moolenaar ]) 26881966c248SBram Moolenaar CheckScriptFailure([ 26891966c248SBram Moolenaar 'vim9script', 26901966c248SBram Moolenaar 'syntax match Word /pat/ oneline# comment', 26911966c248SBram Moolenaar ], 'E475:') 26921966c248SBram Moolenaar 26931966c248SBram Moolenaar CheckScriptSuccess([ 26941966c248SBram Moolenaar 'vim9script', 26951966c248SBram Moolenaar 'syntax keyword Word word # comm[ent', 26961966c248SBram Moolenaar ]) 26971966c248SBram Moolenaar CheckScriptFailure([ 26981966c248SBram Moolenaar 'vim9script', 26991966c248SBram Moolenaar 'syntax keyword Word word# comm[ent', 27001966c248SBram Moolenaar ], 'E789:') 27011966c248SBram Moolenaar 27021966c248SBram Moolenaar CheckScriptSuccess([ 27031966c248SBram Moolenaar 'vim9script', 27041966c248SBram Moolenaar 'syntax match Word /pat/ # comment', 27051966c248SBram Moolenaar ]) 27061966c248SBram Moolenaar CheckScriptFailure([ 27071966c248SBram Moolenaar 'vim9script', 27081966c248SBram Moolenaar 'syntax match Word /pat/# comment', 27091966c248SBram Moolenaar ], 'E402:') 27101966c248SBram Moolenaar 27111966c248SBram Moolenaar CheckScriptSuccess([ 27121966c248SBram Moolenaar 'vim9script', 27131966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something # comment', 27141966c248SBram Moolenaar ]) 27151966c248SBram Moolenaar CheckScriptFailure([ 27161966c248SBram Moolenaar 'vim9script', 27171966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something# comment', 27181966c248SBram Moolenaar ], 'E475:') 27191966c248SBram Moolenaar CheckScriptFailure([ 27201966c248SBram Moolenaar 'vim9script', 27211966c248SBram Moolenaar 'syntax match Word /pat/ contains= # comment', 27221966c248SBram Moolenaar ], 'E406:') 27231966c248SBram Moolenaar CheckScriptFailure([ 27241966c248SBram Moolenaar 'vim9script', 27251966c248SBram Moolenaar 'syntax match Word /pat/ contains=# comment', 27261966c248SBram Moolenaar ], 'E475:') 27271966c248SBram Moolenaar 27281966c248SBram Moolenaar CheckScriptSuccess([ 27291966c248SBram Moolenaar 'vim9script', 27301966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/ # comment', 27311966c248SBram Moolenaar ]) 27321966c248SBram Moolenaar CheckScriptFailure([ 27331966c248SBram Moolenaar 'vim9script', 27341966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/# comment', 2735d032f34aSBram Moolenaar ], 'E402:') 27361966c248SBram Moolenaar 27371966c248SBram Moolenaar CheckScriptSuccess([ 27381966c248SBram Moolenaar 'vim9script', 27391966c248SBram Moolenaar 'syntax sync # comment', 27401966c248SBram Moolenaar ]) 27411966c248SBram Moolenaar CheckScriptFailure([ 27421966c248SBram Moolenaar 'vim9script', 27431966c248SBram Moolenaar 'syntax sync# comment', 27441966c248SBram Moolenaar ], 'E404:') 27451966c248SBram Moolenaar CheckScriptSuccess([ 27461966c248SBram Moolenaar 'vim9script', 27471966c248SBram Moolenaar 'syntax sync ccomment # comment', 27481966c248SBram Moolenaar ]) 27491966c248SBram Moolenaar CheckScriptFailure([ 27501966c248SBram Moolenaar 'vim9script', 27511966c248SBram Moolenaar 'syntax sync ccomment# comment', 27521966c248SBram Moolenaar ], 'E404:') 27531966c248SBram Moolenaar 27541966c248SBram Moolenaar CheckScriptSuccess([ 27551966c248SBram Moolenaar 'vim9script', 27561966c248SBram Moolenaar 'syntax cluster Some contains=Word # comment', 27571966c248SBram Moolenaar ]) 27581966c248SBram Moolenaar CheckScriptFailure([ 27591966c248SBram Moolenaar 'vim9script', 27601966c248SBram Moolenaar 'syntax cluster Some contains=Word# comment', 27611966c248SBram Moolenaar ], 'E475:') 2762a72cfb80SBram Moolenaar 2763a72cfb80SBram Moolenaar CheckScriptSuccess([ 2764a72cfb80SBram Moolenaar 'vim9script', 2765a72cfb80SBram Moolenaar 'command Echo echo # comment', 2766a72cfb80SBram Moolenaar 'command Echo # comment', 27672d870f8dSBram Moolenaar 'delcommand Echo', 2768a72cfb80SBram Moolenaar ]) 2769a72cfb80SBram Moolenaar CheckScriptFailure([ 2770a72cfb80SBram Moolenaar 'vim9script', 2771a72cfb80SBram Moolenaar 'command Echo echo# comment', 2772a72cfb80SBram Moolenaar 'Echo', 2773f8103f27SBram Moolenaar ], 'E1144:') 27742d870f8dSBram Moolenaar delcommand Echo 277570249ee8SBram Moolenaar 277670249ee8SBram Moolenaar var curdir = getcwd() 277770249ee8SBram Moolenaar CheckScriptSuccess([ 277870249ee8SBram Moolenaar 'command Echo cd " comment', 277970249ee8SBram Moolenaar 'Echo', 278070249ee8SBram Moolenaar 'delcommand Echo', 278170249ee8SBram Moolenaar ]) 278270249ee8SBram Moolenaar CheckScriptSuccess([ 2783090728adSBram Moolenaar 'vim9script', 278470249ee8SBram Moolenaar 'command Echo cd # comment', 278570249ee8SBram Moolenaar 'Echo', 278670249ee8SBram Moolenaar 'delcommand Echo', 278770249ee8SBram Moolenaar ]) 278870249ee8SBram Moolenaar CheckScriptFailure([ 278970249ee8SBram Moolenaar 'vim9script', 279070249ee8SBram Moolenaar 'command Echo cd " comment', 279170249ee8SBram Moolenaar 'Echo', 279270249ee8SBram Moolenaar ], 'E344:') 279370249ee8SBram Moolenaar delcommand Echo 279470249ee8SBram Moolenaar chdir(curdir) 279570249ee8SBram Moolenaar 2796a72cfb80SBram Moolenaar CheckScriptFailure([ 2797a72cfb80SBram Moolenaar 'vim9script', 2798a72cfb80SBram Moolenaar 'command Echo# comment', 2799a72cfb80SBram Moolenaar ], 'E182:') 2800a72cfb80SBram Moolenaar CheckScriptFailure([ 2801a72cfb80SBram Moolenaar 'vim9script', 2802a72cfb80SBram Moolenaar 'command Echo echo', 2803a72cfb80SBram Moolenaar 'command Echo# comment', 2804a72cfb80SBram Moolenaar ], 'E182:') 28052d870f8dSBram Moolenaar delcommand Echo 2806a72cfb80SBram Moolenaar 2807a72cfb80SBram Moolenaar CheckScriptSuccess([ 2808a72cfb80SBram Moolenaar 'vim9script', 2809a72cfb80SBram Moolenaar 'function # comment', 2810a72cfb80SBram Moolenaar ]) 2811a72cfb80SBram Moolenaar CheckScriptFailure([ 2812a72cfb80SBram Moolenaar 'vim9script', 28139898107fSBram Moolenaar 'function " comment', 28149898107fSBram Moolenaar ], 'E129:') 28159898107fSBram Moolenaar CheckScriptFailure([ 28169898107fSBram Moolenaar 'vim9script', 2817a72cfb80SBram Moolenaar 'function# comment', 2818f8103f27SBram Moolenaar ], 'E1144:') 2819a72cfb80SBram Moolenaar CheckScriptSuccess([ 2820a72cfb80SBram Moolenaar 'vim9script', 2821a72cfb80SBram Moolenaar 'function CheckScriptSuccess # comment', 2822a72cfb80SBram Moolenaar ]) 2823a72cfb80SBram Moolenaar CheckScriptFailure([ 2824a72cfb80SBram Moolenaar 'vim9script', 2825a72cfb80SBram Moolenaar 'function CheckScriptSuccess# comment', 2826a72cfb80SBram Moolenaar ], 'E488:') 2827a72cfb80SBram Moolenaar 2828a72cfb80SBram Moolenaar CheckScriptSuccess([ 2829a72cfb80SBram Moolenaar 'vim9script', 28304c17ad94SBram Moolenaar 'func g:DeleteMeA()', 2831a72cfb80SBram Moolenaar 'endfunc', 28324c17ad94SBram Moolenaar 'delfunction g:DeleteMeA # comment', 2833a72cfb80SBram Moolenaar ]) 2834a72cfb80SBram Moolenaar CheckScriptFailure([ 2835a72cfb80SBram Moolenaar 'vim9script', 28364c17ad94SBram Moolenaar 'func g:DeleteMeB()', 2837a72cfb80SBram Moolenaar 'endfunc', 28384c17ad94SBram Moolenaar 'delfunction g:DeleteMeB# comment', 2839a72cfb80SBram Moolenaar ], 'E488:') 2840a72cfb80SBram Moolenaar 2841a72cfb80SBram Moolenaar CheckScriptSuccess([ 2842a72cfb80SBram Moolenaar 'vim9script', 2843a72cfb80SBram Moolenaar 'call execute("ls") # comment', 2844a72cfb80SBram Moolenaar ]) 2845a72cfb80SBram Moolenaar CheckScriptFailure([ 2846a72cfb80SBram Moolenaar 'vim9script', 2847a72cfb80SBram Moolenaar 'call execute("ls")# comment', 2848a72cfb80SBram Moolenaar ], 'E488:') 2849e7e4838fSBram Moolenaar 2850e7e4838fSBram Moolenaar CheckScriptFailure([ 2851e7e4838fSBram Moolenaar 'def Test() " comment', 2852e7e4838fSBram Moolenaar 'enddef', 2853e7e4838fSBram Moolenaar ], 'E488:') 2854e7e4838fSBram Moolenaar CheckScriptFailure([ 2855e7e4838fSBram Moolenaar 'vim9script', 2856e7e4838fSBram Moolenaar 'def Test() " comment', 2857e7e4838fSBram Moolenaar 'enddef', 2858e7e4838fSBram Moolenaar ], 'E488:') 2859e7e4838fSBram Moolenaar 2860e7e4838fSBram Moolenaar CheckScriptSuccess([ 2861e7e4838fSBram Moolenaar 'func Test() " comment', 2862e7e4838fSBram Moolenaar 'endfunc', 28632d870f8dSBram Moolenaar 'delfunc Test', 2864e7e4838fSBram Moolenaar ]) 28659898107fSBram Moolenaar CheckScriptSuccess([ 2866e7e4838fSBram Moolenaar 'vim9script', 2867e7e4838fSBram Moolenaar 'func Test() " comment', 2868e7e4838fSBram Moolenaar 'endfunc', 28699898107fSBram Moolenaar ]) 2870e7e4838fSBram Moolenaar 2871e7e4838fSBram Moolenaar CheckScriptSuccess([ 2872e7e4838fSBram Moolenaar 'def Test() # comment', 2873e7e4838fSBram Moolenaar 'enddef', 2874e7e4838fSBram Moolenaar ]) 2875e7e4838fSBram Moolenaar CheckScriptFailure([ 2876e7e4838fSBram Moolenaar 'func Test() # comment', 2877e7e4838fSBram Moolenaar 'endfunc', 2878e7e4838fSBram Moolenaar ], 'E488:') 28792c5ed4e3SBram Moolenaarenddef 28802c5ed4e3SBram Moolenaar 28812c5ed4e3SBram Moolenaardef Test_vim9_comment_gui() 28822c5ed4e3SBram Moolenaar CheckCanRunGui 28832c5ed4e3SBram Moolenaar 28842c5ed4e3SBram Moolenaar CheckScriptFailure([ 28852c5ed4e3SBram Moolenaar 'vim9script', 28862c5ed4e3SBram Moolenaar 'gui#comment' 2887f8103f27SBram Moolenaar ], 'E1144:') 28882c5ed4e3SBram Moolenaar CheckScriptFailure([ 28892c5ed4e3SBram Moolenaar 'vim9script', 28902c5ed4e3SBram Moolenaar 'gui -f#comment' 28912c5ed4e3SBram Moolenaar ], 'E499:') 28927a092245SBram Moolenaarenddef 28937a092245SBram Moolenaar 2894a26b9700SBram Moolenaardef Test_vim9_comment_not_compiled() 28956797966dSBram Moolenaar au TabEnter *.vim g:entered = 1 28966797966dSBram Moolenaar au TabEnter *.x g:entered = 2 2897a26b9700SBram Moolenaar 2898a26b9700SBram Moolenaar edit test.vim 2899a26b9700SBram Moolenaar doautocmd TabEnter #comment 2900a26b9700SBram Moolenaar assert_equal(1, g:entered) 2901a26b9700SBram Moolenaar 2902a26b9700SBram Moolenaar doautocmd TabEnter f.x 2903a26b9700SBram Moolenaar assert_equal(2, g:entered) 2904a26b9700SBram Moolenaar 2905a26b9700SBram Moolenaar g:entered = 0 2906a26b9700SBram Moolenaar doautocmd TabEnter f.x #comment 2907a26b9700SBram Moolenaar assert_equal(2, g:entered) 2908a26b9700SBram Moolenaar 2909a26b9700SBram Moolenaar assert_fails('doautocmd Syntax#comment', 'E216:') 2910a26b9700SBram Moolenaar 2911a26b9700SBram Moolenaar au! TabEnter 2912a26b9700SBram Moolenaar unlet g:entered 2913d72c1bf0SBram Moolenaar 2914d72c1bf0SBram Moolenaar CheckScriptSuccess([ 2915d72c1bf0SBram Moolenaar 'vim9script', 29166797966dSBram Moolenaar 'g:var = 123', 2917e55b1c09SBram Moolenaar 'b:var = 456', 2918e55b1c09SBram Moolenaar 'w:var = 777', 2919e55b1c09SBram Moolenaar 't:var = 888', 2920d72c1bf0SBram Moolenaar 'unlet g:var w:var # something', 2921d72c1bf0SBram Moolenaar ]) 2922d72c1bf0SBram Moolenaar 2923d72c1bf0SBram Moolenaar CheckScriptFailure([ 2924d72c1bf0SBram Moolenaar 'vim9script', 2925cfcd011fSBram Moolenaar 'let var = 123', 2926cfcd011fSBram Moolenaar ], 'E1126: Cannot use :let in Vim9 script') 2927cfcd011fSBram Moolenaar 2928cfcd011fSBram Moolenaar CheckScriptFailure([ 2929cfcd011fSBram Moolenaar 'vim9script', 2930cfcd011fSBram Moolenaar 'var g:var = 123', 2931e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a global variable:') 2932e55b1c09SBram Moolenaar 2933e55b1c09SBram Moolenaar CheckScriptFailure([ 2934e55b1c09SBram Moolenaar 'vim9script', 2935cfcd011fSBram Moolenaar 'var b:var = 123', 2936e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a buffer variable:') 2937e55b1c09SBram Moolenaar 2938e55b1c09SBram Moolenaar CheckScriptFailure([ 2939e55b1c09SBram Moolenaar 'vim9script', 2940cfcd011fSBram Moolenaar 'var w:var = 123', 2941e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a window variable:') 2942e55b1c09SBram Moolenaar 2943e55b1c09SBram Moolenaar CheckScriptFailure([ 2944e55b1c09SBram Moolenaar 'vim9script', 2945cfcd011fSBram Moolenaar 'var t:var = 123', 2946e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a tab variable:') 2947e55b1c09SBram Moolenaar 2948e55b1c09SBram Moolenaar CheckScriptFailure([ 2949e55b1c09SBram Moolenaar 'vim9script', 2950cfcd011fSBram Moolenaar 'var v:version = 123', 2951e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a v: variable:') 2952e55b1c09SBram Moolenaar 2953e55b1c09SBram Moolenaar CheckScriptFailure([ 2954e55b1c09SBram Moolenaar 'vim9script', 2955cfcd011fSBram Moolenaar 'var $VARIABLE = "text"', 2956e55b1c09SBram Moolenaar ], 'E1016: Cannot declare an environment variable:') 29576797966dSBram Moolenaar 29586797966dSBram Moolenaar CheckScriptFailure([ 29596797966dSBram Moolenaar 'vim9script', 29606797966dSBram Moolenaar 'g:var = 123', 296132e35117SBram Moolenaar 'unlet g:var# comment1', 2962d72c1bf0SBram Moolenaar ], 'E108:') 2963d72c1bf0SBram Moolenaar 2964d72c1bf0SBram Moolenaar CheckScriptFailure([ 2965d72c1bf0SBram Moolenaar 'let g:var = 123', 2966d72c1bf0SBram Moolenaar 'unlet g:var # something', 2967d72c1bf0SBram Moolenaar ], 'E488:') 2968faac4104SBram Moolenaar 2969faac4104SBram Moolenaar CheckScriptSuccess([ 2970faac4104SBram Moolenaar 'vim9script', 297132e35117SBram Moolenaar 'if 1 # comment2', 2972faac4104SBram Moolenaar ' echo "yes"', 2973faac4104SBram Moolenaar 'elseif 2 #comment', 2974faac4104SBram Moolenaar ' echo "no"', 2975faac4104SBram Moolenaar 'endif', 2976faac4104SBram Moolenaar ]) 2977faac4104SBram Moolenaar 2978faac4104SBram Moolenaar CheckScriptFailure([ 2979faac4104SBram Moolenaar 'vim9script', 298032e35117SBram Moolenaar 'if 1# comment3', 2981faac4104SBram Moolenaar ' echo "yes"', 2982faac4104SBram Moolenaar 'endif', 2983faac4104SBram Moolenaar ], 'E15:') 2984faac4104SBram Moolenaar 2985faac4104SBram Moolenaar CheckScriptFailure([ 2986faac4104SBram Moolenaar 'vim9script', 298732e35117SBram Moolenaar 'if 0 # comment4', 2988faac4104SBram Moolenaar ' echo "yes"', 2989faac4104SBram Moolenaar 'elseif 2#comment', 2990faac4104SBram Moolenaar ' echo "no"', 2991faac4104SBram Moolenaar 'endif', 2992faac4104SBram Moolenaar ], 'E15:') 2993faac4104SBram Moolenaar 2994faac4104SBram Moolenaar CheckScriptSuccess([ 2995faac4104SBram Moolenaar 'vim9script', 2996cfcd011fSBram Moolenaar 'var v = 1 # comment5', 2997faac4104SBram Moolenaar ]) 2998faac4104SBram Moolenaar 2999faac4104SBram Moolenaar CheckScriptFailure([ 3000faac4104SBram Moolenaar 'vim9script', 3001cfcd011fSBram Moolenaar 'var v = 1# comment6', 300232e35117SBram Moolenaar ], 'E15:') 3003faac4104SBram Moolenaar 3004faac4104SBram Moolenaar CheckScriptSuccess([ 3005faac4104SBram Moolenaar 'vim9script', 3006faac4104SBram Moolenaar 'new' 3007d2c61705SBram Moolenaar 'setline(1, ["# define pat", "last"])', 3008df069eecSBram Moolenaar ':$', 3009faac4104SBram Moolenaar 'dsearch /pat/ #comment', 3010faac4104SBram Moolenaar 'bwipe!', 3011faac4104SBram Moolenaar ]) 3012faac4104SBram Moolenaar 3013f5be8cdbSBram Moolenaar CheckScriptFailure([ 3014f5be8cdbSBram Moolenaar 'vim9script', 3015f5be8cdbSBram Moolenaar 'new' 3016d2c61705SBram Moolenaar 'setline(1, ["# define pat", "last"])', 3017f5be8cdbSBram Moolenaar ':$', 3018f5be8cdbSBram Moolenaar 'dsearch /pat/#comment', 3019f5be8cdbSBram Moolenaar 'bwipe!', 3020f5be8cdbSBram Moolenaar ], 'E488:') 3021f5be8cdbSBram Moolenaar 3022f5be8cdbSBram Moolenaar CheckScriptFailure([ 3023f5be8cdbSBram Moolenaar 'vim9script', 3024f5be8cdbSBram Moolenaar 'func! SomeFunc()', 3025f5be8cdbSBram Moolenaar ], 'E477:') 3026a26b9700SBram Moolenaarenddef 3027a26b9700SBram Moolenaar 30287e5bd91dSBram Moolenaardef Test_finish() 3029cfcd011fSBram Moolenaar var lines =<< trim END 30307e5bd91dSBram Moolenaar vim9script 30316797966dSBram Moolenaar g:res = 'one' 30327e5bd91dSBram Moolenaar if v:false | finish | endif 30336797966dSBram Moolenaar g:res = 'two' 30347e5bd91dSBram Moolenaar finish 30356797966dSBram Moolenaar g:res = 'three' 30367e5bd91dSBram Moolenaar END 30377e5bd91dSBram Moolenaar writefile(lines, 'Xfinished') 30387e5bd91dSBram Moolenaar source Xfinished 30397e5bd91dSBram Moolenaar assert_equal('two', g:res) 30407e5bd91dSBram Moolenaar 30417e5bd91dSBram Moolenaar unlet g:res 30427e5bd91dSBram Moolenaar delete('Xfinished') 30437e5bd91dSBram Moolenaarenddef 30447e5bd91dSBram Moolenaar 3045a5d0077eSBram Moolenaardef Test_forward_declaration() 3046cfcd011fSBram Moolenaar var lines =<< trim END 3047a5d0077eSBram Moolenaar vim9script 3048a5d0077eSBram Moolenaar def GetValue(): string 3049a5d0077eSBram Moolenaar return theVal 3050a5d0077eSBram Moolenaar enddef 3051cfcd011fSBram Moolenaar var theVal = 'something' 3052822ba247SBram Moolenaar g:initVal = GetValue() 3053a5d0077eSBram Moolenaar theVal = 'else' 3054a5d0077eSBram Moolenaar g:laterVal = GetValue() 3055a5d0077eSBram Moolenaar END 3056a5d0077eSBram Moolenaar writefile(lines, 'Xforward') 3057a5d0077eSBram Moolenaar source Xforward 3058a5d0077eSBram Moolenaar assert_equal('something', g:initVal) 3059a5d0077eSBram Moolenaar assert_equal('else', g:laterVal) 3060a5d0077eSBram Moolenaar 3061a5d0077eSBram Moolenaar unlet g:initVal 3062a5d0077eSBram Moolenaar unlet g:laterVal 3063a5d0077eSBram Moolenaar delete('Xforward') 3064a5d0077eSBram Moolenaarenddef 3065a5d0077eSBram Moolenaar 30669721fb4eSBram Moolenaardef Test_source_vim9_from_legacy() 3067a6294955SBram Moolenaar var vim9_lines =<< trim END 3068a6294955SBram Moolenaar vim9script 3069a6294955SBram Moolenaar var local = 'local' 3070a6294955SBram Moolenaar g:global = 'global' 3071a6294955SBram Moolenaar export var exported = 'exported' 3072a6294955SBram Moolenaar export def GetText(): string 3073a6294955SBram Moolenaar return 'text' 3074a6294955SBram Moolenaar enddef 3075a6294955SBram Moolenaar END 3076a6294955SBram Moolenaar writefile(vim9_lines, 'Xvim9_script.vim') 3077a6294955SBram Moolenaar 3078cfcd011fSBram Moolenaar var legacy_lines =<< trim END 30799721fb4eSBram Moolenaar source Xvim9_script.vim 30809721fb4eSBram Moolenaar 30819721fb4eSBram Moolenaar call assert_false(exists('local')) 30829721fb4eSBram Moolenaar call assert_false(exists('exported')) 30839721fb4eSBram Moolenaar call assert_false(exists('s:exported')) 30849721fb4eSBram Moolenaar call assert_equal('global', global) 30859721fb4eSBram Moolenaar call assert_equal('global', g:global) 30869721fb4eSBram Moolenaar 30879721fb4eSBram Moolenaar " imported variable becomes script-local 30889721fb4eSBram Moolenaar import exported from './Xvim9_script.vim' 30899721fb4eSBram Moolenaar call assert_equal('exported', s:exported) 30909721fb4eSBram Moolenaar call assert_false(exists('exported')) 30919721fb4eSBram Moolenaar 30929721fb4eSBram Moolenaar " imported function becomes script-local 30939721fb4eSBram Moolenaar import GetText from './Xvim9_script.vim' 30949721fb4eSBram Moolenaar call assert_equal('text', s:GetText()) 30959721fb4eSBram Moolenaar call assert_false(exists('*GetText')) 30969721fb4eSBram Moolenaar END 30979721fb4eSBram Moolenaar writefile(legacy_lines, 'Xlegacy_script.vim') 30989721fb4eSBram Moolenaar 30999721fb4eSBram Moolenaar source Xlegacy_script.vim 31009721fb4eSBram Moolenaar assert_equal('global', g:global) 3101f5be8cdbSBram Moolenaar unlet g:global 31029721fb4eSBram Moolenaar 31039721fb4eSBram Moolenaar delete('Xlegacy_script.vim') 31049721fb4eSBram Moolenaar delete('Xvim9_script.vim') 31059721fb4eSBram Moolenaarenddef 3106a5d0077eSBram Moolenaar 31077d699701SBram Moolenaarfunc Test_vim9script_not_global() 31087d699701SBram Moolenaar " check that items defined in Vim9 script are script-local, not global 31097d699701SBram Moolenaar let vim9lines =<< trim END 31107d699701SBram Moolenaar vim9script 3111cfcd011fSBram Moolenaar var name = 'local' 31127d699701SBram Moolenaar func TheFunc() 31137d699701SBram Moolenaar echo 'local' 31147d699701SBram Moolenaar endfunc 31157d699701SBram Moolenaar def DefFunc() 31167d699701SBram Moolenaar echo 'local' 31177d699701SBram Moolenaar enddef 31187d699701SBram Moolenaar END 31197d699701SBram Moolenaar call writefile(vim9lines, 'Xvim9script.vim') 31207d699701SBram Moolenaar source Xvim9script.vim 31217d699701SBram Moolenaar try 31227d699701SBram Moolenaar echo g:var 31237d699701SBram Moolenaar assert_report('did not fail') 31247d699701SBram Moolenaar catch /E121:/ 31257d699701SBram Moolenaar " caught 31267d699701SBram Moolenaar endtry 31277d699701SBram Moolenaar try 31287d699701SBram Moolenaar call TheFunc() 31297d699701SBram Moolenaar assert_report('did not fail') 31307d699701SBram Moolenaar catch /E117:/ 31317d699701SBram Moolenaar " caught 31327d699701SBram Moolenaar endtry 31337d699701SBram Moolenaar try 31347d699701SBram Moolenaar call DefFunc() 31357d699701SBram Moolenaar assert_report('did not fail') 31367d699701SBram Moolenaar catch /E117:/ 31377d699701SBram Moolenaar " caught 31387d699701SBram Moolenaar endtry 31397d699701SBram Moolenaar 314025859dd7SBram Moolenaar call delete('Xvim9script.vim') 31417d699701SBram Moolenaarendfunc 31427d699701SBram Moolenaar 3143eeb27bfeSBram Moolenaardef Test_vim9_copen() 3144eeb27bfeSBram Moolenaar # this was giving an error for setting w:quickfix_title 3145eeb27bfeSBram Moolenaar copen 3146eeb27bfeSBram Moolenaar quit 3147eeb27bfeSBram Moolenaarenddef 3148eeb27bfeSBram Moolenaar 314903290b84SBram Moolenaar" test using an auto-loaded function and variable 31502d6b20d6SBram Moolenaardef Test_vim9_autoload() 3151cfcd011fSBram Moolenaar var lines =<< trim END 31522d6b20d6SBram Moolenaar vim9script 315303290b84SBram Moolenaar def some#gettest(): string 315403290b84SBram Moolenaar return 'test' 315503290b84SBram Moolenaar enddef 315603290b84SBram Moolenaar g:some#name = 'name' 3157*e3ffcd99SBram Moolenaar 3158*e3ffcd99SBram Moolenaar def some#varargs(a1: string, ...l: list<string>): string 3159*e3ffcd99SBram Moolenaar return a1 .. l[0] .. l[1] 3160*e3ffcd99SBram Moolenaar enddef 316103290b84SBram Moolenaar END 316203290b84SBram Moolenaar 316303290b84SBram Moolenaar mkdir('Xdir/autoload', 'p') 316403290b84SBram Moolenaar writefile(lines, 'Xdir/autoload/some.vim') 316503290b84SBram Moolenaar var save_rtp = &rtp 316603290b84SBram Moolenaar exe 'set rtp^=' .. getcwd() .. '/Xdir' 316703290b84SBram Moolenaar 316803290b84SBram Moolenaar assert_equal('test', g:some#gettest()) 316903290b84SBram Moolenaar assert_equal('name', g:some#name) 317003290b84SBram Moolenaar g:some#other = 'other' 317103290b84SBram Moolenaar assert_equal('other', g:some#other) 317203290b84SBram Moolenaar 3173*e3ffcd99SBram Moolenaar assert_equal('abc', some#varargs('a', 'b', 'c')) 3174*e3ffcd99SBram Moolenaar 317517f700acSBram Moolenaar # upper case script name works 317617f700acSBram Moolenaar lines =<< trim END 317717f700acSBram Moolenaar vim9script 317817f700acSBram Moolenaar def Other#getOther(): string 317917f700acSBram Moolenaar return 'other' 318017f700acSBram Moolenaar enddef 318117f700acSBram Moolenaar END 318217f700acSBram Moolenaar writefile(lines, 'Xdir/autoload/Other.vim') 318317f700acSBram Moolenaar assert_equal('other', g:Other#getOther()) 318417f700acSBram Moolenaar 318503290b84SBram Moolenaar delete('Xdir', 'rf') 318603290b84SBram Moolenaar &rtp = save_rtp 318703290b84SBram Moolenaarenddef 318803290b84SBram Moolenaar 318903290b84SBram Moolenaar" test using a vim9script that is auto-loaded from an autocmd 319003290b84SBram Moolenaardef Test_vim9_aucmd_autoload() 319103290b84SBram Moolenaar var lines =<< trim END 319203290b84SBram Moolenaar vim9script 31932d6b20d6SBram Moolenaar def foo#test() 31942d6b20d6SBram Moolenaar echomsg getreg('"') 31952d6b20d6SBram Moolenaar enddef 31962d6b20d6SBram Moolenaar END 31972d6b20d6SBram Moolenaar 31982d6b20d6SBram Moolenaar mkdir('Xdir/autoload', 'p') 31992d6b20d6SBram Moolenaar writefile(lines, 'Xdir/autoload/foo.vim') 3200cfcd011fSBram Moolenaar var save_rtp = &rtp 32012d6b20d6SBram Moolenaar exe 'set rtp^=' .. getcwd() .. '/Xdir' 32022d6b20d6SBram Moolenaar augroup test 32032d6b20d6SBram Moolenaar autocmd TextYankPost * call foo#test() 32042d6b20d6SBram Moolenaar augroup END 32052d6b20d6SBram Moolenaar 32062d6b20d6SBram Moolenaar normal Y 32072d6b20d6SBram Moolenaar 32082d6b20d6SBram Moolenaar augroup test 32092d6b20d6SBram Moolenaar autocmd! 32102d6b20d6SBram Moolenaar augroup END 32112d6b20d6SBram Moolenaar delete('Xdir', 'rf') 32122d6b20d6SBram Moolenaar &rtp = save_rtp 32132d6b20d6SBram Moolenaarenddef 32142d6b20d6SBram Moolenaar 321577e5dcc3SBram Moolenaar" This was causing a crash because suppress_errthrow wasn't reset. 321677e5dcc3SBram Moolenaardef Test_vim9_autoload_error() 3217cfcd011fSBram Moolenaar var lines =<< trim END 321877e5dcc3SBram Moolenaar vim9script 321977e5dcc3SBram Moolenaar def crash#func() 322077e5dcc3SBram Moolenaar try 322177e5dcc3SBram Moolenaar for x in List() 322277e5dcc3SBram Moolenaar endfor 322377e5dcc3SBram Moolenaar catch 322477e5dcc3SBram Moolenaar endtry 322577e5dcc3SBram Moolenaar g:ok = true 322677e5dcc3SBram Moolenaar enddef 322777e5dcc3SBram Moolenaar fu List() 322877e5dcc3SBram Moolenaar invalid 322977e5dcc3SBram Moolenaar endfu 323077e5dcc3SBram Moolenaar try 323148e11c10SBram Moolenaar alsoinvalid 323277e5dcc3SBram Moolenaar catch /wontmatch/ 323377e5dcc3SBram Moolenaar endtry 323477e5dcc3SBram Moolenaar END 323577e5dcc3SBram Moolenaar call mkdir('Xruntime/autoload', 'p') 323677e5dcc3SBram Moolenaar call writefile(lines, 'Xruntime/autoload/crash.vim') 323777e5dcc3SBram Moolenaar 323877e5dcc3SBram Moolenaar # run in a separate Vim to avoid the side effects of assert_fails() 323977e5dcc3SBram Moolenaar lines =<< trim END 324077e5dcc3SBram Moolenaar exe 'set rtp^=' .. getcwd() .. '/Xruntime' 324177e5dcc3SBram Moolenaar call crash#func() 324277e5dcc3SBram Moolenaar call writefile(['ok'], 'Xdidit') 32439c4f5520SBram Moolenaar qall! 324477e5dcc3SBram Moolenaar END 324577e5dcc3SBram Moolenaar writefile(lines, 'Xscript') 324677e5dcc3SBram Moolenaar RunVim([], [], '-S Xscript') 324777e5dcc3SBram Moolenaar assert_equal(['ok'], readfile('Xdidit')) 324877e5dcc3SBram Moolenaar 324977e5dcc3SBram Moolenaar delete('Xdidit') 325077e5dcc3SBram Moolenaar delete('Xscript') 325177e5dcc3SBram Moolenaar delete('Xruntime', 'rf') 325203290b84SBram Moolenaar 325303290b84SBram Moolenaar lines =<< trim END 325403290b84SBram Moolenaar vim9script 325503290b84SBram Moolenaar var foo#bar = 'asdf' 325603290b84SBram Moolenaar END 325703290b84SBram Moolenaar CheckScriptFailure(lines, 'E461: Illegal variable name: foo#bar', 2) 325877e5dcc3SBram Moolenaarenddef 325977e5dcc3SBram Moolenaar 326081e17fbeSBram Moolenaardef Test_script_var_in_autocmd() 326181e17fbeSBram Moolenaar # using a script variable from an autocommand, defined in a :def function in a 326281e17fbeSBram Moolenaar # legacy Vim script, cannot check the variable type. 3263cfcd011fSBram Moolenaar var lines =<< trim END 326481e17fbeSBram Moolenaar let s:counter = 1 326581e17fbeSBram Moolenaar def s:Func() 326681e17fbeSBram Moolenaar au! CursorHold 326781e17fbeSBram Moolenaar au CursorHold * s:counter += 1 326881e17fbeSBram Moolenaar enddef 326981e17fbeSBram Moolenaar call s:Func() 327081e17fbeSBram Moolenaar doau CursorHold 327181e17fbeSBram Moolenaar call assert_equal(2, s:counter) 327281e17fbeSBram Moolenaar au! CursorHold 327381e17fbeSBram Moolenaar END 327481e17fbeSBram Moolenaar CheckScriptSuccess(lines) 327581e17fbeSBram Moolenaarenddef 327681e17fbeSBram Moolenaar 32773896a105SBram Moolenaardef Test_cmdline_win() 32783896a105SBram Moolenaar # if the Vim syntax highlighting uses Vim9 constructs they can be used from 32793896a105SBram Moolenaar # the command line window. 32803896a105SBram Moolenaar mkdir('rtp/syntax', 'p') 3281cfcd011fSBram Moolenaar var export_lines =<< trim END 32823896a105SBram Moolenaar vim9script 3283cfcd011fSBram Moolenaar export var That = 'yes' 32843896a105SBram Moolenaar END 32853896a105SBram Moolenaar writefile(export_lines, 'rtp/syntax/Xexport.vim') 3286cfcd011fSBram Moolenaar var import_lines =<< trim END 32873896a105SBram Moolenaar vim9script 32883896a105SBram Moolenaar import That from './Xexport.vim' 32893896a105SBram Moolenaar END 32903896a105SBram Moolenaar writefile(import_lines, 'rtp/syntax/vim.vim') 3291cfcd011fSBram Moolenaar var save_rtp = &rtp 32923896a105SBram Moolenaar &rtp = getcwd() .. '/rtp' .. ',' .. &rtp 32933896a105SBram Moolenaar syntax on 32943896a105SBram Moolenaar augroup CmdWin 32953896a105SBram Moolenaar autocmd CmdwinEnter * g:got_there = 'yes' 32963896a105SBram Moolenaar augroup END 32973896a105SBram Moolenaar # this will open and also close the cmdline window 32983896a105SBram Moolenaar feedkeys('q:', 'xt') 32993896a105SBram Moolenaar assert_equal('yes', g:got_there) 33003896a105SBram Moolenaar 33013896a105SBram Moolenaar augroup CmdWin 33023896a105SBram Moolenaar au! 33033896a105SBram Moolenaar augroup END 33043896a105SBram Moolenaar &rtp = save_rtp 33053896a105SBram Moolenaar delete('rtp', 'rf') 33063896a105SBram Moolenaarenddef 33073896a105SBram Moolenaar 3308e3d4685fSBram Moolenaardef Test_invalid_sid() 3309e3d4685fSBram Moolenaar assert_fails('func <SNR>1234_func', 'E123:') 331025859dd7SBram Moolenaar 33119c4f5520SBram Moolenaar if RunVim([], ['wq! Xdidit'], '+"func <SNR>1_func"') 3312d2c61705SBram Moolenaar assert_equal([], readfile('Xdidit')) 3313e3d4685fSBram Moolenaar endif 3314e3d4685fSBram Moolenaar delete('Xdidit') 3315e3d4685fSBram Moolenaarenddef 3316e3d4685fSBram Moolenaar 33179ec7026fSBram Moolenaardef Test_restoring_cpo() 33189ec7026fSBram Moolenaar writefile(['vim9script', 'set nocp'], 'Xsourced') 33199ec7026fSBram Moolenaar writefile(['call writefile(["done"], "Xdone")', 'quit!'], 'Xclose') 33209ec7026fSBram Moolenaar if RunVim([], [], '-u NONE +"set cpo+=a" -S Xsourced -S Xclose') 33219ec7026fSBram Moolenaar assert_equal(['done'], readfile('Xdone')) 33229ec7026fSBram Moolenaar endif 33239ec7026fSBram Moolenaar delete('Xsourced') 33249ec7026fSBram Moolenaar delete('Xclose') 3325090728adSBram Moolenaar delete('Xdone') 33260123cc1eSBram Moolenaar 33270123cc1eSBram Moolenaar writefile(['vim9script'], 'XanotherScript') 33280123cc1eSBram Moolenaar set cpo=aABceFsMny> 33290123cc1eSBram Moolenaar edit XanotherScript 33300123cc1eSBram Moolenaar so % 33310123cc1eSBram Moolenaar assert_equal('aABceFsMny>', &cpo) 33320123cc1eSBram Moolenaar :1del 33330123cc1eSBram Moolenaar w 33340123cc1eSBram Moolenaar so % 33350123cc1eSBram Moolenaar assert_equal('aABceFsMny>', &cpo) 33360123cc1eSBram Moolenaar 33370123cc1eSBram Moolenaar delete('XanotherScript') 33380123cc1eSBram Moolenaar set cpo&vim 33399ec7026fSBram Moolenaarenddef 33409ec7026fSBram Moolenaar 33419ec7026fSBram Moolenaar 3342f0afd9e1SBram Moolenaardef Test_unset_any_variable() 3343cfcd011fSBram Moolenaar var lines =<< trim END 3344cfcd011fSBram Moolenaar var name: any 3345cfcd011fSBram Moolenaar assert_equal(0, name) 3346f0afd9e1SBram Moolenaar END 3347f0afd9e1SBram Moolenaar CheckDefAndScriptSuccess(lines) 3348f0afd9e1SBram Moolenaarenddef 3349f0afd9e1SBram Moolenaar 33507e9210eaSBram Moolenaarfunc Test_define_func_at_command_line() 335158dbef33SBram Moolenaar CheckRunVimInTerminal 335258dbef33SBram Moolenaar 33537e9210eaSBram Moolenaar " call indirectly to avoid compilation error for missing functions 33547e9210eaSBram Moolenaar call Run_Test_define_func_at_command_line() 33557e9210eaSBram Moolenaarendfunc 33567e9210eaSBram Moolenaar 33577e9210eaSBram Moolenaardef Run_Test_define_func_at_command_line() 33589c4f5520SBram Moolenaar # run in a separate Vim instance to avoid the script context 3359cfcd011fSBram Moolenaar var lines =<< trim END 33609c4f5520SBram Moolenaar func CheckAndQuit() 33619c4f5520SBram Moolenaar call assert_fails('call Afunc()', 'E117: Unknown function: Bfunc') 33629c4f5520SBram Moolenaar call writefile(['errors: ' .. string(v:errors)], 'Xdidcmd') 33639c4f5520SBram Moolenaar endfunc 33649c4f5520SBram Moolenaar END 33659c4f5520SBram Moolenaar writefile([''], 'Xdidcmd') 33669c4f5520SBram Moolenaar writefile(lines, 'XcallFunc') 3367e0de171eSBram Moolenaar var buf = RunVimInTerminal('-S XcallFunc', {rows: 6}) 33689c4f5520SBram Moolenaar # define Afunc() on the command line 33699c4f5520SBram Moolenaar term_sendkeys(buf, ":def Afunc()\<CR>Bfunc()\<CR>enddef\<CR>") 33709c4f5520SBram Moolenaar term_sendkeys(buf, ":call CheckAndQuit()\<CR>") 33712949cfdbSBram Moolenaar WaitForAssert(() => assert_equal(['errors: []'], readfile('Xdidcmd'))) 33729c4f5520SBram Moolenaar 33739c4f5520SBram Moolenaar call StopVimInTerminal(buf) 33749c4f5520SBram Moolenaar delete('XcallFunc') 33759c4f5520SBram Moolenaar delete('Xdidcmd') 33769c4f5520SBram Moolenaarenddef 33779c4f5520SBram Moolenaar 3378fcdc5d83SBram Moolenaardef Test_script_var_scope() 3379fcdc5d83SBram Moolenaar var lines =<< trim END 3380fcdc5d83SBram Moolenaar vim9script 3381fcdc5d83SBram Moolenaar if true 3382fcdc5d83SBram Moolenaar if true 3383fcdc5d83SBram Moolenaar var one = 'one' 3384fcdc5d83SBram Moolenaar echo one 3385fcdc5d83SBram Moolenaar endif 3386fcdc5d83SBram Moolenaar echo one 3387fcdc5d83SBram Moolenaar endif 3388fcdc5d83SBram Moolenaar END 3389fcdc5d83SBram Moolenaar CheckScriptFailure(lines, 'E121:', 7) 3390fcdc5d83SBram Moolenaar 3391fcdc5d83SBram Moolenaar lines =<< trim END 3392fcdc5d83SBram Moolenaar vim9script 3393fcdc5d83SBram Moolenaar if true 3394fcdc5d83SBram Moolenaar if false 3395fcdc5d83SBram Moolenaar var one = 'one' 3396fcdc5d83SBram Moolenaar echo one 3397fcdc5d83SBram Moolenaar else 3398fcdc5d83SBram Moolenaar var one = 'one' 3399fcdc5d83SBram Moolenaar echo one 3400fcdc5d83SBram Moolenaar endif 3401fcdc5d83SBram Moolenaar echo one 3402fcdc5d83SBram Moolenaar endif 3403fcdc5d83SBram Moolenaar END 3404fcdc5d83SBram Moolenaar CheckScriptFailure(lines, 'E121:', 10) 3405fcdc5d83SBram Moolenaar 3406fcdc5d83SBram Moolenaar lines =<< trim END 3407fcdc5d83SBram Moolenaar vim9script 3408fcdc5d83SBram Moolenaar while true 3409fcdc5d83SBram Moolenaar var one = 'one' 3410fcdc5d83SBram Moolenaar echo one 3411fcdc5d83SBram Moolenaar break 3412fcdc5d83SBram Moolenaar endwhile 3413fcdc5d83SBram Moolenaar echo one 3414fcdc5d83SBram Moolenaar END 3415fcdc5d83SBram Moolenaar CheckScriptFailure(lines, 'E121:', 7) 3416fcdc5d83SBram Moolenaar 3417fcdc5d83SBram Moolenaar lines =<< trim END 3418fcdc5d83SBram Moolenaar vim9script 3419fcdc5d83SBram Moolenaar for i in range(1) 3420fcdc5d83SBram Moolenaar var one = 'one' 3421fcdc5d83SBram Moolenaar echo one 3422fcdc5d83SBram Moolenaar endfor 3423fcdc5d83SBram Moolenaar echo one 3424fcdc5d83SBram Moolenaar END 3425fcdc5d83SBram Moolenaar CheckScriptFailure(lines, 'E121:', 6) 34269becdf2bSBram Moolenaar 34279becdf2bSBram Moolenaar lines =<< trim END 34289becdf2bSBram Moolenaar vim9script 34299becdf2bSBram Moolenaar { 34309becdf2bSBram Moolenaar var one = 'one' 34319becdf2bSBram Moolenaar assert_equal('one', one) 34329becdf2bSBram Moolenaar } 34339becdf2bSBram Moolenaar assert_false(exists('one')) 34349becdf2bSBram Moolenaar assert_false(exists('s:one')) 34359becdf2bSBram Moolenaar END 34369becdf2bSBram Moolenaar CheckScriptSuccess(lines) 34379becdf2bSBram Moolenaar 34389becdf2bSBram Moolenaar lines =<< trim END 34399becdf2bSBram Moolenaar vim9script 34409becdf2bSBram Moolenaar { 34419becdf2bSBram Moolenaar var one = 'one' 34429becdf2bSBram Moolenaar echo one 34439becdf2bSBram Moolenaar } 34449becdf2bSBram Moolenaar echo one 34459becdf2bSBram Moolenaar END 34469becdf2bSBram Moolenaar CheckScriptFailure(lines, 'E121:', 6) 3447fcdc5d83SBram Moolenaarenddef 3448fcdc5d83SBram Moolenaar 3449352134bbSBram Moolenaardef Test_catch_exception_in_callback() 3450352134bbSBram Moolenaar var lines =<< trim END 3451352134bbSBram Moolenaar vim9script 3452352134bbSBram Moolenaar def Callback(...l: any) 3453352134bbSBram Moolenaar try 3454352134bbSBram Moolenaar var x: string 3455352134bbSBram Moolenaar var y: string 3456352134bbSBram Moolenaar # this error should be caught with CHECKLEN 3457352134bbSBram Moolenaar [x, y] = [''] 3458352134bbSBram Moolenaar catch 3459352134bbSBram Moolenaar g:caught = 'yes' 3460352134bbSBram Moolenaar endtry 3461352134bbSBram Moolenaar enddef 3462e0de171eSBram Moolenaar popup_menu('popup', {callback: Callback}) 3463352134bbSBram Moolenaar feedkeys("\r", 'xt') 3464352134bbSBram Moolenaar END 3465352134bbSBram Moolenaar CheckScriptSuccess(lines) 3466352134bbSBram Moolenaar 3467352134bbSBram Moolenaar unlet g:caught 3468352134bbSBram Moolenaarenddef 3469352134bbSBram Moolenaar 3470631e8f93SBram Moolenaardef Test_no_unknown_error_after_error() 3471631e8f93SBram Moolenaar if !has('unix') || !has('job') 3472631e8f93SBram Moolenaar throw 'Skipped: not unix of missing +job feature' 3473631e8f93SBram Moolenaar endif 3474631e8f93SBram Moolenaar var lines =<< trim END 3475631e8f93SBram Moolenaar vim9script 3476631e8f93SBram Moolenaar var source: list<number> 3477631e8f93SBram Moolenaar def Out_cb(...l: any) 3478631e8f93SBram Moolenaar eval [][0] 3479631e8f93SBram Moolenaar enddef 3480631e8f93SBram Moolenaar def Exit_cb(...l: any) 3481631e8f93SBram Moolenaar sleep 1m 3482631e8f93SBram Moolenaar source += l 3483631e8f93SBram Moolenaar enddef 3484e0de171eSBram Moolenaar var myjob = job_start('echo burp', {out_cb: Out_cb, exit_cb: Exit_cb, mode: 'raw'}) 34856f17a3f0SBram Moolenaar while job_status(myjob) == 'run' 34866f17a3f0SBram Moolenaar sleep 10m 34876f17a3f0SBram Moolenaar endwhile 3488206c2a6eSBram Moolenaar # wait for Exit_cb() to be called 3489206c2a6eSBram Moolenaar sleep 100m 3490631e8f93SBram Moolenaar END 3491631e8f93SBram Moolenaar writefile(lines, 'Xdef') 3492631e8f93SBram Moolenaar assert_fails('so Xdef', ['E684:', 'E1012:']) 3493631e8f93SBram Moolenaar delete('Xdef') 3494631e8f93SBram Moolenaarenddef 3495631e8f93SBram Moolenaar 34964324d87aSBram Moolenaardef InvokeNormal() 34974324d87aSBram Moolenaar exe "norm! :m+1\r" 34984324d87aSBram Moolenaarenddef 34994324d87aSBram Moolenaar 35004324d87aSBram Moolenaardef Test_invoke_normal_in_visual_mode() 35014324d87aSBram Moolenaar xnoremap <F3> <Cmd>call <SID>InvokeNormal()<CR> 35024324d87aSBram Moolenaar new 35034324d87aSBram Moolenaar setline(1, ['aaa', 'bbb']) 35044324d87aSBram Moolenaar feedkeys("V\<F3>", 'xt') 35054324d87aSBram Moolenaar assert_equal(['bbb', 'aaa'], getline(1, 2)) 35064324d87aSBram Moolenaar xunmap <F3> 3507b5b9480eSBram Moolenaarenddef 3508b5b9480eSBram Moolenaar 3509b5b9480eSBram Moolenaardef Test_white_space_after_command() 3510b5b9480eSBram Moolenaar var lines =<< trim END 3511b5b9480eSBram Moolenaar exit_cb: Func}) 3512b5b9480eSBram Moolenaar END 3513b5b9480eSBram Moolenaar CheckDefAndScriptFailure(lines, 'E1144:', 1) 3514f8103f27SBram Moolenaar 3515f8103f27SBram Moolenaar lines =<< trim END 3516f8103f27SBram Moolenaar e# 3517f8103f27SBram Moolenaar END 3518f8103f27SBram Moolenaar CheckDefAndScriptFailure(lines, 'E1144:', 1) 35194324d87aSBram Moolenaarenddef 35204324d87aSBram Moolenaar 35214aab88d9SBram Moolenaardef Test_script_var_gone_when_sourced_twice() 35224aab88d9SBram Moolenaar var lines =<< trim END 35234aab88d9SBram Moolenaar vim9script 35244aab88d9SBram Moolenaar if exists('g:guard') 35254aab88d9SBram Moolenaar finish 35264aab88d9SBram Moolenaar endif 35274aab88d9SBram Moolenaar g:guard = 1 35284aab88d9SBram Moolenaar var name = 'thename' 35294aab88d9SBram Moolenaar def g:GetName(): string 35304aab88d9SBram Moolenaar return name 35314aab88d9SBram Moolenaar enddef 35324aab88d9SBram Moolenaar def g:SetName(arg: string) 35334aab88d9SBram Moolenaar name = arg 35344aab88d9SBram Moolenaar enddef 35354aab88d9SBram Moolenaar END 35364aab88d9SBram Moolenaar writefile(lines, 'XscriptTwice.vim') 35374aab88d9SBram Moolenaar so XscriptTwice.vim 35384aab88d9SBram Moolenaar assert_equal('thename', g:GetName()) 35394aab88d9SBram Moolenaar g:SetName('newname') 35404aab88d9SBram Moolenaar assert_equal('newname', g:GetName()) 35414aab88d9SBram Moolenaar so XscriptTwice.vim 35424aab88d9SBram Moolenaar assert_fails('call g:GetName()', 'E1149:') 35434aab88d9SBram Moolenaar assert_fails('call g:SetName("x")', 'E1149:') 35444aab88d9SBram Moolenaar 35454aab88d9SBram Moolenaar delfunc g:GetName 35464aab88d9SBram Moolenaar delfunc g:SetName 35474aab88d9SBram Moolenaar delete('XscriptTwice.vim') 35484aab88d9SBram Moolenaar unlet g:guard 35494aab88d9SBram Moolenaarenddef 35504aab88d9SBram Moolenaar 35514aab88d9SBram Moolenaardef Test_import_gone_when_sourced_twice() 35524aab88d9SBram Moolenaar var exportlines =<< trim END 35534aab88d9SBram Moolenaar vim9script 35544aab88d9SBram Moolenaar if exists('g:guard') 35554aab88d9SBram Moolenaar finish 35564aab88d9SBram Moolenaar endif 35574aab88d9SBram Moolenaar g:guard = 1 35584aab88d9SBram Moolenaar export var name = 'someName' 35594aab88d9SBram Moolenaar END 35604aab88d9SBram Moolenaar writefile(exportlines, 'XexportScript.vim') 35614aab88d9SBram Moolenaar 35624aab88d9SBram Moolenaar var lines =<< trim END 35634aab88d9SBram Moolenaar vim9script 35644aab88d9SBram Moolenaar import name from './XexportScript.vim' 35654aab88d9SBram Moolenaar def g:GetName(): string 35664aab88d9SBram Moolenaar return name 35674aab88d9SBram Moolenaar enddef 35684aab88d9SBram Moolenaar END 35694aab88d9SBram Moolenaar writefile(lines, 'XscriptImport.vim') 35704aab88d9SBram Moolenaar so XscriptImport.vim 35714aab88d9SBram Moolenaar assert_equal('someName', g:GetName()) 35724aab88d9SBram Moolenaar 35734aab88d9SBram Moolenaar so XexportScript.vim 35744aab88d9SBram Moolenaar assert_fails('call g:GetName()', 'E1149:') 35754aab88d9SBram Moolenaar 35764aab88d9SBram Moolenaar delfunc g:GetName 35774aab88d9SBram Moolenaar delete('XexportScript.vim') 35784aab88d9SBram Moolenaar delete('XscriptImport.vim') 35794aab88d9SBram Moolenaar unlet g:guard 35804aab88d9SBram Moolenaarenddef 35814aab88d9SBram Moolenaar 358210b9421fSBram Moolenaardef Test_unsupported_commands() 358310b9421fSBram Moolenaar var lines =<< trim END 358410b9421fSBram Moolenaar ka 358510b9421fSBram Moolenaar END 358610b9421fSBram Moolenaar CheckDefAndScriptFailure(lines, 'E1100:') 358710b9421fSBram Moolenaar 358810b9421fSBram Moolenaar lines =<< trim END 3589ada1d870SBram Moolenaar :1ka 3590ada1d870SBram Moolenaar END 3591ada1d870SBram Moolenaar CheckDefAndScriptFailure(lines, 'E481:') 3592ada1d870SBram Moolenaar 3593ada1d870SBram Moolenaar lines =<< trim END 359410b9421fSBram Moolenaar t 359510b9421fSBram Moolenaar END 359610b9421fSBram Moolenaar CheckDefFailure(lines, 'E1100:') 359710b9421fSBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E1100:') 359810b9421fSBram Moolenaar 359910b9421fSBram Moolenaar lines =<< trim END 360010b9421fSBram Moolenaar x 360110b9421fSBram Moolenaar END 360210b9421fSBram Moolenaar CheckDefFailure(lines, 'E1100:') 360310b9421fSBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E1100:') 360410b9421fSBram Moolenaar 360510b9421fSBram Moolenaar lines =<< trim END 360610b9421fSBram Moolenaar xit 360710b9421fSBram Moolenaar END 360810b9421fSBram Moolenaar CheckDefFailure(lines, 'E1100:') 360910b9421fSBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E1100:') 361010b9421fSBram Moolenaarenddef 361110b9421fSBram Moolenaar 3612585fea7bSBram Moolenaar" Keep this last, it messes up highlighting. 3613585fea7bSBram Moolenaardef Test_substitute_cmd() 3614585fea7bSBram Moolenaar new 3615585fea7bSBram Moolenaar setline(1, 'something') 3616585fea7bSBram Moolenaar :substitute(some(other( 3617585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 3618585fea7bSBram Moolenaar bwipe! 3619585fea7bSBram Moolenaar 3620f5be8cdbSBram Moolenaar # also when the context is Vim9 script 3621cfcd011fSBram Moolenaar var lines =<< trim END 3622585fea7bSBram Moolenaar vim9script 3623585fea7bSBram Moolenaar new 3624585fea7bSBram Moolenaar setline(1, 'something') 3625585fea7bSBram Moolenaar :substitute(some(other( 3626585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 3627585fea7bSBram Moolenaar bwipe! 3628585fea7bSBram Moolenaar END 3629585fea7bSBram Moolenaar writefile(lines, 'Xvim9lines') 3630585fea7bSBram Moolenaar source Xvim9lines 3631585fea7bSBram Moolenaar 3632585fea7bSBram Moolenaar delete('Xvim9lines') 3633585fea7bSBram Moolenaarenddef 3634585fea7bSBram Moolenaar 36358a7d6542SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker 3636