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 837294bd6SBram Moolenaarsource screendump.vim 98a7d6542SBram Moolenaar 105d72ce69SBram Moolenaardef Test_range_only() 115d72ce69SBram Moolenaar new 125d72ce69SBram Moolenaar setline(1, ['blah', 'Blah']) 135d72ce69SBram Moolenaar :/Blah/ 145d72ce69SBram Moolenaar assert_equal(2, getcurpos()[1]) 15c2af0affSBram Moolenaar bwipe! 16c2af0affSBram Moolenaar 17c2af0affSBram Moolenaar # without range commands use current line 18c2af0affSBram Moolenaar new 19c2af0affSBram Moolenaar setline(1, ['one', 'two', 'three']) 20c2af0affSBram Moolenaar :2 21c2af0affSBram Moolenaar print 22c2af0affSBram Moolenaar assert_equal('two', Screenline(&lines)) 23c2af0affSBram Moolenaar :3 24c2af0affSBram Moolenaar list 25c2af0affSBram Moolenaar assert_equal('three$', Screenline(&lines)) 26b8554304SBram Moolenaar 27b8554304SBram Moolenaar # missing command does not print the line 28b8554304SBram Moolenaar var lines =<< trim END 29b8554304SBram Moolenaar vim9script 30b8554304SBram Moolenaar :1| 31b8554304SBram Moolenaar assert_equal('three$', Screenline(&lines)) 32b8554304SBram Moolenaar :| 33b8554304SBram Moolenaar assert_equal('three$', Screenline(&lines)) 34b8554304SBram Moolenaar END 35b8554304SBram Moolenaar CheckScriptSuccess(lines) 36b8554304SBram Moolenaar 37c2af0affSBram Moolenaar bwipe! 38025cb1caSBram Moolenaar 39025cb1caSBram Moolenaar # won't generate anything 40025cb1caSBram Moolenaar if false 41025cb1caSBram Moolenaar :123 42025cb1caSBram Moolenaar endif 435d72ce69SBram Moolenaarenddef 445d72ce69SBram Moolenaar 45a6e67e4fSBram Moolenaarlet g:alist = [7] 46a6e67e4fSBram Moolenaarlet g:astring = 'text' 47f0b9f43cSBram Moolenaarlet g:anumber = 123 486e587dcbSBram Moolenaar 494c17ad94SBram Moolenaardef Test_delfunction() 50f5be8cdbSBram Moolenaar # Check function is defined in script namespace 514c17ad94SBram Moolenaar CheckScriptSuccess([ 524c17ad94SBram Moolenaar 'vim9script', 534c17ad94SBram Moolenaar 'func CheckMe()', 544c17ad94SBram Moolenaar ' return 123', 554c17ad94SBram Moolenaar 'endfunc', 564c17ad94SBram Moolenaar 'assert_equal(123, s:CheckMe())', 574c17ad94SBram Moolenaar ]) 584c17ad94SBram Moolenaar 59f5be8cdbSBram Moolenaar # Check function in script namespace cannot be deleted 604c17ad94SBram Moolenaar CheckScriptFailure([ 614c17ad94SBram Moolenaar 'vim9script', 624c17ad94SBram Moolenaar 'func DeleteMe1()', 634c17ad94SBram Moolenaar 'endfunc', 644c17ad94SBram Moolenaar 'delfunction DeleteMe1', 654c17ad94SBram Moolenaar ], 'E1084:') 664c17ad94SBram Moolenaar CheckScriptFailure([ 674c17ad94SBram Moolenaar 'vim9script', 684c17ad94SBram Moolenaar 'func DeleteMe2()', 694c17ad94SBram Moolenaar 'endfunc', 704c17ad94SBram Moolenaar 'def DoThat()', 714c17ad94SBram Moolenaar ' delfunction DeleteMe2', 724c17ad94SBram Moolenaar 'enddef', 734c17ad94SBram Moolenaar 'DoThat()', 744c17ad94SBram Moolenaar ], 'E1084:') 754c17ad94SBram Moolenaar CheckScriptFailure([ 764c17ad94SBram Moolenaar 'vim9script', 774c17ad94SBram Moolenaar 'def DeleteMe3()', 784c17ad94SBram Moolenaar 'enddef', 794c17ad94SBram Moolenaar 'delfunction DeleteMe3', 804c17ad94SBram Moolenaar ], 'E1084:') 814c17ad94SBram Moolenaar CheckScriptFailure([ 824c17ad94SBram Moolenaar 'vim9script', 834c17ad94SBram Moolenaar 'def DeleteMe4()', 844c17ad94SBram Moolenaar 'enddef', 854c17ad94SBram Moolenaar 'def DoThat()', 864c17ad94SBram Moolenaar ' delfunction DeleteMe4', 874c17ad94SBram Moolenaar 'enddef', 884c17ad94SBram Moolenaar 'DoThat()', 894c17ad94SBram Moolenaar ], 'E1084:') 90925e9fd6SBram Moolenaar 91925e9fd6SBram Moolenaar # Check that global :def function can be replaced and deleted 92cfcd011fSBram Moolenaar var lines =<< trim END 93925e9fd6SBram Moolenaar vim9script 94925e9fd6SBram Moolenaar def g:Global(): string 95925e9fd6SBram Moolenaar return "yes" 96925e9fd6SBram Moolenaar enddef 97925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 98925e9fd6SBram Moolenaar def! g:Global(): string 99925e9fd6SBram Moolenaar return "no" 100925e9fd6SBram Moolenaar enddef 101925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 102925e9fd6SBram Moolenaar delfunc g:Global 103925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 104925e9fd6SBram Moolenaar END 105925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 106925e9fd6SBram Moolenaar 107925e9fd6SBram Moolenaar # Check that global function can be replaced by a :def function and deleted 108925e9fd6SBram Moolenaar lines =<< trim END 109925e9fd6SBram Moolenaar vim9script 110925e9fd6SBram Moolenaar func g:Global() 111925e9fd6SBram Moolenaar return "yes" 112925e9fd6SBram Moolenaar endfunc 113925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 114925e9fd6SBram Moolenaar def! g:Global(): string 115925e9fd6SBram Moolenaar return "no" 116925e9fd6SBram Moolenaar enddef 117925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 118925e9fd6SBram Moolenaar delfunc g:Global 119925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 120925e9fd6SBram Moolenaar END 121925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 122925e9fd6SBram Moolenaar 123925e9fd6SBram Moolenaar # Check that global :def function can be replaced by a function and deleted 124925e9fd6SBram Moolenaar lines =<< trim END 125925e9fd6SBram Moolenaar vim9script 126925e9fd6SBram Moolenaar def g:Global(): string 127925e9fd6SBram Moolenaar return "yes" 128925e9fd6SBram Moolenaar enddef 129925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 130925e9fd6SBram Moolenaar func! g:Global() 131925e9fd6SBram Moolenaar return "no" 132925e9fd6SBram Moolenaar endfunc 133925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 134925e9fd6SBram Moolenaar delfunc g:Global 135925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 136925e9fd6SBram Moolenaar END 137925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 1384c17ad94SBram Moolenaarenddef 1394c17ad94SBram Moolenaar 14008052228SBram Moolenaardef Test_wrong_type() 141cfcd011fSBram Moolenaar CheckDefFailure(['var name: list<nothing>'], 'E1010:') 142cfcd011fSBram Moolenaar CheckDefFailure(['var name: list<list<nothing>>'], 'E1010:') 143cfcd011fSBram Moolenaar CheckDefFailure(['var name: dict<nothing>'], 'E1010:') 144cfcd011fSBram Moolenaar CheckDefFailure(['var name: dict<dict<nothing>>'], 'E1010:') 145599c89c8SBram Moolenaar 146cfcd011fSBram Moolenaar CheckDefFailure(['var name: dict<number'], 'E1009:') 147cfcd011fSBram Moolenaar CheckDefFailure(['var name: dict<list<number>'], 'E1009:') 14842a480bfSBram Moolenaar 149cfcd011fSBram Moolenaar CheckDefFailure(['var name: ally'], 'E1010:') 150cfcd011fSBram Moolenaar CheckDefFailure(['var name: bram'], 'E1010:') 151cfcd011fSBram Moolenaar CheckDefFailure(['var name: cathy'], 'E1010:') 152cfcd011fSBram Moolenaar CheckDefFailure(['var name: dom'], 'E1010:') 153cfcd011fSBram Moolenaar CheckDefFailure(['var name: freddy'], 'E1010:') 154cfcd011fSBram Moolenaar CheckDefFailure(['var name: john'], 'E1010:') 155cfcd011fSBram Moolenaar CheckDefFailure(['var name: larry'], 'E1010:') 156cfcd011fSBram Moolenaar CheckDefFailure(['var name: ned'], 'E1010:') 157cfcd011fSBram Moolenaar CheckDefFailure(['var name: pam'], 'E1010:') 158cfcd011fSBram Moolenaar CheckDefFailure(['var name: sam'], 'E1010:') 159cfcd011fSBram Moolenaar CheckDefFailure(['var name: vim'], 'E1010:') 160a0a9f43aSBram Moolenaar 161cfcd011fSBram Moolenaar CheckDefFailure(['var Ref: number', 'Ref()'], 'E1085:') 162cfcd011fSBram Moolenaar CheckDefFailure(['var Ref: string', 'var res = Ref()'], 'E1085:') 16308052228SBram Moolenaarenddef 1648a7d6542SBram Moolenaar 16510c65860SBram Moolenaardef Test_script_wrong_type() 16610c65860SBram Moolenaar var lines =<< trim END 16710c65860SBram Moolenaar vim9script 16810c65860SBram Moolenaar var s:dict: dict<string> 16910c65860SBram Moolenaar s:dict['a'] = ['x'] 17010c65860SBram Moolenaar END 17110c65860SBram Moolenaar CheckScriptFailure(lines, 'E1012: Type mismatch; expected string but got list<string>', 3) 17210c65860SBram Moolenaarenddef 17310c65860SBram Moolenaar 17408052228SBram Moolenaardef Test_const() 175cfcd011fSBram Moolenaar CheckDefFailure(['final name = 234', 'name = 99'], 'E1018:') 176cfcd011fSBram Moolenaar CheckDefFailure(['final one = 234', 'var one = 99'], 'E1017:') 177cfcd011fSBram Moolenaar CheckDefFailure(['final list = [1, 2]', 'var list = [3, 4]'], 'E1017:') 17830fd8204SBram Moolenaar CheckDefFailure(['final two'], 'E1125:') 17930fd8204SBram Moolenaar CheckDefFailure(['final &option'], 'E996:') 180dbeecb2bSBram Moolenaar 181cfcd011fSBram Moolenaar var lines =<< trim END 18230fd8204SBram Moolenaar final list = [1, 2, 3] 183dbeecb2bSBram Moolenaar list[0] = 4 1840b4c66c6SBram Moolenaar list->assert_equal([4, 2, 3]) 18530fd8204SBram Moolenaar const other = [5, 6, 7] 1860b4c66c6SBram Moolenaar other->assert_equal([5, 6, 7]) 18771abe482SBram Moolenaar 188cfcd011fSBram Moolenaar var varlist = [7, 8] 18930fd8204SBram Moolenaar const constlist = [1, varlist, 3] 19071abe482SBram Moolenaar varlist[0] = 77 19171abe482SBram Moolenaar # TODO: does not work yet 19271abe482SBram Moolenaar # constlist[1][1] = 88 193cfcd011fSBram Moolenaar var cl = constlist[1] 19471abe482SBram Moolenaar cl[1] = 88 19571abe482SBram Moolenaar constlist->assert_equal([1, [77, 88], 3]) 19671abe482SBram Moolenaar 197e0de171eSBram Moolenaar var vardict = {five: 5, six: 6} 198e0de171eSBram Moolenaar const constdict = {one: 1, two: vardict, three: 3} 19971abe482SBram Moolenaar vardict['five'] = 55 20071abe482SBram Moolenaar # TODO: does not work yet 20171abe482SBram Moolenaar # constdict['two']['six'] = 66 202cfcd011fSBram Moolenaar var cd = constdict['two'] 20371abe482SBram Moolenaar cd['six'] = 66 204e0de171eSBram Moolenaar constdict->assert_equal({one: 1, two: {five: 55, six: 66}, three: 3}) 205dbeecb2bSBram Moolenaar END 206dbeecb2bSBram Moolenaar CheckDefAndScriptSuccess(lines) 20708052228SBram Moolenaarenddef 2088a7d6542SBram Moolenaar 2090b4c66c6SBram Moolenaardef Test_const_bang() 210cfcd011fSBram Moolenaar var lines =<< trim END 21130fd8204SBram Moolenaar const var = 234 2120b4c66c6SBram Moolenaar var = 99 2130b4c66c6SBram Moolenaar END 2140b4c66c6SBram Moolenaar CheckDefExecFailure(lines, 'E1018:', 2) 2150b4c66c6SBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E46:', 3) 2160b4c66c6SBram Moolenaar 2170b4c66c6SBram Moolenaar lines =<< trim END 21830fd8204SBram Moolenaar const ll = [2, 3, 4] 2190b4c66c6SBram Moolenaar ll[0] = 99 2200b4c66c6SBram Moolenaar END 2210b4c66c6SBram Moolenaar CheckDefExecFailure(lines, 'E1119:', 2) 2220b4c66c6SBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E741:', 3) 2230b4c66c6SBram Moolenaar 2240b4c66c6SBram Moolenaar lines =<< trim END 22530fd8204SBram Moolenaar const ll = [2, 3, 4] 2260b4c66c6SBram Moolenaar ll[3] = 99 2270b4c66c6SBram Moolenaar END 2280b4c66c6SBram Moolenaar CheckDefExecFailure(lines, 'E1118:', 2) 2290b4c66c6SBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E684:', 3) 2300b4c66c6SBram Moolenaar 2310b4c66c6SBram Moolenaar lines =<< trim END 232e0de171eSBram Moolenaar const dd = {one: 1, two: 2} 2330b4c66c6SBram Moolenaar dd["one"] = 99 2340b4c66c6SBram Moolenaar END 2350b4c66c6SBram Moolenaar CheckDefExecFailure(lines, 'E1121:', 2) 2360b4c66c6SBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E741:', 3) 2370b4c66c6SBram Moolenaar 2380b4c66c6SBram Moolenaar lines =<< trim END 239e0de171eSBram Moolenaar const dd = {one: 1, two: 2} 2400b4c66c6SBram Moolenaar dd["three"] = 99 2410b4c66c6SBram Moolenaar END 2420b4c66c6SBram Moolenaar CheckDefExecFailure(lines, 'E1120:') 2430b4c66c6SBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E741:', 3) 2440b4c66c6SBram Moolenaarenddef 2450b4c66c6SBram Moolenaar 246df069eecSBram Moolenaardef Test_range_no_colon() 247d2c61705SBram Moolenaar CheckDefFailure(['%s/a/b/'], 'E1050:') 248d2c61705SBram Moolenaar CheckDefFailure(['+ s/a/b/'], 'E1050:') 249d2c61705SBram Moolenaar CheckDefFailure(['- s/a/b/'], 'E1050:') 250d2c61705SBram Moolenaar CheckDefFailure(['. s/a/b/'], 'E1050:') 251df069eecSBram Moolenaarenddef 252df069eecSBram Moolenaar 253df069eecSBram Moolenaar 2548a7d6542SBram Moolenaardef Test_block() 255cfcd011fSBram Moolenaar var outer = 1 2568a7d6542SBram Moolenaar { 257cfcd011fSBram Moolenaar var inner = 2 2588a7d6542SBram Moolenaar assert_equal(1, outer) 2598a7d6542SBram Moolenaar assert_equal(2, inner) 2608a7d6542SBram Moolenaar } 2618a7d6542SBram Moolenaar assert_equal(1, outer) 2623f1e9f00SBram Moolenaar 2633f1e9f00SBram Moolenaar {|echo 'yes'|} 2648a7d6542SBram Moolenaarenddef 2658a7d6542SBram Moolenaar 26608052228SBram Moolenaardef Test_block_failure() 267cfcd011fSBram Moolenaar CheckDefFailure(['{', 'var inner = 1', '}', 'echo inner'], 'E1001:') 26808052228SBram Moolenaar CheckDefFailure(['}'], 'E1025:') 26908052228SBram Moolenaar CheckDefFailure(['{', 'echo 1'], 'E1026:') 27008052228SBram Moolenaarenddef 2718a7d6542SBram Moolenaar 272fbbcd003SBram Moolenaardef Test_block_local_vars() 273fbbcd003SBram Moolenaar var lines =<< trim END 274fbbcd003SBram Moolenaar vim9script 275ed234f24SBram Moolenaar v:testing = 1 276fbbcd003SBram Moolenaar if true 277ed234f24SBram Moolenaar var text = ['hello'] 278ed234f24SBram Moolenaar def SayHello(): list<string> 279fbbcd003SBram Moolenaar return text 280fbbcd003SBram Moolenaar enddef 281fbbcd003SBram Moolenaar def SetText(v: string) 282ed234f24SBram Moolenaar text = [v] 283fbbcd003SBram Moolenaar enddef 284fbbcd003SBram Moolenaar endif 285fbbcd003SBram Moolenaar 286fbbcd003SBram Moolenaar if true 287ed234f24SBram Moolenaar var text = ['again'] 288ed234f24SBram Moolenaar def SayAgain(): list<string> 289fbbcd003SBram Moolenaar return text 290fbbcd003SBram Moolenaar enddef 291fbbcd003SBram Moolenaar endif 292ed234f24SBram Moolenaar 293ed234f24SBram Moolenaar # test that the "text" variables are not cleaned up 294ed234f24SBram Moolenaar test_garbagecollect_now() 295ed234f24SBram Moolenaar 296fbbcd003SBram Moolenaar defcompile 297fbbcd003SBram Moolenaar 298ed234f24SBram Moolenaar assert_equal(['hello'], SayHello()) 299ed234f24SBram Moolenaar assert_equal(['again'], SayAgain()) 300fbbcd003SBram Moolenaar 301fbbcd003SBram Moolenaar SetText('foobar') 302ed234f24SBram Moolenaar assert_equal(['foobar'], SayHello()) 303ed234f24SBram Moolenaar 304ed234f24SBram Moolenaar call writefile(['ok'], 'Xdidit') 305ed234f24SBram Moolenaar qall! 306fbbcd003SBram Moolenaar END 307ed234f24SBram Moolenaar 308ed234f24SBram Moolenaar # need to execute this with a separate Vim instance to avoid the current 309ed234f24SBram Moolenaar # context gets garbage collected. 310ed234f24SBram Moolenaar writefile(lines, 'Xscript') 311ed234f24SBram Moolenaar RunVim([], [], '-S Xscript') 312ed234f24SBram Moolenaar assert_equal(['ok'], readfile('Xdidit')) 313ed234f24SBram Moolenaar 314ed234f24SBram Moolenaar delete('Xscript') 315ed234f24SBram Moolenaar delete('Xdidit') 316fbbcd003SBram Moolenaarenddef 317fbbcd003SBram Moolenaar 31839ca4127SBram Moolenaardef Test_block_local_vars_with_func() 31939ca4127SBram Moolenaar var lines =<< trim END 32039ca4127SBram Moolenaar vim9script 32139ca4127SBram Moolenaar if true 32239ca4127SBram Moolenaar var foo = 'foo' 32339ca4127SBram Moolenaar if true 32439ca4127SBram Moolenaar var bar = 'bar' 32539ca4127SBram Moolenaar def Func(): list<string> 32639ca4127SBram Moolenaar return [foo, bar] 32739ca4127SBram Moolenaar enddef 32839ca4127SBram Moolenaar endif 32939ca4127SBram Moolenaar endif 33039ca4127SBram Moolenaar # function is compiled here, after blocks have finished, can still access 33139ca4127SBram Moolenaar # "foo" and "bar" 33239ca4127SBram Moolenaar assert_equal(['foo', 'bar'], Func()) 33339ca4127SBram Moolenaar END 33439ca4127SBram Moolenaar CheckScriptSuccess(lines) 33539ca4127SBram Moolenaarenddef 33639ca4127SBram Moolenaar 337d032f34aSBram Moolenaarfunc g:NoSuchFunc() 338d032f34aSBram Moolenaar echo 'none' 339d032f34aSBram Moolenaarendfunc 340d032f34aSBram Moolenaar 3419e1d9e34SBram Moolenaardef Test_try_catch_throw() 342cfcd011fSBram Moolenaar var l = [] 3437a092245SBram Moolenaar try # comment 3448a7d6542SBram Moolenaar add(l, '1') 3458a7d6542SBram Moolenaar throw 'wrong' 3468a7d6542SBram Moolenaar add(l, '2') 3477a092245SBram Moolenaar catch # comment 3488a7d6542SBram Moolenaar add(l, v:exception) 3497a092245SBram Moolenaar finally # comment 3508a7d6542SBram Moolenaar add(l, '3') 3517a092245SBram Moolenaar endtry # comment 3528a7d6542SBram Moolenaar assert_equal(['1', 'wrong', '3'], l) 35368d130c6SBram Moolenaar 354e859312eSBram Moolenaar l = [] 355e859312eSBram Moolenaar try 356e859312eSBram Moolenaar try 357e859312eSBram Moolenaar add(l, '1') 358e859312eSBram Moolenaar throw 'wrong' 359e859312eSBram Moolenaar add(l, '2') 360e859312eSBram Moolenaar catch /right/ 361e859312eSBram Moolenaar add(l, v:exception) 362e859312eSBram Moolenaar endtry 363e859312eSBram Moolenaar catch /wrong/ 364e859312eSBram Moolenaar add(l, 'caught') 365373863edSBram Moolenaar fina 366e859312eSBram Moolenaar add(l, 'finally') 367e859312eSBram Moolenaar endtry 368e859312eSBram Moolenaar assert_equal(['1', 'caught', 'finally'], l) 369e859312eSBram Moolenaar 370cfcd011fSBram Moolenaar var n: number 37168d130c6SBram Moolenaar try 37268d130c6SBram Moolenaar n = l[3] 37368d130c6SBram Moolenaar catch /E684:/ 37468d130c6SBram Moolenaar n = 99 37568d130c6SBram Moolenaar endtry 37668d130c6SBram Moolenaar assert_equal(99, n) 37768d130c6SBram Moolenaar 37869f7050cSBram Moolenaar var done = 'no' 37969f7050cSBram Moolenaar if 0 38069f7050cSBram Moolenaar try | catch | endtry 38169f7050cSBram Moolenaar else 38269f7050cSBram Moolenaar done = 'yes' 38369f7050cSBram Moolenaar endif 38469f7050cSBram Moolenaar assert_equal('yes', done) 38569f7050cSBram Moolenaar 38669f7050cSBram Moolenaar done = 'no' 38769f7050cSBram Moolenaar if 1 38869f7050cSBram Moolenaar done = 'yes' 38969f7050cSBram Moolenaar else 39069f7050cSBram Moolenaar try | catch | endtry 39169f7050cSBram Moolenaar done = 'never' 39269f7050cSBram Moolenaar endif 39369f7050cSBram Moolenaar assert_equal('yes', done) 39469f7050cSBram Moolenaar 39569f7050cSBram Moolenaar if 1 39669f7050cSBram Moolenaar else 39769f7050cSBram Moolenaar try | catch /pat/ | endtry 39869f7050cSBram Moolenaar try | catch /pat/ 39969f7050cSBram Moolenaar endtry 40069f7050cSBram Moolenaar try 40169f7050cSBram Moolenaar catch /pat/ | endtry 40269f7050cSBram Moolenaar try 40369f7050cSBram Moolenaar catch /pat/ 40469f7050cSBram Moolenaar endtry 40569f7050cSBram Moolenaar endif 40669f7050cSBram Moolenaar 40768d130c6SBram Moolenaar try 408cc673e74SBram Moolenaar # string slice returns a string, not a number 40968d130c6SBram Moolenaar n = g:astring[3] 4105e654230SBram Moolenaar catch /E1012:/ 41168d130c6SBram Moolenaar n = 77 41268d130c6SBram Moolenaar endtry 41368d130c6SBram Moolenaar assert_equal(77, n) 41468d130c6SBram Moolenaar 41568d130c6SBram Moolenaar try 41668d130c6SBram Moolenaar n = l[g:astring] 4175e654230SBram Moolenaar catch /E1012:/ 41856acb094SBram Moolenaar n = 88 41968d130c6SBram Moolenaar endtry 42056acb094SBram Moolenaar assert_equal(88, n) 42168d130c6SBram Moolenaar 42268d130c6SBram Moolenaar try 42368d130c6SBram Moolenaar n = s:does_not_exist 42468d130c6SBram Moolenaar catch /E121:/ 425f0b9f43cSBram Moolenaar n = 111 426f0b9f43cSBram Moolenaar endtry 427f0b9f43cSBram Moolenaar assert_equal(111, n) 428f0b9f43cSBram Moolenaar 429f0b9f43cSBram Moolenaar try 430f0b9f43cSBram Moolenaar n = g:does_not_exist 431f0b9f43cSBram Moolenaar catch /E121:/ 43268d130c6SBram Moolenaar n = 121 43368d130c6SBram Moolenaar endtry 43468d130c6SBram Moolenaar assert_equal(121, n) 43568d130c6SBram Moolenaar 436e0de171eSBram Moolenaar var d = {one: 1} 43768d130c6SBram Moolenaar try 43868d130c6SBram Moolenaar n = d[g:astring] 43968d130c6SBram Moolenaar catch /E716:/ 44068d130c6SBram Moolenaar n = 222 44168d130c6SBram Moolenaar endtry 44268d130c6SBram Moolenaar assert_equal(222, n) 443f0b9f43cSBram Moolenaar 444f0b9f43cSBram Moolenaar try 445f0b9f43cSBram Moolenaar n = -g:astring 446f0b9f43cSBram Moolenaar catch /E39:/ 447f0b9f43cSBram Moolenaar n = 233 448f0b9f43cSBram Moolenaar endtry 449f0b9f43cSBram Moolenaar assert_equal(233, n) 450f0b9f43cSBram Moolenaar 451f0b9f43cSBram Moolenaar try 452f0b9f43cSBram Moolenaar n = +g:astring 453f0b9f43cSBram Moolenaar catch /E1030:/ 454f0b9f43cSBram Moolenaar n = 244 455f0b9f43cSBram Moolenaar endtry 456f0b9f43cSBram Moolenaar assert_equal(244, n) 457f0b9f43cSBram Moolenaar 458f0b9f43cSBram Moolenaar try 459f0b9f43cSBram Moolenaar n = +g:alist 460f0b9f43cSBram Moolenaar catch /E745:/ 461f0b9f43cSBram Moolenaar n = 255 462f0b9f43cSBram Moolenaar endtry 463f0b9f43cSBram Moolenaar assert_equal(255, n) 464f0b9f43cSBram Moolenaar 465cfcd011fSBram Moolenaar var nd: dict<any> 466f0b9f43cSBram Moolenaar try 4672e5910bfSBram Moolenaar nd = {[g:alist]: 1} 4682e5910bfSBram Moolenaar catch /E1105:/ 469f0b9f43cSBram Moolenaar n = 266 470f0b9f43cSBram Moolenaar endtry 471f0b9f43cSBram Moolenaar assert_equal(266, n) 472f0b9f43cSBram Moolenaar 473f0b9f43cSBram Moolenaar try 474f0b9f43cSBram Moolenaar [n] = [1, 2, 3] 475f0b9f43cSBram Moolenaar catch /E1093:/ 476f0b9f43cSBram Moolenaar n = 277 477f0b9f43cSBram Moolenaar endtry 478f0b9f43cSBram Moolenaar assert_equal(277, n) 479f0b9f43cSBram Moolenaar 480e859312eSBram Moolenaar try 481e859312eSBram Moolenaar &ts = g:astring 4825e654230SBram Moolenaar catch /E1012:/ 483e859312eSBram Moolenaar n = 288 484e859312eSBram Moolenaar endtry 485e859312eSBram Moolenaar assert_equal(288, n) 486e859312eSBram Moolenaar 487e859312eSBram Moolenaar try 488e859312eSBram Moolenaar &backspace = 'asdf' 489e859312eSBram Moolenaar catch /E474:/ 490e859312eSBram Moolenaar n = 299 491e859312eSBram Moolenaar endtry 492e859312eSBram Moolenaar assert_equal(299, n) 493e859312eSBram Moolenaar 494e859312eSBram Moolenaar l = [1] 495e859312eSBram Moolenaar try 496e859312eSBram Moolenaar l[3] = 3 497e859312eSBram Moolenaar catch /E684:/ 498e859312eSBram Moolenaar n = 300 499e859312eSBram Moolenaar endtry 500e859312eSBram Moolenaar assert_equal(300, n) 501e859312eSBram Moolenaar 502e859312eSBram Moolenaar try 503e859312eSBram Moolenaar unlet g:does_not_exist 504e859312eSBram Moolenaar catch /E108:/ 505e859312eSBram Moolenaar n = 322 506e859312eSBram Moolenaar endtry 507e859312eSBram Moolenaar assert_equal(322, n) 508e859312eSBram Moolenaar 509e859312eSBram Moolenaar try 5102bede173SBram Moolenaar d = {text: 1, [g:astring]: 2} 511e859312eSBram Moolenaar catch /E721:/ 512e859312eSBram Moolenaar n = 333 513e859312eSBram Moolenaar endtry 514e859312eSBram Moolenaar assert_equal(333, n) 515e859312eSBram Moolenaar 516e859312eSBram Moolenaar try 517e859312eSBram Moolenaar l = DeletedFunc() 518e859312eSBram Moolenaar catch /E933:/ 519e859312eSBram Moolenaar n = 344 520e859312eSBram Moolenaar endtry 521e859312eSBram Moolenaar assert_equal(344, n) 522d032f34aSBram Moolenaar 523d032f34aSBram Moolenaar try 524d032f34aSBram Moolenaar echo len(v:true) 525d032f34aSBram Moolenaar catch /E701:/ 526d032f34aSBram Moolenaar n = 355 527d032f34aSBram Moolenaar endtry 528d032f34aSBram Moolenaar assert_equal(355, n) 529d032f34aSBram Moolenaar 530cfcd011fSBram Moolenaar var P = function('g:NoSuchFunc') 531d032f34aSBram Moolenaar delfunc g:NoSuchFunc 532d032f34aSBram Moolenaar try 533d032f34aSBram Moolenaar echo P() 534d032f34aSBram Moolenaar catch /E117:/ 535d032f34aSBram Moolenaar n = 366 536d032f34aSBram Moolenaar endtry 537d032f34aSBram Moolenaar assert_equal(366, n) 538d032f34aSBram Moolenaar 539d032f34aSBram Moolenaar try 540d032f34aSBram Moolenaar echo g:NoSuchFunc() 541d032f34aSBram Moolenaar catch /E117:/ 542d032f34aSBram Moolenaar n = 377 543d032f34aSBram Moolenaar endtry 544d032f34aSBram Moolenaar assert_equal(377, n) 545d032f34aSBram Moolenaar 546d032f34aSBram Moolenaar try 547d032f34aSBram Moolenaar echo g:alist + 4 548d032f34aSBram Moolenaar catch /E745:/ 549d032f34aSBram Moolenaar n = 388 550d032f34aSBram Moolenaar endtry 551d032f34aSBram Moolenaar assert_equal(388, n) 552d032f34aSBram Moolenaar 553d032f34aSBram Moolenaar try 554d032f34aSBram Moolenaar echo 4 + g:alist 555d032f34aSBram Moolenaar catch /E745:/ 556d032f34aSBram Moolenaar n = 399 557d032f34aSBram Moolenaar endtry 558d032f34aSBram Moolenaar assert_equal(399, n) 559d032f34aSBram Moolenaar 560d032f34aSBram Moolenaar try 561d032f34aSBram Moolenaar echo g:alist.member 562d032f34aSBram Moolenaar catch /E715:/ 563d032f34aSBram Moolenaar n = 400 564d032f34aSBram Moolenaar endtry 565d032f34aSBram Moolenaar assert_equal(400, n) 566d032f34aSBram Moolenaar 567d032f34aSBram Moolenaar try 568d032f34aSBram Moolenaar echo d.member 569d032f34aSBram Moolenaar catch /E716:/ 570d032f34aSBram Moolenaar n = 411 571d032f34aSBram Moolenaar endtry 572d032f34aSBram Moolenaar assert_equal(411, n) 573d9d7789bSBram Moolenaar 574d9d7789bSBram Moolenaar var counter = 0 575d9d7789bSBram Moolenaar for i in range(4) 576d9d7789bSBram Moolenaar try 577d9d7789bSBram Moolenaar eval [][0] 578d9d7789bSBram Moolenaar catch 579d9d7789bSBram Moolenaar endtry 580d9d7789bSBram Moolenaar counter += 1 581d9d7789bSBram Moolenaar endfor 582d9d7789bSBram Moolenaar assert_equal(4, counter) 5837e82c5f3SBram Moolenaar 5847e82c5f3SBram Moolenaar # return in finally after empty catch 5857e82c5f3SBram Moolenaar def ReturnInFinally(): number 5867e82c5f3SBram Moolenaar try 5877e82c5f3SBram Moolenaar finally 5887e82c5f3SBram Moolenaar return 4 5897e82c5f3SBram Moolenaar endtry 5907e82c5f3SBram Moolenaar return 2 5917e82c5f3SBram Moolenaar enddef 5927e82c5f3SBram Moolenaar assert_equal(4, ReturnInFinally()) 5938a7d6542SBram Moolenaarenddef 5948a7d6542SBram Moolenaar 5959cb577a6SBram Moolenaardef Test_nocatch_return_in_try() 5969cb577a6SBram Moolenaar # return in try block returns normally 5979cb577a6SBram Moolenaar def ReturnInTry(): string 5989cb577a6SBram Moolenaar try 5999cb577a6SBram Moolenaar return '"some message"' 6009cb577a6SBram Moolenaar catch 6019cb577a6SBram Moolenaar endtry 6029cb577a6SBram Moolenaar return 'not reached' 6039cb577a6SBram Moolenaar enddef 6049cb577a6SBram Moolenaar exe 'echoerr ' .. ReturnInTry() 6059cb577a6SBram Moolenaarenddef 6069cb577a6SBram Moolenaar 6071430ceebSBram Moolenaardef Test_cnext_works_in_catch() 6081430ceebSBram Moolenaar var lines =<< trim END 6091430ceebSBram Moolenaar vim9script 6101430ceebSBram Moolenaar au BufEnter * eval 0 6111430ceebSBram Moolenaar writefile(['text'], 'Xfile1') 6121430ceebSBram Moolenaar writefile(['text'], 'Xfile2') 6131430ceebSBram Moolenaar var items = [ 6141430ceebSBram Moolenaar {lnum: 1, filename: 'Xfile1', valid: true}, 6151430ceebSBram Moolenaar {lnum: 1, filename: 'Xfile2', valid: true} 6161430ceebSBram Moolenaar ] 6171430ceebSBram Moolenaar setqflist([], ' ', {items: items}) 6181430ceebSBram Moolenaar cwindow 6191430ceebSBram Moolenaar 6201430ceebSBram Moolenaar def CnextOrCfirst() 6211430ceebSBram Moolenaar # if cnext fails, cfirst is used 6221430ceebSBram Moolenaar try 6231430ceebSBram Moolenaar cnext 6241430ceebSBram Moolenaar catch 6251430ceebSBram Moolenaar cfirst 6261430ceebSBram Moolenaar endtry 6271430ceebSBram Moolenaar enddef 6281430ceebSBram Moolenaar 6291430ceebSBram Moolenaar CnextOrCfirst() 6301430ceebSBram Moolenaar CnextOrCfirst() 6311430ceebSBram Moolenaar writefile([getqflist({idx: 0}).idx], 'Xresult') 6321430ceebSBram Moolenaar qall 6331430ceebSBram Moolenaar END 6341430ceebSBram Moolenaar writefile(lines, 'XCatchCnext') 6351430ceebSBram Moolenaar RunVim([], [], '--clean -S XCatchCnext') 6361430ceebSBram Moolenaar assert_equal(['1'], readfile('Xresult')) 6371430ceebSBram Moolenaar 6381430ceebSBram Moolenaar delete('Xfile1') 6391430ceebSBram Moolenaar delete('Xfile2') 6401430ceebSBram Moolenaar delete('XCatchCnext') 6411430ceebSBram Moolenaar delete('Xresult') 6421430ceebSBram Moolenaarenddef 6431430ceebSBram Moolenaar 6449e1d9e34SBram Moolenaardef Test_throw_skipped() 6459e1d9e34SBram Moolenaar if 0 6469e1d9e34SBram Moolenaar throw dontgethere 6479e1d9e34SBram Moolenaar endif 6489e1d9e34SBram Moolenaarenddef 6499e1d9e34SBram Moolenaar 6508f81b22eSBram Moolenaardef Test_nocatch_throw_silenced() 6518f81b22eSBram Moolenaar var lines =<< trim END 6528f81b22eSBram Moolenaar vim9script 6538f81b22eSBram Moolenaar def Func() 6548f81b22eSBram Moolenaar throw 'error' 6558f81b22eSBram Moolenaar enddef 6568f81b22eSBram Moolenaar silent! Func() 6578f81b22eSBram Moolenaar END 6588f81b22eSBram Moolenaar writefile(lines, 'XthrowSilenced') 6598f81b22eSBram Moolenaar source XthrowSilenced 6608f81b22eSBram Moolenaar delete('XthrowSilenced') 6618f81b22eSBram Moolenaarenddef 6628f81b22eSBram Moolenaar 663e859312eSBram Moolenaardef DeletedFunc(): list<any> 664e859312eSBram Moolenaar return ['delete me'] 665e859312eSBram Moolenaarenddef 666e859312eSBram Moolenaardefcompile 667e859312eSBram Moolenaardelfunc DeletedFunc 668e859312eSBram Moolenaar 669257cc5eeSBram Moolenaardef ThrowFromDef() 670a72cfb80SBram Moolenaar throw "getout" # comment 671257cc5eeSBram Moolenaarenddef 672257cc5eeSBram Moolenaar 673257cc5eeSBram Moolenaarfunc CatchInFunc() 674257cc5eeSBram Moolenaar try 675257cc5eeSBram Moolenaar call ThrowFromDef() 676257cc5eeSBram Moolenaar catch 677257cc5eeSBram Moolenaar let g:thrown_func = v:exception 678257cc5eeSBram Moolenaar endtry 679257cc5eeSBram Moolenaarendfunc 680257cc5eeSBram Moolenaar 681257cc5eeSBram Moolenaardef CatchInDef() 682257cc5eeSBram Moolenaar try 683257cc5eeSBram Moolenaar ThrowFromDef() 684257cc5eeSBram Moolenaar catch 685257cc5eeSBram Moolenaar g:thrown_def = v:exception 686257cc5eeSBram Moolenaar endtry 687257cc5eeSBram Moolenaarenddef 688257cc5eeSBram Moolenaar 689f575adffSBram Moolenaardef ReturnFinally(): string 690f575adffSBram Moolenaar try 691f575adffSBram Moolenaar return 'intry' 692373863edSBram Moolenaar finall 693f575adffSBram Moolenaar g:in_finally = 'finally' 694f575adffSBram Moolenaar endtry 695f575adffSBram Moolenaar return 'end' 696f575adffSBram Moolenaarenddef 697f575adffSBram Moolenaar 698257cc5eeSBram Moolenaardef Test_try_catch_nested() 699257cc5eeSBram Moolenaar CatchInFunc() 700257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_func) 701257cc5eeSBram Moolenaar 702257cc5eeSBram Moolenaar CatchInDef() 703257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_def) 704f575adffSBram Moolenaar 705f575adffSBram Moolenaar assert_equal('intry', ReturnFinally()) 706f575adffSBram Moolenaar assert_equal('finally', g:in_finally) 707f575adffSBram Moolenaarenddef 708f575adffSBram Moolenaar 7099939f57bSBram Moolenaardef TryOne(): number 7109939f57bSBram Moolenaar try 7119939f57bSBram Moolenaar return 0 7129939f57bSBram Moolenaar catch 7139939f57bSBram Moolenaar endtry 7149939f57bSBram Moolenaar return 0 7159939f57bSBram Moolenaarenddef 7169939f57bSBram Moolenaar 7179939f57bSBram Moolenaardef TryTwo(n: number): string 7189939f57bSBram Moolenaar try 719cfcd011fSBram Moolenaar var x = {} 7209939f57bSBram Moolenaar catch 7219939f57bSBram Moolenaar endtry 7229939f57bSBram Moolenaar return 'text' 7239939f57bSBram Moolenaarenddef 7249939f57bSBram Moolenaar 7259939f57bSBram Moolenaardef Test_try_catch_twice() 7269939f57bSBram Moolenaar assert_equal('text', TryOne()->TryTwo()) 7279939f57bSBram Moolenaarenddef 7289939f57bSBram Moolenaar 729f575adffSBram Moolenaardef Test_try_catch_match() 730cfcd011fSBram Moolenaar var seq = 'a' 731f575adffSBram Moolenaar try 732f575adffSBram Moolenaar throw 'something' 733f575adffSBram Moolenaar catch /nothing/ 734f575adffSBram Moolenaar seq ..= 'x' 735f575adffSBram Moolenaar catch /some/ 736f575adffSBram Moolenaar seq ..= 'b' 737f575adffSBram Moolenaar catch /asdf/ 738f575adffSBram Moolenaar seq ..= 'x' 739e8c4abbbSBram Moolenaar catch ?a\?sdf? 740e8c4abbbSBram Moolenaar seq ..= 'y' 741f575adffSBram Moolenaar finally 742f575adffSBram Moolenaar seq ..= 'c' 743f575adffSBram Moolenaar endtry 744f575adffSBram Moolenaar assert_equal('abc', seq) 745257cc5eeSBram Moolenaarenddef 746257cc5eeSBram Moolenaar 747e8c4abbbSBram Moolenaardef Test_try_catch_fails() 748d2c61705SBram Moolenaar CheckDefFailure(['catch'], 'E603:') 749d2c61705SBram Moolenaar CheckDefFailure(['try', 'echo 0', 'catch', 'catch'], 'E1033:') 750d2c61705SBram Moolenaar CheckDefFailure(['try', 'echo 0', 'catch /pat'], 'E1067:') 751d2c61705SBram Moolenaar CheckDefFailure(['finally'], 'E606:') 752d2c61705SBram Moolenaar CheckDefFailure(['try', 'echo 0', 'finally', 'echo 1', 'finally'], 'E607:') 753d2c61705SBram Moolenaar CheckDefFailure(['endtry'], 'E602:') 754d2c61705SBram Moolenaar CheckDefFailure(['while 1', 'endtry'], 'E170:') 755d2c61705SBram Moolenaar CheckDefFailure(['for i in range(5)', 'endtry'], 'E170:') 75613106605SBram Moolenaar CheckDefFailure(['if 1', 'endtry'], 'E171:') 757d2c61705SBram Moolenaar CheckDefFailure(['try', 'echo 1', 'endtry'], 'E1032:') 758585fea7bSBram Moolenaar 759e4984290SBram Moolenaar CheckDefFailure(['throw'], 'E1143:') 760d2c61705SBram Moolenaar CheckDefFailure(['throw xxx'], 'E1001:') 761e8c4abbbSBram Moolenaarenddef 762e8c4abbbSBram Moolenaar 7637c5b3c03SBram Moolenaardef Try_catch_skipped() 7647c5b3c03SBram Moolenaar var l = [] 7657c5b3c03SBram Moolenaar try 7667c5b3c03SBram Moolenaar finally 7677c5b3c03SBram Moolenaar endtry 7687c5b3c03SBram Moolenaar 7697c5b3c03SBram Moolenaar if 1 7707c5b3c03SBram Moolenaar else 7717c5b3c03SBram Moolenaar try 7727c5b3c03SBram Moolenaar endtry 7737c5b3c03SBram Moolenaar endif 7747c5b3c03SBram Moolenaarenddef 7757c5b3c03SBram Moolenaar 7767c5b3c03SBram Moolenaar" The skipped try/endtry was updating the wrong instruction. 7777c5b3c03SBram Moolenaardef Test_try_catch_skipped() 7787c5b3c03SBram Moolenaar var instr = execute('disassemble Try_catch_skipped') 7797c5b3c03SBram Moolenaar assert_match("NEWLIST size 0\n", instr) 7807c5b3c03SBram Moolenaarenddef 7817c5b3c03SBram Moolenaar 7827c5b3c03SBram Moolenaar 7837c5b3c03SBram Moolenaar 784006ad48bSBram Moolenaardef Test_throw_vimscript() 785f5be8cdbSBram Moolenaar # only checks line continuation 786cfcd011fSBram Moolenaar var lines =<< trim END 787006ad48bSBram Moolenaar vim9script 788006ad48bSBram Moolenaar try 789006ad48bSBram Moolenaar throw 'one' 790006ad48bSBram Moolenaar .. 'two' 791006ad48bSBram Moolenaar catch 792006ad48bSBram Moolenaar assert_equal('onetwo', v:exception) 793006ad48bSBram Moolenaar endtry 794006ad48bSBram Moolenaar END 795006ad48bSBram Moolenaar CheckScriptSuccess(lines) 7961e021e63SBram Moolenaar 7971e021e63SBram Moolenaar lines =<< trim END 7981e021e63SBram Moolenaar vim9script 799352134bbSBram Moolenaar @r = '' 8001e021e63SBram Moolenaar def Func() 8011e021e63SBram Moolenaar throw @r 8021e021e63SBram Moolenaar enddef 8031e021e63SBram Moolenaar var result = '' 8041e021e63SBram Moolenaar try 8051e021e63SBram Moolenaar Func() 8061e021e63SBram Moolenaar catch /E1129:/ 8071e021e63SBram Moolenaar result = 'caught' 8081e021e63SBram Moolenaar endtry 8091e021e63SBram Moolenaar assert_equal('caught', result) 8101e021e63SBram Moolenaar END 8111e021e63SBram Moolenaar CheckScriptSuccess(lines) 812006ad48bSBram Moolenaarenddef 813006ad48bSBram Moolenaar 814ed677f55SBram Moolenaardef Test_error_in_nested_function() 81503dfde2bSBram Moolenaar # an error in a nested :function aborts executing in the calling :def function 816cfcd011fSBram Moolenaar var lines =<< trim END 817ed677f55SBram Moolenaar vim9script 818ed677f55SBram Moolenaar def Func() 819ed677f55SBram Moolenaar Error() 820ed677f55SBram Moolenaar g:test_var = 1 821ed677f55SBram Moolenaar enddef 822ed677f55SBram Moolenaar func Error() abort 823ed677f55SBram Moolenaar eval [][0] 824ed677f55SBram Moolenaar endfunc 825ed677f55SBram Moolenaar Func() 826ed677f55SBram Moolenaar END 827ed677f55SBram Moolenaar g:test_var = 0 828ed677f55SBram Moolenaar CheckScriptFailure(lines, 'E684:') 829ed677f55SBram Moolenaar assert_equal(0, g:test_var) 830ed677f55SBram Moolenaarenddef 831ed677f55SBram Moolenaar 83237c83711SBram Moolenaardef Test_cexpr_vimscript() 833f5be8cdbSBram Moolenaar # only checks line continuation 83437c83711SBram Moolenaar set errorformat=File\ %f\ line\ %l 835cfcd011fSBram Moolenaar var lines =<< trim END 83637c83711SBram Moolenaar vim9script 83737c83711SBram Moolenaar cexpr 'File' 83837c83711SBram Moolenaar .. ' someFile' .. 83937c83711SBram Moolenaar ' line 19' 84037c83711SBram Moolenaar assert_equal(19, getqflist()[0].lnum) 84137c83711SBram Moolenaar END 84237c83711SBram Moolenaar CheckScriptSuccess(lines) 84337c83711SBram Moolenaar set errorformat& 84437c83711SBram Moolenaarenddef 84537c83711SBram Moolenaar 846c9edd6b5SBram Moolenaardef Test_statusline_syntax() 847c9edd6b5SBram Moolenaar # legacy syntax is used for 'statusline' 848cfcd011fSBram Moolenaar var lines =<< trim END 849c9edd6b5SBram Moolenaar vim9script 850c9edd6b5SBram Moolenaar func g:Status() 851c9edd6b5SBram Moolenaar return '%{"x" is# "x"}' 852c9edd6b5SBram Moolenaar endfunc 853c9edd6b5SBram Moolenaar set laststatus=2 statusline=%!Status() 854c9edd6b5SBram Moolenaar redrawstatus 855c9edd6b5SBram Moolenaar set laststatus statusline= 856c9edd6b5SBram Moolenaar END 857c9edd6b5SBram Moolenaar CheckScriptSuccess(lines) 858c9edd6b5SBram Moolenaarenddef 859c9edd6b5SBram Moolenaar 860b209750bSBram Moolenaardef Test_list_vimscript() 861b209750bSBram Moolenaar # checks line continuation and comments 862cfcd011fSBram Moolenaar var lines =<< trim END 863b209750bSBram Moolenaar vim9script 864cfcd011fSBram Moolenaar var mylist = [ 865b209750bSBram Moolenaar 'one', 866b209750bSBram Moolenaar # comment 867b209750bSBram Moolenaar 'two', # empty line follows 868b209750bSBram Moolenaar 869b209750bSBram Moolenaar 'three', 870b209750bSBram Moolenaar ] 871b209750bSBram Moolenaar assert_equal(['one', 'two', 'three'], mylist) 872b209750bSBram Moolenaar END 873b209750bSBram Moolenaar CheckScriptSuccess(lines) 87466250c93SBram Moolenaar 87566250c93SBram Moolenaar # check all lines from heredoc are kept 87666250c93SBram Moolenaar lines =<< trim END 87766250c93SBram Moolenaar # comment 1 87866250c93SBram Moolenaar two 87966250c93SBram Moolenaar # comment 3 88066250c93SBram Moolenaar 88166250c93SBram Moolenaar five 88266250c93SBram Moolenaar # comment 6 88366250c93SBram Moolenaar END 88466250c93SBram Moolenaar assert_equal(['# comment 1', 'two', '# comment 3', '', 'five', '# comment 6'], lines) 8854bce26bbSBram Moolenaar 8864bce26bbSBram Moolenaar lines =<< trim END 8874bce26bbSBram Moolenaar [{ 8884bce26bbSBram Moolenaar a: 0}]->string()->assert_equal("[{'a': 0}]") 8894bce26bbSBram Moolenaar END 8904bce26bbSBram Moolenaar CheckDefAndScriptSuccess(lines) 891b209750bSBram Moolenaarenddef 892b209750bSBram Moolenaar 8932a1381c3SBram Moolenaarif has('channel') 89440ee466cSBram Moolenaar let someJob = test_null_job() 89540ee466cSBram Moolenaar 89640ee466cSBram Moolenaar def FuncWithError() 89740ee466cSBram Moolenaar echomsg g:someJob 89840ee466cSBram Moolenaar enddef 89940ee466cSBram Moolenaar 90040ee466cSBram Moolenaar func Test_convert_emsg_to_exception() 90140ee466cSBram Moolenaar try 90240ee466cSBram Moolenaar call FuncWithError() 90340ee466cSBram Moolenaar catch 90440ee466cSBram Moolenaar call assert_match('Vim:E908:', v:exception) 90540ee466cSBram Moolenaar endtry 90640ee466cSBram Moolenaar endfunc 9072a1381c3SBram Moolenaarendif 90840ee466cSBram Moolenaar 9098a7d6542SBram Moolenaarlet s:export_script_lines =<< trim END 9108a7d6542SBram Moolenaar vim9script 911cfcd011fSBram Moolenaar var name: string = 'bob' 9128a7d6542SBram Moolenaar def Concat(arg: string): string 9138a7d6542SBram Moolenaar return name .. arg 9148a7d6542SBram Moolenaar enddef 915227a69deSBram Moolenaar g:result = Concat('bie') 916227a69deSBram Moolenaar g:localname = name 9178a7d6542SBram Moolenaar 9188a7d6542SBram Moolenaar export const CONST = 1234 919cfcd011fSBram Moolenaar export var exported = 9876 920cfcd011fSBram Moolenaar export var exp_name = 'John' 9218a7d6542SBram Moolenaar export def Exported(): string 9228a7d6542SBram Moolenaar return 'Exported' 9238a7d6542SBram Moolenaar enddef 9240f2a5cc6SBram Moolenaar export final theList = [1] 9258a7d6542SBram MoolenaarEND 9268a7d6542SBram Moolenaar 927b3ca9824SBram Moolenaardef Undo_export_script_lines() 928b3ca9824SBram Moolenaar unlet g:result 929b3ca9824SBram Moolenaar unlet g:localname 930b3ca9824SBram Moolenaarenddef 931b3ca9824SBram Moolenaar 9325269bd2aSBram Moolenaardef Test_vim9_import_export() 933cfcd011fSBram Moolenaar var import_script_lines =<< trim END 9348a7d6542SBram Moolenaar vim9script 9358a7d6542SBram Moolenaar import {exported, Exported} from './Xexport.vim' 9368a7d6542SBram Moolenaar g:imported = exported 9376e587dcbSBram Moolenaar exported += 3 9386e587dcbSBram Moolenaar g:imported_added = exported 9398a7d6542SBram Moolenaar g:imported_func = Exported() 9406e587dcbSBram Moolenaar 94140f4f7a4SBram Moolenaar def GetExported(): string 942e0de171eSBram Moolenaar var local_dict = {ref: Exported} 94340f4f7a4SBram Moolenaar return local_dict.ref() 94440f4f7a4SBram Moolenaar enddef 94540f4f7a4SBram Moolenaar g:funcref_result = GetExported() 94640f4f7a4SBram Moolenaar 9476e587dcbSBram Moolenaar import {exp_name} from './Xexport.vim' 9486e587dcbSBram Moolenaar g:imported_name = exp_name 9496e587dcbSBram Moolenaar exp_name ..= ' Doe' 9506e587dcbSBram Moolenaar g:imported_name_appended = exp_name 9515381c7a1SBram Moolenaar g:imported_later = exported 9520f2a5cc6SBram Moolenaar 9530f2a5cc6SBram Moolenaar import theList from './Xexport.vim' 9540f2a5cc6SBram Moolenaar theList->add(2) 9550f2a5cc6SBram Moolenaar assert_equal([1, 2], theList) 9568a7d6542SBram Moolenaar END 9578a7d6542SBram Moolenaar 9588a7d6542SBram Moolenaar writefile(import_script_lines, 'Ximport.vim') 9598a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport.vim') 9608a7d6542SBram Moolenaar 9618a7d6542SBram Moolenaar source Ximport.vim 9628a7d6542SBram Moolenaar 9638a7d6542SBram Moolenaar assert_equal('bobbie', g:result) 9648a7d6542SBram Moolenaar assert_equal('bob', g:localname) 9658a7d6542SBram Moolenaar assert_equal(9876, g:imported) 9666e587dcbSBram Moolenaar assert_equal(9879, g:imported_added) 9675381c7a1SBram Moolenaar assert_equal(9879, g:imported_later) 9688a7d6542SBram Moolenaar assert_equal('Exported', g:imported_func) 96940f4f7a4SBram Moolenaar assert_equal('Exported', g:funcref_result) 9706e587dcbSBram Moolenaar assert_equal('John', g:imported_name) 9716e587dcbSBram Moolenaar assert_equal('John Doe', g:imported_name_appended) 9728a7d6542SBram Moolenaar assert_false(exists('g:name')) 9738a7d6542SBram Moolenaar 974b3ca9824SBram Moolenaar Undo_export_script_lines() 9758a7d6542SBram Moolenaar unlet g:imported 9766e587dcbSBram Moolenaar unlet g:imported_added 9775381c7a1SBram Moolenaar unlet g:imported_later 9788a7d6542SBram Moolenaar unlet g:imported_func 9796e587dcbSBram Moolenaar unlet g:imported_name g:imported_name_appended 9808a7d6542SBram Moolenaar delete('Ximport.vim') 981f2d5c240SBram Moolenaar 9821c991144SBram Moolenaar # similar, with line breaks 983cfcd011fSBram Moolenaar var import_line_break_script_lines =<< trim END 9841c991144SBram Moolenaar vim9script 9851c991144SBram Moolenaar import { 9861c991144SBram Moolenaar exported, 9871c991144SBram Moolenaar Exported, 9881c991144SBram Moolenaar } 9891c991144SBram Moolenaar from 9901c991144SBram Moolenaar './Xexport.vim' 9911c991144SBram Moolenaar g:imported = exported 9921c991144SBram Moolenaar exported += 5 9931c991144SBram Moolenaar g:imported_added = exported 9941c991144SBram Moolenaar g:imported_func = Exported() 9951c991144SBram Moolenaar END 9961c991144SBram Moolenaar writefile(import_line_break_script_lines, 'Ximport_lbr.vim') 9971c991144SBram Moolenaar source Ximport_lbr.vim 9981c991144SBram Moolenaar 9991c991144SBram Moolenaar assert_equal(9876, g:imported) 10001c991144SBram Moolenaar assert_equal(9881, g:imported_added) 10011c991144SBram Moolenaar assert_equal('Exported', g:imported_func) 10021c991144SBram Moolenaar 10031c991144SBram Moolenaar # exported script not sourced again 10041c991144SBram Moolenaar assert_false(exists('g:result')) 10051c991144SBram Moolenaar unlet g:imported 10061c991144SBram Moolenaar unlet g:imported_added 10071c991144SBram Moolenaar unlet g:imported_func 10081c991144SBram Moolenaar delete('Ximport_lbr.vim') 10091c991144SBram Moolenaar 10101c991144SBram Moolenaar # import inside :def function 1011cfcd011fSBram Moolenaar var import_in_def_lines =<< trim END 10125381c7a1SBram Moolenaar vim9script 10135381c7a1SBram Moolenaar def ImportInDef() 10145381c7a1SBram Moolenaar import exported from './Xexport.vim' 10155381c7a1SBram Moolenaar g:imported = exported 10165381c7a1SBram Moolenaar exported += 7 10175381c7a1SBram Moolenaar g:imported_added = exported 10185381c7a1SBram Moolenaar enddef 10195381c7a1SBram Moolenaar ImportInDef() 10205381c7a1SBram Moolenaar END 10215381c7a1SBram Moolenaar writefile(import_in_def_lines, 'Ximport2.vim') 10225381c7a1SBram Moolenaar source Ximport2.vim 1023f5be8cdbSBram Moolenaar # TODO: this should be 9879 10245381c7a1SBram Moolenaar assert_equal(9876, g:imported) 10255381c7a1SBram Moolenaar assert_equal(9883, g:imported_added) 10265381c7a1SBram Moolenaar unlet g:imported 10275381c7a1SBram Moolenaar unlet g:imported_added 10285381c7a1SBram Moolenaar delete('Ximport2.vim') 10295381c7a1SBram Moolenaar 1030cfcd011fSBram Moolenaar var import_star_as_lines =<< trim END 1031f2d5c240SBram Moolenaar vim9script 1032f2d5c240SBram Moolenaar import * as Export from './Xexport.vim' 1033f2d5c240SBram Moolenaar def UseExport() 1034f2d5c240SBram Moolenaar g:imported = Export.exported 1035f2d5c240SBram Moolenaar enddef 1036f2d5c240SBram Moolenaar UseExport() 1037f2d5c240SBram Moolenaar END 1038f2d5c240SBram Moolenaar writefile(import_star_as_lines, 'Ximport.vim') 1039f2d5c240SBram Moolenaar source Ximport.vim 10405381c7a1SBram Moolenaar assert_equal(9883, g:imported) 1041f2d5c240SBram Moolenaar 1042cfcd011fSBram Moolenaar var import_star_as_lines_no_dot =<< trim END 1043599c89c8SBram Moolenaar vim9script 1044599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 1045599c89c8SBram Moolenaar def Func() 1046cfcd011fSBram Moolenaar var dummy = 1 1047cfcd011fSBram Moolenaar var imported = Export + dummy 1048599c89c8SBram Moolenaar enddef 1049822ba247SBram Moolenaar defcompile 1050599c89c8SBram Moolenaar END 1051599c89c8SBram Moolenaar writefile(import_star_as_lines_no_dot, 'Ximport.vim') 105244d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1060:', '', 2, 'Func') 1053599c89c8SBram Moolenaar 1054cfcd011fSBram Moolenaar var import_star_as_lines_dot_space =<< trim END 1055599c89c8SBram Moolenaar vim9script 1056599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 1057599c89c8SBram Moolenaar def Func() 1058cfcd011fSBram Moolenaar var imported = Export . exported 1059599c89c8SBram Moolenaar enddef 1060822ba247SBram Moolenaar defcompile 1061599c89c8SBram Moolenaar END 1062599c89c8SBram Moolenaar writefile(import_star_as_lines_dot_space, 'Ximport.vim') 106344d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1074:', '', 1, 'Func') 1064599c89c8SBram Moolenaar 1065a6294955SBram Moolenaar var import_star_as_duplicated =<< trim END 1066a6294955SBram Moolenaar vim9script 1067a6294955SBram Moolenaar import * as Export from './Xexport.vim' 1068a6294955SBram Moolenaar var some = 'other' 1069a6294955SBram Moolenaar import * as Export from './Xexport.vim' 1070a6294955SBram Moolenaar defcompile 1071a6294955SBram Moolenaar END 1072a6294955SBram Moolenaar writefile(import_star_as_duplicated, 'Ximport.vim') 1073a6294955SBram Moolenaar assert_fails('source Ximport.vim', 'E1073:', '', 4, 'Ximport.vim') 1074a6294955SBram Moolenaar 1075cfcd011fSBram Moolenaar var import_star_as_lines_missing_name =<< trim END 1076599c89c8SBram Moolenaar vim9script 1077599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 1078599c89c8SBram Moolenaar def Func() 1079cfcd011fSBram Moolenaar var imported = Export. 1080599c89c8SBram Moolenaar enddef 1081822ba247SBram Moolenaar defcompile 1082599c89c8SBram Moolenaar END 1083599c89c8SBram Moolenaar writefile(import_star_as_lines_missing_name, 'Ximport.vim') 108444d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1048:', '', 1, 'Func') 1085599c89c8SBram Moolenaar 1086cfcd011fSBram Moolenaar var import_star_as_lbr_lines =<< trim END 10871c991144SBram Moolenaar vim9script 10881c991144SBram Moolenaar import * 10891c991144SBram Moolenaar as Export 10901c991144SBram Moolenaar from 10911c991144SBram Moolenaar './Xexport.vim' 10921c991144SBram Moolenaar def UseExport() 10931c991144SBram Moolenaar g:imported = Export.exported 10941c991144SBram Moolenaar enddef 10951c991144SBram Moolenaar UseExport() 10961c991144SBram Moolenaar END 10971c991144SBram Moolenaar writefile(import_star_as_lbr_lines, 'Ximport.vim') 10981c991144SBram Moolenaar source Ximport.vim 10991c991144SBram Moolenaar assert_equal(9883, g:imported) 11001c991144SBram Moolenaar 1101cfcd011fSBram Moolenaar var import_star_lines =<< trim END 1102f2d5c240SBram Moolenaar vim9script 1103f2d5c240SBram Moolenaar import * from './Xexport.vim' 1104f2d5c240SBram Moolenaar END 1105f2d5c240SBram Moolenaar writefile(import_star_lines, 'Ximport.vim') 110644d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1045:', '', 2, 'Ximport.vim') 1107f2d5c240SBram Moolenaar 1108f5be8cdbSBram Moolenaar # try to import something that exists but is not exported 1109cfcd011fSBram Moolenaar var import_not_exported_lines =<< trim END 1110fa29c8abSBram Moolenaar vim9script 1111fa29c8abSBram Moolenaar import name from './Xexport.vim' 1112fa29c8abSBram Moolenaar END 1113fa29c8abSBram Moolenaar writefile(import_not_exported_lines, 'Ximport.vim') 111444d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1049:', '', 2, 'Ximport.vim') 1115fa29c8abSBram Moolenaar 1116f5be8cdbSBram Moolenaar # try to import something that is already defined 1117cfcd011fSBram Moolenaar var import_already_defined =<< trim END 11185269bd2aSBram Moolenaar vim9script 1119cfcd011fSBram Moolenaar var exported = 'something' 11205269bd2aSBram Moolenaar import exported from './Xexport.vim' 11215269bd2aSBram Moolenaar END 11225269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 1123057e84afSBram Moolenaar assert_fails('source Ximport.vim', 'E1054:', '', 3, 'Ximport.vim') 11245269bd2aSBram Moolenaar 1125f5be8cdbSBram Moolenaar # try to import something that is already defined 11265269bd2aSBram Moolenaar import_already_defined =<< trim END 11275269bd2aSBram Moolenaar vim9script 1128cfcd011fSBram Moolenaar var exported = 'something' 11295269bd2aSBram Moolenaar import * as exported from './Xexport.vim' 11305269bd2aSBram Moolenaar END 11315269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 1132057e84afSBram Moolenaar assert_fails('source Ximport.vim', 'E1054:', '', 3, 'Ximport.vim') 11335269bd2aSBram Moolenaar 1134f5be8cdbSBram Moolenaar # try to import something that is already defined 11355269bd2aSBram Moolenaar import_already_defined =<< trim END 11365269bd2aSBram Moolenaar vim9script 1137cfcd011fSBram Moolenaar var exported = 'something' 11385269bd2aSBram Moolenaar import {exported} from './Xexport.vim' 11395269bd2aSBram Moolenaar END 11405269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 1141057e84afSBram Moolenaar assert_fails('source Ximport.vim', 'E1054:', '', 3, 'Ximport.vim') 11425269bd2aSBram Moolenaar 1143918a4249SBram Moolenaar # try changing an imported const 1144918a4249SBram Moolenaar var import_assign_to_const =<< trim END 1145918a4249SBram Moolenaar vim9script 1146918a4249SBram Moolenaar import CONST from './Xexport.vim' 1147918a4249SBram Moolenaar def Assign() 1148918a4249SBram Moolenaar CONST = 987 1149918a4249SBram Moolenaar enddef 1150918a4249SBram Moolenaar defcompile 1151918a4249SBram Moolenaar END 1152918a4249SBram Moolenaar writefile(import_assign_to_const, 'Ximport.vim') 1153918a4249SBram Moolenaar assert_fails('source Ximport.vim', 'E46:', '', 1, '_Assign') 1154918a4249SBram Moolenaar 11550f2a5cc6SBram Moolenaar # try changing an imported final 11560f2a5cc6SBram Moolenaar var import_assign_to_final =<< trim END 11570f2a5cc6SBram Moolenaar vim9script 11580f2a5cc6SBram Moolenaar import theList from './Xexport.vim' 11590f2a5cc6SBram Moolenaar def Assign() 11600f2a5cc6SBram Moolenaar theList = [2] 11610f2a5cc6SBram Moolenaar enddef 11620f2a5cc6SBram Moolenaar defcompile 11630f2a5cc6SBram Moolenaar END 11640f2a5cc6SBram Moolenaar writefile(import_assign_to_final, 'Ximport.vim') 11650f2a5cc6SBram Moolenaar assert_fails('source Ximport.vim', 'E46:', '', 1, '_Assign') 11660f2a5cc6SBram Moolenaar 1167f5be8cdbSBram Moolenaar # import a very long name, requires making a copy 1168cfcd011fSBram Moolenaar var import_long_name_lines =<< trim END 1169fa29c8abSBram Moolenaar vim9script 1170fa29c8abSBram Moolenaar import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim' 1171fa29c8abSBram Moolenaar END 1172fa29c8abSBram Moolenaar writefile(import_long_name_lines, 'Ximport.vim') 117344d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1048:', '', 2, 'Ximport.vim') 1174fa29c8abSBram Moolenaar 1175cfcd011fSBram Moolenaar var import_no_from_lines =<< trim END 1176fa29c8abSBram Moolenaar vim9script 1177fa29c8abSBram Moolenaar import name './Xexport.vim' 1178fa29c8abSBram Moolenaar END 1179fa29c8abSBram Moolenaar writefile(import_no_from_lines, 'Ximport.vim') 118044d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1070:', '', 2, 'Ximport.vim') 1181fa29c8abSBram Moolenaar 1182cfcd011fSBram Moolenaar var import_invalid_string_lines =<< trim END 1183fa29c8abSBram Moolenaar vim9script 1184fa29c8abSBram Moolenaar import name from Xexport.vim 1185fa29c8abSBram Moolenaar END 1186fa29c8abSBram Moolenaar writefile(import_invalid_string_lines, 'Ximport.vim') 118744d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1071:', '', 2, 'Ximport.vim') 1188fa29c8abSBram Moolenaar 1189cfcd011fSBram Moolenaar var import_wrong_name_lines =<< trim END 1190fa29c8abSBram Moolenaar vim9script 1191fa29c8abSBram Moolenaar import name from './XnoExport.vim' 1192fa29c8abSBram Moolenaar END 1193fa29c8abSBram Moolenaar writefile(import_wrong_name_lines, 'Ximport.vim') 119444d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1053:', '', 2, 'Ximport.vim') 1195fa29c8abSBram Moolenaar 1196cfcd011fSBram Moolenaar var import_missing_comma_lines =<< trim END 1197fa29c8abSBram Moolenaar vim9script 1198fa29c8abSBram Moolenaar import {exported name} from './Xexport.vim' 1199fa29c8abSBram Moolenaar END 12005269bd2aSBram Moolenaar writefile(import_missing_comma_lines, 'Ximport3.vim') 120144d6652dSBram Moolenaar assert_fails('source Ximport3.vim', 'E1046:', '', 2, 'Ximport3.vim') 1202fa29c8abSBram Moolenaar 1203f2d5c240SBram Moolenaar delete('Ximport.vim') 12045269bd2aSBram Moolenaar delete('Ximport3.vim') 12058a7d6542SBram Moolenaar delete('Xexport.vim') 12068a7d6542SBram Moolenaar 1207f5be8cdbSBram Moolenaar # Check that in a Vim9 script 'cpo' is set to the Vim default. 1208750802b5SBram Moolenaar set cpo&vi 1209cfcd011fSBram Moolenaar var cpo_before = &cpo 1210cfcd011fSBram Moolenaar var lines =<< trim END 1211750802b5SBram Moolenaar vim9script 1212750802b5SBram Moolenaar g:cpo_in_vim9script = &cpo 1213750802b5SBram Moolenaar END 1214750802b5SBram Moolenaar writefile(lines, 'Xvim9_script') 1215750802b5SBram Moolenaar source Xvim9_script 1216750802b5SBram Moolenaar assert_equal(cpo_before, &cpo) 1217750802b5SBram Moolenaar set cpo&vim 1218750802b5SBram Moolenaar assert_equal(&cpo, g:cpo_in_vim9script) 1219750802b5SBram Moolenaar delete('Xvim9_script') 1220750802b5SBram Moolenaarenddef 1221750802b5SBram Moolenaar 12220a84284eSBram Moolenaardef Test_import_as() 12230a84284eSBram Moolenaar var export_lines =<< trim END 12240a84284eSBram Moolenaar vim9script 12250a84284eSBram Moolenaar export var one = 1 12260a84284eSBram Moolenaar export var yes = 'yes' 12270a84284eSBram Moolenaar END 12280a84284eSBram Moolenaar writefile(export_lines, 'XexportAs') 12290a84284eSBram Moolenaar 12300a84284eSBram Moolenaar var import_lines =<< trim END 12310a84284eSBram Moolenaar vim9script 12320a84284eSBram Moolenaar import one as thatOne from './XexportAs' 12330a84284eSBram Moolenaar assert_equal(1, thatOne) 12340a84284eSBram Moolenaar import yes as yesYes from './XexportAs' 12350a84284eSBram Moolenaar assert_equal('yes', yesYes) 12360a84284eSBram Moolenaar END 12370a84284eSBram Moolenaar CheckScriptSuccess(import_lines) 12380a84284eSBram Moolenaar 12390a84284eSBram Moolenaar import_lines =<< trim END 12400a84284eSBram Moolenaar vim9script 12410a84284eSBram Moolenaar import {one as thatOne, yes as yesYes} from './XexportAs' 12420a84284eSBram Moolenaar assert_equal(1, thatOne) 12430a84284eSBram Moolenaar assert_equal('yes', yesYes) 12440a84284eSBram Moolenaar assert_fails('echo one', 'E121:') 12450a84284eSBram Moolenaar assert_fails('echo yes', 'E121:') 12460a84284eSBram Moolenaar END 12470a84284eSBram Moolenaar CheckScriptSuccess(import_lines) 12480a84284eSBram Moolenaar 12490a84284eSBram Moolenaar delete('XexportAs') 12500a84284eSBram Moolenaarenddef 12510a84284eSBram Moolenaar 1252803af686SBram Moolenaarfunc g:Trigger() 1253803af686SBram Moolenaar source Ximport.vim 1254803af686SBram Moolenaar return "echo 'yes'\<CR>" 1255803af686SBram Moolenaarendfunc 1256803af686SBram Moolenaar 1257803af686SBram Moolenaardef Test_import_export_expr_map() 1258803af686SBram Moolenaar # check that :import and :export work when buffer is locked 1259cfcd011fSBram Moolenaar var export_lines =<< trim END 1260803af686SBram Moolenaar vim9script 1261803af686SBram Moolenaar export def That(): string 1262803af686SBram Moolenaar return 'yes' 1263803af686SBram Moolenaar enddef 1264803af686SBram Moolenaar END 1265803af686SBram Moolenaar writefile(export_lines, 'Xexport_that.vim') 1266803af686SBram Moolenaar 1267cfcd011fSBram Moolenaar var import_lines =<< trim END 1268803af686SBram Moolenaar vim9script 1269803af686SBram Moolenaar import That from './Xexport_that.vim' 1270803af686SBram Moolenaar assert_equal('yes', That()) 1271803af686SBram Moolenaar END 1272803af686SBram Moolenaar writefile(import_lines, 'Ximport.vim') 1273803af686SBram Moolenaar 1274803af686SBram Moolenaar nnoremap <expr> trigger g:Trigger() 1275803af686SBram Moolenaar feedkeys('trigger', "xt") 1276803af686SBram Moolenaar 1277730b2483SBram Moolenaar delete('Xexport_that.vim') 1278803af686SBram Moolenaar delete('Ximport.vim') 1279803af686SBram Moolenaar nunmap trigger 1280803af686SBram Moolenaarenddef 1281803af686SBram Moolenaar 12828e1986e3SBram Moolenaardef Test_import_in_filetype() 12838e1986e3SBram Moolenaar # check that :import works when the buffer is locked 12848e1986e3SBram Moolenaar mkdir('ftplugin', 'p') 1285cfcd011fSBram Moolenaar var export_lines =<< trim END 12868e1986e3SBram Moolenaar vim9script 1287cfcd011fSBram Moolenaar export var That = 'yes' 12888e1986e3SBram Moolenaar END 1289730b2483SBram Moolenaar writefile(export_lines, 'ftplugin/Xexport_ft.vim') 12908e1986e3SBram Moolenaar 1291cfcd011fSBram Moolenaar var import_lines =<< trim END 12928e1986e3SBram Moolenaar vim9script 1293730b2483SBram Moolenaar import That from './Xexport_ft.vim' 12948e1986e3SBram Moolenaar assert_equal('yes', That) 12958e1986e3SBram Moolenaar g:did_load_mytpe = 1 12968e1986e3SBram Moolenaar END 12978e1986e3SBram Moolenaar writefile(import_lines, 'ftplugin/qf.vim') 12988e1986e3SBram Moolenaar 1299cfcd011fSBram Moolenaar var save_rtp = &rtp 13008e1986e3SBram Moolenaar &rtp = getcwd() .. ',' .. &rtp 13018e1986e3SBram Moolenaar 13028e1986e3SBram Moolenaar filetype plugin on 13038e1986e3SBram Moolenaar copen 13048e1986e3SBram Moolenaar assert_equal(1, g:did_load_mytpe) 13058e1986e3SBram Moolenaar 13068e1986e3SBram Moolenaar quit! 1307730b2483SBram Moolenaar delete('Xexport_ft.vim') 13088e1986e3SBram Moolenaar delete('ftplugin', 'rf') 13098e1986e3SBram Moolenaar &rtp = save_rtp 13108e1986e3SBram Moolenaarenddef 13118e1986e3SBram Moolenaar 1312efa94447SBram Moolenaardef Test_use_import_in_mapping() 1313cfcd011fSBram Moolenaar var lines =<< trim END 1314efa94447SBram Moolenaar vim9script 1315efa94447SBram Moolenaar export def Funcx() 1316efa94447SBram Moolenaar g:result = 42 1317efa94447SBram Moolenaar enddef 1318efa94447SBram Moolenaar END 1319efa94447SBram Moolenaar writefile(lines, 'XsomeExport.vim') 1320efa94447SBram Moolenaar lines =<< trim END 1321efa94447SBram Moolenaar vim9script 1322efa94447SBram Moolenaar import Funcx from './XsomeExport.vim' 1323b3ca9824SBram Moolenaar nnoremap <F3> :call <sid>Funcx()<cr> 1324efa94447SBram Moolenaar END 1325efa94447SBram Moolenaar writefile(lines, 'Xmapscript.vim') 1326efa94447SBram Moolenaar 1327efa94447SBram Moolenaar source Xmapscript.vim 1328b3ca9824SBram Moolenaar feedkeys("\<F3>", "xt") 1329efa94447SBram Moolenaar assert_equal(42, g:result) 1330efa94447SBram Moolenaar 1331efa94447SBram Moolenaar unlet g:result 1332efa94447SBram Moolenaar delete('XsomeExport.vim') 1333efa94447SBram Moolenaar delete('Xmapscript.vim') 1334b3ca9824SBram Moolenaar nunmap <F3> 1335efa94447SBram Moolenaarenddef 1336efa94447SBram Moolenaar 1337d3f8a9eeSBram Moolenaardef Test_vim9script_mix() 1338d3f8a9eeSBram Moolenaar var lines =<< trim END 1339d3f8a9eeSBram Moolenaar if has(g:feature) 1340d3f8a9eeSBram Moolenaar " legacy script 1341d3f8a9eeSBram Moolenaar let g:legacy = 1 1342d3f8a9eeSBram Moolenaar finish 1343d3f8a9eeSBram Moolenaar endif 1344d3f8a9eeSBram Moolenaar vim9script 1345d3f8a9eeSBram Moolenaar g:legacy = 0 1346d3f8a9eeSBram Moolenaar END 1347d3f8a9eeSBram Moolenaar g:feature = 'eval' 1348d3f8a9eeSBram Moolenaar g:legacy = -1 1349d3f8a9eeSBram Moolenaar CheckScriptSuccess(lines) 1350d3f8a9eeSBram Moolenaar assert_equal(1, g:legacy) 1351d3f8a9eeSBram Moolenaar 1352d3f8a9eeSBram Moolenaar g:feature = 'noteval' 1353d3f8a9eeSBram Moolenaar g:legacy = -1 1354d3f8a9eeSBram Moolenaar CheckScriptSuccess(lines) 1355d3f8a9eeSBram Moolenaar assert_equal(0, g:legacy) 1356d3f8a9eeSBram Moolenaarenddef 1357d3f8a9eeSBram Moolenaar 1358750802b5SBram Moolenaardef Test_vim9script_fails() 13598a7d6542SBram Moolenaar CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:') 13608a7d6542SBram Moolenaar CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:') 1361cfcd011fSBram Moolenaar CheckScriptFailure(['export var some = 123'], 'E1042:') 13629721fb4eSBram Moolenaar CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1048:') 1363cfcd011fSBram Moolenaar CheckScriptFailure(['vim9script', 'export var g:some'], 'E1022:') 1364750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:') 1365750802b5SBram Moolenaar 1366cfcd011fSBram Moolenaar CheckScriptFailure(['vim9script', 'var str: string', 'str = 1234'], 'E1012:') 1367c785b9a7SBram Moolenaar CheckScriptFailure(['vim9script', 'const str = "asdf"', 'str = "xxx"'], 'E46:') 1368c785b9a7SBram Moolenaar 1369e2e4075fSBram Moolenaar assert_fails('vim9script', 'E1038:') 1370e2e4075fSBram Moolenaar assert_fails('export something', 'E1043:') 13718a7d6542SBram Moolenaarenddef 13728a7d6542SBram Moolenaar 1373f7d267efSBram Moolenaarfunc Test_import_fails_without_script() 1374101f4810SBram Moolenaar CheckRunVimInTerminal 1375101f4810SBram Moolenaar 13769bb3eb3eSBram Moolenaar " call indirectly to avoid compilation error for missing functions 1377c620c055SBram Moolenaar call Run_Test_import_fails_on_command_line() 13789bb3eb3eSBram Moolenaarendfunc 13799bb3eb3eSBram Moolenaar 1380c620c055SBram Moolenaardef Run_Test_import_fails_on_command_line() 1381cfcd011fSBram Moolenaar var export =<< trim END 1382101f4810SBram Moolenaar vim9script 1383101f4810SBram Moolenaar export def Foo(): number 1384101f4810SBram Moolenaar return 0 1385101f4810SBram Moolenaar enddef 1386101f4810SBram Moolenaar END 1387730b2483SBram Moolenaar writefile(export, 'XexportCmd.vim') 1388101f4810SBram Moolenaar 1389e0de171eSBram Moolenaar var buf = RunVimInTerminal('-c "import Foo from ''./XexportCmd.vim''"', { 13909bb3eb3eSBram Moolenaar rows: 6, wait_for_ruler: 0}) 13912949cfdbSBram Moolenaar WaitForAssert(() => assert_match('^E1094:', term_getline(buf, 5))) 1392101f4810SBram Moolenaar 1393730b2483SBram Moolenaar delete('XexportCmd.vim') 13949bb3eb3eSBram Moolenaar StopVimInTerminal(buf) 13959bb3eb3eSBram Moolenaarenddef 1396101f4810SBram Moolenaar 13972b32700dSBram Moolenaardef Test_vim9script_reload_noclear() 13982b32700dSBram Moolenaar var lines =<< trim END 1399a6294955SBram Moolenaar vim9script 1400a6294955SBram Moolenaar export var exported = 'thexport' 1401a6294955SBram Moolenaar END 1402a6294955SBram Moolenaar writefile(lines, 'XExportReload') 1403a6294955SBram Moolenaar lines =<< trim END 14042b32700dSBram Moolenaar vim9script noclear 14052b32700dSBram Moolenaar g:loadCount += 1 14062b32700dSBram Moolenaar var s:reloaded = 'init' 1407a6294955SBram Moolenaar import exported from './XExportReload' 14082b32700dSBram Moolenaar 14092b32700dSBram Moolenaar def Again(): string 14102b32700dSBram Moolenaar return 'again' 14112b32700dSBram Moolenaar enddef 14122b32700dSBram Moolenaar 14132b32700dSBram Moolenaar if exists('s:loaded') | finish | endif 14142b32700dSBram Moolenaar var s:loaded = true 14152b32700dSBram Moolenaar 14162b32700dSBram Moolenaar var s:notReloaded = 'yes' 14172b32700dSBram Moolenaar s:reloaded = 'first' 14182b32700dSBram Moolenaar def g:Values(): list<string> 1419a6294955SBram Moolenaar return [s:reloaded, s:notReloaded, Again(), Once(), exported] 14202b32700dSBram Moolenaar enddef 14212b32700dSBram Moolenaar 14222b32700dSBram Moolenaar def Once(): string 14232b32700dSBram Moolenaar return 'once' 14242b32700dSBram Moolenaar enddef 14252b32700dSBram Moolenaar END 14262b32700dSBram Moolenaar writefile(lines, 'XReloaded') 14272b32700dSBram Moolenaar g:loadCount = 0 14282b32700dSBram Moolenaar source XReloaded 14292b32700dSBram Moolenaar assert_equal(1, g:loadCount) 1430a6294955SBram Moolenaar assert_equal(['first', 'yes', 'again', 'once', 'thexport'], g:Values()) 14312b32700dSBram Moolenaar source XReloaded 14322b32700dSBram Moolenaar assert_equal(2, g:loadCount) 1433a6294955SBram Moolenaar assert_equal(['init', 'yes', 'again', 'once', 'thexport'], g:Values()) 14342b32700dSBram Moolenaar source XReloaded 14352b32700dSBram Moolenaar assert_equal(3, g:loadCount) 1436a6294955SBram Moolenaar assert_equal(['init', 'yes', 'again', 'once', 'thexport'], g:Values()) 14372b32700dSBram Moolenaar 143848e11c10SBram Moolenaar delete('XReloaded') 1439a6294955SBram Moolenaar delete('XExportReload') 14402b32700dSBram Moolenaar delfunc g:Values 14412b32700dSBram Moolenaar unlet g:loadCount 14422b32700dSBram Moolenaarenddef 14432b32700dSBram Moolenaar 14444c17ad94SBram Moolenaardef Test_vim9script_reload_import() 1445cfcd011fSBram Moolenaar var lines =<< trim END 14468a7d6542SBram Moolenaar vim9script 14478a7d6542SBram Moolenaar const var = '' 1448cfcd011fSBram Moolenaar var valone = 1234 14498a7d6542SBram Moolenaar def MyFunc(arg: string) 14508a7d6542SBram Moolenaar valone = 5678 14518a7d6542SBram Moolenaar enddef 14528a7d6542SBram Moolenaar END 1453cfcd011fSBram Moolenaar var morelines =<< trim END 1454cfcd011fSBram Moolenaar var valtwo = 222 14558a7d6542SBram Moolenaar export def GetValtwo(): number 14568a7d6542SBram Moolenaar return valtwo 14578a7d6542SBram Moolenaar enddef 14588a7d6542SBram Moolenaar END 145903afdcf1SBram Moolenaar writefile(lines + morelines, 'Xreload.vim') 14608a7d6542SBram Moolenaar source Xreload.vim 14618a7d6542SBram Moolenaar source Xreload.vim 14628a7d6542SBram Moolenaar source Xreload.vim 14638a7d6542SBram Moolenaar 1464cfcd011fSBram Moolenaar var testlines =<< trim END 14658a7d6542SBram Moolenaar vim9script 14668a7d6542SBram Moolenaar def TheFunc() 14678a7d6542SBram Moolenaar import GetValtwo from './Xreload.vim' 14688a7d6542SBram Moolenaar assert_equal(222, GetValtwo()) 14698a7d6542SBram Moolenaar enddef 14708a7d6542SBram Moolenaar TheFunc() 14718a7d6542SBram Moolenaar END 14728a7d6542SBram Moolenaar writefile(testlines, 'Ximport.vim') 14738a7d6542SBram Moolenaar source Ximport.vim 14748a7d6542SBram Moolenaar 1475f5be8cdbSBram Moolenaar # Test that when not using "morelines" GetValtwo() and valtwo are still 1476f5be8cdbSBram Moolenaar # defined, because import doesn't reload a script. 14778a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 14788a7d6542SBram Moolenaar source Ximport.vim 14798a7d6542SBram Moolenaar 1480f5be8cdbSBram Moolenaar # cannot declare a var twice 14818a7d6542SBram Moolenaar lines =<< trim END 14828a7d6542SBram Moolenaar vim9script 1483cfcd011fSBram Moolenaar var valone = 1234 1484cfcd011fSBram Moolenaar var valone = 5678 14858a7d6542SBram Moolenaar END 14868a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 148744d6652dSBram Moolenaar assert_fails('source Xreload.vim', 'E1041:', '', 3, 'Xreload.vim') 14888a7d6542SBram Moolenaar 14898a7d6542SBram Moolenaar delete('Xreload.vim') 14908a7d6542SBram Moolenaar delete('Ximport.vim') 14918a7d6542SBram Moolenaarenddef 14928a7d6542SBram Moolenaar 149307a65d26SBram Moolenaar" if a script is reloaded with a script-local variable that changed its type, a 149407a65d26SBram Moolenaar" compiled function using that variable must fail. 149507a65d26SBram Moolenaardef Test_script_reload_change_type() 149607a65d26SBram Moolenaar var lines =<< trim END 149707a65d26SBram Moolenaar vim9script noclear 149807a65d26SBram Moolenaar var str = 'string' 149907a65d26SBram Moolenaar def g:GetStr(): string 150007a65d26SBram Moolenaar return str .. 'xxx' 150107a65d26SBram Moolenaar enddef 150207a65d26SBram Moolenaar END 150307a65d26SBram Moolenaar writefile(lines, 'Xreload.vim') 150407a65d26SBram Moolenaar source Xreload.vim 150507a65d26SBram Moolenaar echo g:GetStr() 150607a65d26SBram Moolenaar 150707a65d26SBram Moolenaar lines =<< trim END 150807a65d26SBram Moolenaar vim9script noclear 150907a65d26SBram Moolenaar var str = 1234 151007a65d26SBram Moolenaar END 151107a65d26SBram Moolenaar writefile(lines, 'Xreload.vim') 151207a65d26SBram Moolenaar source Xreload.vim 151307a65d26SBram Moolenaar assert_fails('echo g:GetStr()', 'E1150:') 151407a65d26SBram Moolenaar 151507a65d26SBram Moolenaar delfunc g:GetStr 151607a65d26SBram Moolenaar delete('Xreload.vim') 151707a65d26SBram Moolenaarenddef 151807a65d26SBram Moolenaar 15196c3843caSBram Moolenaardef Test_script_var_shadows_function() 15206c3843caSBram Moolenaar var lines =<< trim END 15216c3843caSBram Moolenaar vim9script 15226c3843caSBram Moolenaar def Func(): number 15236c3843caSBram Moolenaar return 123 15246c3843caSBram Moolenaar enddef 15256c3843caSBram Moolenaar var Func = 1 15266c3843caSBram Moolenaar END 15276c3843caSBram Moolenaar CheckScriptFailure(lines, 'E1041:', 5) 15286c3843caSBram Moolenaarenddef 15296c3843caSBram Moolenaar 153095006e3dSBram Moolenaardef s:RetSome(): string 153195006e3dSBram Moolenaar return 'some' 153295006e3dSBram Moolenaarenddef 153395006e3dSBram Moolenaar 1534fe465a01SBram Moolenaar" Not exported function that is referenced needs to be accessed by the 1535fe465a01SBram Moolenaar" script-local name. 1536fe465a01SBram Moolenaardef Test_vim9script_funcref() 1537cfcd011fSBram Moolenaar var sortlines =<< trim END 1538fe465a01SBram Moolenaar vim9script 1539fe465a01SBram Moolenaar def Compare(i1: number, i2: number): number 1540bed36b93SBram Moolenaar return i2 - i1 1541fe465a01SBram Moolenaar enddef 1542fe465a01SBram Moolenaar 1543fe465a01SBram Moolenaar export def FastSort(): list<number> 1544fe465a01SBram Moolenaar return range(5)->sort(Compare) 1545fe465a01SBram Moolenaar enddef 1546fe465a01SBram Moolenaar END 1547fe465a01SBram Moolenaar writefile(sortlines, 'Xsort.vim') 1548fe465a01SBram Moolenaar 1549cfcd011fSBram Moolenaar var lines =<< trim END 1550fe465a01SBram Moolenaar vim9script 1551fe465a01SBram Moolenaar import FastSort from './Xsort.vim' 1552fe465a01SBram Moolenaar def Test() 1553fe465a01SBram Moolenaar g:result = FastSort() 1554fe465a01SBram Moolenaar enddef 1555fe465a01SBram Moolenaar Test() 1556fe465a01SBram Moolenaar END 1557fe465a01SBram Moolenaar writefile(lines, 'Xscript.vim') 1558fe465a01SBram Moolenaar 1559fe465a01SBram Moolenaar source Xscript.vim 1560fe465a01SBram Moolenaar assert_equal([4, 3, 2, 1, 0], g:result) 1561fe465a01SBram Moolenaar 1562fe465a01SBram Moolenaar unlet g:result 1563fe465a01SBram Moolenaar delete('Xsort.vim') 1564fe465a01SBram Moolenaar delete('Xscript.vim') 156595006e3dSBram Moolenaar 1566cfcd011fSBram Moolenaar var Funcref = function('s:RetSome') 156795006e3dSBram Moolenaar assert_equal('some', Funcref()) 1568fe465a01SBram Moolenaarenddef 1569fe465a01SBram Moolenaar 1570601e76acSBram Moolenaar" Check that when searching for "FilterFunc" it finds the import in the 1571601e76acSBram Moolenaar" script where FastFilter() is called from, both as a string and as a direct 1572601e76acSBram Moolenaar" function reference. 1573c620c055SBram Moolenaardef Test_vim9script_funcref_other_script() 1574cfcd011fSBram Moolenaar var filterLines =<< trim END 1575c620c055SBram Moolenaar vim9script 1576c620c055SBram Moolenaar export def FilterFunc(idx: number, val: number): bool 1577c620c055SBram Moolenaar return idx % 2 == 1 1578c620c055SBram Moolenaar enddef 1579c620c055SBram Moolenaar export def FastFilter(): list<number> 1580c620c055SBram Moolenaar return range(10)->filter('FilterFunc') 1581c620c055SBram Moolenaar enddef 1582601e76acSBram Moolenaar export def FastFilterDirect(): list<number> 1583601e76acSBram Moolenaar return range(10)->filter(FilterFunc) 1584601e76acSBram Moolenaar enddef 1585c620c055SBram Moolenaar END 1586c620c055SBram Moolenaar writefile(filterLines, 'Xfilter.vim') 1587c620c055SBram Moolenaar 1588cfcd011fSBram Moolenaar var lines =<< trim END 1589c620c055SBram Moolenaar vim9script 1590601e76acSBram Moolenaar import {FilterFunc, FastFilter, FastFilterDirect} from './Xfilter.vim' 1591c620c055SBram Moolenaar def Test() 1592cfcd011fSBram Moolenaar var x: list<number> = FastFilter() 1593c620c055SBram Moolenaar enddef 1594c620c055SBram Moolenaar Test() 1595601e76acSBram Moolenaar def TestDirect() 1596cfcd011fSBram Moolenaar var x: list<number> = FastFilterDirect() 1597601e76acSBram Moolenaar enddef 1598601e76acSBram Moolenaar TestDirect() 1599c620c055SBram Moolenaar END 1600601e76acSBram Moolenaar CheckScriptSuccess(lines) 1601c620c055SBram Moolenaar delete('Xfilter.vim') 1602c620c055SBram Moolenaarenddef 1603c620c055SBram Moolenaar 16044c17ad94SBram Moolenaardef Test_vim9script_reload_delfunc() 1605cfcd011fSBram Moolenaar var first_lines =<< trim END 16064c17ad94SBram Moolenaar vim9script 16074c17ad94SBram Moolenaar def FuncYes(): string 16084c17ad94SBram Moolenaar return 'yes' 16094c17ad94SBram Moolenaar enddef 16104c17ad94SBram Moolenaar END 1611cfcd011fSBram Moolenaar var withno_lines =<< trim END 16124c17ad94SBram Moolenaar def FuncNo(): string 16134c17ad94SBram Moolenaar return 'no' 16144c17ad94SBram Moolenaar enddef 16154c17ad94SBram Moolenaar def g:DoCheck(no_exists: bool) 16164c17ad94SBram Moolenaar assert_equal('yes', FuncYes()) 16174c17ad94SBram Moolenaar assert_equal('no', FuncNo()) 161803afdcf1SBram Moolenaar enddef 161903afdcf1SBram Moolenaar END 1620cfcd011fSBram Moolenaar var nono_lines =<< trim END 162103afdcf1SBram Moolenaar def g:DoCheck(no_exists: bool) 162203afdcf1SBram Moolenaar assert_equal('yes', FuncYes()) 162344d6652dSBram Moolenaar assert_fails('FuncNo()', 'E117:', '', 2, 'DoCheck') 16244c17ad94SBram Moolenaar enddef 16254c17ad94SBram Moolenaar END 16264c17ad94SBram Moolenaar 16274c17ad94SBram Moolenaar # FuncNo() is defined 162803afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 16294c17ad94SBram Moolenaar source Xreloaded.vim 16304c17ad94SBram Moolenaar g:DoCheck(true) 16314c17ad94SBram Moolenaar 16324c17ad94SBram Moolenaar # FuncNo() is not redefined 163303afdcf1SBram Moolenaar writefile(first_lines + nono_lines, 'Xreloaded.vim') 16344c17ad94SBram Moolenaar source Xreloaded.vim 16355082471fSBram Moolenaar g:DoCheck(false) 16364c17ad94SBram Moolenaar 16374c17ad94SBram Moolenaar # FuncNo() is back 163803afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 16394c17ad94SBram Moolenaar source Xreloaded.vim 16405082471fSBram Moolenaar g:DoCheck(false) 16414c17ad94SBram Moolenaar 16424c17ad94SBram Moolenaar delete('Xreloaded.vim') 16434c17ad94SBram Moolenaarenddef 16444c17ad94SBram Moolenaar 164589483d40SBram Moolenaardef Test_vim9script_reload_delvar() 164689483d40SBram Moolenaar # write the script with a script-local variable 1647cfcd011fSBram Moolenaar var lines =<< trim END 164889483d40SBram Moolenaar vim9script 1649cfcd011fSBram Moolenaar var name = 'string' 165089483d40SBram Moolenaar END 165189483d40SBram Moolenaar writefile(lines, 'XreloadVar.vim') 165289483d40SBram Moolenaar source XreloadVar.vim 165389483d40SBram Moolenaar 165489483d40SBram Moolenaar # now write the script using the same variable locally - works 165589483d40SBram Moolenaar lines =<< trim END 165689483d40SBram Moolenaar vim9script 165789483d40SBram Moolenaar def Func() 1658cfcd011fSBram Moolenaar var name = 'string' 165989483d40SBram Moolenaar enddef 166089483d40SBram Moolenaar END 166189483d40SBram Moolenaar writefile(lines, 'XreloadVar.vim') 166289483d40SBram Moolenaar source XreloadVar.vim 166389483d40SBram Moolenaar 166489483d40SBram Moolenaar delete('XreloadVar.vim') 166589483d40SBram Moolenaarenddef 166689483d40SBram Moolenaar 16678a7d6542SBram Moolenaardef Test_import_absolute() 1668cfcd011fSBram Moolenaar var import_lines = [ 1669e6085c53SBram Moolenaar 'vim9script', 1670e6085c53SBram Moolenaar 'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"', 1671e6085c53SBram Moolenaar 'def UseExported()', 1672e6085c53SBram Moolenaar ' g:imported_abs = exported', 1673e6085c53SBram Moolenaar ' exported = 8888', 1674e6085c53SBram Moolenaar ' g:imported_after = exported', 1675e6085c53SBram Moolenaar 'enddef', 1676e6085c53SBram Moolenaar 'UseExported()', 1677e6085c53SBram Moolenaar 'g:import_disassembled = execute("disass UseExported")', 1678e6085c53SBram Moolenaar ] 16798a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_abs.vim') 16808a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport_abs.vim') 16818a7d6542SBram Moolenaar 16828a7d6542SBram Moolenaar source Ximport_abs.vim 16838a7d6542SBram Moolenaar 16848a7d6542SBram Moolenaar assert_equal(9876, g:imported_abs) 16854e12a5dfSBram Moolenaar assert_equal(8888, g:imported_after) 1686fbbcd003SBram Moolenaar assert_match('<SNR>\d\+_UseExported\_s*' .. 1687fbbcd003SBram Moolenaar 'g:imported_abs = exported\_s*' .. 1688fbbcd003SBram Moolenaar '0 LOADSCRIPT exported-2 from .*Xexport_abs.vim\_s*' .. 1689fbbcd003SBram Moolenaar '1 STOREG g:imported_abs\_s*' .. 1690fbbcd003SBram Moolenaar 'exported = 8888\_s*' .. 1691fbbcd003SBram Moolenaar '2 PUSHNR 8888\_s*' .. 1692fbbcd003SBram Moolenaar '3 STORESCRIPT exported-2 in .*Xexport_abs.vim\_s*' .. 1693fbbcd003SBram Moolenaar 'g:imported_after = exported\_s*' .. 1694fbbcd003SBram Moolenaar '4 LOADSCRIPT exported-2 from .*Xexport_abs.vim\_s*' .. 1695fbbcd003SBram Moolenaar '5 STOREG g:imported_after', 1696e6085c53SBram Moolenaar g:import_disassembled) 1697b3ca9824SBram Moolenaar 1698b3ca9824SBram Moolenaar Undo_export_script_lines() 16998a7d6542SBram Moolenaar unlet g:imported_abs 17004e12a5dfSBram Moolenaar unlet g:import_disassembled 17018a7d6542SBram Moolenaar 17028a7d6542SBram Moolenaar delete('Ximport_abs.vim') 17038a7d6542SBram Moolenaar delete('Xexport_abs.vim') 17048a7d6542SBram Moolenaarenddef 17058a7d6542SBram Moolenaar 17068a7d6542SBram Moolenaardef Test_import_rtp() 1707cfcd011fSBram Moolenaar var import_lines = [ 1708e6085c53SBram Moolenaar 'vim9script', 1709e6085c53SBram Moolenaar 'import exported from "Xexport_rtp.vim"', 1710e6085c53SBram Moolenaar 'g:imported_rtp = exported', 1711e6085c53SBram Moolenaar ] 17128a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_rtp.vim') 17138a7d6542SBram Moolenaar mkdir('import') 17148a7d6542SBram Moolenaar writefile(s:export_script_lines, 'import/Xexport_rtp.vim') 17158a7d6542SBram Moolenaar 1716cfcd011fSBram Moolenaar var save_rtp = &rtp 17178a7d6542SBram Moolenaar &rtp = getcwd() 17188a7d6542SBram Moolenaar source Ximport_rtp.vim 17198a7d6542SBram Moolenaar &rtp = save_rtp 17208a7d6542SBram Moolenaar 17218a7d6542SBram Moolenaar assert_equal(9876, g:imported_rtp) 17228a7d6542SBram Moolenaar 1723b3ca9824SBram Moolenaar Undo_export_script_lines() 1724b3ca9824SBram Moolenaar unlet g:imported_rtp 17258a7d6542SBram Moolenaar delete('Ximport_rtp.vim') 172689483d40SBram Moolenaar delete('import', 'rf') 17278a7d6542SBram Moolenaarenddef 17288a7d6542SBram Moolenaar 172925e0f586SBram Moolenaardef Test_import_compile_error() 1730cfcd011fSBram Moolenaar var export_lines = [ 173125e0f586SBram Moolenaar 'vim9script', 173225e0f586SBram Moolenaar 'export def ExpFunc(): string', 173325e0f586SBram Moolenaar ' return notDefined', 173425e0f586SBram Moolenaar 'enddef', 173525e0f586SBram Moolenaar ] 173625e0f586SBram Moolenaar writefile(export_lines, 'Xexported.vim') 173725e0f586SBram Moolenaar 1738cfcd011fSBram Moolenaar var import_lines = [ 173925e0f586SBram Moolenaar 'vim9script', 174025e0f586SBram Moolenaar 'import ExpFunc from "./Xexported.vim"', 174125e0f586SBram Moolenaar 'def ImpFunc()', 174225e0f586SBram Moolenaar ' echo ExpFunc()', 174325e0f586SBram Moolenaar 'enddef', 174425e0f586SBram Moolenaar 'defcompile', 174525e0f586SBram Moolenaar ] 174625e0f586SBram Moolenaar writefile(import_lines, 'Ximport.vim') 174725e0f586SBram Moolenaar 174825e0f586SBram Moolenaar try 174925e0f586SBram Moolenaar source Ximport.vim 175025e0f586SBram Moolenaar catch /E1001/ 1751f5be8cdbSBram Moolenaar # Error should be fore the Xexported.vim file. 17527707228aSBram Moolenaar assert_match('E1001: Variable not found: notDefined', v:exception) 175325e0f586SBram Moolenaar assert_match('function <SNR>\d\+_ImpFunc\[1\]..<SNR>\d\+_ExpFunc, line 1', v:throwpoint) 175425e0f586SBram Moolenaar endtry 175525e0f586SBram Moolenaar 175625e0f586SBram Moolenaar delete('Xexported.vim') 175725e0f586SBram Moolenaar delete('Ximport.vim') 175825e0f586SBram Moolenaarenddef 175925e0f586SBram Moolenaar 1760c4ce36d4SBram Moolenaardef Test_func_redefine_error() 1761cfcd011fSBram Moolenaar var lines = [ 1762c4ce36d4SBram Moolenaar 'vim9script', 1763c4ce36d4SBram Moolenaar 'def Func()', 1764c4ce36d4SBram Moolenaar ' eval [][0]', 1765c4ce36d4SBram Moolenaar 'enddef', 1766c4ce36d4SBram Moolenaar 'Func()', 1767c4ce36d4SBram Moolenaar ] 1768c4ce36d4SBram Moolenaar writefile(lines, 'Xtestscript.vim') 1769c4ce36d4SBram Moolenaar 1770c4ce36d4SBram Moolenaar for count in range(3) 1771c4ce36d4SBram Moolenaar try 1772c4ce36d4SBram Moolenaar source Xtestscript.vim 1773c4ce36d4SBram Moolenaar catch /E684/ 1774c4ce36d4SBram Moolenaar # function name should contain <SNR> every time 1775c4ce36d4SBram Moolenaar assert_match('E684: list index out of range', v:exception) 1776c4ce36d4SBram Moolenaar assert_match('function <SNR>\d\+_Func, line 1', v:throwpoint) 1777c4ce36d4SBram Moolenaar endtry 1778c4ce36d4SBram Moolenaar endfor 1779c4ce36d4SBram Moolenaar 1780c4ce36d4SBram Moolenaar delete('Xtestscript.vim') 1781c4ce36d4SBram Moolenaarenddef 1782c4ce36d4SBram Moolenaar 1783eef2102eSBram Moolenaardef Test_func_overrules_import_fails() 1784cfcd011fSBram Moolenaar var export_lines =<< trim END 1785eef2102eSBram Moolenaar vim9script 1786eef2102eSBram Moolenaar export def Func() 1787eef2102eSBram Moolenaar echo 'imported' 1788eef2102eSBram Moolenaar enddef 1789eef2102eSBram Moolenaar END 1790eef2102eSBram Moolenaar writefile(export_lines, 'XexportedFunc.vim') 1791eef2102eSBram Moolenaar 1792cfcd011fSBram Moolenaar var lines =<< trim END 1793eef2102eSBram Moolenaar vim9script 1794eef2102eSBram Moolenaar import Func from './XexportedFunc.vim' 1795eef2102eSBram Moolenaar def Func() 1796eef2102eSBram Moolenaar echo 'local to function' 1797eef2102eSBram Moolenaar enddef 1798eef2102eSBram Moolenaar END 1799eef2102eSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1800eef2102eSBram Moolenaar 1801eef2102eSBram Moolenaar lines =<< trim END 1802eef2102eSBram Moolenaar vim9script 1803eef2102eSBram Moolenaar import Func from './XexportedFunc.vim' 1804eef2102eSBram Moolenaar def Outer() 1805eef2102eSBram Moolenaar def Func() 1806eef2102eSBram Moolenaar echo 'local to function' 1807eef2102eSBram Moolenaar enddef 1808eef2102eSBram Moolenaar enddef 1809eef2102eSBram Moolenaar defcompile 1810eef2102eSBram Moolenaar END 1811eef2102eSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1812eef2102eSBram Moolenaar 1813eef2102eSBram Moolenaar delete('XexportedFunc.vim') 1814eef2102eSBram Moolenaarenddef 1815eef2102eSBram Moolenaar 1816b9a2cac3SBram Moolenaardef Test_func_redefine_fails() 1817cfcd011fSBram Moolenaar var lines =<< trim END 1818b9a2cac3SBram Moolenaar vim9script 1819b9a2cac3SBram Moolenaar def Func() 1820b9a2cac3SBram Moolenaar echo 'one' 1821b9a2cac3SBram Moolenaar enddef 1822b9a2cac3SBram Moolenaar def Func() 1823b9a2cac3SBram Moolenaar echo 'two' 1824b9a2cac3SBram Moolenaar enddef 1825b9a2cac3SBram Moolenaar END 1826b9a2cac3SBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1827fa211f3cSBram Moolenaar 1828fa211f3cSBram Moolenaar lines =<< trim END 1829fa211f3cSBram Moolenaar vim9script 1830fa211f3cSBram Moolenaar def Foo(): string 1831fa211f3cSBram Moolenaar return 'foo' 1832fa211f3cSBram Moolenaar enddef 1833fa211f3cSBram Moolenaar def Func() 1834cfcd011fSBram Moolenaar var Foo = {-> 'lambda'} 1835fa211f3cSBram Moolenaar enddef 1836fa211f3cSBram Moolenaar defcompile 1837fa211f3cSBram Moolenaar END 1838fa211f3cSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1839b9a2cac3SBram Moolenaarenddef 1840b9a2cac3SBram Moolenaar 18418a7d6542SBram Moolenaardef Test_fixed_size_list() 1842f5be8cdbSBram Moolenaar # will be allocated as one piece of memory, check that changes work 1843cfcd011fSBram Moolenaar var l = [1, 2, 3, 4] 18448a7d6542SBram Moolenaar l->remove(0) 18458a7d6542SBram Moolenaar l->add(5) 18468a7d6542SBram Moolenaar l->insert(99, 1) 18470f18b6d1SBram Moolenaar assert_equal([2, 99, 3, 4, 5], l) 18488a7d6542SBram Moolenaarenddef 18498a7d6542SBram Moolenaar 1850ae616494SBram Moolenaardef Test_no_insert_xit() 1851d2c61705SBram Moolenaar CheckDefExecFailure(['a = 1'], 'E1100:') 1852d2c61705SBram Moolenaar CheckDefExecFailure(['c = 1'], 'E1100:') 1853d2c61705SBram Moolenaar CheckDefExecFailure(['i = 1'], 'E1100:') 1854d2c61705SBram Moolenaar CheckDefExecFailure(['t = 1'], 'E1100:') 1855d2c61705SBram Moolenaar CheckDefExecFailure(['x = 1'], 'E1100:') 1856ae616494SBram Moolenaar 1857ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'a = 1'], 'E488:') 1858ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'a'], 'E1100:') 1859ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'c = 1'], 'E488:') 1860ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'c'], 'E1100:') 1861f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'i = 1'], 'E488:') 1862f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'i'], 'E1100:') 1863f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 't'], 'E1100:') 1864f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 't = 1'], 'E1100:') 1865f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'x = 1'], 'E1100:') 1866ae616494SBram Moolenaarenddef 1867ae616494SBram Moolenaar 1868158906cfSBram Moolenaardef IfElse(what: number): string 1869cfcd011fSBram Moolenaar var res = '' 1870158906cfSBram Moolenaar if what == 1 1871158906cfSBram Moolenaar res = "one" 1872158906cfSBram Moolenaar elseif what == 2 1873158906cfSBram Moolenaar res = "two" 1874a259d8d3SBram Moolenaar else 1875158906cfSBram Moolenaar res = "three" 1876a259d8d3SBram Moolenaar endif 1877158906cfSBram Moolenaar return res 1878a259d8d3SBram Moolenaarenddef 1879a259d8d3SBram Moolenaar 1880158906cfSBram Moolenaardef Test_if_elseif_else() 1881158906cfSBram Moolenaar assert_equal('one', IfElse(1)) 1882158906cfSBram Moolenaar assert_equal('two', IfElse(2)) 1883158906cfSBram Moolenaar assert_equal('three', IfElse(3)) 18840f18b6d1SBram Moolenaarenddef 18850f18b6d1SBram Moolenaar 1886e8c4abbbSBram Moolenaardef Test_if_elseif_else_fails() 1887d2c61705SBram Moolenaar CheckDefFailure(['elseif true'], 'E582:') 1888d2c61705SBram Moolenaar CheckDefFailure(['else'], 'E581:') 1889d2c61705SBram Moolenaar CheckDefFailure(['endif'], 'E580:') 1890ced68a00SBram Moolenaar CheckDefFailure(['if g:abool', 'elseif xxx'], 'E1001:') 1891d2c61705SBram Moolenaar CheckDefFailure(['if true', 'echo 1'], 'E171:') 18926628b7ebSBram Moolenaar 18936628b7ebSBram Moolenaar var lines =<< trim END 18946628b7ebSBram Moolenaar var s = '' 18956628b7ebSBram Moolenaar if s = '' 18966628b7ebSBram Moolenaar endif 18976628b7ebSBram Moolenaar END 18986628b7ebSBram Moolenaar CheckDefFailure(lines, 'E488:') 18996628b7ebSBram Moolenaar 19006628b7ebSBram Moolenaar lines =<< trim END 19016628b7ebSBram Moolenaar var s = '' 19026628b7ebSBram Moolenaar if s == '' 19036628b7ebSBram Moolenaar elseif s = '' 19046628b7ebSBram Moolenaar endif 19056628b7ebSBram Moolenaar END 19066628b7ebSBram Moolenaar CheckDefFailure(lines, 'E488:') 1907e8c4abbbSBram Moolenaarenddef 1908e8c4abbbSBram Moolenaar 19096d69bf60SBram Moolenaarlet g:bool_true = v:true 19106d69bf60SBram Moolenaarlet g:bool_false = v:false 19116d69bf60SBram Moolenaar 19126d69bf60SBram Moolenaardef Test_if_const_expr() 1913cfcd011fSBram Moolenaar var res = false 19146d69bf60SBram Moolenaar if true ? true : false 19156d69bf60SBram Moolenaar res = true 19166d69bf60SBram Moolenaar endif 19176d69bf60SBram Moolenaar assert_equal(true, res) 19186d69bf60SBram Moolenaar 1919585fea7bSBram Moolenaar g:glob = 2 1920585fea7bSBram Moolenaar if false 19216797966dSBram Moolenaar execute('g:glob = 3') 1922585fea7bSBram Moolenaar endif 1923585fea7bSBram Moolenaar assert_equal(2, g:glob) 1924585fea7bSBram Moolenaar if true 19256797966dSBram Moolenaar execute('g:glob = 3') 1926585fea7bSBram Moolenaar endif 1927585fea7bSBram Moolenaar assert_equal(3, g:glob) 1928585fea7bSBram Moolenaar 19296d69bf60SBram Moolenaar res = false 19306d69bf60SBram Moolenaar if g:bool_true ? true : false 19316d69bf60SBram Moolenaar res = true 19326d69bf60SBram Moolenaar endif 19336d69bf60SBram Moolenaar assert_equal(true, res) 19346d69bf60SBram Moolenaar 19356d69bf60SBram Moolenaar res = false 19366d69bf60SBram Moolenaar if true ? g:bool_true : false 19376d69bf60SBram Moolenaar res = true 19386d69bf60SBram Moolenaar endif 19396d69bf60SBram Moolenaar assert_equal(true, res) 19406d69bf60SBram Moolenaar 19416d69bf60SBram Moolenaar res = false 19426d69bf60SBram Moolenaar if true ? true : g:bool_false 19436d69bf60SBram Moolenaar res = true 19446d69bf60SBram Moolenaar endif 19456d69bf60SBram Moolenaar assert_equal(true, res) 19466d69bf60SBram Moolenaar 19476d69bf60SBram Moolenaar res = false 19486d69bf60SBram Moolenaar if true ? false : true 19496d69bf60SBram Moolenaar res = true 19506d69bf60SBram Moolenaar endif 19516d69bf60SBram Moolenaar assert_equal(false, res) 19526d69bf60SBram Moolenaar 19536d69bf60SBram Moolenaar res = false 19546d69bf60SBram Moolenaar if false ? false : true 19556d69bf60SBram Moolenaar res = true 19566d69bf60SBram Moolenaar endif 19576d69bf60SBram Moolenaar assert_equal(true, res) 19586d69bf60SBram Moolenaar 19596d69bf60SBram Moolenaar res = false 19606d69bf60SBram Moolenaar if false ? true : false 19616d69bf60SBram Moolenaar res = true 19626d69bf60SBram Moolenaar endif 19636d69bf60SBram Moolenaar assert_equal(false, res) 19646d69bf60SBram Moolenaar 19656d69bf60SBram Moolenaar res = false 1966e8c4abbbSBram Moolenaar if has('xyz') ? true : false 1967e8c4abbbSBram Moolenaar res = true 1968e8c4abbbSBram Moolenaar endif 1969e8c4abbbSBram Moolenaar assert_equal(false, res) 1970e8c4abbbSBram Moolenaar 1971e8c4abbbSBram Moolenaar res = false 19726d69bf60SBram Moolenaar if true && true 19736d69bf60SBram Moolenaar res = true 19746d69bf60SBram Moolenaar endif 19756d69bf60SBram Moolenaar assert_equal(true, res) 19766d69bf60SBram Moolenaar 19776d69bf60SBram Moolenaar res = false 19786d69bf60SBram Moolenaar if true && false 19796d69bf60SBram Moolenaar res = true 19806d69bf60SBram Moolenaar endif 19816d69bf60SBram Moolenaar assert_equal(false, res) 19826d69bf60SBram Moolenaar 19836d69bf60SBram Moolenaar res = false 19846d69bf60SBram Moolenaar if g:bool_true && false 19856d69bf60SBram Moolenaar res = true 19866d69bf60SBram Moolenaar endif 19876d69bf60SBram Moolenaar assert_equal(false, res) 19886d69bf60SBram Moolenaar 19896d69bf60SBram Moolenaar res = false 19906d69bf60SBram Moolenaar if true && g:bool_false 19916d69bf60SBram Moolenaar res = true 19926d69bf60SBram Moolenaar endif 19936d69bf60SBram Moolenaar assert_equal(false, res) 19946d69bf60SBram Moolenaar 19956d69bf60SBram Moolenaar res = false 19966d69bf60SBram Moolenaar if false && false 19976d69bf60SBram Moolenaar res = true 19986d69bf60SBram Moolenaar endif 19996d69bf60SBram Moolenaar assert_equal(false, res) 20006d69bf60SBram Moolenaar 20016d69bf60SBram Moolenaar res = false 20026d69bf60SBram Moolenaar if true || false 20036d69bf60SBram Moolenaar res = true 20046d69bf60SBram Moolenaar endif 20056d69bf60SBram Moolenaar assert_equal(true, res) 20066d69bf60SBram Moolenaar 20076d69bf60SBram Moolenaar res = false 20086d69bf60SBram Moolenaar if g:bool_true || false 20096d69bf60SBram Moolenaar res = true 20106d69bf60SBram Moolenaar endif 20116d69bf60SBram Moolenaar assert_equal(true, res) 20126d69bf60SBram Moolenaar 20136d69bf60SBram Moolenaar res = false 20146d69bf60SBram Moolenaar if true || g:bool_false 20156d69bf60SBram Moolenaar res = true 20166d69bf60SBram Moolenaar endif 20176d69bf60SBram Moolenaar assert_equal(true, res) 20186d69bf60SBram Moolenaar 20196d69bf60SBram Moolenaar res = false 20206d69bf60SBram Moolenaar if false || false 20216d69bf60SBram Moolenaar res = true 20226d69bf60SBram Moolenaar endif 20236d69bf60SBram Moolenaar assert_equal(false, res) 20243988f64fSBram Moolenaar 20253988f64fSBram Moolenaar # with constant "false" expression may be invalid so long as the syntax is OK 20263988f64fSBram Moolenaar if false | eval 0 | endif 20273988f64fSBram Moolenaar if false | eval burp + 234 | endif 20283988f64fSBram Moolenaar if false | echo burp 234 'asd' | endif 20293988f64fSBram Moolenaar if false 20303988f64fSBram Moolenaar burp 20313988f64fSBram Moolenaar endif 203280c34ca3SBram Moolenaarenddef 20336d69bf60SBram Moolenaar 203480c34ca3SBram Moolenaardef Test_if_const_expr_fails() 2035d2c61705SBram Moolenaar CheckDefFailure(['if "aaa" == "bbb'], 'E114:') 2036d2c61705SBram Moolenaar CheckDefFailure(["if 'aaa' == 'bbb"], 'E115:') 2037d2c61705SBram Moolenaar CheckDefFailure(["if has('aaa'"], 'E110:') 2038d2c61705SBram Moolenaar CheckDefFailure(["if has('aaa') ? true false"], 'E109:') 20396d69bf60SBram Moolenaarenddef 20406d69bf60SBram Moolenaar 204172abcf42SBram Moolenaardef RunNested(i: number): number 2042cfcd011fSBram Moolenaar var x: number = 0 204372abcf42SBram Moolenaar if i % 2 204472abcf42SBram Moolenaar if 1 2045f5be8cdbSBram Moolenaar # comment 204672abcf42SBram Moolenaar else 2047f5be8cdbSBram Moolenaar # comment 204872abcf42SBram Moolenaar endif 204972abcf42SBram Moolenaar x += 1 205072abcf42SBram Moolenaar else 205172abcf42SBram Moolenaar x += 1000 205272abcf42SBram Moolenaar endif 205372abcf42SBram Moolenaar return x 205472abcf42SBram Moolenaarenddef 205572abcf42SBram Moolenaar 205672abcf42SBram Moolenaardef Test_nested_if() 205772abcf42SBram Moolenaar assert_equal(1, RunNested(1)) 205872abcf42SBram Moolenaar assert_equal(1000, RunNested(2)) 205972abcf42SBram Moolenaarenddef 206072abcf42SBram Moolenaar 2061ad39c094SBram Moolenaardef Test_execute_cmd() 2062e4984290SBram Moolenaar # missing argument is ignored 2063e4984290SBram Moolenaar execute 2064e4984290SBram Moolenaar execute # comment 2065e4984290SBram Moolenaar 2066ad39c094SBram Moolenaar new 2067ad39c094SBram Moolenaar setline(1, 'default') 2068d2c61705SBram Moolenaar execute 'setline(1, "execute-string")' 2069ad39c094SBram Moolenaar assert_equal('execute-string', getline(1)) 2070a72cfb80SBram Moolenaar 2071d2c61705SBram Moolenaar execute "setline(1, 'execute-string')" 2072a72cfb80SBram Moolenaar assert_equal('execute-string', getline(1)) 2073a72cfb80SBram Moolenaar 2074cfcd011fSBram Moolenaar var cmd1 = 'setline(1,' 2075cfcd011fSBram Moolenaar var cmd2 = '"execute-var")' 2076a72cfb80SBram Moolenaar execute cmd1 cmd2 # comment 2077ad39c094SBram Moolenaar assert_equal('execute-var', getline(1)) 2078a72cfb80SBram Moolenaar 2079d2c61705SBram Moolenaar execute cmd1 cmd2 '|setline(1, "execute-var-string")' 2080ad39c094SBram Moolenaar assert_equal('execute-var-string', getline(1)) 2081a72cfb80SBram Moolenaar 2082cfcd011fSBram Moolenaar var cmd_first = 'call ' 2083cfcd011fSBram Moolenaar var cmd_last = 'setline(1, "execute-var-var")' 2084ad39c094SBram Moolenaar execute cmd_first .. cmd_last 2085ad39c094SBram Moolenaar assert_equal('execute-var-var', getline(1)) 2086ad39c094SBram Moolenaar bwipe! 2087585fea7bSBram Moolenaar 2088cfcd011fSBram Moolenaar var n = true 20892d6b20d6SBram Moolenaar execute 'echomsg' (n ? '"true"' : '"no"') 20902d6b20d6SBram Moolenaar assert_match('^true$', Screenline(&lines)) 20912d6b20d6SBram Moolenaar 2092e0de171eSBram Moolenaar echomsg [1, 2, 3] {a: 1, b: 2} 2093e5abf7afSBram Moolenaar assert_match('^\[1, 2, 3\] {''a'': 1, ''b'': 2}$', Screenline(&lines)) 2094e5abf7afSBram Moolenaar 2095d2c61705SBram Moolenaar CheckDefFailure(['execute xxx'], 'E1001:', 1) 2096d2c61705SBram Moolenaar CheckDefExecFailure(['execute "tabnext " .. 8'], 'E475:', 1) 2097d2c61705SBram Moolenaar CheckDefFailure(['execute "cmd"# comment'], 'E488:', 1) 2098ad39c094SBram Moolenaarenddef 2099ad39c094SBram Moolenaar 210047e880d6SBram Moolenaardef Test_execute_cmd_vimscript() 2101f5be8cdbSBram Moolenaar # only checks line continuation 2102cfcd011fSBram Moolenaar var lines =<< trim END 210347e880d6SBram Moolenaar vim9script 210447e880d6SBram Moolenaar execute 'g:someVar' 210547e880d6SBram Moolenaar .. ' = ' .. 210647e880d6SBram Moolenaar '28' 210747e880d6SBram Moolenaar assert_equal(28, g:someVar) 210847e880d6SBram Moolenaar unlet g:someVar 210947e880d6SBram Moolenaar END 211047e880d6SBram Moolenaar CheckScriptSuccess(lines) 211147e880d6SBram Moolenaarenddef 211247e880d6SBram Moolenaar 2113ad39c094SBram Moolenaardef Test_echo_cmd() 2114a72cfb80SBram Moolenaar echo 'some' # comment 2115585fea7bSBram Moolenaar echon 'thing' 2116ad39c094SBram Moolenaar assert_match('^something$', Screenline(&lines)) 2117ad39c094SBram Moolenaar 2118a72cfb80SBram Moolenaar echo "some" # comment 2119a72cfb80SBram Moolenaar echon "thing" 2120a72cfb80SBram Moolenaar assert_match('^something$', Screenline(&lines)) 2121a72cfb80SBram Moolenaar 2122cfcd011fSBram Moolenaar var str1 = 'some' 2123cfcd011fSBram Moolenaar var str2 = 'more' 2124ad39c094SBram Moolenaar echo str1 str2 2125ad39c094SBram Moolenaar assert_match('^some more$', Screenline(&lines)) 2126a72cfb80SBram Moolenaar 2127d2c61705SBram Moolenaar CheckDefFailure(['echo "xxx"# comment'], 'E488:') 2128ad39c094SBram Moolenaarenddef 2129ad39c094SBram Moolenaar 2130f93c7feaSBram Moolenaardef Test_echomsg_cmd() 2131f93c7feaSBram Moolenaar echomsg 'some' 'more' # comment 2132f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 2133f93c7feaSBram Moolenaar echo 'clear' 2134df069eecSBram Moolenaar :1messages 2135f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 2136f93c7feaSBram Moolenaar 2137d2c61705SBram Moolenaar CheckDefFailure(['echomsg "xxx"# comment'], 'E488:') 2138f93c7feaSBram Moolenaarenddef 2139f93c7feaSBram Moolenaar 214047e880d6SBram Moolenaardef Test_echomsg_cmd_vimscript() 2141f5be8cdbSBram Moolenaar # only checks line continuation 2142cfcd011fSBram Moolenaar var lines =<< trim END 214347e880d6SBram Moolenaar vim9script 214447e880d6SBram Moolenaar echomsg 'here' 214547e880d6SBram Moolenaar .. ' is ' .. 214647e880d6SBram Moolenaar 'a message' 214747e880d6SBram Moolenaar assert_match('^here is a message$', Screenline(&lines)) 214847e880d6SBram Moolenaar END 214947e880d6SBram Moolenaar CheckScriptSuccess(lines) 215047e880d6SBram Moolenaarenddef 215147e880d6SBram Moolenaar 2152f93c7feaSBram Moolenaardef Test_echoerr_cmd() 215340ee466cSBram Moolenaar try 215440ee466cSBram Moolenaar echoerr 'something' 'wrong' # comment 215540ee466cSBram Moolenaar catch 215640ee466cSBram Moolenaar assert_match('something wrong', v:exception) 215740ee466cSBram Moolenaar endtry 2158f93c7feaSBram Moolenaarenddef 2159f93c7feaSBram Moolenaar 216047e880d6SBram Moolenaardef Test_echoerr_cmd_vimscript() 2161f5be8cdbSBram Moolenaar # only checks line continuation 2162cfcd011fSBram Moolenaar var lines =<< trim END 216347e880d6SBram Moolenaar vim9script 216447e880d6SBram Moolenaar try 216547e880d6SBram Moolenaar echoerr 'this' 216647e880d6SBram Moolenaar .. ' is ' .. 216747e880d6SBram Moolenaar 'wrong' 216847e880d6SBram Moolenaar catch 216947e880d6SBram Moolenaar assert_match('this is wrong', v:exception) 217047e880d6SBram Moolenaar endtry 217147e880d6SBram Moolenaar END 217247e880d6SBram Moolenaar CheckScriptSuccess(lines) 217347e880d6SBram Moolenaarenddef 217447e880d6SBram Moolenaar 217541fe0617SBram Moolenaardef Test_for_outside_of_function() 2176cfcd011fSBram Moolenaar var lines =<< trim END 217741fe0617SBram Moolenaar vim9script 217841fe0617SBram Moolenaar new 217941fe0617SBram Moolenaar for var in range(0, 3) 218041fe0617SBram Moolenaar append(line('$'), var) 218141fe0617SBram Moolenaar endfor 218241fe0617SBram Moolenaar assert_equal(['', '0', '1', '2', '3'], getline(1, '$')) 218341fe0617SBram Moolenaar bwipe! 218441fe0617SBram Moolenaar END 218541fe0617SBram Moolenaar writefile(lines, 'Xvim9for.vim') 218641fe0617SBram Moolenaar source Xvim9for.vim 218741fe0617SBram Moolenaar delete('Xvim9for.vim') 218841fe0617SBram Moolenaarenddef 21898a7d6542SBram Moolenaar 2190e8c4abbbSBram Moolenaardef Test_for_loop() 2191cfcd011fSBram Moolenaar var result = '' 2192e8c4abbbSBram Moolenaar for cnt in range(7) 2193e8c4abbbSBram Moolenaar if cnt == 4 2194e8c4abbbSBram Moolenaar break 2195e8c4abbbSBram Moolenaar endif 2196e8c4abbbSBram Moolenaar if cnt == 2 2197e8c4abbbSBram Moolenaar continue 2198e8c4abbbSBram Moolenaar endif 2199e8c4abbbSBram Moolenaar result ..= cnt .. '_' 2200e8c4abbbSBram Moolenaar endfor 2201e8c4abbbSBram Moolenaar assert_equal('0_1_3_', result) 22020ad3e894SBram Moolenaar 2203cfcd011fSBram Moolenaar var concat = '' 22040ad3e894SBram Moolenaar for str in eval('["one", "two"]') 22050ad3e894SBram Moolenaar concat ..= str 22060ad3e894SBram Moolenaar endfor 22070ad3e894SBram Moolenaar assert_equal('onetwo', concat) 220838bd8de5SBram Moolenaar 220938bd8de5SBram Moolenaar var total = 0 221038bd8de5SBram Moolenaar for nr in 221138bd8de5SBram Moolenaar [1, 2, 3] 221238bd8de5SBram Moolenaar total += nr 221338bd8de5SBram Moolenaar endfor 221438bd8de5SBram Moolenaar assert_equal(6, total) 221538bd8de5SBram Moolenaar 221638bd8de5SBram Moolenaar total = 0 221738bd8de5SBram Moolenaar for nr 221838bd8de5SBram Moolenaar in [1, 2, 3] 221938bd8de5SBram Moolenaar total += nr 222038bd8de5SBram Moolenaar endfor 222138bd8de5SBram Moolenaar assert_equal(6, total) 222238bd8de5SBram Moolenaar 222338bd8de5SBram Moolenaar total = 0 222438bd8de5SBram Moolenaar for nr 222538bd8de5SBram Moolenaar in 222638bd8de5SBram Moolenaar [1, 2, 3] 222738bd8de5SBram Moolenaar total += nr 222838bd8de5SBram Moolenaar endfor 222938bd8de5SBram Moolenaar assert_equal(6, total) 2230036d0714SBram Moolenaar 2231036d0714SBram Moolenaar var res = "" 2232036d0714SBram Moolenaar for [n: number, s: string] in [[1, 'a'], [2, 'b']] 2233036d0714SBram Moolenaar res ..= n .. s 2234036d0714SBram Moolenaar endfor 2235036d0714SBram Moolenaar assert_equal('1a2b', res) 2236e8c4abbbSBram Moolenaarenddef 2237e8c4abbbSBram Moolenaar 2238e8c4abbbSBram Moolenaardef Test_for_loop_fails() 2239025cb1caSBram Moolenaar CheckDefFailure(['for '], 'E1097:') 2240025cb1caSBram Moolenaar CheckDefFailure(['for x'], 'E1097:') 2241025cb1caSBram Moolenaar CheckDefFailure(['for x in'], 'E1097:') 2242675f716eSBram Moolenaar CheckDefFailure(['for # in range(5)'], 'E690:') 2243675f716eSBram Moolenaar CheckDefFailure(['for i In range(5)'], 'E690:') 2244cfcd011fSBram Moolenaar CheckDefFailure(['var x = 5', 'for x in range(5)'], 'E1017:') 2245822ba247SBram Moolenaar CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef', 'defcompile'], 'E1006:') 22462d870f8dSBram Moolenaar delfunc! g:Func 2247451c2e35SBram Moolenaar CheckDefFailure(['for i in "text"'], 'E1012:') 2248675f716eSBram Moolenaar CheckDefFailure(['for i in xxx'], 'E1001:') 2249675f716eSBram Moolenaar CheckDefFailure(['endfor'], 'E588:') 2250675f716eSBram Moolenaar CheckDefFailure(['for i in range(3)', 'echo 3'], 'E170:') 2251e8c4abbbSBram Moolenaarenddef 2252e8c4abbbSBram Moolenaar 2253ea87069dSBram Moolenaardef Test_for_loop_script_var() 2254ea87069dSBram Moolenaar # cannot use s:var in a :def function 2255ea87069dSBram Moolenaar CheckDefFailure(['for s:var in range(3)', 'echo 3'], 'E1101:') 2256ea87069dSBram Moolenaar 2257ea87069dSBram Moolenaar # can use s:var in Vim9 script, with or without s: 2258ea87069dSBram Moolenaar var lines =<< trim END 2259ea87069dSBram Moolenaar vim9script 2260ea87069dSBram Moolenaar var total = 0 2261ea87069dSBram Moolenaar for s:var in [1, 2, 3] 2262ea87069dSBram Moolenaar total += s:var 2263ea87069dSBram Moolenaar endfor 2264ea87069dSBram Moolenaar assert_equal(6, total) 2265ea87069dSBram Moolenaar 2266ea87069dSBram Moolenaar total = 0 2267ea87069dSBram Moolenaar for var in [1, 2, 3] 2268ea87069dSBram Moolenaar total += var 2269ea87069dSBram Moolenaar endfor 2270ea87069dSBram Moolenaar assert_equal(6, total) 2271ea87069dSBram Moolenaar END 2272ea87069dSBram Moolenaarenddef 2273ea87069dSBram Moolenaar 2274792f786aSBram Moolenaardef Test_for_loop_unpack() 22754b8a0651SBram Moolenaar var lines =<< trim END 2276792f786aSBram Moolenaar var result = [] 2277792f786aSBram Moolenaar for [v1, v2] in [[1, 2], [3, 4]] 2278792f786aSBram Moolenaar result->add(v1) 2279792f786aSBram Moolenaar result->add(v2) 2280792f786aSBram Moolenaar endfor 2281792f786aSBram Moolenaar assert_equal([1, 2, 3, 4], result) 2282792f786aSBram Moolenaar 2283792f786aSBram Moolenaar result = [] 2284792f786aSBram Moolenaar for [v1, v2; v3] in [[1, 2], [3, 4, 5, 6]] 2285792f786aSBram Moolenaar result->add(v1) 2286792f786aSBram Moolenaar result->add(v2) 2287792f786aSBram Moolenaar result->add(v3) 2288792f786aSBram Moolenaar endfor 2289792f786aSBram Moolenaar assert_equal([1, 2, [], 3, 4, [5, 6]], result) 2290792f786aSBram Moolenaar 22914b8a0651SBram Moolenaar result = [] 22924b8a0651SBram Moolenaar for [&ts, &sw] in [[1, 2], [3, 4]] 22934b8a0651SBram Moolenaar result->add(&ts) 22944b8a0651SBram Moolenaar result->add(&sw) 22954b8a0651SBram Moolenaar endfor 22964b8a0651SBram Moolenaar assert_equal([1, 2, 3, 4], result) 22974b8a0651SBram Moolenaar 22984b8a0651SBram Moolenaar var slist: list<string> 22994b8a0651SBram Moolenaar for [$LOOPVAR, @r, v:errmsg] in [['a', 'b', 'c'], ['d', 'e', 'f']] 23004b8a0651SBram Moolenaar slist->add($LOOPVAR) 23014b8a0651SBram Moolenaar slist->add(@r) 23024b8a0651SBram Moolenaar slist->add(v:errmsg) 23034b8a0651SBram Moolenaar endfor 23044b8a0651SBram Moolenaar assert_equal(['a', 'b', 'c', 'd', 'e', 'f'], slist) 23054b8a0651SBram Moolenaar 23064b8a0651SBram Moolenaar slist = [] 23074b8a0651SBram Moolenaar for [g:globalvar, b:bufvar, w:winvar, t:tabvar] in [['global', 'buf', 'win', 'tab'], ['1', '2', '3', '4']] 23084b8a0651SBram Moolenaar slist->add(g:globalvar) 23094b8a0651SBram Moolenaar slist->add(b:bufvar) 23104b8a0651SBram Moolenaar slist->add(w:winvar) 23114b8a0651SBram Moolenaar slist->add(t:tabvar) 23124b8a0651SBram Moolenaar endfor 23134b8a0651SBram Moolenaar assert_equal(['global', 'buf', 'win', 'tab', '1', '2', '3', '4'], slist) 2314f6c177abSBram Moolenaar unlet! g:globalvar b:bufvar w:winvar t:tabvar 23154b8a0651SBram Moolenaar END 23164b8a0651SBram Moolenaar CheckDefAndScriptSuccess(lines) 23174b8a0651SBram Moolenaar 23184b8a0651SBram Moolenaar lines =<< trim END 2319792f786aSBram Moolenaar for [v1, v2] in [[1, 2, 3], [3, 4]] 2320792f786aSBram Moolenaar echo v1 v2 2321792f786aSBram Moolenaar endfor 2322792f786aSBram Moolenaar END 2323792f786aSBram Moolenaar CheckDefExecFailure(lines, 'E710:', 1) 2324792f786aSBram Moolenaar 2325792f786aSBram Moolenaar lines =<< trim END 2326792f786aSBram Moolenaar for [v1, v2] in [[1], [3, 4]] 2327792f786aSBram Moolenaar echo v1 v2 2328792f786aSBram Moolenaar endfor 2329792f786aSBram Moolenaar END 2330792f786aSBram Moolenaar CheckDefExecFailure(lines, 'E711:', 1) 2331792f786aSBram Moolenaar 2332792f786aSBram Moolenaar lines =<< trim END 2333792f786aSBram Moolenaar for [v1, v1] in [[1, 2], [3, 4]] 2334792f786aSBram Moolenaar echo v1 2335792f786aSBram Moolenaar endfor 2336792f786aSBram Moolenaar END 2337792f786aSBram Moolenaar CheckDefExecFailure(lines, 'E1017:', 1) 2338792f786aSBram Moolenaarenddef 2339792f786aSBram Moolenaar 2340c150c09eSBram Moolenaardef Test_for_loop_with_try_continue() 2341c150c09eSBram Moolenaar var looped = 0 2342c150c09eSBram Moolenaar var cleanup = 0 2343c150c09eSBram Moolenaar for i in range(3) 2344c150c09eSBram Moolenaar looped += 1 2345c150c09eSBram Moolenaar try 2346c150c09eSBram Moolenaar eval [][0] 2347c150c09eSBram Moolenaar catch 2348c150c09eSBram Moolenaar continue 2349c150c09eSBram Moolenaar finally 2350c150c09eSBram Moolenaar cleanup += 1 2351c150c09eSBram Moolenaar endtry 2352c150c09eSBram Moolenaar endfor 2353c150c09eSBram Moolenaar assert_equal(3, looped) 2354c150c09eSBram Moolenaar assert_equal(3, cleanup) 2355c150c09eSBram Moolenaarenddef 2356c150c09eSBram Moolenaar 2357d0df1aacSBram Moolenaardef Test_while_loop() 2358cfcd011fSBram Moolenaar var result = '' 2359cfcd011fSBram Moolenaar var cnt = 0 2360d0df1aacSBram Moolenaar while cnt < 555 2361d0df1aacSBram Moolenaar if cnt == 3 2362d0df1aacSBram Moolenaar break 2363d0df1aacSBram Moolenaar endif 2364d0df1aacSBram Moolenaar cnt += 1 2365d0df1aacSBram Moolenaar if cnt == 2 2366d0df1aacSBram Moolenaar continue 2367d0df1aacSBram Moolenaar endif 2368d0df1aacSBram Moolenaar result ..= cnt .. '_' 2369d0df1aacSBram Moolenaar endwhile 2370d0df1aacSBram Moolenaar assert_equal('1_3_', result) 2371dee37dc7SBram Moolenaar 2372dee37dc7SBram Moolenaar var s = '' 23730123cc1eSBram Moolenaar while s == 'x' #{comment} 2374dee37dc7SBram Moolenaar endwhile 2375d0df1aacSBram Moolenaarenddef 2376d0df1aacSBram Moolenaar 2377e8c4abbbSBram Moolenaardef Test_while_loop_fails() 2378675f716eSBram Moolenaar CheckDefFailure(['while xxx'], 'E1001:') 2379675f716eSBram Moolenaar CheckDefFailure(['endwhile'], 'E588:') 2380675f716eSBram Moolenaar CheckDefFailure(['continue'], 'E586:') 2381675f716eSBram Moolenaar CheckDefFailure(['if true', 'continue'], 'E586:') 2382675f716eSBram Moolenaar CheckDefFailure(['break'], 'E587:') 2383675f716eSBram Moolenaar CheckDefFailure(['if true', 'break'], 'E587:') 2384675f716eSBram Moolenaar CheckDefFailure(['while 1', 'echo 3'], 'E170:') 23856628b7ebSBram Moolenaar 23866628b7ebSBram Moolenaar var lines =<< trim END 23876628b7ebSBram Moolenaar var s = '' 23886628b7ebSBram Moolenaar while s = '' 23896628b7ebSBram Moolenaar endwhile 23906628b7ebSBram Moolenaar END 23916628b7ebSBram Moolenaar CheckDefFailure(lines, 'E488:') 2392bd5da371SBram Moolenaarenddef 2393bd5da371SBram Moolenaar 23949645e2d9SBram Moolenaardef Test_interrupt_loop() 2395cfcd011fSBram Moolenaar var caught = false 2396cfcd011fSBram Moolenaar var x = 0 239797acfc78SBram Moolenaar try 23989645e2d9SBram Moolenaar while 1 23999645e2d9SBram Moolenaar x += 1 24009645e2d9SBram Moolenaar if x == 100 24019645e2d9SBram Moolenaar feedkeys("\<C-C>", 'Lt') 24029645e2d9SBram Moolenaar endif 24039645e2d9SBram Moolenaar endwhile 240497acfc78SBram Moolenaar catch 240597acfc78SBram Moolenaar caught = true 240697acfc78SBram Moolenaar assert_equal(100, x) 240797acfc78SBram Moolenaar endtry 240897acfc78SBram Moolenaar assert_true(caught, 'should have caught an exception') 240925859dd7SBram Moolenaar # consume the CTRL-C 241025859dd7SBram Moolenaar getchar(0) 24119645e2d9SBram Moolenaarenddef 241220431c9dSBram Moolenaar 24134fdae999SBram Moolenaardef Test_automatic_line_continuation() 2414cfcd011fSBram Moolenaar var mylist = [ 24154fdae999SBram Moolenaar 'one', 24164fdae999SBram Moolenaar 'two', 24174fdae999SBram Moolenaar 'three', 2418f5be8cdbSBram Moolenaar ] # comment 24194fdae999SBram Moolenaar assert_equal(['one', 'two', 'three'], mylist) 24204fdae999SBram Moolenaar 2421cfcd011fSBram Moolenaar var mydict = { 2422e0de171eSBram Moolenaar ['one']: 1, 2423e0de171eSBram Moolenaar ['two']: 2, 2424e0de171eSBram Moolenaar ['three']: 24254fdae999SBram Moolenaar 3, 2426f5be8cdbSBram Moolenaar } # comment 2427e0de171eSBram Moolenaar assert_equal({one: 1, two: 2, three: 3}, mydict) 2428e0de171eSBram Moolenaar mydict = { 24292c330432SBram Moolenaar one: 1, # comment 24302c330432SBram Moolenaar two: # comment 24312c330432SBram Moolenaar 2, # comment 24322c330432SBram Moolenaar three: 3 # comment 24332c330432SBram Moolenaar } 2434e0de171eSBram Moolenaar assert_equal({one: 1, two: 2, three: 3}, mydict) 2435e0de171eSBram Moolenaar mydict = { 24362c330432SBram Moolenaar one: 1, 24374fdae999SBram Moolenaar two: 24384fdae999SBram Moolenaar 2, 24392c330432SBram Moolenaar three: 3 24404fdae999SBram Moolenaar } 2441e0de171eSBram Moolenaar assert_equal({one: 1, two: 2, three: 3}, mydict) 2442e6085c53SBram Moolenaar 2443e6085c53SBram Moolenaar assert_equal( 2444e6085c53SBram Moolenaar ['one', 'two', 'three'], 2445e6085c53SBram Moolenaar split('one two three') 2446e6085c53SBram Moolenaar ) 24474fdae999SBram Moolenaarenddef 24484fdae999SBram Moolenaar 24497a092245SBram Moolenaardef Test_vim9_comment() 24507a092245SBram Moolenaar CheckScriptSuccess([ 24517a092245SBram Moolenaar 'vim9script', 24527a092245SBram Moolenaar '# something', 245393f82cbeSBram Moolenaar '#something', 245493f82cbeSBram Moolenaar '#{something', 24557a092245SBram Moolenaar ]) 245693f82cbeSBram Moolenaar 245793f82cbeSBram Moolenaar split Xfile 245893f82cbeSBram Moolenaar CheckScriptSuccess([ 245993f82cbeSBram Moolenaar 'vim9script', 246093f82cbeSBram Moolenaar 'edit #something', 246193f82cbeSBram Moolenaar ]) 246293f82cbeSBram Moolenaar CheckScriptSuccess([ 246393f82cbeSBram Moolenaar 'vim9script', 246493f82cbeSBram Moolenaar 'edit #{something', 246593f82cbeSBram Moolenaar ]) 246693f82cbeSBram Moolenaar close 246793f82cbeSBram Moolenaar 24687a092245SBram Moolenaar CheckScriptFailure([ 24697a092245SBram Moolenaar 'vim9script', 24707a092245SBram Moolenaar ':# something', 24717a092245SBram Moolenaar ], 'E488:') 24727a092245SBram Moolenaar CheckScriptFailure([ 24737a092245SBram Moolenaar '# something', 24747a092245SBram Moolenaar ], 'E488:') 24757a092245SBram Moolenaar CheckScriptFailure([ 24767a092245SBram Moolenaar ':# something', 24777a092245SBram Moolenaar ], 'E488:') 24787a092245SBram Moolenaar 24794a8d9f2eSBram Moolenaar { # block start 24804a8d9f2eSBram Moolenaar } # block end 24814a8d9f2eSBram Moolenaar CheckDefFailure([ 24824a8d9f2eSBram Moolenaar '{# comment', 24834a8d9f2eSBram Moolenaar ], 'E488:') 24844a8d9f2eSBram Moolenaar CheckDefFailure([ 24854a8d9f2eSBram Moolenaar '{', 24864a8d9f2eSBram Moolenaar '}# comment', 24874a8d9f2eSBram Moolenaar ], 'E488:') 24884a8d9f2eSBram Moolenaar 24894a8d9f2eSBram Moolenaar echo "yes" # comment 24904a8d9f2eSBram Moolenaar CheckDefFailure([ 24914a8d9f2eSBram Moolenaar 'echo "yes"# comment', 24924a8d9f2eSBram Moolenaar ], 'E488:') 24937a092245SBram Moolenaar CheckScriptSuccess([ 24947a092245SBram Moolenaar 'vim9script', 24957a092245SBram Moolenaar 'echo "yes" # something', 24967a092245SBram Moolenaar ]) 24977a092245SBram Moolenaar CheckScriptFailure([ 24987a092245SBram Moolenaar 'vim9script', 24997a092245SBram Moolenaar 'echo "yes"# something', 25007a092245SBram Moolenaar ], 'E121:') 25017a092245SBram Moolenaar CheckScriptFailure([ 25027a092245SBram Moolenaar 'vim9script', 25037a092245SBram Moolenaar 'echo# something', 2504f8103f27SBram Moolenaar ], 'E1144:') 25057a092245SBram Moolenaar CheckScriptFailure([ 25067a092245SBram Moolenaar 'echo "yes" # something', 25077a092245SBram Moolenaar ], 'E121:') 25087a092245SBram Moolenaar 25094a8d9f2eSBram Moolenaar exe "echo" # comment 25104a8d9f2eSBram Moolenaar CheckDefFailure([ 25114a8d9f2eSBram Moolenaar 'exe "echo"# comment', 25124a8d9f2eSBram Moolenaar ], 'E488:') 25134a8d9f2eSBram Moolenaar CheckScriptSuccess([ 25144a8d9f2eSBram Moolenaar 'vim9script', 25154a8d9f2eSBram Moolenaar 'exe "echo" # something', 25164a8d9f2eSBram Moolenaar ]) 25174a8d9f2eSBram Moolenaar CheckScriptFailure([ 25184a8d9f2eSBram Moolenaar 'vim9script', 25194a8d9f2eSBram Moolenaar 'exe "echo"# something', 25204a8d9f2eSBram Moolenaar ], 'E121:') 25214a8d9f2eSBram Moolenaar CheckScriptFailure([ 25224a8d9f2eSBram Moolenaar 'vim9script', 25234a8d9f2eSBram Moolenaar 'exe# something', 2524f8103f27SBram Moolenaar ], 'E1144:') 25254a8d9f2eSBram Moolenaar CheckScriptFailure([ 25264a8d9f2eSBram Moolenaar 'exe "echo" # something', 25274a8d9f2eSBram Moolenaar ], 'E121:') 25284a8d9f2eSBram Moolenaar 25297a092245SBram Moolenaar CheckDefFailure([ 25307a092245SBram Moolenaar 'try# comment', 25317a092245SBram Moolenaar ' echo "yes"', 25327a092245SBram Moolenaar 'catch', 25337a092245SBram Moolenaar 'endtry', 2534f8103f27SBram Moolenaar ], 'E1144:') 25352c5ed4e3SBram Moolenaar CheckScriptFailure([ 25362c5ed4e3SBram Moolenaar 'vim9script', 25372c5ed4e3SBram Moolenaar 'try# comment', 25382c5ed4e3SBram Moolenaar 'echo "yes"', 2539f8103f27SBram Moolenaar ], 'E1144:') 25407a092245SBram Moolenaar CheckDefFailure([ 25417a092245SBram Moolenaar 'try', 2542a72cfb80SBram Moolenaar ' throw#comment', 2543a72cfb80SBram Moolenaar 'catch', 2544a72cfb80SBram Moolenaar 'endtry', 2545f8103f27SBram Moolenaar ], 'E1144:') 2546a72cfb80SBram Moolenaar CheckDefFailure([ 2547a72cfb80SBram Moolenaar 'try', 2548a72cfb80SBram Moolenaar ' throw "yes"#comment', 2549a72cfb80SBram Moolenaar 'catch', 2550a72cfb80SBram Moolenaar 'endtry', 2551a72cfb80SBram Moolenaar ], 'E488:') 2552a72cfb80SBram Moolenaar CheckDefFailure([ 2553a72cfb80SBram Moolenaar 'try', 25547a092245SBram Moolenaar ' echo "yes"', 25557a092245SBram Moolenaar 'catch# comment', 25567a092245SBram Moolenaar 'endtry', 2557f8103f27SBram Moolenaar ], 'E1144:') 25582c5ed4e3SBram Moolenaar CheckScriptFailure([ 25592c5ed4e3SBram Moolenaar 'vim9script', 25602c5ed4e3SBram Moolenaar 'try', 25612c5ed4e3SBram Moolenaar ' echo "yes"', 25622c5ed4e3SBram Moolenaar 'catch# comment', 25632c5ed4e3SBram Moolenaar 'endtry', 2564f8103f27SBram Moolenaar ], 'E1144:') 25652c5ed4e3SBram Moolenaar CheckDefFailure([ 25662c5ed4e3SBram Moolenaar 'try', 25672c5ed4e3SBram Moolenaar ' echo "yes"', 25682c5ed4e3SBram Moolenaar 'catch /pat/# comment', 25692c5ed4e3SBram Moolenaar 'endtry', 25702c5ed4e3SBram Moolenaar ], 'E488:') 25717a092245SBram Moolenaar CheckDefFailure([ 25727a092245SBram Moolenaar 'try', 25737a092245SBram Moolenaar 'echo "yes"', 25747a092245SBram Moolenaar 'catch', 25757a092245SBram Moolenaar 'endtry# comment', 2576f8103f27SBram Moolenaar ], 'E1144:') 25772c5ed4e3SBram Moolenaar CheckScriptFailure([ 25782c5ed4e3SBram Moolenaar 'vim9script', 25792c5ed4e3SBram Moolenaar 'try', 25802c5ed4e3SBram Moolenaar ' echo "yes"', 25812c5ed4e3SBram Moolenaar 'catch', 25822c5ed4e3SBram Moolenaar 'endtry# comment', 2583f8103f27SBram Moolenaar ], 'E1144:') 25842c5ed4e3SBram Moolenaar 25852c5ed4e3SBram Moolenaar CheckScriptSuccess([ 25862c5ed4e3SBram Moolenaar 'vim9script', 25872c5ed4e3SBram Moolenaar 'hi # comment', 25882c5ed4e3SBram Moolenaar ]) 25892c5ed4e3SBram Moolenaar CheckScriptFailure([ 25902c5ed4e3SBram Moolenaar 'vim9script', 25912c5ed4e3SBram Moolenaar 'hi# comment', 2592f8103f27SBram Moolenaar ], 'E1144:') 25931966c248SBram Moolenaar CheckScriptSuccess([ 25941966c248SBram Moolenaar 'vim9script', 25951966c248SBram Moolenaar 'hi Search # comment', 25961966c248SBram Moolenaar ]) 25971966c248SBram Moolenaar CheckScriptFailure([ 25981966c248SBram Moolenaar 'vim9script', 25991966c248SBram Moolenaar 'hi Search# comment', 26001966c248SBram Moolenaar ], 'E416:') 26011966c248SBram Moolenaar CheckScriptSuccess([ 26021966c248SBram Moolenaar 'vim9script', 26031966c248SBram Moolenaar 'hi link This Search # comment', 26041966c248SBram Moolenaar ]) 26051966c248SBram Moolenaar CheckScriptFailure([ 26061966c248SBram Moolenaar 'vim9script', 26071966c248SBram Moolenaar 'hi link This That# comment', 26081966c248SBram Moolenaar ], 'E413:') 26091966c248SBram Moolenaar CheckScriptSuccess([ 26101966c248SBram Moolenaar 'vim9script', 26111966c248SBram Moolenaar 'hi clear This # comment', 26121966c248SBram Moolenaar 'hi clear # comment', 26131966c248SBram Moolenaar ]) 2614f5be8cdbSBram Moolenaar # not tested, because it doesn't give an error but a warning: 2615f5be8cdbSBram Moolenaar # hi clear This# comment', 26161966c248SBram Moolenaar CheckScriptFailure([ 26171966c248SBram Moolenaar 'vim9script', 26181966c248SBram Moolenaar 'hi clear# comment', 26191966c248SBram Moolenaar ], 'E416:') 26201966c248SBram Moolenaar 26211966c248SBram Moolenaar CheckScriptSuccess([ 26221966c248SBram Moolenaar 'vim9script', 26231966c248SBram Moolenaar 'hi Group term=bold', 26241966c248SBram Moolenaar 'match Group /todo/ # comment', 26251966c248SBram Moolenaar ]) 26261966c248SBram Moolenaar CheckScriptFailure([ 26271966c248SBram Moolenaar 'vim9script', 26281966c248SBram Moolenaar 'hi Group term=bold', 26291966c248SBram Moolenaar 'match Group /todo/# comment', 26301966c248SBram Moolenaar ], 'E488:') 26311966c248SBram Moolenaar CheckScriptSuccess([ 26321966c248SBram Moolenaar 'vim9script', 26331966c248SBram Moolenaar 'match # comment', 26341966c248SBram Moolenaar ]) 26351966c248SBram Moolenaar CheckScriptFailure([ 26361966c248SBram Moolenaar 'vim9script', 26371966c248SBram Moolenaar 'match# comment', 2638f8103f27SBram Moolenaar ], 'E1144:') 26391966c248SBram Moolenaar CheckScriptSuccess([ 26401966c248SBram Moolenaar 'vim9script', 26411966c248SBram Moolenaar 'match none # comment', 26421966c248SBram Moolenaar ]) 26431966c248SBram Moolenaar CheckScriptFailure([ 26441966c248SBram Moolenaar 'vim9script', 26451966c248SBram Moolenaar 'match none# comment', 26461966c248SBram Moolenaar ], 'E475:') 26471966c248SBram Moolenaar 26481966c248SBram Moolenaar CheckScriptSuccess([ 26491966c248SBram Moolenaar 'vim9script', 26501966c248SBram Moolenaar 'menutrans clear # comment', 26511966c248SBram Moolenaar ]) 26521966c248SBram Moolenaar CheckScriptFailure([ 26531966c248SBram Moolenaar 'vim9script', 26541966c248SBram Moolenaar 'menutrans clear# comment text', 26551966c248SBram Moolenaar ], 'E474:') 26561966c248SBram Moolenaar 26571966c248SBram Moolenaar CheckScriptSuccess([ 26581966c248SBram Moolenaar 'vim9script', 26591966c248SBram Moolenaar 'syntax clear # comment', 26601966c248SBram Moolenaar ]) 26611966c248SBram Moolenaar CheckScriptFailure([ 26621966c248SBram Moolenaar 'vim9script', 26631966c248SBram Moolenaar 'syntax clear# comment text', 26641966c248SBram Moolenaar ], 'E28:') 26651966c248SBram Moolenaar CheckScriptSuccess([ 26661966c248SBram Moolenaar 'vim9script', 26671966c248SBram Moolenaar 'syntax keyword Word some', 26681966c248SBram Moolenaar 'syntax clear Word # comment', 26691966c248SBram Moolenaar ]) 26701966c248SBram Moolenaar CheckScriptFailure([ 26711966c248SBram Moolenaar 'vim9script', 26721966c248SBram Moolenaar 'syntax keyword Word some', 26731966c248SBram Moolenaar 'syntax clear Word# comment text', 26741966c248SBram Moolenaar ], 'E28:') 26751966c248SBram Moolenaar 26761966c248SBram Moolenaar CheckScriptSuccess([ 26771966c248SBram Moolenaar 'vim9script', 26781966c248SBram Moolenaar 'syntax list # comment', 26791966c248SBram Moolenaar ]) 26801966c248SBram Moolenaar CheckScriptFailure([ 26811966c248SBram Moolenaar 'vim9script', 26821966c248SBram Moolenaar 'syntax list# comment text', 26831966c248SBram Moolenaar ], 'E28:') 26841966c248SBram Moolenaar 26851966c248SBram Moolenaar CheckScriptSuccess([ 26861966c248SBram Moolenaar 'vim9script', 26871966c248SBram Moolenaar 'syntax match Word /pat/ oneline # comment', 26881966c248SBram Moolenaar ]) 26891966c248SBram Moolenaar CheckScriptFailure([ 26901966c248SBram Moolenaar 'vim9script', 26911966c248SBram Moolenaar 'syntax match Word /pat/ oneline# comment', 26921966c248SBram Moolenaar ], 'E475:') 26931966c248SBram Moolenaar 26941966c248SBram Moolenaar CheckScriptSuccess([ 26951966c248SBram Moolenaar 'vim9script', 26961966c248SBram Moolenaar 'syntax keyword Word word # comm[ent', 26971966c248SBram Moolenaar ]) 26981966c248SBram Moolenaar CheckScriptFailure([ 26991966c248SBram Moolenaar 'vim9script', 27001966c248SBram Moolenaar 'syntax keyword Word word# comm[ent', 27011966c248SBram Moolenaar ], 'E789:') 27021966c248SBram Moolenaar 27031966c248SBram Moolenaar CheckScriptSuccess([ 27041966c248SBram Moolenaar 'vim9script', 27051966c248SBram Moolenaar 'syntax match Word /pat/ # comment', 27061966c248SBram Moolenaar ]) 27071966c248SBram Moolenaar CheckScriptFailure([ 27081966c248SBram Moolenaar 'vim9script', 27091966c248SBram Moolenaar 'syntax match Word /pat/# comment', 27101966c248SBram Moolenaar ], 'E402:') 27111966c248SBram Moolenaar 27121966c248SBram Moolenaar CheckScriptSuccess([ 27131966c248SBram Moolenaar 'vim9script', 27141966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something # comment', 27151966c248SBram Moolenaar ]) 27161966c248SBram Moolenaar CheckScriptFailure([ 27171966c248SBram Moolenaar 'vim9script', 27181966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something# comment', 27191966c248SBram Moolenaar ], 'E475:') 27201966c248SBram Moolenaar CheckScriptFailure([ 27211966c248SBram Moolenaar 'vim9script', 27221966c248SBram Moolenaar 'syntax match Word /pat/ contains= # comment', 27231966c248SBram Moolenaar ], 'E406:') 27241966c248SBram Moolenaar CheckScriptFailure([ 27251966c248SBram Moolenaar 'vim9script', 27261966c248SBram Moolenaar 'syntax match Word /pat/ contains=# comment', 27271966c248SBram Moolenaar ], 'E475:') 27281966c248SBram Moolenaar 27291966c248SBram Moolenaar CheckScriptSuccess([ 27301966c248SBram Moolenaar 'vim9script', 27311966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/ # comment', 27321966c248SBram Moolenaar ]) 27331966c248SBram Moolenaar CheckScriptFailure([ 27341966c248SBram Moolenaar 'vim9script', 27351966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/# comment', 2736d032f34aSBram Moolenaar ], 'E402:') 27371966c248SBram Moolenaar 27381966c248SBram Moolenaar CheckScriptSuccess([ 27391966c248SBram Moolenaar 'vim9script', 27401966c248SBram Moolenaar 'syntax sync # comment', 27411966c248SBram Moolenaar ]) 27421966c248SBram Moolenaar CheckScriptFailure([ 27431966c248SBram Moolenaar 'vim9script', 27441966c248SBram Moolenaar 'syntax sync# comment', 27451966c248SBram Moolenaar ], 'E404:') 27461966c248SBram Moolenaar CheckScriptSuccess([ 27471966c248SBram Moolenaar 'vim9script', 27481966c248SBram Moolenaar 'syntax sync ccomment # comment', 27491966c248SBram Moolenaar ]) 27501966c248SBram Moolenaar CheckScriptFailure([ 27511966c248SBram Moolenaar 'vim9script', 27521966c248SBram Moolenaar 'syntax sync ccomment# comment', 27531966c248SBram Moolenaar ], 'E404:') 27541966c248SBram Moolenaar 27551966c248SBram Moolenaar CheckScriptSuccess([ 27561966c248SBram Moolenaar 'vim9script', 27571966c248SBram Moolenaar 'syntax cluster Some contains=Word # comment', 27581966c248SBram Moolenaar ]) 27591966c248SBram Moolenaar CheckScriptFailure([ 27601966c248SBram Moolenaar 'vim9script', 27611966c248SBram Moolenaar 'syntax cluster Some contains=Word# comment', 27621966c248SBram Moolenaar ], 'E475:') 2763a72cfb80SBram Moolenaar 2764a72cfb80SBram Moolenaar CheckScriptSuccess([ 2765a72cfb80SBram Moolenaar 'vim9script', 2766a72cfb80SBram Moolenaar 'command Echo echo # comment', 2767a72cfb80SBram Moolenaar 'command Echo # comment', 27682d870f8dSBram Moolenaar 'delcommand Echo', 2769a72cfb80SBram Moolenaar ]) 2770a72cfb80SBram Moolenaar CheckScriptFailure([ 2771a72cfb80SBram Moolenaar 'vim9script', 2772a72cfb80SBram Moolenaar 'command Echo echo# comment', 2773a72cfb80SBram Moolenaar 'Echo', 2774f8103f27SBram Moolenaar ], 'E1144:') 27752d870f8dSBram Moolenaar delcommand Echo 277670249ee8SBram Moolenaar 277770249ee8SBram Moolenaar var curdir = getcwd() 277870249ee8SBram Moolenaar CheckScriptSuccess([ 277970249ee8SBram Moolenaar 'command Echo cd " comment', 278070249ee8SBram Moolenaar 'Echo', 278170249ee8SBram Moolenaar 'delcommand Echo', 278270249ee8SBram Moolenaar ]) 278370249ee8SBram Moolenaar CheckScriptSuccess([ 2784090728adSBram Moolenaar 'vim9script', 278570249ee8SBram Moolenaar 'command Echo cd # comment', 278670249ee8SBram Moolenaar 'Echo', 278770249ee8SBram Moolenaar 'delcommand Echo', 278870249ee8SBram Moolenaar ]) 278970249ee8SBram Moolenaar CheckScriptFailure([ 279070249ee8SBram Moolenaar 'vim9script', 279170249ee8SBram Moolenaar 'command Echo cd " comment', 279270249ee8SBram Moolenaar 'Echo', 279370249ee8SBram Moolenaar ], 'E344:') 279470249ee8SBram Moolenaar delcommand Echo 279570249ee8SBram Moolenaar chdir(curdir) 279670249ee8SBram Moolenaar 2797a72cfb80SBram Moolenaar CheckScriptFailure([ 2798a72cfb80SBram Moolenaar 'vim9script', 2799a72cfb80SBram Moolenaar 'command Echo# comment', 2800a72cfb80SBram Moolenaar ], 'E182:') 2801a72cfb80SBram Moolenaar CheckScriptFailure([ 2802a72cfb80SBram Moolenaar 'vim9script', 2803a72cfb80SBram Moolenaar 'command Echo echo', 2804a72cfb80SBram Moolenaar 'command Echo# comment', 2805a72cfb80SBram Moolenaar ], 'E182:') 28062d870f8dSBram Moolenaar delcommand Echo 2807a72cfb80SBram Moolenaar 2808a72cfb80SBram Moolenaar CheckScriptSuccess([ 2809a72cfb80SBram Moolenaar 'vim9script', 2810a72cfb80SBram Moolenaar 'function # comment', 2811a72cfb80SBram Moolenaar ]) 2812a72cfb80SBram Moolenaar CheckScriptFailure([ 2813a72cfb80SBram Moolenaar 'vim9script', 28149898107fSBram Moolenaar 'function " comment', 28159898107fSBram Moolenaar ], 'E129:') 28169898107fSBram Moolenaar CheckScriptFailure([ 28179898107fSBram Moolenaar 'vim9script', 2818a72cfb80SBram Moolenaar 'function# comment', 2819f8103f27SBram Moolenaar ], 'E1144:') 2820a72cfb80SBram Moolenaar CheckScriptSuccess([ 2821a72cfb80SBram Moolenaar 'vim9script', 2822a72cfb80SBram Moolenaar 'function CheckScriptSuccess # comment', 2823a72cfb80SBram Moolenaar ]) 2824a72cfb80SBram Moolenaar CheckScriptFailure([ 2825a72cfb80SBram Moolenaar 'vim9script', 2826a72cfb80SBram Moolenaar 'function CheckScriptSuccess# comment', 2827a72cfb80SBram Moolenaar ], 'E488:') 2828a72cfb80SBram Moolenaar 2829a72cfb80SBram Moolenaar CheckScriptSuccess([ 2830a72cfb80SBram Moolenaar 'vim9script', 28314c17ad94SBram Moolenaar 'func g:DeleteMeA()', 2832a72cfb80SBram Moolenaar 'endfunc', 28334c17ad94SBram Moolenaar 'delfunction g:DeleteMeA # comment', 2834a72cfb80SBram Moolenaar ]) 2835a72cfb80SBram Moolenaar CheckScriptFailure([ 2836a72cfb80SBram Moolenaar 'vim9script', 28374c17ad94SBram Moolenaar 'func g:DeleteMeB()', 2838a72cfb80SBram Moolenaar 'endfunc', 28394c17ad94SBram Moolenaar 'delfunction g:DeleteMeB# comment', 2840a72cfb80SBram Moolenaar ], 'E488:') 2841a72cfb80SBram Moolenaar 2842a72cfb80SBram Moolenaar CheckScriptSuccess([ 2843a72cfb80SBram Moolenaar 'vim9script', 2844a72cfb80SBram Moolenaar 'call execute("ls") # comment', 2845a72cfb80SBram Moolenaar ]) 2846a72cfb80SBram Moolenaar CheckScriptFailure([ 2847a72cfb80SBram Moolenaar 'vim9script', 2848a72cfb80SBram Moolenaar 'call execute("ls")# comment', 2849a72cfb80SBram Moolenaar ], 'E488:') 2850e7e4838fSBram Moolenaar 2851e7e4838fSBram Moolenaar CheckScriptFailure([ 2852e7e4838fSBram Moolenaar 'def Test() " comment', 2853e7e4838fSBram Moolenaar 'enddef', 2854e7e4838fSBram Moolenaar ], 'E488:') 2855e7e4838fSBram Moolenaar CheckScriptFailure([ 2856e7e4838fSBram Moolenaar 'vim9script', 2857e7e4838fSBram Moolenaar 'def Test() " comment', 2858e7e4838fSBram Moolenaar 'enddef', 2859e7e4838fSBram Moolenaar ], 'E488:') 2860e7e4838fSBram Moolenaar 2861e7e4838fSBram Moolenaar CheckScriptSuccess([ 2862e7e4838fSBram Moolenaar 'func Test() " comment', 2863e7e4838fSBram Moolenaar 'endfunc', 28642d870f8dSBram Moolenaar 'delfunc Test', 2865e7e4838fSBram Moolenaar ]) 28669898107fSBram Moolenaar CheckScriptSuccess([ 2867e7e4838fSBram Moolenaar 'vim9script', 2868e7e4838fSBram Moolenaar 'func Test() " comment', 2869e7e4838fSBram Moolenaar 'endfunc', 28709898107fSBram Moolenaar ]) 2871e7e4838fSBram Moolenaar 2872e7e4838fSBram Moolenaar CheckScriptSuccess([ 2873e7e4838fSBram Moolenaar 'def Test() # comment', 2874e7e4838fSBram Moolenaar 'enddef', 2875e7e4838fSBram Moolenaar ]) 2876e7e4838fSBram Moolenaar CheckScriptFailure([ 2877e7e4838fSBram Moolenaar 'func Test() # comment', 2878e7e4838fSBram Moolenaar 'endfunc', 2879e7e4838fSBram Moolenaar ], 'E488:') 28802c5ed4e3SBram Moolenaarenddef 28812c5ed4e3SBram Moolenaar 28822c5ed4e3SBram Moolenaardef Test_vim9_comment_gui() 28832c5ed4e3SBram Moolenaar CheckCanRunGui 28842c5ed4e3SBram Moolenaar 28852c5ed4e3SBram Moolenaar CheckScriptFailure([ 28862c5ed4e3SBram Moolenaar 'vim9script', 28872c5ed4e3SBram Moolenaar 'gui#comment' 2888f8103f27SBram Moolenaar ], 'E1144:') 28892c5ed4e3SBram Moolenaar CheckScriptFailure([ 28902c5ed4e3SBram Moolenaar 'vim9script', 28912c5ed4e3SBram Moolenaar 'gui -f#comment' 28922c5ed4e3SBram Moolenaar ], 'E499:') 28937a092245SBram Moolenaarenddef 28947a092245SBram Moolenaar 2895a26b9700SBram Moolenaardef Test_vim9_comment_not_compiled() 28966797966dSBram Moolenaar au TabEnter *.vim g:entered = 1 28976797966dSBram Moolenaar au TabEnter *.x g:entered = 2 2898a26b9700SBram Moolenaar 2899a26b9700SBram Moolenaar edit test.vim 2900a26b9700SBram Moolenaar doautocmd TabEnter #comment 2901a26b9700SBram Moolenaar assert_equal(1, g:entered) 2902a26b9700SBram Moolenaar 2903a26b9700SBram Moolenaar doautocmd TabEnter f.x 2904a26b9700SBram Moolenaar assert_equal(2, g:entered) 2905a26b9700SBram Moolenaar 2906a26b9700SBram Moolenaar g:entered = 0 2907a26b9700SBram Moolenaar doautocmd TabEnter f.x #comment 2908a26b9700SBram Moolenaar assert_equal(2, g:entered) 2909a26b9700SBram Moolenaar 2910a26b9700SBram Moolenaar assert_fails('doautocmd Syntax#comment', 'E216:') 2911a26b9700SBram Moolenaar 2912a26b9700SBram Moolenaar au! TabEnter 2913a26b9700SBram Moolenaar unlet g:entered 2914d72c1bf0SBram Moolenaar 2915d72c1bf0SBram Moolenaar CheckScriptSuccess([ 2916d72c1bf0SBram Moolenaar 'vim9script', 29176797966dSBram Moolenaar 'g:var = 123', 2918e55b1c09SBram Moolenaar 'b:var = 456', 2919e55b1c09SBram Moolenaar 'w:var = 777', 2920e55b1c09SBram Moolenaar 't:var = 888', 2921d72c1bf0SBram Moolenaar 'unlet g:var w:var # something', 2922d72c1bf0SBram Moolenaar ]) 2923d72c1bf0SBram Moolenaar 2924d72c1bf0SBram Moolenaar CheckScriptFailure([ 2925d72c1bf0SBram Moolenaar 'vim9script', 2926cfcd011fSBram Moolenaar 'let var = 123', 2927cfcd011fSBram Moolenaar ], 'E1126: Cannot use :let in Vim9 script') 2928cfcd011fSBram Moolenaar 2929cfcd011fSBram Moolenaar CheckScriptFailure([ 2930cfcd011fSBram Moolenaar 'vim9script', 2931cfcd011fSBram Moolenaar 'var g:var = 123', 2932e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a global variable:') 2933e55b1c09SBram Moolenaar 2934e55b1c09SBram Moolenaar CheckScriptFailure([ 2935e55b1c09SBram Moolenaar 'vim9script', 2936cfcd011fSBram Moolenaar 'var b:var = 123', 2937e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a buffer variable:') 2938e55b1c09SBram Moolenaar 2939e55b1c09SBram Moolenaar CheckScriptFailure([ 2940e55b1c09SBram Moolenaar 'vim9script', 2941cfcd011fSBram Moolenaar 'var w:var = 123', 2942e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a window variable:') 2943e55b1c09SBram Moolenaar 2944e55b1c09SBram Moolenaar CheckScriptFailure([ 2945e55b1c09SBram Moolenaar 'vim9script', 2946cfcd011fSBram Moolenaar 'var t:var = 123', 2947e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a tab variable:') 2948e55b1c09SBram Moolenaar 2949e55b1c09SBram Moolenaar CheckScriptFailure([ 2950e55b1c09SBram Moolenaar 'vim9script', 2951cfcd011fSBram Moolenaar 'var v:version = 123', 2952e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a v: variable:') 2953e55b1c09SBram Moolenaar 2954e55b1c09SBram Moolenaar CheckScriptFailure([ 2955e55b1c09SBram Moolenaar 'vim9script', 2956cfcd011fSBram Moolenaar 'var $VARIABLE = "text"', 2957e55b1c09SBram Moolenaar ], 'E1016: Cannot declare an environment variable:') 29586797966dSBram Moolenaar 29596797966dSBram Moolenaar CheckScriptFailure([ 29606797966dSBram Moolenaar 'vim9script', 29616797966dSBram Moolenaar 'g:var = 123', 296232e35117SBram Moolenaar 'unlet g:var# comment1', 2963d72c1bf0SBram Moolenaar ], 'E108:') 2964d72c1bf0SBram Moolenaar 2965d72c1bf0SBram Moolenaar CheckScriptFailure([ 2966d72c1bf0SBram Moolenaar 'let g:var = 123', 2967d72c1bf0SBram Moolenaar 'unlet g:var # something', 2968d72c1bf0SBram Moolenaar ], 'E488:') 2969faac4104SBram Moolenaar 2970faac4104SBram Moolenaar CheckScriptSuccess([ 2971faac4104SBram Moolenaar 'vim9script', 297232e35117SBram Moolenaar 'if 1 # comment2', 2973faac4104SBram Moolenaar ' echo "yes"', 2974faac4104SBram Moolenaar 'elseif 2 #comment', 2975faac4104SBram Moolenaar ' echo "no"', 2976faac4104SBram Moolenaar 'endif', 2977faac4104SBram Moolenaar ]) 2978faac4104SBram Moolenaar 2979faac4104SBram Moolenaar CheckScriptFailure([ 2980faac4104SBram Moolenaar 'vim9script', 298132e35117SBram Moolenaar 'if 1# comment3', 2982faac4104SBram Moolenaar ' echo "yes"', 2983faac4104SBram Moolenaar 'endif', 2984faac4104SBram Moolenaar ], 'E15:') 2985faac4104SBram Moolenaar 2986faac4104SBram Moolenaar CheckScriptFailure([ 2987faac4104SBram Moolenaar 'vim9script', 298832e35117SBram Moolenaar 'if 0 # comment4', 2989faac4104SBram Moolenaar ' echo "yes"', 2990faac4104SBram Moolenaar 'elseif 2#comment', 2991faac4104SBram Moolenaar ' echo "no"', 2992faac4104SBram Moolenaar 'endif', 2993faac4104SBram Moolenaar ], 'E15:') 2994faac4104SBram Moolenaar 2995faac4104SBram Moolenaar CheckScriptSuccess([ 2996faac4104SBram Moolenaar 'vim9script', 2997cfcd011fSBram Moolenaar 'var v = 1 # comment5', 2998faac4104SBram Moolenaar ]) 2999faac4104SBram Moolenaar 3000faac4104SBram Moolenaar CheckScriptFailure([ 3001faac4104SBram Moolenaar 'vim9script', 3002cfcd011fSBram Moolenaar 'var v = 1# comment6', 300332e35117SBram Moolenaar ], 'E15:') 3004faac4104SBram Moolenaar 3005faac4104SBram Moolenaar CheckScriptSuccess([ 3006faac4104SBram Moolenaar 'vim9script', 3007faac4104SBram Moolenaar 'new' 3008d2c61705SBram Moolenaar 'setline(1, ["# define pat", "last"])', 3009df069eecSBram Moolenaar ':$', 3010faac4104SBram Moolenaar 'dsearch /pat/ #comment', 3011faac4104SBram Moolenaar 'bwipe!', 3012faac4104SBram Moolenaar ]) 3013faac4104SBram Moolenaar 3014f5be8cdbSBram Moolenaar CheckScriptFailure([ 3015f5be8cdbSBram Moolenaar 'vim9script', 3016f5be8cdbSBram Moolenaar 'new' 3017d2c61705SBram Moolenaar 'setline(1, ["# define pat", "last"])', 3018f5be8cdbSBram Moolenaar ':$', 3019f5be8cdbSBram Moolenaar 'dsearch /pat/#comment', 3020f5be8cdbSBram Moolenaar 'bwipe!', 3021f5be8cdbSBram Moolenaar ], 'E488:') 3022f5be8cdbSBram Moolenaar 3023f5be8cdbSBram Moolenaar CheckScriptFailure([ 3024f5be8cdbSBram Moolenaar 'vim9script', 3025f5be8cdbSBram Moolenaar 'func! SomeFunc()', 3026f5be8cdbSBram Moolenaar ], 'E477:') 3027a26b9700SBram Moolenaarenddef 3028a26b9700SBram Moolenaar 30297e5bd91dSBram Moolenaardef Test_finish() 3030cfcd011fSBram Moolenaar var lines =<< trim END 30317e5bd91dSBram Moolenaar vim9script 30326797966dSBram Moolenaar g:res = 'one' 30337e5bd91dSBram Moolenaar if v:false | finish | endif 30346797966dSBram Moolenaar g:res = 'two' 30357e5bd91dSBram Moolenaar finish 30366797966dSBram Moolenaar g:res = 'three' 30377e5bd91dSBram Moolenaar END 30387e5bd91dSBram Moolenaar writefile(lines, 'Xfinished') 30397e5bd91dSBram Moolenaar source Xfinished 30407e5bd91dSBram Moolenaar assert_equal('two', g:res) 30417e5bd91dSBram Moolenaar 30427e5bd91dSBram Moolenaar unlet g:res 30437e5bd91dSBram Moolenaar delete('Xfinished') 30447e5bd91dSBram Moolenaarenddef 30457e5bd91dSBram Moolenaar 3046a5d0077eSBram Moolenaardef Test_forward_declaration() 3047cfcd011fSBram Moolenaar var lines =<< trim END 3048a5d0077eSBram Moolenaar vim9script 3049a5d0077eSBram Moolenaar def GetValue(): string 3050a5d0077eSBram Moolenaar return theVal 3051a5d0077eSBram Moolenaar enddef 3052cfcd011fSBram Moolenaar var theVal = 'something' 3053822ba247SBram Moolenaar g:initVal = GetValue() 3054a5d0077eSBram Moolenaar theVal = 'else' 3055a5d0077eSBram Moolenaar g:laterVal = GetValue() 3056a5d0077eSBram Moolenaar END 3057a5d0077eSBram Moolenaar writefile(lines, 'Xforward') 3058a5d0077eSBram Moolenaar source Xforward 3059a5d0077eSBram Moolenaar assert_equal('something', g:initVal) 3060a5d0077eSBram Moolenaar assert_equal('else', g:laterVal) 3061a5d0077eSBram Moolenaar 3062a5d0077eSBram Moolenaar unlet g:initVal 3063a5d0077eSBram Moolenaar unlet g:laterVal 3064a5d0077eSBram Moolenaar delete('Xforward') 3065a5d0077eSBram Moolenaarenddef 3066a5d0077eSBram Moolenaar 30679721fb4eSBram Moolenaardef Test_source_vim9_from_legacy() 3068a6294955SBram Moolenaar var vim9_lines =<< trim END 3069a6294955SBram Moolenaar vim9script 3070a6294955SBram Moolenaar var local = 'local' 3071a6294955SBram Moolenaar g:global = 'global' 3072a6294955SBram Moolenaar export var exported = 'exported' 3073a6294955SBram Moolenaar export def GetText(): string 3074a6294955SBram Moolenaar return 'text' 3075a6294955SBram Moolenaar enddef 3076a6294955SBram Moolenaar END 3077a6294955SBram Moolenaar writefile(vim9_lines, 'Xvim9_script.vim') 3078a6294955SBram Moolenaar 3079cfcd011fSBram Moolenaar var legacy_lines =<< trim END 30809721fb4eSBram Moolenaar source Xvim9_script.vim 30819721fb4eSBram Moolenaar 30829721fb4eSBram Moolenaar call assert_false(exists('local')) 30839721fb4eSBram Moolenaar call assert_false(exists('exported')) 30849721fb4eSBram Moolenaar call assert_false(exists('s:exported')) 30859721fb4eSBram Moolenaar call assert_equal('global', global) 30869721fb4eSBram Moolenaar call assert_equal('global', g:global) 30879721fb4eSBram Moolenaar 30889721fb4eSBram Moolenaar " imported variable becomes script-local 30899721fb4eSBram Moolenaar import exported from './Xvim9_script.vim' 30909721fb4eSBram Moolenaar call assert_equal('exported', s:exported) 30919721fb4eSBram Moolenaar call assert_false(exists('exported')) 30929721fb4eSBram Moolenaar 30939721fb4eSBram Moolenaar " imported function becomes script-local 30949721fb4eSBram Moolenaar import GetText from './Xvim9_script.vim' 30959721fb4eSBram Moolenaar call assert_equal('text', s:GetText()) 30969721fb4eSBram Moolenaar call assert_false(exists('*GetText')) 30979721fb4eSBram Moolenaar END 30989721fb4eSBram Moolenaar writefile(legacy_lines, 'Xlegacy_script.vim') 30999721fb4eSBram Moolenaar 31009721fb4eSBram Moolenaar source Xlegacy_script.vim 31019721fb4eSBram Moolenaar assert_equal('global', g:global) 3102f5be8cdbSBram Moolenaar unlet g:global 31039721fb4eSBram Moolenaar 31049721fb4eSBram Moolenaar delete('Xlegacy_script.vim') 31059721fb4eSBram Moolenaar delete('Xvim9_script.vim') 31069721fb4eSBram Moolenaarenddef 3107a5d0077eSBram Moolenaar 31087d699701SBram Moolenaarfunc Test_vim9script_not_global() 31097d699701SBram Moolenaar " check that items defined in Vim9 script are script-local, not global 31107d699701SBram Moolenaar let vim9lines =<< trim END 31117d699701SBram Moolenaar vim9script 3112cfcd011fSBram Moolenaar var name = 'local' 31137d699701SBram Moolenaar func TheFunc() 31147d699701SBram Moolenaar echo 'local' 31157d699701SBram Moolenaar endfunc 31167d699701SBram Moolenaar def DefFunc() 31177d699701SBram Moolenaar echo 'local' 31187d699701SBram Moolenaar enddef 31197d699701SBram Moolenaar END 31207d699701SBram Moolenaar call writefile(vim9lines, 'Xvim9script.vim') 31217d699701SBram Moolenaar source Xvim9script.vim 31227d699701SBram Moolenaar try 31237d699701SBram Moolenaar echo g:var 31247d699701SBram Moolenaar assert_report('did not fail') 31257d699701SBram Moolenaar catch /E121:/ 31267d699701SBram Moolenaar " caught 31277d699701SBram Moolenaar endtry 31287d699701SBram Moolenaar try 31297d699701SBram Moolenaar call TheFunc() 31307d699701SBram Moolenaar assert_report('did not fail') 31317d699701SBram Moolenaar catch /E117:/ 31327d699701SBram Moolenaar " caught 31337d699701SBram Moolenaar endtry 31347d699701SBram Moolenaar try 31357d699701SBram Moolenaar call DefFunc() 31367d699701SBram Moolenaar assert_report('did not fail') 31377d699701SBram Moolenaar catch /E117:/ 31387d699701SBram Moolenaar " caught 31397d699701SBram Moolenaar endtry 31407d699701SBram Moolenaar 314125859dd7SBram Moolenaar call delete('Xvim9script.vim') 31427d699701SBram Moolenaarendfunc 31437d699701SBram Moolenaar 3144eeb27bfeSBram Moolenaardef Test_vim9_copen() 3145eeb27bfeSBram Moolenaar # this was giving an error for setting w:quickfix_title 3146eeb27bfeSBram Moolenaar copen 3147eeb27bfeSBram Moolenaar quit 3148eeb27bfeSBram Moolenaarenddef 3149eeb27bfeSBram Moolenaar 315003290b84SBram Moolenaar" test using an auto-loaded function and variable 31512d6b20d6SBram Moolenaardef Test_vim9_autoload() 3152cfcd011fSBram Moolenaar var lines =<< trim END 31532d6b20d6SBram Moolenaar vim9script 315403290b84SBram Moolenaar def some#gettest(): string 315503290b84SBram Moolenaar return 'test' 315603290b84SBram Moolenaar enddef 315703290b84SBram Moolenaar g:some#name = 'name' 3158e3ffcd99SBram Moolenaar 3159e3ffcd99SBram Moolenaar def some#varargs(a1: string, ...l: list<string>): string 3160e3ffcd99SBram Moolenaar return a1 .. l[0] .. l[1] 3161e3ffcd99SBram Moolenaar enddef 316203290b84SBram Moolenaar END 316303290b84SBram Moolenaar 316403290b84SBram Moolenaar mkdir('Xdir/autoload', 'p') 316503290b84SBram Moolenaar writefile(lines, 'Xdir/autoload/some.vim') 316603290b84SBram Moolenaar var save_rtp = &rtp 316703290b84SBram Moolenaar exe 'set rtp^=' .. getcwd() .. '/Xdir' 316803290b84SBram Moolenaar 316903290b84SBram Moolenaar assert_equal('test', g:some#gettest()) 317003290b84SBram Moolenaar assert_equal('name', g:some#name) 317103290b84SBram Moolenaar g:some#other = 'other' 317203290b84SBram Moolenaar assert_equal('other', g:some#other) 317303290b84SBram Moolenaar 3174e3ffcd99SBram Moolenaar assert_equal('abc', some#varargs('a', 'b', 'c')) 3175e3ffcd99SBram Moolenaar 317617f700acSBram Moolenaar # upper case script name works 317717f700acSBram Moolenaar lines =<< trim END 317817f700acSBram Moolenaar vim9script 317917f700acSBram Moolenaar def Other#getOther(): string 318017f700acSBram Moolenaar return 'other' 318117f700acSBram Moolenaar enddef 318217f700acSBram Moolenaar END 318317f700acSBram Moolenaar writefile(lines, 'Xdir/autoload/Other.vim') 318417f700acSBram Moolenaar assert_equal('other', g:Other#getOther()) 318517f700acSBram Moolenaar 318603290b84SBram Moolenaar delete('Xdir', 'rf') 318703290b84SBram Moolenaar &rtp = save_rtp 318803290b84SBram Moolenaarenddef 318903290b84SBram Moolenaar 319003290b84SBram Moolenaar" test using a vim9script that is auto-loaded from an autocmd 319103290b84SBram Moolenaardef Test_vim9_aucmd_autoload() 319203290b84SBram Moolenaar var lines =<< trim END 319303290b84SBram Moolenaar vim9script 31942d6b20d6SBram Moolenaar def foo#test() 31952d6b20d6SBram Moolenaar echomsg getreg('"') 31962d6b20d6SBram Moolenaar enddef 31972d6b20d6SBram Moolenaar END 31982d6b20d6SBram Moolenaar 31992d6b20d6SBram Moolenaar mkdir('Xdir/autoload', 'p') 32002d6b20d6SBram Moolenaar writefile(lines, 'Xdir/autoload/foo.vim') 3201cfcd011fSBram Moolenaar var save_rtp = &rtp 32022d6b20d6SBram Moolenaar exe 'set rtp^=' .. getcwd() .. '/Xdir' 32032d6b20d6SBram Moolenaar augroup test 32042d6b20d6SBram Moolenaar autocmd TextYankPost * call foo#test() 32052d6b20d6SBram Moolenaar augroup END 32062d6b20d6SBram Moolenaar 32072d6b20d6SBram Moolenaar normal Y 32082d6b20d6SBram Moolenaar 32092d6b20d6SBram Moolenaar augroup test 32102d6b20d6SBram Moolenaar autocmd! 32112d6b20d6SBram Moolenaar augroup END 32122d6b20d6SBram Moolenaar delete('Xdir', 'rf') 32132d6b20d6SBram Moolenaar &rtp = save_rtp 32142d6b20d6SBram Moolenaarenddef 32152d6b20d6SBram Moolenaar 321677e5dcc3SBram Moolenaar" This was causing a crash because suppress_errthrow wasn't reset. 321777e5dcc3SBram Moolenaardef Test_vim9_autoload_error() 3218cfcd011fSBram Moolenaar var lines =<< trim END 321977e5dcc3SBram Moolenaar vim9script 322077e5dcc3SBram Moolenaar def crash#func() 322177e5dcc3SBram Moolenaar try 322277e5dcc3SBram Moolenaar for x in List() 322377e5dcc3SBram Moolenaar endfor 322477e5dcc3SBram Moolenaar catch 322577e5dcc3SBram Moolenaar endtry 322677e5dcc3SBram Moolenaar g:ok = true 322777e5dcc3SBram Moolenaar enddef 322877e5dcc3SBram Moolenaar fu List() 322977e5dcc3SBram Moolenaar invalid 323077e5dcc3SBram Moolenaar endfu 323177e5dcc3SBram Moolenaar try 323248e11c10SBram Moolenaar alsoinvalid 323377e5dcc3SBram Moolenaar catch /wontmatch/ 323477e5dcc3SBram Moolenaar endtry 323577e5dcc3SBram Moolenaar END 323677e5dcc3SBram Moolenaar call mkdir('Xruntime/autoload', 'p') 323777e5dcc3SBram Moolenaar call writefile(lines, 'Xruntime/autoload/crash.vim') 323877e5dcc3SBram Moolenaar 323977e5dcc3SBram Moolenaar # run in a separate Vim to avoid the side effects of assert_fails() 324077e5dcc3SBram Moolenaar lines =<< trim END 324177e5dcc3SBram Moolenaar exe 'set rtp^=' .. getcwd() .. '/Xruntime' 324277e5dcc3SBram Moolenaar call crash#func() 324377e5dcc3SBram Moolenaar call writefile(['ok'], 'Xdidit') 32449c4f5520SBram Moolenaar qall! 324577e5dcc3SBram Moolenaar END 324677e5dcc3SBram Moolenaar writefile(lines, 'Xscript') 324777e5dcc3SBram Moolenaar RunVim([], [], '-S Xscript') 324877e5dcc3SBram Moolenaar assert_equal(['ok'], readfile('Xdidit')) 324977e5dcc3SBram Moolenaar 325077e5dcc3SBram Moolenaar delete('Xdidit') 325177e5dcc3SBram Moolenaar delete('Xscript') 325277e5dcc3SBram Moolenaar delete('Xruntime', 'rf') 325303290b84SBram Moolenaar 325403290b84SBram Moolenaar lines =<< trim END 325503290b84SBram Moolenaar vim9script 325603290b84SBram Moolenaar var foo#bar = 'asdf' 325703290b84SBram Moolenaar END 325803290b84SBram Moolenaar CheckScriptFailure(lines, 'E461: Illegal variable name: foo#bar', 2) 325977e5dcc3SBram Moolenaarenddef 326077e5dcc3SBram Moolenaar 326181e17fbeSBram Moolenaardef Test_script_var_in_autocmd() 326281e17fbeSBram Moolenaar # using a script variable from an autocommand, defined in a :def function in a 326381e17fbeSBram Moolenaar # legacy Vim script, cannot check the variable type. 3264cfcd011fSBram Moolenaar var lines =<< trim END 326581e17fbeSBram Moolenaar let s:counter = 1 326681e17fbeSBram Moolenaar def s:Func() 326781e17fbeSBram Moolenaar au! CursorHold 326881e17fbeSBram Moolenaar au CursorHold * s:counter += 1 326981e17fbeSBram Moolenaar enddef 327081e17fbeSBram Moolenaar call s:Func() 327181e17fbeSBram Moolenaar doau CursorHold 327281e17fbeSBram Moolenaar call assert_equal(2, s:counter) 327381e17fbeSBram Moolenaar au! CursorHold 327481e17fbeSBram Moolenaar END 327581e17fbeSBram Moolenaar CheckScriptSuccess(lines) 327681e17fbeSBram Moolenaarenddef 327781e17fbeSBram Moolenaar 32783896a105SBram Moolenaardef Test_cmdline_win() 32793896a105SBram Moolenaar # if the Vim syntax highlighting uses Vim9 constructs they can be used from 32803896a105SBram Moolenaar # the command line window. 32813896a105SBram Moolenaar mkdir('rtp/syntax', 'p') 3282cfcd011fSBram Moolenaar var export_lines =<< trim END 32833896a105SBram Moolenaar vim9script 3284cfcd011fSBram Moolenaar export var That = 'yes' 32853896a105SBram Moolenaar END 32863896a105SBram Moolenaar writefile(export_lines, 'rtp/syntax/Xexport.vim') 3287cfcd011fSBram Moolenaar var import_lines =<< trim END 32883896a105SBram Moolenaar vim9script 32893896a105SBram Moolenaar import That from './Xexport.vim' 32903896a105SBram Moolenaar END 32913896a105SBram Moolenaar writefile(import_lines, 'rtp/syntax/vim.vim') 3292cfcd011fSBram Moolenaar var save_rtp = &rtp 32933896a105SBram Moolenaar &rtp = getcwd() .. '/rtp' .. ',' .. &rtp 32943896a105SBram Moolenaar syntax on 32953896a105SBram Moolenaar augroup CmdWin 32963896a105SBram Moolenaar autocmd CmdwinEnter * g:got_there = 'yes' 32973896a105SBram Moolenaar augroup END 32983896a105SBram Moolenaar # this will open and also close the cmdline window 32993896a105SBram Moolenaar feedkeys('q:', 'xt') 33003896a105SBram Moolenaar assert_equal('yes', g:got_there) 33013896a105SBram Moolenaar 33023896a105SBram Moolenaar augroup CmdWin 33033896a105SBram Moolenaar au! 33043896a105SBram Moolenaar augroup END 33053896a105SBram Moolenaar &rtp = save_rtp 33063896a105SBram Moolenaar delete('rtp', 'rf') 33073896a105SBram Moolenaarenddef 33083896a105SBram Moolenaar 3309e3d4685fSBram Moolenaardef Test_invalid_sid() 3310e3d4685fSBram Moolenaar assert_fails('func <SNR>1234_func', 'E123:') 331125859dd7SBram Moolenaar 33129c4f5520SBram Moolenaar if RunVim([], ['wq! Xdidit'], '+"func <SNR>1_func"') 3313d2c61705SBram Moolenaar assert_equal([], readfile('Xdidit')) 3314e3d4685fSBram Moolenaar endif 3315e3d4685fSBram Moolenaar delete('Xdidit') 3316e3d4685fSBram Moolenaarenddef 3317e3d4685fSBram Moolenaar 33189ec7026fSBram Moolenaardef Test_restoring_cpo() 33199ec7026fSBram Moolenaar writefile(['vim9script', 'set nocp'], 'Xsourced') 33209ec7026fSBram Moolenaar writefile(['call writefile(["done"], "Xdone")', 'quit!'], 'Xclose') 33219ec7026fSBram Moolenaar if RunVim([], [], '-u NONE +"set cpo+=a" -S Xsourced -S Xclose') 33229ec7026fSBram Moolenaar assert_equal(['done'], readfile('Xdone')) 33239ec7026fSBram Moolenaar endif 33249ec7026fSBram Moolenaar delete('Xsourced') 33259ec7026fSBram Moolenaar delete('Xclose') 3326090728adSBram Moolenaar delete('Xdone') 33270123cc1eSBram Moolenaar 33280123cc1eSBram Moolenaar writefile(['vim9script'], 'XanotherScript') 33290123cc1eSBram Moolenaar set cpo=aABceFsMny> 33300123cc1eSBram Moolenaar edit XanotherScript 33310123cc1eSBram Moolenaar so % 33320123cc1eSBram Moolenaar assert_equal('aABceFsMny>', &cpo) 33330123cc1eSBram Moolenaar :1del 33340123cc1eSBram Moolenaar w 33350123cc1eSBram Moolenaar so % 33360123cc1eSBram Moolenaar assert_equal('aABceFsMny>', &cpo) 33370123cc1eSBram Moolenaar 33380123cc1eSBram Moolenaar delete('XanotherScript') 33390123cc1eSBram Moolenaar set cpo&vim 33409ec7026fSBram Moolenaarenddef 33419ec7026fSBram Moolenaar 3342*ffb7dcdbSBram Moolenaar" Use :function so we can use Check commands 3343*ffb7dcdbSBram Moolenaarfunc Test_no_redraw_when_restoring_cpo() 334437294bd6SBram Moolenaar CheckScreendump 3345*ffb7dcdbSBram Moolenaar CheckFeature timers 334637294bd6SBram Moolenaar 3347*ffb7dcdbSBram Moolenaar let lines =<< trim END 334837294bd6SBram Moolenaar vim9script 334937294bd6SBram Moolenaar def script#func() 335037294bd6SBram Moolenaar enddef 335137294bd6SBram Moolenaar END 3352*ffb7dcdbSBram Moolenaar call mkdir('Xdir/autoload', 'p') 3353*ffb7dcdbSBram Moolenaar call writefile(lines, 'Xdir/autoload/script.vim') 335437294bd6SBram Moolenaar 3355*ffb7dcdbSBram Moolenaar let lines =<< trim END 335637294bd6SBram Moolenaar vim9script 335737294bd6SBram Moolenaar set cpo+=M 335837294bd6SBram Moolenaar exe 'set rtp^=' .. getcwd() .. '/Xdir' 335937294bd6SBram Moolenaar au CmdlineEnter : ++once timer_start(0, () => script#func()) 336037294bd6SBram Moolenaar setline(1, 'some text') 336137294bd6SBram Moolenaar END 3362*ffb7dcdbSBram Moolenaar call writefile(lines, 'XTest_redraw_cpo') 3363*ffb7dcdbSBram Moolenaar let buf = RunVimInTerminal('-S XTest_redraw_cpo', {'rows': 6}) 3364*ffb7dcdbSBram Moolenaar call term_sendkeys(buf, "V:") 3365*ffb7dcdbSBram Moolenaar call VerifyScreenDump(buf, 'Test_vim9_no_redraw', {}) 336637294bd6SBram Moolenaar 3367*ffb7dcdbSBram Moolenaar " clean up 3368*ffb7dcdbSBram Moolenaar call term_sendkeys(buf, "\<Esc>u") 3369*ffb7dcdbSBram Moolenaar call StopVimInTerminal(buf) 3370*ffb7dcdbSBram Moolenaar call delete('XTest_redraw_cpo') 3371*ffb7dcdbSBram Moolenaar call delete('Xdir', 'rf') 3372*ffb7dcdbSBram Moolenaarendfunc 337337294bd6SBram Moolenaar 33749ec7026fSBram Moolenaar 3375f0afd9e1SBram Moolenaardef Test_unset_any_variable() 3376cfcd011fSBram Moolenaar var lines =<< trim END 3377cfcd011fSBram Moolenaar var name: any 3378cfcd011fSBram Moolenaar assert_equal(0, name) 3379f0afd9e1SBram Moolenaar END 3380f0afd9e1SBram Moolenaar CheckDefAndScriptSuccess(lines) 3381f0afd9e1SBram Moolenaarenddef 3382f0afd9e1SBram Moolenaar 33837e9210eaSBram Moolenaarfunc Test_define_func_at_command_line() 338458dbef33SBram Moolenaar CheckRunVimInTerminal 338558dbef33SBram Moolenaar 33867e9210eaSBram Moolenaar " call indirectly to avoid compilation error for missing functions 33877e9210eaSBram Moolenaar call Run_Test_define_func_at_command_line() 33887e9210eaSBram Moolenaarendfunc 33897e9210eaSBram Moolenaar 33907e9210eaSBram Moolenaardef Run_Test_define_func_at_command_line() 33919c4f5520SBram Moolenaar # run in a separate Vim instance to avoid the script context 3392cfcd011fSBram Moolenaar var lines =<< trim END 33939c4f5520SBram Moolenaar func CheckAndQuit() 33949c4f5520SBram Moolenaar call assert_fails('call Afunc()', 'E117: Unknown function: Bfunc') 33959c4f5520SBram Moolenaar call writefile(['errors: ' .. string(v:errors)], 'Xdidcmd') 33969c4f5520SBram Moolenaar endfunc 33979c4f5520SBram Moolenaar END 33989c4f5520SBram Moolenaar writefile([''], 'Xdidcmd') 33999c4f5520SBram Moolenaar writefile(lines, 'XcallFunc') 3400e0de171eSBram Moolenaar var buf = RunVimInTerminal('-S XcallFunc', {rows: 6}) 34019c4f5520SBram Moolenaar # define Afunc() on the command line 34029c4f5520SBram Moolenaar term_sendkeys(buf, ":def Afunc()\<CR>Bfunc()\<CR>enddef\<CR>") 34039c4f5520SBram Moolenaar term_sendkeys(buf, ":call CheckAndQuit()\<CR>") 34042949cfdbSBram Moolenaar WaitForAssert(() => assert_equal(['errors: []'], readfile('Xdidcmd'))) 34059c4f5520SBram Moolenaar 34069c4f5520SBram Moolenaar call StopVimInTerminal(buf) 34079c4f5520SBram Moolenaar delete('XcallFunc') 34089c4f5520SBram Moolenaar delete('Xdidcmd') 34099c4f5520SBram Moolenaarenddef 34109c4f5520SBram Moolenaar 3411fcdc5d83SBram Moolenaardef Test_script_var_scope() 3412fcdc5d83SBram Moolenaar var lines =<< trim END 3413fcdc5d83SBram Moolenaar vim9script 3414fcdc5d83SBram Moolenaar if true 3415fcdc5d83SBram Moolenaar if true 3416fcdc5d83SBram Moolenaar var one = 'one' 3417fcdc5d83SBram Moolenaar echo one 3418fcdc5d83SBram Moolenaar endif 3419fcdc5d83SBram Moolenaar echo one 3420fcdc5d83SBram Moolenaar endif 3421fcdc5d83SBram Moolenaar END 3422fcdc5d83SBram Moolenaar CheckScriptFailure(lines, 'E121:', 7) 3423fcdc5d83SBram Moolenaar 3424fcdc5d83SBram Moolenaar lines =<< trim END 3425fcdc5d83SBram Moolenaar vim9script 3426fcdc5d83SBram Moolenaar if true 3427fcdc5d83SBram Moolenaar if false 3428fcdc5d83SBram Moolenaar var one = 'one' 3429fcdc5d83SBram Moolenaar echo one 3430fcdc5d83SBram Moolenaar else 3431fcdc5d83SBram Moolenaar var one = 'one' 3432fcdc5d83SBram Moolenaar echo one 3433fcdc5d83SBram Moolenaar endif 3434fcdc5d83SBram Moolenaar echo one 3435fcdc5d83SBram Moolenaar endif 3436fcdc5d83SBram Moolenaar END 3437fcdc5d83SBram Moolenaar CheckScriptFailure(lines, 'E121:', 10) 3438fcdc5d83SBram Moolenaar 3439fcdc5d83SBram Moolenaar lines =<< trim END 3440fcdc5d83SBram Moolenaar vim9script 3441fcdc5d83SBram Moolenaar while true 3442fcdc5d83SBram Moolenaar var one = 'one' 3443fcdc5d83SBram Moolenaar echo one 3444fcdc5d83SBram Moolenaar break 3445fcdc5d83SBram Moolenaar endwhile 3446fcdc5d83SBram Moolenaar echo one 3447fcdc5d83SBram Moolenaar END 3448fcdc5d83SBram Moolenaar CheckScriptFailure(lines, 'E121:', 7) 3449fcdc5d83SBram Moolenaar 3450fcdc5d83SBram Moolenaar lines =<< trim END 3451fcdc5d83SBram Moolenaar vim9script 3452fcdc5d83SBram Moolenaar for i in range(1) 3453fcdc5d83SBram Moolenaar var one = 'one' 3454fcdc5d83SBram Moolenaar echo one 3455fcdc5d83SBram Moolenaar endfor 3456fcdc5d83SBram Moolenaar echo one 3457fcdc5d83SBram Moolenaar END 3458fcdc5d83SBram Moolenaar CheckScriptFailure(lines, 'E121:', 6) 34599becdf2bSBram Moolenaar 34609becdf2bSBram Moolenaar lines =<< trim END 34619becdf2bSBram Moolenaar vim9script 34629becdf2bSBram Moolenaar { 34639becdf2bSBram Moolenaar var one = 'one' 34649becdf2bSBram Moolenaar assert_equal('one', one) 34659becdf2bSBram Moolenaar } 34669becdf2bSBram Moolenaar assert_false(exists('one')) 34679becdf2bSBram Moolenaar assert_false(exists('s:one')) 34689becdf2bSBram Moolenaar END 34699becdf2bSBram Moolenaar CheckScriptSuccess(lines) 34709becdf2bSBram Moolenaar 34719becdf2bSBram Moolenaar lines =<< trim END 34729becdf2bSBram Moolenaar vim9script 34739becdf2bSBram Moolenaar { 34749becdf2bSBram Moolenaar var one = 'one' 34759becdf2bSBram Moolenaar echo one 34769becdf2bSBram Moolenaar } 34779becdf2bSBram Moolenaar echo one 34789becdf2bSBram Moolenaar END 34799becdf2bSBram Moolenaar CheckScriptFailure(lines, 'E121:', 6) 3480fcdc5d83SBram Moolenaarenddef 3481fcdc5d83SBram Moolenaar 3482352134bbSBram Moolenaardef Test_catch_exception_in_callback() 3483352134bbSBram Moolenaar var lines =<< trim END 3484352134bbSBram Moolenaar vim9script 3485352134bbSBram Moolenaar def Callback(...l: any) 3486352134bbSBram Moolenaar try 3487352134bbSBram Moolenaar var x: string 3488352134bbSBram Moolenaar var y: string 3489352134bbSBram Moolenaar # this error should be caught with CHECKLEN 3490352134bbSBram Moolenaar [x, y] = [''] 3491352134bbSBram Moolenaar catch 3492352134bbSBram Moolenaar g:caught = 'yes' 3493352134bbSBram Moolenaar endtry 3494352134bbSBram Moolenaar enddef 3495e0de171eSBram Moolenaar popup_menu('popup', {callback: Callback}) 3496352134bbSBram Moolenaar feedkeys("\r", 'xt') 3497352134bbSBram Moolenaar END 3498352134bbSBram Moolenaar CheckScriptSuccess(lines) 3499352134bbSBram Moolenaar 3500352134bbSBram Moolenaar unlet g:caught 3501352134bbSBram Moolenaarenddef 3502352134bbSBram Moolenaar 3503631e8f93SBram Moolenaardef Test_no_unknown_error_after_error() 3504631e8f93SBram Moolenaar if !has('unix') || !has('job') 3505631e8f93SBram Moolenaar throw 'Skipped: not unix of missing +job feature' 3506631e8f93SBram Moolenaar endif 3507631e8f93SBram Moolenaar var lines =<< trim END 3508631e8f93SBram Moolenaar vim9script 3509631e8f93SBram Moolenaar var source: list<number> 3510631e8f93SBram Moolenaar def Out_cb(...l: any) 3511631e8f93SBram Moolenaar eval [][0] 3512631e8f93SBram Moolenaar enddef 3513631e8f93SBram Moolenaar def Exit_cb(...l: any) 3514631e8f93SBram Moolenaar sleep 1m 3515631e8f93SBram Moolenaar source += l 3516631e8f93SBram Moolenaar enddef 3517e0de171eSBram Moolenaar var myjob = job_start('echo burp', {out_cb: Out_cb, exit_cb: Exit_cb, mode: 'raw'}) 35186f17a3f0SBram Moolenaar while job_status(myjob) == 'run' 35196f17a3f0SBram Moolenaar sleep 10m 35206f17a3f0SBram Moolenaar endwhile 3521206c2a6eSBram Moolenaar # wait for Exit_cb() to be called 3522206c2a6eSBram Moolenaar sleep 100m 3523631e8f93SBram Moolenaar END 3524631e8f93SBram Moolenaar writefile(lines, 'Xdef') 3525631e8f93SBram Moolenaar assert_fails('so Xdef', ['E684:', 'E1012:']) 3526631e8f93SBram Moolenaar delete('Xdef') 3527631e8f93SBram Moolenaarenddef 3528631e8f93SBram Moolenaar 35294324d87aSBram Moolenaardef InvokeNormal() 35304324d87aSBram Moolenaar exe "norm! :m+1\r" 35314324d87aSBram Moolenaarenddef 35324324d87aSBram Moolenaar 35334324d87aSBram Moolenaardef Test_invoke_normal_in_visual_mode() 35344324d87aSBram Moolenaar xnoremap <F3> <Cmd>call <SID>InvokeNormal()<CR> 35354324d87aSBram Moolenaar new 35364324d87aSBram Moolenaar setline(1, ['aaa', 'bbb']) 35374324d87aSBram Moolenaar feedkeys("V\<F3>", 'xt') 35384324d87aSBram Moolenaar assert_equal(['bbb', 'aaa'], getline(1, 2)) 35394324d87aSBram Moolenaar xunmap <F3> 3540b5b9480eSBram Moolenaarenddef 3541b5b9480eSBram Moolenaar 3542b5b9480eSBram Moolenaardef Test_white_space_after_command() 3543b5b9480eSBram Moolenaar var lines =<< trim END 3544b5b9480eSBram Moolenaar exit_cb: Func}) 3545b5b9480eSBram Moolenaar END 3546b5b9480eSBram Moolenaar CheckDefAndScriptFailure(lines, 'E1144:', 1) 3547f8103f27SBram Moolenaar 3548f8103f27SBram Moolenaar lines =<< trim END 3549f8103f27SBram Moolenaar e# 3550f8103f27SBram Moolenaar END 3551f8103f27SBram Moolenaar CheckDefAndScriptFailure(lines, 'E1144:', 1) 35524324d87aSBram Moolenaarenddef 35534324d87aSBram Moolenaar 35544aab88d9SBram Moolenaardef Test_script_var_gone_when_sourced_twice() 35554aab88d9SBram Moolenaar var lines =<< trim END 35564aab88d9SBram Moolenaar vim9script 35574aab88d9SBram Moolenaar if exists('g:guard') 35584aab88d9SBram Moolenaar finish 35594aab88d9SBram Moolenaar endif 35604aab88d9SBram Moolenaar g:guard = 1 35614aab88d9SBram Moolenaar var name = 'thename' 35624aab88d9SBram Moolenaar def g:GetName(): string 35634aab88d9SBram Moolenaar return name 35644aab88d9SBram Moolenaar enddef 35654aab88d9SBram Moolenaar def g:SetName(arg: string) 35664aab88d9SBram Moolenaar name = arg 35674aab88d9SBram Moolenaar enddef 35684aab88d9SBram Moolenaar END 35694aab88d9SBram Moolenaar writefile(lines, 'XscriptTwice.vim') 35704aab88d9SBram Moolenaar so XscriptTwice.vim 35714aab88d9SBram Moolenaar assert_equal('thename', g:GetName()) 35724aab88d9SBram Moolenaar g:SetName('newname') 35734aab88d9SBram Moolenaar assert_equal('newname', g:GetName()) 35744aab88d9SBram Moolenaar so XscriptTwice.vim 35754aab88d9SBram Moolenaar assert_fails('call g:GetName()', 'E1149:') 35764aab88d9SBram Moolenaar assert_fails('call g:SetName("x")', 'E1149:') 35774aab88d9SBram Moolenaar 35784aab88d9SBram Moolenaar delfunc g:GetName 35794aab88d9SBram Moolenaar delfunc g:SetName 35804aab88d9SBram Moolenaar delete('XscriptTwice.vim') 35814aab88d9SBram Moolenaar unlet g:guard 35824aab88d9SBram Moolenaarenddef 35834aab88d9SBram Moolenaar 35844aab88d9SBram Moolenaardef Test_import_gone_when_sourced_twice() 35854aab88d9SBram Moolenaar var exportlines =<< trim END 35864aab88d9SBram Moolenaar vim9script 35874aab88d9SBram Moolenaar if exists('g:guard') 35884aab88d9SBram Moolenaar finish 35894aab88d9SBram Moolenaar endif 35904aab88d9SBram Moolenaar g:guard = 1 35914aab88d9SBram Moolenaar export var name = 'someName' 35924aab88d9SBram Moolenaar END 35934aab88d9SBram Moolenaar writefile(exportlines, 'XexportScript.vim') 35944aab88d9SBram Moolenaar 35954aab88d9SBram Moolenaar var lines =<< trim END 35964aab88d9SBram Moolenaar vim9script 35974aab88d9SBram Moolenaar import name from './XexportScript.vim' 35984aab88d9SBram Moolenaar def g:GetName(): string 35994aab88d9SBram Moolenaar return name 36004aab88d9SBram Moolenaar enddef 36014aab88d9SBram Moolenaar END 36024aab88d9SBram Moolenaar writefile(lines, 'XscriptImport.vim') 36034aab88d9SBram Moolenaar so XscriptImport.vim 36044aab88d9SBram Moolenaar assert_equal('someName', g:GetName()) 36054aab88d9SBram Moolenaar 36064aab88d9SBram Moolenaar so XexportScript.vim 36074aab88d9SBram Moolenaar assert_fails('call g:GetName()', 'E1149:') 36084aab88d9SBram Moolenaar 36094aab88d9SBram Moolenaar delfunc g:GetName 36104aab88d9SBram Moolenaar delete('XexportScript.vim') 36114aab88d9SBram Moolenaar delete('XscriptImport.vim') 36124aab88d9SBram Moolenaar unlet g:guard 36134aab88d9SBram Moolenaarenddef 36144aab88d9SBram Moolenaar 361510b9421fSBram Moolenaardef Test_unsupported_commands() 361610b9421fSBram Moolenaar var lines =<< trim END 361710b9421fSBram Moolenaar ka 361810b9421fSBram Moolenaar END 361910b9421fSBram Moolenaar CheckDefAndScriptFailure(lines, 'E1100:') 362010b9421fSBram Moolenaar 362110b9421fSBram Moolenaar lines =<< trim END 3622ada1d870SBram Moolenaar :1ka 3623ada1d870SBram Moolenaar END 3624ada1d870SBram Moolenaar CheckDefAndScriptFailure(lines, 'E481:') 3625ada1d870SBram Moolenaar 3626ada1d870SBram Moolenaar lines =<< trim END 362710b9421fSBram Moolenaar t 362810b9421fSBram Moolenaar END 362910b9421fSBram Moolenaar CheckDefFailure(lines, 'E1100:') 363010b9421fSBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E1100:') 363110b9421fSBram Moolenaar 363210b9421fSBram Moolenaar lines =<< trim END 363310b9421fSBram Moolenaar x 363410b9421fSBram Moolenaar END 363510b9421fSBram Moolenaar CheckDefFailure(lines, 'E1100:') 363610b9421fSBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E1100:') 363710b9421fSBram Moolenaar 363810b9421fSBram Moolenaar lines =<< trim END 363910b9421fSBram Moolenaar xit 364010b9421fSBram Moolenaar END 364110b9421fSBram Moolenaar CheckDefFailure(lines, 'E1100:') 364210b9421fSBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E1100:') 364310b9421fSBram Moolenaarenddef 364410b9421fSBram Moolenaar 3645585fea7bSBram Moolenaar" Keep this last, it messes up highlighting. 3646585fea7bSBram Moolenaardef Test_substitute_cmd() 3647585fea7bSBram Moolenaar new 3648585fea7bSBram Moolenaar setline(1, 'something') 3649585fea7bSBram Moolenaar :substitute(some(other( 3650585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 3651585fea7bSBram Moolenaar bwipe! 3652585fea7bSBram Moolenaar 3653f5be8cdbSBram Moolenaar # also when the context is Vim9 script 3654cfcd011fSBram Moolenaar var lines =<< trim END 3655585fea7bSBram Moolenaar vim9script 3656585fea7bSBram Moolenaar new 3657585fea7bSBram Moolenaar setline(1, 'something') 3658585fea7bSBram Moolenaar :substitute(some(other( 3659585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 3660585fea7bSBram Moolenaar bwipe! 3661585fea7bSBram Moolenaar END 3662585fea7bSBram Moolenaar writefile(lines, 'Xvim9lines') 3663585fea7bSBram Moolenaar source Xvim9lines 3664585fea7bSBram Moolenaar 3665585fea7bSBram Moolenaar delete('Xvim9lines') 3666585fea7bSBram Moolenaarenddef 3667585fea7bSBram Moolenaar 36688a7d6542SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker 3669