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() 1034cb4e80faSBram Moolenaar g:imported_def = Export.exported 1035f2d5c240SBram Moolenaar enddef 1036cb4e80faSBram Moolenaar g:imported_script = Export.exported 1037cb4e80faSBram Moolenaar assert_equal(1, exists('Export.exported')) 1038cb4e80faSBram Moolenaar assert_equal(0, exists('Export.notexported')) 1039f2d5c240SBram Moolenaar UseExport() 1040f2d5c240SBram Moolenaar END 1041f2d5c240SBram Moolenaar writefile(import_star_as_lines, 'Ximport.vim') 1042f2d5c240SBram Moolenaar source Ximport.vim 1043cb4e80faSBram Moolenaar assert_equal(9883, g:imported_def) 1044cb4e80faSBram Moolenaar assert_equal(9883, g:imported_script) 1045f2d5c240SBram Moolenaar 1046cfcd011fSBram Moolenaar var import_star_as_lines_no_dot =<< trim END 1047599c89c8SBram Moolenaar vim9script 1048599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 1049599c89c8SBram Moolenaar def Func() 1050cfcd011fSBram Moolenaar var dummy = 1 1051cfcd011fSBram Moolenaar var imported = Export + dummy 1052599c89c8SBram Moolenaar enddef 1053822ba247SBram Moolenaar defcompile 1054599c89c8SBram Moolenaar END 1055599c89c8SBram Moolenaar writefile(import_star_as_lines_no_dot, 'Ximport.vim') 105644d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1060:', '', 2, 'Func') 1057599c89c8SBram Moolenaar 1058cfcd011fSBram Moolenaar var import_star_as_lines_dot_space =<< trim END 1059599c89c8SBram Moolenaar vim9script 1060599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 1061599c89c8SBram Moolenaar def Func() 1062cfcd011fSBram Moolenaar var imported = Export . exported 1063599c89c8SBram Moolenaar enddef 1064822ba247SBram Moolenaar defcompile 1065599c89c8SBram Moolenaar END 1066599c89c8SBram Moolenaar writefile(import_star_as_lines_dot_space, 'Ximport.vim') 106744d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1074:', '', 1, 'Func') 1068599c89c8SBram Moolenaar 1069a6294955SBram Moolenaar var import_star_as_duplicated =<< trim END 1070a6294955SBram Moolenaar vim9script 1071a6294955SBram Moolenaar import * as Export from './Xexport.vim' 1072a6294955SBram Moolenaar var some = 'other' 1073a6294955SBram Moolenaar import * as Export from './Xexport.vim' 1074a6294955SBram Moolenaar defcompile 1075a6294955SBram Moolenaar END 1076a6294955SBram Moolenaar writefile(import_star_as_duplicated, 'Ximport.vim') 1077a6294955SBram Moolenaar assert_fails('source Ximport.vim', 'E1073:', '', 4, 'Ximport.vim') 1078a6294955SBram Moolenaar 1079cb4e80faSBram Moolenaar var import_star_as_lines_script_no_dot =<< trim END 1080cb4e80faSBram Moolenaar vim9script 1081cb4e80faSBram Moolenaar import * as Export from './Xexport.vim' 1082cb4e80faSBram Moolenaar g:imported_script = Export exported 1083cb4e80faSBram Moolenaar END 1084cb4e80faSBram Moolenaar writefile(import_star_as_lines_script_no_dot, 'Ximport.vim') 1085cb4e80faSBram Moolenaar assert_fails('source Ximport.vim', 'E1029:') 1086cb4e80faSBram Moolenaar 1087cb4e80faSBram Moolenaar var import_star_as_lines_script_space_after_dot =<< trim END 1088cb4e80faSBram Moolenaar vim9script 1089cb4e80faSBram Moolenaar import * as Export from './Xexport.vim' 1090cb4e80faSBram Moolenaar g:imported_script = Export. exported 1091cb4e80faSBram Moolenaar END 1092cb4e80faSBram Moolenaar writefile(import_star_as_lines_script_space_after_dot, 'Ximport.vim') 1093cb4e80faSBram Moolenaar assert_fails('source Ximport.vim', 'E1074:') 1094cb4e80faSBram Moolenaar 1095cfcd011fSBram Moolenaar var import_star_as_lines_missing_name =<< trim END 1096599c89c8SBram Moolenaar vim9script 1097599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 1098599c89c8SBram Moolenaar def Func() 1099cfcd011fSBram Moolenaar var imported = Export. 1100599c89c8SBram Moolenaar enddef 1101822ba247SBram Moolenaar defcompile 1102599c89c8SBram Moolenaar END 1103599c89c8SBram Moolenaar writefile(import_star_as_lines_missing_name, 'Ximport.vim') 110444d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1048:', '', 1, 'Func') 1105599c89c8SBram Moolenaar 1106cfcd011fSBram Moolenaar var import_star_as_lbr_lines =<< trim END 11071c991144SBram Moolenaar vim9script 11081c991144SBram Moolenaar import * 11091c991144SBram Moolenaar as Export 11101c991144SBram Moolenaar from 11111c991144SBram Moolenaar './Xexport.vim' 11121c991144SBram Moolenaar def UseExport() 11131c991144SBram Moolenaar g:imported = Export.exported 11141c991144SBram Moolenaar enddef 11151c991144SBram Moolenaar UseExport() 11161c991144SBram Moolenaar END 11171c991144SBram Moolenaar writefile(import_star_as_lbr_lines, 'Ximport.vim') 11181c991144SBram Moolenaar source Ximport.vim 11191c991144SBram Moolenaar assert_equal(9883, g:imported) 11201c991144SBram Moolenaar 1121cfcd011fSBram Moolenaar var import_star_lines =<< trim END 1122f2d5c240SBram Moolenaar vim9script 1123f2d5c240SBram Moolenaar import * from './Xexport.vim' 1124f2d5c240SBram Moolenaar END 1125f2d5c240SBram Moolenaar writefile(import_star_lines, 'Ximport.vim') 112644d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1045:', '', 2, 'Ximport.vim') 1127f2d5c240SBram Moolenaar 1128f5be8cdbSBram Moolenaar # try to import something that exists but is not exported 1129cfcd011fSBram Moolenaar var import_not_exported_lines =<< trim END 1130fa29c8abSBram Moolenaar vim9script 1131fa29c8abSBram Moolenaar import name from './Xexport.vim' 1132fa29c8abSBram Moolenaar END 1133fa29c8abSBram Moolenaar writefile(import_not_exported_lines, 'Ximport.vim') 113444d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1049:', '', 2, 'Ximport.vim') 1135fa29c8abSBram Moolenaar 1136f5be8cdbSBram Moolenaar # try to import something that is already defined 1137cfcd011fSBram Moolenaar var import_already_defined =<< trim END 11385269bd2aSBram Moolenaar vim9script 1139cfcd011fSBram Moolenaar var exported = 'something' 11405269bd2aSBram Moolenaar import exported from './Xexport.vim' 11415269bd2aSBram Moolenaar END 11425269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 1143057e84afSBram Moolenaar assert_fails('source Ximport.vim', 'E1054:', '', 3, 'Ximport.vim') 11445269bd2aSBram Moolenaar 1145f5be8cdbSBram Moolenaar # try to import something that is already defined 11465269bd2aSBram Moolenaar import_already_defined =<< trim END 11475269bd2aSBram Moolenaar vim9script 1148cfcd011fSBram Moolenaar var exported = 'something' 11495269bd2aSBram Moolenaar import * as exported from './Xexport.vim' 11505269bd2aSBram Moolenaar END 11515269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 1152057e84afSBram Moolenaar assert_fails('source Ximport.vim', 'E1054:', '', 3, 'Ximport.vim') 11535269bd2aSBram Moolenaar 1154f5be8cdbSBram Moolenaar # try to import something that is already defined 11555269bd2aSBram Moolenaar import_already_defined =<< trim END 11565269bd2aSBram Moolenaar vim9script 1157cfcd011fSBram Moolenaar var exported = 'something' 11585269bd2aSBram Moolenaar import {exported} from './Xexport.vim' 11595269bd2aSBram Moolenaar END 11605269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 1161057e84afSBram Moolenaar assert_fails('source Ximport.vim', 'E1054:', '', 3, 'Ximport.vim') 11625269bd2aSBram Moolenaar 1163918a4249SBram Moolenaar # try changing an imported const 1164918a4249SBram Moolenaar var import_assign_to_const =<< trim END 1165918a4249SBram Moolenaar vim9script 1166918a4249SBram Moolenaar import CONST from './Xexport.vim' 1167918a4249SBram Moolenaar def Assign() 1168918a4249SBram Moolenaar CONST = 987 1169918a4249SBram Moolenaar enddef 1170918a4249SBram Moolenaar defcompile 1171918a4249SBram Moolenaar END 1172918a4249SBram Moolenaar writefile(import_assign_to_const, 'Ximport.vim') 1173918a4249SBram Moolenaar assert_fails('source Ximport.vim', 'E46:', '', 1, '_Assign') 1174918a4249SBram Moolenaar 11750f2a5cc6SBram Moolenaar # try changing an imported final 11760f2a5cc6SBram Moolenaar var import_assign_to_final =<< trim END 11770f2a5cc6SBram Moolenaar vim9script 11780f2a5cc6SBram Moolenaar import theList from './Xexport.vim' 11790f2a5cc6SBram Moolenaar def Assign() 11800f2a5cc6SBram Moolenaar theList = [2] 11810f2a5cc6SBram Moolenaar enddef 11820f2a5cc6SBram Moolenaar defcompile 11830f2a5cc6SBram Moolenaar END 11840f2a5cc6SBram Moolenaar writefile(import_assign_to_final, 'Ximport.vim') 11850f2a5cc6SBram Moolenaar assert_fails('source Ximport.vim', 'E46:', '', 1, '_Assign') 11860f2a5cc6SBram Moolenaar 1187f5be8cdbSBram Moolenaar # import a very long name, requires making a copy 1188cfcd011fSBram Moolenaar var import_long_name_lines =<< trim END 1189fa29c8abSBram Moolenaar vim9script 1190fa29c8abSBram Moolenaar import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim' 1191fa29c8abSBram Moolenaar END 1192fa29c8abSBram Moolenaar writefile(import_long_name_lines, 'Ximport.vim') 119344d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1048:', '', 2, 'Ximport.vim') 1194fa29c8abSBram Moolenaar 1195cfcd011fSBram Moolenaar var import_no_from_lines =<< trim END 1196fa29c8abSBram Moolenaar vim9script 1197fa29c8abSBram Moolenaar import name './Xexport.vim' 1198fa29c8abSBram Moolenaar END 1199fa29c8abSBram Moolenaar writefile(import_no_from_lines, 'Ximport.vim') 120044d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1070:', '', 2, 'Ximport.vim') 1201fa29c8abSBram Moolenaar 1202cfcd011fSBram Moolenaar var import_invalid_string_lines =<< trim END 1203fa29c8abSBram Moolenaar vim9script 1204fa29c8abSBram Moolenaar import name from Xexport.vim 1205fa29c8abSBram Moolenaar END 1206fa29c8abSBram Moolenaar writefile(import_invalid_string_lines, 'Ximport.vim') 120744d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1071:', '', 2, 'Ximport.vim') 1208fa29c8abSBram Moolenaar 1209cfcd011fSBram Moolenaar var import_wrong_name_lines =<< trim END 1210fa29c8abSBram Moolenaar vim9script 1211fa29c8abSBram Moolenaar import name from './XnoExport.vim' 1212fa29c8abSBram Moolenaar END 1213fa29c8abSBram Moolenaar writefile(import_wrong_name_lines, 'Ximport.vim') 121444d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1053:', '', 2, 'Ximport.vim') 1215fa29c8abSBram Moolenaar 1216cfcd011fSBram Moolenaar var import_missing_comma_lines =<< trim END 1217fa29c8abSBram Moolenaar vim9script 1218fa29c8abSBram Moolenaar import {exported name} from './Xexport.vim' 1219fa29c8abSBram Moolenaar END 12205269bd2aSBram Moolenaar writefile(import_missing_comma_lines, 'Ximport3.vim') 122144d6652dSBram Moolenaar assert_fails('source Ximport3.vim', 'E1046:', '', 2, 'Ximport3.vim') 1222fa29c8abSBram Moolenaar 1223f2d5c240SBram Moolenaar delete('Ximport.vim') 12245269bd2aSBram Moolenaar delete('Ximport3.vim') 12258a7d6542SBram Moolenaar delete('Xexport.vim') 12268a7d6542SBram Moolenaar 1227f5be8cdbSBram Moolenaar # Check that in a Vim9 script 'cpo' is set to the Vim default. 1228750802b5SBram Moolenaar set cpo&vi 1229cfcd011fSBram Moolenaar var cpo_before = &cpo 1230cfcd011fSBram Moolenaar var lines =<< trim END 1231750802b5SBram Moolenaar vim9script 1232750802b5SBram Moolenaar g:cpo_in_vim9script = &cpo 1233750802b5SBram Moolenaar END 1234750802b5SBram Moolenaar writefile(lines, 'Xvim9_script') 1235750802b5SBram Moolenaar source Xvim9_script 1236750802b5SBram Moolenaar assert_equal(cpo_before, &cpo) 1237750802b5SBram Moolenaar set cpo&vim 1238750802b5SBram Moolenaar assert_equal(&cpo, g:cpo_in_vim9script) 1239750802b5SBram Moolenaar delete('Xvim9_script') 1240750802b5SBram Moolenaarenddef 1241750802b5SBram Moolenaar 12420a84284eSBram Moolenaardef Test_import_as() 12430a84284eSBram Moolenaar var export_lines =<< trim END 12440a84284eSBram Moolenaar vim9script 12450a84284eSBram Moolenaar export var one = 1 12460a84284eSBram Moolenaar export var yes = 'yes' 12470a84284eSBram Moolenaar END 12480a84284eSBram Moolenaar writefile(export_lines, 'XexportAs') 12490a84284eSBram Moolenaar 12500a84284eSBram Moolenaar var import_lines =<< trim END 12510a84284eSBram Moolenaar vim9script 12520a84284eSBram Moolenaar import one as thatOne from './XexportAs' 12530a84284eSBram Moolenaar assert_equal(1, thatOne) 12540a84284eSBram Moolenaar import yes as yesYes from './XexportAs' 12550a84284eSBram Moolenaar assert_equal('yes', yesYes) 12560a84284eSBram Moolenaar END 12570a84284eSBram Moolenaar CheckScriptSuccess(import_lines) 12580a84284eSBram Moolenaar 12590a84284eSBram Moolenaar import_lines =<< trim END 12600a84284eSBram Moolenaar vim9script 12610a84284eSBram Moolenaar import {one as thatOne, yes as yesYes} from './XexportAs' 12620a84284eSBram Moolenaar assert_equal(1, thatOne) 12630a84284eSBram Moolenaar assert_equal('yes', yesYes) 12640a84284eSBram Moolenaar assert_fails('echo one', 'E121:') 12650a84284eSBram Moolenaar assert_fails('echo yes', 'E121:') 12660a84284eSBram Moolenaar END 12670a84284eSBram Moolenaar CheckScriptSuccess(import_lines) 12680a84284eSBram Moolenaar 12690a84284eSBram Moolenaar delete('XexportAs') 12700a84284eSBram Moolenaarenddef 12710a84284eSBram Moolenaar 1272803af686SBram Moolenaarfunc g:Trigger() 1273803af686SBram Moolenaar source Ximport.vim 1274803af686SBram Moolenaar return "echo 'yes'\<CR>" 1275803af686SBram Moolenaarendfunc 1276803af686SBram Moolenaar 1277803af686SBram Moolenaardef Test_import_export_expr_map() 1278803af686SBram Moolenaar # check that :import and :export work when buffer is locked 1279cfcd011fSBram Moolenaar var export_lines =<< trim END 1280803af686SBram Moolenaar vim9script 1281803af686SBram Moolenaar export def That(): string 1282803af686SBram Moolenaar return 'yes' 1283803af686SBram Moolenaar enddef 1284803af686SBram Moolenaar END 1285803af686SBram Moolenaar writefile(export_lines, 'Xexport_that.vim') 1286803af686SBram Moolenaar 1287cfcd011fSBram Moolenaar var import_lines =<< trim END 1288803af686SBram Moolenaar vim9script 1289803af686SBram Moolenaar import That from './Xexport_that.vim' 1290803af686SBram Moolenaar assert_equal('yes', That()) 1291803af686SBram Moolenaar END 1292803af686SBram Moolenaar writefile(import_lines, 'Ximport.vim') 1293803af686SBram Moolenaar 1294803af686SBram Moolenaar nnoremap <expr> trigger g:Trigger() 1295803af686SBram Moolenaar feedkeys('trigger', "xt") 1296803af686SBram Moolenaar 1297730b2483SBram Moolenaar delete('Xexport_that.vim') 1298803af686SBram Moolenaar delete('Ximport.vim') 1299803af686SBram Moolenaar nunmap trigger 1300803af686SBram Moolenaarenddef 1301803af686SBram Moolenaar 13028e1986e3SBram Moolenaardef Test_import_in_filetype() 13038e1986e3SBram Moolenaar # check that :import works when the buffer is locked 13048e1986e3SBram Moolenaar mkdir('ftplugin', 'p') 1305cfcd011fSBram Moolenaar var export_lines =<< trim END 13068e1986e3SBram Moolenaar vim9script 1307cfcd011fSBram Moolenaar export var That = 'yes' 13088e1986e3SBram Moolenaar END 1309730b2483SBram Moolenaar writefile(export_lines, 'ftplugin/Xexport_ft.vim') 13108e1986e3SBram Moolenaar 1311cfcd011fSBram Moolenaar var import_lines =<< trim END 13128e1986e3SBram Moolenaar vim9script 1313730b2483SBram Moolenaar import That from './Xexport_ft.vim' 13148e1986e3SBram Moolenaar assert_equal('yes', That) 13158e1986e3SBram Moolenaar g:did_load_mytpe = 1 13168e1986e3SBram Moolenaar END 13178e1986e3SBram Moolenaar writefile(import_lines, 'ftplugin/qf.vim') 13188e1986e3SBram Moolenaar 1319cfcd011fSBram Moolenaar var save_rtp = &rtp 13208e1986e3SBram Moolenaar &rtp = getcwd() .. ',' .. &rtp 13218e1986e3SBram Moolenaar 13228e1986e3SBram Moolenaar filetype plugin on 13238e1986e3SBram Moolenaar copen 13248e1986e3SBram Moolenaar assert_equal(1, g:did_load_mytpe) 13258e1986e3SBram Moolenaar 13268e1986e3SBram Moolenaar quit! 1327730b2483SBram Moolenaar delete('Xexport_ft.vim') 13288e1986e3SBram Moolenaar delete('ftplugin', 'rf') 13298e1986e3SBram Moolenaar &rtp = save_rtp 13308e1986e3SBram Moolenaarenddef 13318e1986e3SBram Moolenaar 1332efa94447SBram Moolenaardef Test_use_import_in_mapping() 1333cfcd011fSBram Moolenaar var lines =<< trim END 1334efa94447SBram Moolenaar vim9script 1335efa94447SBram Moolenaar export def Funcx() 1336efa94447SBram Moolenaar g:result = 42 1337efa94447SBram Moolenaar enddef 1338efa94447SBram Moolenaar END 1339efa94447SBram Moolenaar writefile(lines, 'XsomeExport.vim') 1340efa94447SBram Moolenaar lines =<< trim END 1341efa94447SBram Moolenaar vim9script 1342efa94447SBram Moolenaar import Funcx from './XsomeExport.vim' 1343b3ca9824SBram Moolenaar nnoremap <F3> :call <sid>Funcx()<cr> 1344efa94447SBram Moolenaar END 1345efa94447SBram Moolenaar writefile(lines, 'Xmapscript.vim') 1346efa94447SBram Moolenaar 1347efa94447SBram Moolenaar source Xmapscript.vim 1348b3ca9824SBram Moolenaar feedkeys("\<F3>", "xt") 1349efa94447SBram Moolenaar assert_equal(42, g:result) 1350efa94447SBram Moolenaar 1351efa94447SBram Moolenaar unlet g:result 1352efa94447SBram Moolenaar delete('XsomeExport.vim') 1353efa94447SBram Moolenaar delete('Xmapscript.vim') 1354b3ca9824SBram Moolenaar nunmap <F3> 1355efa94447SBram Moolenaarenddef 1356efa94447SBram Moolenaar 1357d3f8a9eeSBram Moolenaardef Test_vim9script_mix() 1358d3f8a9eeSBram Moolenaar var lines =<< trim END 1359d3f8a9eeSBram Moolenaar if has(g:feature) 1360d3f8a9eeSBram Moolenaar " legacy script 1361d3f8a9eeSBram Moolenaar let g:legacy = 1 1362d3f8a9eeSBram Moolenaar finish 1363d3f8a9eeSBram Moolenaar endif 1364d3f8a9eeSBram Moolenaar vim9script 1365d3f8a9eeSBram Moolenaar g:legacy = 0 1366d3f8a9eeSBram Moolenaar END 1367d3f8a9eeSBram Moolenaar g:feature = 'eval' 1368d3f8a9eeSBram Moolenaar g:legacy = -1 1369d3f8a9eeSBram Moolenaar CheckScriptSuccess(lines) 1370d3f8a9eeSBram Moolenaar assert_equal(1, g:legacy) 1371d3f8a9eeSBram Moolenaar 1372d3f8a9eeSBram Moolenaar g:feature = 'noteval' 1373d3f8a9eeSBram Moolenaar g:legacy = -1 1374d3f8a9eeSBram Moolenaar CheckScriptSuccess(lines) 1375d3f8a9eeSBram Moolenaar assert_equal(0, g:legacy) 1376d3f8a9eeSBram Moolenaarenddef 1377d3f8a9eeSBram Moolenaar 1378750802b5SBram Moolenaardef Test_vim9script_fails() 13798a7d6542SBram Moolenaar CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:') 13808a7d6542SBram Moolenaar CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:') 1381cfcd011fSBram Moolenaar CheckScriptFailure(['export var some = 123'], 'E1042:') 13829721fb4eSBram Moolenaar CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1048:') 1383cfcd011fSBram Moolenaar CheckScriptFailure(['vim9script', 'export var g:some'], 'E1022:') 1384750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:') 1385750802b5SBram Moolenaar 1386cfcd011fSBram Moolenaar CheckScriptFailure(['vim9script', 'var str: string', 'str = 1234'], 'E1012:') 1387c785b9a7SBram Moolenaar CheckScriptFailure(['vim9script', 'const str = "asdf"', 'str = "xxx"'], 'E46:') 1388c785b9a7SBram Moolenaar 1389e2e4075fSBram Moolenaar assert_fails('vim9script', 'E1038:') 1390e2e4075fSBram Moolenaar assert_fails('export something', 'E1043:') 13918a7d6542SBram Moolenaarenddef 13928a7d6542SBram Moolenaar 1393f7d267efSBram Moolenaarfunc Test_import_fails_without_script() 1394101f4810SBram Moolenaar CheckRunVimInTerminal 1395101f4810SBram Moolenaar 13969bb3eb3eSBram Moolenaar " call indirectly to avoid compilation error for missing functions 1397c620c055SBram Moolenaar call Run_Test_import_fails_on_command_line() 13989bb3eb3eSBram Moolenaarendfunc 13999bb3eb3eSBram Moolenaar 1400c620c055SBram Moolenaardef Run_Test_import_fails_on_command_line() 1401cfcd011fSBram Moolenaar var export =<< trim END 1402101f4810SBram Moolenaar vim9script 1403101f4810SBram Moolenaar export def Foo(): number 1404101f4810SBram Moolenaar return 0 1405101f4810SBram Moolenaar enddef 1406101f4810SBram Moolenaar END 1407730b2483SBram Moolenaar writefile(export, 'XexportCmd.vim') 1408101f4810SBram Moolenaar 1409e0de171eSBram Moolenaar var buf = RunVimInTerminal('-c "import Foo from ''./XexportCmd.vim''"', { 14109bb3eb3eSBram Moolenaar rows: 6, wait_for_ruler: 0}) 14112949cfdbSBram Moolenaar WaitForAssert(() => assert_match('^E1094:', term_getline(buf, 5))) 1412101f4810SBram Moolenaar 1413730b2483SBram Moolenaar delete('XexportCmd.vim') 14149bb3eb3eSBram Moolenaar StopVimInTerminal(buf) 14159bb3eb3eSBram Moolenaarenddef 1416101f4810SBram Moolenaar 14172b32700dSBram Moolenaardef Test_vim9script_reload_noclear() 14182b32700dSBram Moolenaar var lines =<< trim END 1419a6294955SBram Moolenaar vim9script 1420a6294955SBram Moolenaar export var exported = 'thexport' 1421a6294955SBram Moolenaar END 1422a6294955SBram Moolenaar writefile(lines, 'XExportReload') 1423a6294955SBram Moolenaar lines =<< trim END 14242b32700dSBram Moolenaar vim9script noclear 14252b32700dSBram Moolenaar g:loadCount += 1 14262b32700dSBram Moolenaar var s:reloaded = 'init' 1427a6294955SBram Moolenaar import exported from './XExportReload' 14282b32700dSBram Moolenaar 14292b32700dSBram Moolenaar def Again(): string 14302b32700dSBram Moolenaar return 'again' 14312b32700dSBram Moolenaar enddef 14322b32700dSBram Moolenaar 14332b32700dSBram Moolenaar if exists('s:loaded') | finish | endif 14342b32700dSBram Moolenaar var s:loaded = true 14352b32700dSBram Moolenaar 14362b32700dSBram Moolenaar var s:notReloaded = 'yes' 14372b32700dSBram Moolenaar s:reloaded = 'first' 14382b32700dSBram Moolenaar def g:Values(): list<string> 1439a6294955SBram Moolenaar return [s:reloaded, s:notReloaded, Again(), Once(), exported] 14402b32700dSBram Moolenaar enddef 14412b32700dSBram Moolenaar 14422b32700dSBram Moolenaar def Once(): string 14432b32700dSBram Moolenaar return 'once' 14442b32700dSBram Moolenaar enddef 14452b32700dSBram Moolenaar END 14462b32700dSBram Moolenaar writefile(lines, 'XReloaded') 14472b32700dSBram Moolenaar g:loadCount = 0 14482b32700dSBram Moolenaar source XReloaded 14492b32700dSBram Moolenaar assert_equal(1, g:loadCount) 1450a6294955SBram Moolenaar assert_equal(['first', 'yes', 'again', 'once', 'thexport'], g:Values()) 14512b32700dSBram Moolenaar source XReloaded 14522b32700dSBram Moolenaar assert_equal(2, g:loadCount) 1453a6294955SBram Moolenaar assert_equal(['init', 'yes', 'again', 'once', 'thexport'], g:Values()) 14542b32700dSBram Moolenaar source XReloaded 14552b32700dSBram Moolenaar assert_equal(3, g:loadCount) 1456a6294955SBram Moolenaar assert_equal(['init', 'yes', 'again', 'once', 'thexport'], g:Values()) 14572b32700dSBram Moolenaar 145848e11c10SBram Moolenaar delete('XReloaded') 1459a6294955SBram Moolenaar delete('XExportReload') 14602b32700dSBram Moolenaar delfunc g:Values 14612b32700dSBram Moolenaar unlet g:loadCount 14622b32700dSBram Moolenaarenddef 14632b32700dSBram Moolenaar 14644c17ad94SBram Moolenaardef Test_vim9script_reload_import() 1465cfcd011fSBram Moolenaar var lines =<< trim END 14668a7d6542SBram Moolenaar vim9script 14678a7d6542SBram Moolenaar const var = '' 1468cfcd011fSBram Moolenaar var valone = 1234 14698a7d6542SBram Moolenaar def MyFunc(arg: string) 14708a7d6542SBram Moolenaar valone = 5678 14718a7d6542SBram Moolenaar enddef 14728a7d6542SBram Moolenaar END 1473cfcd011fSBram Moolenaar var morelines =<< trim END 1474cfcd011fSBram Moolenaar var valtwo = 222 14758a7d6542SBram Moolenaar export def GetValtwo(): number 14768a7d6542SBram Moolenaar return valtwo 14778a7d6542SBram Moolenaar enddef 14788a7d6542SBram Moolenaar END 147903afdcf1SBram Moolenaar writefile(lines + morelines, 'Xreload.vim') 14808a7d6542SBram Moolenaar source Xreload.vim 14818a7d6542SBram Moolenaar source Xreload.vim 14828a7d6542SBram Moolenaar source Xreload.vim 14838a7d6542SBram Moolenaar 1484cfcd011fSBram Moolenaar var testlines =<< trim END 14858a7d6542SBram Moolenaar vim9script 14868a7d6542SBram Moolenaar def TheFunc() 14878a7d6542SBram Moolenaar import GetValtwo from './Xreload.vim' 14888a7d6542SBram Moolenaar assert_equal(222, GetValtwo()) 14898a7d6542SBram Moolenaar enddef 14908a7d6542SBram Moolenaar TheFunc() 14918a7d6542SBram Moolenaar END 14928a7d6542SBram Moolenaar writefile(testlines, 'Ximport.vim') 14938a7d6542SBram Moolenaar source Ximport.vim 14948a7d6542SBram Moolenaar 1495f5be8cdbSBram Moolenaar # Test that when not using "morelines" GetValtwo() and valtwo are still 1496f5be8cdbSBram Moolenaar # defined, because import doesn't reload a script. 14978a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 14988a7d6542SBram Moolenaar source Ximport.vim 14998a7d6542SBram Moolenaar 1500f5be8cdbSBram Moolenaar # cannot declare a var twice 15018a7d6542SBram Moolenaar lines =<< trim END 15028a7d6542SBram Moolenaar vim9script 1503cfcd011fSBram Moolenaar var valone = 1234 1504cfcd011fSBram Moolenaar var valone = 5678 15058a7d6542SBram Moolenaar END 15068a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 150744d6652dSBram Moolenaar assert_fails('source Xreload.vim', 'E1041:', '', 3, 'Xreload.vim') 15088a7d6542SBram Moolenaar 15098a7d6542SBram Moolenaar delete('Xreload.vim') 15108a7d6542SBram Moolenaar delete('Ximport.vim') 15118a7d6542SBram Moolenaarenddef 15128a7d6542SBram Moolenaar 151307a65d26SBram Moolenaar" if a script is reloaded with a script-local variable that changed its type, a 151407a65d26SBram Moolenaar" compiled function using that variable must fail. 151507a65d26SBram Moolenaardef Test_script_reload_change_type() 151607a65d26SBram Moolenaar var lines =<< trim END 151707a65d26SBram Moolenaar vim9script noclear 151807a65d26SBram Moolenaar var str = 'string' 151907a65d26SBram Moolenaar def g:GetStr(): string 152007a65d26SBram Moolenaar return str .. 'xxx' 152107a65d26SBram Moolenaar enddef 152207a65d26SBram Moolenaar END 152307a65d26SBram Moolenaar writefile(lines, 'Xreload.vim') 152407a65d26SBram Moolenaar source Xreload.vim 152507a65d26SBram Moolenaar echo g:GetStr() 152607a65d26SBram Moolenaar 152707a65d26SBram Moolenaar lines =<< trim END 152807a65d26SBram Moolenaar vim9script noclear 152907a65d26SBram Moolenaar var str = 1234 153007a65d26SBram Moolenaar END 153107a65d26SBram Moolenaar writefile(lines, 'Xreload.vim') 153207a65d26SBram Moolenaar source Xreload.vim 153307a65d26SBram Moolenaar assert_fails('echo g:GetStr()', 'E1150:') 153407a65d26SBram Moolenaar 153507a65d26SBram Moolenaar delfunc g:GetStr 153607a65d26SBram Moolenaar delete('Xreload.vim') 153707a65d26SBram Moolenaarenddef 153807a65d26SBram Moolenaar 15396c3843caSBram Moolenaardef Test_script_var_shadows_function() 15406c3843caSBram Moolenaar var lines =<< trim END 15416c3843caSBram Moolenaar vim9script 15426c3843caSBram Moolenaar def Func(): number 15436c3843caSBram Moolenaar return 123 15446c3843caSBram Moolenaar enddef 15456c3843caSBram Moolenaar var Func = 1 15466c3843caSBram Moolenaar END 15476c3843caSBram Moolenaar CheckScriptFailure(lines, 'E1041:', 5) 15486c3843caSBram Moolenaarenddef 15496c3843caSBram Moolenaar 155095006e3dSBram Moolenaardef s:RetSome(): string 155195006e3dSBram Moolenaar return 'some' 155295006e3dSBram Moolenaarenddef 155395006e3dSBram Moolenaar 1554fe465a01SBram Moolenaar" Not exported function that is referenced needs to be accessed by the 1555fe465a01SBram Moolenaar" script-local name. 1556fe465a01SBram Moolenaardef Test_vim9script_funcref() 1557cfcd011fSBram Moolenaar var sortlines =<< trim END 1558fe465a01SBram Moolenaar vim9script 1559fe465a01SBram Moolenaar def Compare(i1: number, i2: number): number 1560bed36b93SBram Moolenaar return i2 - i1 1561fe465a01SBram Moolenaar enddef 1562fe465a01SBram Moolenaar 1563fe465a01SBram Moolenaar export def FastSort(): list<number> 1564fe465a01SBram Moolenaar return range(5)->sort(Compare) 1565fe465a01SBram Moolenaar enddef 1566fe465a01SBram Moolenaar END 1567fe465a01SBram Moolenaar writefile(sortlines, 'Xsort.vim') 1568fe465a01SBram Moolenaar 1569cfcd011fSBram Moolenaar var lines =<< trim END 1570fe465a01SBram Moolenaar vim9script 1571fe465a01SBram Moolenaar import FastSort from './Xsort.vim' 1572fe465a01SBram Moolenaar def Test() 1573fe465a01SBram Moolenaar g:result = FastSort() 1574fe465a01SBram Moolenaar enddef 1575fe465a01SBram Moolenaar Test() 1576fe465a01SBram Moolenaar END 1577fe465a01SBram Moolenaar writefile(lines, 'Xscript.vim') 1578fe465a01SBram Moolenaar 1579fe465a01SBram Moolenaar source Xscript.vim 1580fe465a01SBram Moolenaar assert_equal([4, 3, 2, 1, 0], g:result) 1581fe465a01SBram Moolenaar 1582fe465a01SBram Moolenaar unlet g:result 1583fe465a01SBram Moolenaar delete('Xsort.vim') 1584fe465a01SBram Moolenaar delete('Xscript.vim') 158595006e3dSBram Moolenaar 1586cfcd011fSBram Moolenaar var Funcref = function('s:RetSome') 158795006e3dSBram Moolenaar assert_equal('some', Funcref()) 1588fe465a01SBram Moolenaarenddef 1589fe465a01SBram Moolenaar 1590601e76acSBram Moolenaar" Check that when searching for "FilterFunc" it finds the import in the 1591601e76acSBram Moolenaar" script where FastFilter() is called from, both as a string and as a direct 1592601e76acSBram Moolenaar" function reference. 1593c620c055SBram Moolenaardef Test_vim9script_funcref_other_script() 1594cfcd011fSBram Moolenaar var filterLines =<< trim END 1595c620c055SBram Moolenaar vim9script 1596c620c055SBram Moolenaar export def FilterFunc(idx: number, val: number): bool 1597c620c055SBram Moolenaar return idx % 2 == 1 1598c620c055SBram Moolenaar enddef 1599c620c055SBram Moolenaar export def FastFilter(): list<number> 1600c620c055SBram Moolenaar return range(10)->filter('FilterFunc') 1601c620c055SBram Moolenaar enddef 1602601e76acSBram Moolenaar export def FastFilterDirect(): list<number> 1603601e76acSBram Moolenaar return range(10)->filter(FilterFunc) 1604601e76acSBram Moolenaar enddef 1605c620c055SBram Moolenaar END 1606c620c055SBram Moolenaar writefile(filterLines, 'Xfilter.vim') 1607c620c055SBram Moolenaar 1608cfcd011fSBram Moolenaar var lines =<< trim END 1609c620c055SBram Moolenaar vim9script 1610601e76acSBram Moolenaar import {FilterFunc, FastFilter, FastFilterDirect} from './Xfilter.vim' 1611c620c055SBram Moolenaar def Test() 1612cfcd011fSBram Moolenaar var x: list<number> = FastFilter() 1613c620c055SBram Moolenaar enddef 1614c620c055SBram Moolenaar Test() 1615601e76acSBram Moolenaar def TestDirect() 1616cfcd011fSBram Moolenaar var x: list<number> = FastFilterDirect() 1617601e76acSBram Moolenaar enddef 1618601e76acSBram Moolenaar TestDirect() 1619c620c055SBram Moolenaar END 1620601e76acSBram Moolenaar CheckScriptSuccess(lines) 1621c620c055SBram Moolenaar delete('Xfilter.vim') 1622c620c055SBram Moolenaarenddef 1623c620c055SBram Moolenaar 16244c17ad94SBram Moolenaardef Test_vim9script_reload_delfunc() 1625cfcd011fSBram Moolenaar var first_lines =<< trim END 16264c17ad94SBram Moolenaar vim9script 16274c17ad94SBram Moolenaar def FuncYes(): string 16284c17ad94SBram Moolenaar return 'yes' 16294c17ad94SBram Moolenaar enddef 16304c17ad94SBram Moolenaar END 1631cfcd011fSBram Moolenaar var withno_lines =<< trim END 16324c17ad94SBram Moolenaar def FuncNo(): string 16334c17ad94SBram Moolenaar return 'no' 16344c17ad94SBram Moolenaar enddef 16354c17ad94SBram Moolenaar def g:DoCheck(no_exists: bool) 16364c17ad94SBram Moolenaar assert_equal('yes', FuncYes()) 16374c17ad94SBram Moolenaar assert_equal('no', FuncNo()) 163803afdcf1SBram Moolenaar enddef 163903afdcf1SBram Moolenaar END 1640cfcd011fSBram Moolenaar var nono_lines =<< trim END 164103afdcf1SBram Moolenaar def g:DoCheck(no_exists: bool) 164203afdcf1SBram Moolenaar assert_equal('yes', FuncYes()) 164344d6652dSBram Moolenaar assert_fails('FuncNo()', 'E117:', '', 2, 'DoCheck') 16444c17ad94SBram Moolenaar enddef 16454c17ad94SBram Moolenaar END 16464c17ad94SBram Moolenaar 16474c17ad94SBram Moolenaar # FuncNo() is defined 164803afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 16494c17ad94SBram Moolenaar source Xreloaded.vim 16504c17ad94SBram Moolenaar g:DoCheck(true) 16514c17ad94SBram Moolenaar 16524c17ad94SBram Moolenaar # FuncNo() is not redefined 165303afdcf1SBram Moolenaar writefile(first_lines + nono_lines, 'Xreloaded.vim') 16544c17ad94SBram Moolenaar source Xreloaded.vim 16555082471fSBram Moolenaar g:DoCheck(false) 16564c17ad94SBram Moolenaar 16574c17ad94SBram Moolenaar # FuncNo() is back 165803afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 16594c17ad94SBram Moolenaar source Xreloaded.vim 16605082471fSBram Moolenaar g:DoCheck(false) 16614c17ad94SBram Moolenaar 16624c17ad94SBram Moolenaar delete('Xreloaded.vim') 16634c17ad94SBram Moolenaarenddef 16644c17ad94SBram Moolenaar 166589483d40SBram Moolenaardef Test_vim9script_reload_delvar() 166689483d40SBram Moolenaar # write the script with a script-local variable 1667cfcd011fSBram Moolenaar var lines =<< trim END 166889483d40SBram Moolenaar vim9script 1669cfcd011fSBram Moolenaar var name = 'string' 167089483d40SBram Moolenaar END 167189483d40SBram Moolenaar writefile(lines, 'XreloadVar.vim') 167289483d40SBram Moolenaar source XreloadVar.vim 167389483d40SBram Moolenaar 167489483d40SBram Moolenaar # now write the script using the same variable locally - works 167589483d40SBram Moolenaar lines =<< trim END 167689483d40SBram Moolenaar vim9script 167789483d40SBram Moolenaar def Func() 1678cfcd011fSBram Moolenaar var name = 'string' 167989483d40SBram Moolenaar enddef 168089483d40SBram Moolenaar END 168189483d40SBram Moolenaar writefile(lines, 'XreloadVar.vim') 168289483d40SBram Moolenaar source XreloadVar.vim 168389483d40SBram Moolenaar 168489483d40SBram Moolenaar delete('XreloadVar.vim') 168589483d40SBram Moolenaarenddef 168689483d40SBram Moolenaar 16878a7d6542SBram Moolenaardef Test_import_absolute() 1688cfcd011fSBram Moolenaar var import_lines = [ 1689e6085c53SBram Moolenaar 'vim9script', 1690e6085c53SBram Moolenaar 'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"', 1691e6085c53SBram Moolenaar 'def UseExported()', 1692e6085c53SBram Moolenaar ' g:imported_abs = exported', 1693e6085c53SBram Moolenaar ' exported = 8888', 1694e6085c53SBram Moolenaar ' g:imported_after = exported', 1695e6085c53SBram Moolenaar 'enddef', 1696e6085c53SBram Moolenaar 'UseExported()', 1697e6085c53SBram Moolenaar 'g:import_disassembled = execute("disass UseExported")', 1698e6085c53SBram Moolenaar ] 16998a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_abs.vim') 17008a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport_abs.vim') 17018a7d6542SBram Moolenaar 17028a7d6542SBram Moolenaar source Ximport_abs.vim 17038a7d6542SBram Moolenaar 17048a7d6542SBram Moolenaar assert_equal(9876, g:imported_abs) 17054e12a5dfSBram Moolenaar assert_equal(8888, g:imported_after) 1706fbbcd003SBram Moolenaar assert_match('<SNR>\d\+_UseExported\_s*' .. 1707fbbcd003SBram Moolenaar 'g:imported_abs = exported\_s*' .. 1708fbbcd003SBram Moolenaar '0 LOADSCRIPT exported-2 from .*Xexport_abs.vim\_s*' .. 1709fbbcd003SBram Moolenaar '1 STOREG g:imported_abs\_s*' .. 1710fbbcd003SBram Moolenaar 'exported = 8888\_s*' .. 1711fbbcd003SBram Moolenaar '2 PUSHNR 8888\_s*' .. 1712fbbcd003SBram Moolenaar '3 STORESCRIPT exported-2 in .*Xexport_abs.vim\_s*' .. 1713fbbcd003SBram Moolenaar 'g:imported_after = exported\_s*' .. 1714fbbcd003SBram Moolenaar '4 LOADSCRIPT exported-2 from .*Xexport_abs.vim\_s*' .. 1715fbbcd003SBram Moolenaar '5 STOREG g:imported_after', 1716e6085c53SBram Moolenaar g:import_disassembled) 1717b3ca9824SBram Moolenaar 1718b3ca9824SBram Moolenaar Undo_export_script_lines() 17198a7d6542SBram Moolenaar unlet g:imported_abs 17204e12a5dfSBram Moolenaar unlet g:import_disassembled 17218a7d6542SBram Moolenaar 17228a7d6542SBram Moolenaar delete('Ximport_abs.vim') 17238a7d6542SBram Moolenaar delete('Xexport_abs.vim') 17248a7d6542SBram Moolenaarenddef 17258a7d6542SBram Moolenaar 17268a7d6542SBram Moolenaardef Test_import_rtp() 1727cfcd011fSBram Moolenaar var import_lines = [ 1728e6085c53SBram Moolenaar 'vim9script', 1729e6085c53SBram Moolenaar 'import exported from "Xexport_rtp.vim"', 1730e6085c53SBram Moolenaar 'g:imported_rtp = exported', 1731e6085c53SBram Moolenaar ] 17328a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_rtp.vim') 17338a7d6542SBram Moolenaar mkdir('import') 17348a7d6542SBram Moolenaar writefile(s:export_script_lines, 'import/Xexport_rtp.vim') 17358a7d6542SBram Moolenaar 1736cfcd011fSBram Moolenaar var save_rtp = &rtp 17378a7d6542SBram Moolenaar &rtp = getcwd() 17388a7d6542SBram Moolenaar source Ximport_rtp.vim 17398a7d6542SBram Moolenaar &rtp = save_rtp 17408a7d6542SBram Moolenaar 17418a7d6542SBram Moolenaar assert_equal(9876, g:imported_rtp) 17428a7d6542SBram Moolenaar 1743b3ca9824SBram Moolenaar Undo_export_script_lines() 1744b3ca9824SBram Moolenaar unlet g:imported_rtp 17458a7d6542SBram Moolenaar delete('Ximport_rtp.vim') 174689483d40SBram Moolenaar delete('import', 'rf') 17478a7d6542SBram Moolenaarenddef 17488a7d6542SBram Moolenaar 174925e0f586SBram Moolenaardef Test_import_compile_error() 1750cfcd011fSBram Moolenaar var export_lines = [ 175125e0f586SBram Moolenaar 'vim9script', 175225e0f586SBram Moolenaar 'export def ExpFunc(): string', 175325e0f586SBram Moolenaar ' return notDefined', 175425e0f586SBram Moolenaar 'enddef', 175525e0f586SBram Moolenaar ] 175625e0f586SBram Moolenaar writefile(export_lines, 'Xexported.vim') 175725e0f586SBram Moolenaar 1758cfcd011fSBram Moolenaar var import_lines = [ 175925e0f586SBram Moolenaar 'vim9script', 176025e0f586SBram Moolenaar 'import ExpFunc from "./Xexported.vim"', 176125e0f586SBram Moolenaar 'def ImpFunc()', 176225e0f586SBram Moolenaar ' echo ExpFunc()', 176325e0f586SBram Moolenaar 'enddef', 176425e0f586SBram Moolenaar 'defcompile', 176525e0f586SBram Moolenaar ] 176625e0f586SBram Moolenaar writefile(import_lines, 'Ximport.vim') 176725e0f586SBram Moolenaar 176825e0f586SBram Moolenaar try 176925e0f586SBram Moolenaar source Ximport.vim 177025e0f586SBram Moolenaar catch /E1001/ 1771f5be8cdbSBram Moolenaar # Error should be fore the Xexported.vim file. 17727707228aSBram Moolenaar assert_match('E1001: Variable not found: notDefined', v:exception) 177325e0f586SBram Moolenaar assert_match('function <SNR>\d\+_ImpFunc\[1\]..<SNR>\d\+_ExpFunc, line 1', v:throwpoint) 177425e0f586SBram Moolenaar endtry 177525e0f586SBram Moolenaar 177625e0f586SBram Moolenaar delete('Xexported.vim') 177725e0f586SBram Moolenaar delete('Ximport.vim') 177825e0f586SBram Moolenaarenddef 177925e0f586SBram Moolenaar 1780c4ce36d4SBram Moolenaardef Test_func_redefine_error() 1781cfcd011fSBram Moolenaar var lines = [ 1782c4ce36d4SBram Moolenaar 'vim9script', 1783c4ce36d4SBram Moolenaar 'def Func()', 1784c4ce36d4SBram Moolenaar ' eval [][0]', 1785c4ce36d4SBram Moolenaar 'enddef', 1786c4ce36d4SBram Moolenaar 'Func()', 1787c4ce36d4SBram Moolenaar ] 1788c4ce36d4SBram Moolenaar writefile(lines, 'Xtestscript.vim') 1789c4ce36d4SBram Moolenaar 1790c4ce36d4SBram Moolenaar for count in range(3) 1791c4ce36d4SBram Moolenaar try 1792c4ce36d4SBram Moolenaar source Xtestscript.vim 1793c4ce36d4SBram Moolenaar catch /E684/ 1794c4ce36d4SBram Moolenaar # function name should contain <SNR> every time 1795c4ce36d4SBram Moolenaar assert_match('E684: list index out of range', v:exception) 1796c4ce36d4SBram Moolenaar assert_match('function <SNR>\d\+_Func, line 1', v:throwpoint) 1797c4ce36d4SBram Moolenaar endtry 1798c4ce36d4SBram Moolenaar endfor 1799c4ce36d4SBram Moolenaar 1800c4ce36d4SBram Moolenaar delete('Xtestscript.vim') 1801c4ce36d4SBram Moolenaarenddef 1802c4ce36d4SBram Moolenaar 1803eef2102eSBram Moolenaardef Test_func_overrules_import_fails() 1804cfcd011fSBram Moolenaar var export_lines =<< trim END 1805eef2102eSBram Moolenaar vim9script 1806eef2102eSBram Moolenaar export def Func() 1807eef2102eSBram Moolenaar echo 'imported' 1808eef2102eSBram Moolenaar enddef 1809eef2102eSBram Moolenaar END 1810eef2102eSBram Moolenaar writefile(export_lines, 'XexportedFunc.vim') 1811eef2102eSBram Moolenaar 1812cfcd011fSBram Moolenaar var lines =<< trim END 1813eef2102eSBram Moolenaar vim9script 1814eef2102eSBram Moolenaar import Func from './XexportedFunc.vim' 1815eef2102eSBram Moolenaar def Func() 1816eef2102eSBram Moolenaar echo 'local to function' 1817eef2102eSBram Moolenaar enddef 1818eef2102eSBram Moolenaar END 1819eef2102eSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1820eef2102eSBram Moolenaar 1821eef2102eSBram Moolenaar lines =<< trim END 1822eef2102eSBram Moolenaar vim9script 1823eef2102eSBram Moolenaar import Func from './XexportedFunc.vim' 1824eef2102eSBram Moolenaar def Outer() 1825eef2102eSBram Moolenaar def Func() 1826eef2102eSBram Moolenaar echo 'local to function' 1827eef2102eSBram Moolenaar enddef 1828eef2102eSBram Moolenaar enddef 1829eef2102eSBram Moolenaar defcompile 1830eef2102eSBram Moolenaar END 1831eef2102eSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1832eef2102eSBram Moolenaar 1833eef2102eSBram Moolenaar delete('XexportedFunc.vim') 1834eef2102eSBram Moolenaarenddef 1835eef2102eSBram Moolenaar 1836b9a2cac3SBram Moolenaardef Test_func_redefine_fails() 1837cfcd011fSBram Moolenaar var lines =<< trim END 1838b9a2cac3SBram Moolenaar vim9script 1839b9a2cac3SBram Moolenaar def Func() 1840b9a2cac3SBram Moolenaar echo 'one' 1841b9a2cac3SBram Moolenaar enddef 1842b9a2cac3SBram Moolenaar def Func() 1843b9a2cac3SBram Moolenaar echo 'two' 1844b9a2cac3SBram Moolenaar enddef 1845b9a2cac3SBram Moolenaar END 1846b9a2cac3SBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1847fa211f3cSBram Moolenaar 1848fa211f3cSBram Moolenaar lines =<< trim END 1849fa211f3cSBram Moolenaar vim9script 1850fa211f3cSBram Moolenaar def Foo(): string 1851fa211f3cSBram Moolenaar return 'foo' 1852fa211f3cSBram Moolenaar enddef 1853fa211f3cSBram Moolenaar def Func() 1854cfcd011fSBram Moolenaar var Foo = {-> 'lambda'} 1855fa211f3cSBram Moolenaar enddef 1856fa211f3cSBram Moolenaar defcompile 1857fa211f3cSBram Moolenaar END 1858fa211f3cSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1859b9a2cac3SBram Moolenaarenddef 1860b9a2cac3SBram Moolenaar 18618a7d6542SBram Moolenaardef Test_fixed_size_list() 1862f5be8cdbSBram Moolenaar # will be allocated as one piece of memory, check that changes work 1863cfcd011fSBram Moolenaar var l = [1, 2, 3, 4] 18648a7d6542SBram Moolenaar l->remove(0) 18658a7d6542SBram Moolenaar l->add(5) 18668a7d6542SBram Moolenaar l->insert(99, 1) 18670f18b6d1SBram Moolenaar assert_equal([2, 99, 3, 4, 5], l) 18688a7d6542SBram Moolenaarenddef 18698a7d6542SBram Moolenaar 1870ae616494SBram Moolenaardef Test_no_insert_xit() 1871d2c61705SBram Moolenaar CheckDefExecFailure(['a = 1'], 'E1100:') 1872d2c61705SBram Moolenaar CheckDefExecFailure(['c = 1'], 'E1100:') 1873d2c61705SBram Moolenaar CheckDefExecFailure(['i = 1'], 'E1100:') 1874d2c61705SBram Moolenaar CheckDefExecFailure(['t = 1'], 'E1100:') 1875d2c61705SBram Moolenaar CheckDefExecFailure(['x = 1'], 'E1100:') 1876ae616494SBram Moolenaar 1877ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'a = 1'], 'E488:') 1878ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'a'], 'E1100:') 1879ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'c = 1'], 'E488:') 1880ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'c'], 'E1100:') 1881f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'i = 1'], 'E488:') 1882f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'i'], 'E1100:') 1883*6508880dSBram Moolenaar CheckScriptFailure(['vim9script', 'o = 1'], 'E1100:') 1884*6508880dSBram Moolenaar CheckScriptFailure(['vim9script', 'o'], 'E1100:') 1885f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 't'], 'E1100:') 1886f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 't = 1'], 'E1100:') 1887f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'x = 1'], 'E1100:') 1888ae616494SBram Moolenaarenddef 1889ae616494SBram Moolenaar 1890158906cfSBram Moolenaardef IfElse(what: number): string 1891cfcd011fSBram Moolenaar var res = '' 1892158906cfSBram Moolenaar if what == 1 1893158906cfSBram Moolenaar res = "one" 1894158906cfSBram Moolenaar elseif what == 2 1895158906cfSBram Moolenaar res = "two" 1896a259d8d3SBram Moolenaar else 1897158906cfSBram Moolenaar res = "three" 1898a259d8d3SBram Moolenaar endif 1899158906cfSBram Moolenaar return res 1900a259d8d3SBram Moolenaarenddef 1901a259d8d3SBram Moolenaar 1902158906cfSBram Moolenaardef Test_if_elseif_else() 1903158906cfSBram Moolenaar assert_equal('one', IfElse(1)) 1904158906cfSBram Moolenaar assert_equal('two', IfElse(2)) 1905158906cfSBram Moolenaar assert_equal('three', IfElse(3)) 19060f18b6d1SBram Moolenaarenddef 19070f18b6d1SBram Moolenaar 1908e8c4abbbSBram Moolenaardef Test_if_elseif_else_fails() 1909d2c61705SBram Moolenaar CheckDefFailure(['elseif true'], 'E582:') 1910d2c61705SBram Moolenaar CheckDefFailure(['else'], 'E581:') 1911d2c61705SBram Moolenaar CheckDefFailure(['endif'], 'E580:') 1912ced68a00SBram Moolenaar CheckDefFailure(['if g:abool', 'elseif xxx'], 'E1001:') 1913d2c61705SBram Moolenaar CheckDefFailure(['if true', 'echo 1'], 'E171:') 19146628b7ebSBram Moolenaar 19156628b7ebSBram Moolenaar var lines =<< trim END 19166628b7ebSBram Moolenaar var s = '' 19176628b7ebSBram Moolenaar if s = '' 19186628b7ebSBram Moolenaar endif 19196628b7ebSBram Moolenaar END 19206628b7ebSBram Moolenaar CheckDefFailure(lines, 'E488:') 19216628b7ebSBram Moolenaar 19226628b7ebSBram Moolenaar lines =<< trim END 19236628b7ebSBram Moolenaar var s = '' 19246628b7ebSBram Moolenaar if s == '' 19256628b7ebSBram Moolenaar elseif s = '' 19266628b7ebSBram Moolenaar endif 19276628b7ebSBram Moolenaar END 19286628b7ebSBram Moolenaar CheckDefFailure(lines, 'E488:') 1929e8c4abbbSBram Moolenaarenddef 1930e8c4abbbSBram Moolenaar 19316d69bf60SBram Moolenaarlet g:bool_true = v:true 19326d69bf60SBram Moolenaarlet g:bool_false = v:false 19336d69bf60SBram Moolenaar 19346d69bf60SBram Moolenaardef Test_if_const_expr() 1935cfcd011fSBram Moolenaar var res = false 19366d69bf60SBram Moolenaar if true ? true : false 19376d69bf60SBram Moolenaar res = true 19386d69bf60SBram Moolenaar endif 19396d69bf60SBram Moolenaar assert_equal(true, res) 19406d69bf60SBram Moolenaar 1941585fea7bSBram Moolenaar g:glob = 2 1942585fea7bSBram Moolenaar if false 19436797966dSBram Moolenaar execute('g:glob = 3') 1944585fea7bSBram Moolenaar endif 1945585fea7bSBram Moolenaar assert_equal(2, g:glob) 1946585fea7bSBram Moolenaar if true 19476797966dSBram Moolenaar execute('g:glob = 3') 1948585fea7bSBram Moolenaar endif 1949585fea7bSBram Moolenaar assert_equal(3, g:glob) 1950585fea7bSBram Moolenaar 19516d69bf60SBram Moolenaar res = false 19526d69bf60SBram Moolenaar if g:bool_true ? true : false 19536d69bf60SBram Moolenaar res = true 19546d69bf60SBram Moolenaar endif 19556d69bf60SBram Moolenaar assert_equal(true, res) 19566d69bf60SBram Moolenaar 19576d69bf60SBram Moolenaar res = false 19586d69bf60SBram Moolenaar if true ? g:bool_true : false 19596d69bf60SBram Moolenaar res = true 19606d69bf60SBram Moolenaar endif 19616d69bf60SBram Moolenaar assert_equal(true, res) 19626d69bf60SBram Moolenaar 19636d69bf60SBram Moolenaar res = false 19646d69bf60SBram Moolenaar if true ? true : g:bool_false 19656d69bf60SBram Moolenaar res = true 19666d69bf60SBram Moolenaar endif 19676d69bf60SBram Moolenaar assert_equal(true, res) 19686d69bf60SBram Moolenaar 19696d69bf60SBram Moolenaar res = false 19706d69bf60SBram Moolenaar if true ? false : true 19716d69bf60SBram Moolenaar res = true 19726d69bf60SBram Moolenaar endif 19736d69bf60SBram Moolenaar assert_equal(false, res) 19746d69bf60SBram Moolenaar 19756d69bf60SBram Moolenaar res = false 19766d69bf60SBram Moolenaar if false ? false : true 19776d69bf60SBram Moolenaar res = true 19786d69bf60SBram Moolenaar endif 19796d69bf60SBram Moolenaar assert_equal(true, res) 19806d69bf60SBram Moolenaar 19816d69bf60SBram Moolenaar res = false 19826d69bf60SBram Moolenaar if false ? true : false 19836d69bf60SBram Moolenaar res = true 19846d69bf60SBram Moolenaar endif 19856d69bf60SBram Moolenaar assert_equal(false, res) 19866d69bf60SBram Moolenaar 19876d69bf60SBram Moolenaar res = false 1988e8c4abbbSBram Moolenaar if has('xyz') ? true : false 1989e8c4abbbSBram Moolenaar res = true 1990e8c4abbbSBram Moolenaar endif 1991e8c4abbbSBram Moolenaar assert_equal(false, res) 1992e8c4abbbSBram Moolenaar 1993e8c4abbbSBram Moolenaar res = false 19946d69bf60SBram Moolenaar if true && true 19956d69bf60SBram Moolenaar res = true 19966d69bf60SBram Moolenaar endif 19976d69bf60SBram Moolenaar assert_equal(true, res) 19986d69bf60SBram Moolenaar 19996d69bf60SBram Moolenaar res = false 20006d69bf60SBram Moolenaar if true && false 20016d69bf60SBram Moolenaar res = true 20026d69bf60SBram Moolenaar endif 20036d69bf60SBram Moolenaar assert_equal(false, res) 20046d69bf60SBram Moolenaar 20056d69bf60SBram Moolenaar res = false 20066d69bf60SBram Moolenaar if g:bool_true && false 20076d69bf60SBram Moolenaar res = true 20086d69bf60SBram Moolenaar endif 20096d69bf60SBram Moolenaar assert_equal(false, res) 20106d69bf60SBram Moolenaar 20116d69bf60SBram Moolenaar res = false 20126d69bf60SBram Moolenaar if true && g:bool_false 20136d69bf60SBram Moolenaar res = true 20146d69bf60SBram Moolenaar endif 20156d69bf60SBram Moolenaar assert_equal(false, res) 20166d69bf60SBram Moolenaar 20176d69bf60SBram Moolenaar res = false 20186d69bf60SBram Moolenaar if false && false 20196d69bf60SBram Moolenaar res = true 20206d69bf60SBram Moolenaar endif 20216d69bf60SBram Moolenaar assert_equal(false, res) 20226d69bf60SBram Moolenaar 20236d69bf60SBram Moolenaar res = false 20246d69bf60SBram Moolenaar if true || false 20256d69bf60SBram Moolenaar res = true 20266d69bf60SBram Moolenaar endif 20276d69bf60SBram Moolenaar assert_equal(true, res) 20286d69bf60SBram Moolenaar 20296d69bf60SBram Moolenaar res = false 20306d69bf60SBram Moolenaar if g:bool_true || false 20316d69bf60SBram Moolenaar res = true 20326d69bf60SBram Moolenaar endif 20336d69bf60SBram Moolenaar assert_equal(true, res) 20346d69bf60SBram Moolenaar 20356d69bf60SBram Moolenaar res = false 20366d69bf60SBram Moolenaar if true || g:bool_false 20376d69bf60SBram Moolenaar res = true 20386d69bf60SBram Moolenaar endif 20396d69bf60SBram Moolenaar assert_equal(true, res) 20406d69bf60SBram Moolenaar 20416d69bf60SBram Moolenaar res = false 20426d69bf60SBram Moolenaar if false || false 20436d69bf60SBram Moolenaar res = true 20446d69bf60SBram Moolenaar endif 20456d69bf60SBram Moolenaar assert_equal(false, res) 20463988f64fSBram Moolenaar 20473988f64fSBram Moolenaar # with constant "false" expression may be invalid so long as the syntax is OK 20483988f64fSBram Moolenaar if false | eval 0 | endif 20493988f64fSBram Moolenaar if false | eval burp + 234 | endif 20503988f64fSBram Moolenaar if false | echo burp 234 'asd' | endif 20513988f64fSBram Moolenaar if false 20523988f64fSBram Moolenaar burp 20533988f64fSBram Moolenaar endif 205480c34ca3SBram Moolenaarenddef 20556d69bf60SBram Moolenaar 205680c34ca3SBram Moolenaardef Test_if_const_expr_fails() 2057d2c61705SBram Moolenaar CheckDefFailure(['if "aaa" == "bbb'], 'E114:') 2058d2c61705SBram Moolenaar CheckDefFailure(["if 'aaa' == 'bbb"], 'E115:') 2059d2c61705SBram Moolenaar CheckDefFailure(["if has('aaa'"], 'E110:') 2060d2c61705SBram Moolenaar CheckDefFailure(["if has('aaa') ? true false"], 'E109:') 20616d69bf60SBram Moolenaarenddef 20626d69bf60SBram Moolenaar 206372abcf42SBram Moolenaardef RunNested(i: number): number 2064cfcd011fSBram Moolenaar var x: number = 0 206572abcf42SBram Moolenaar if i % 2 206672abcf42SBram Moolenaar if 1 2067f5be8cdbSBram Moolenaar # comment 206872abcf42SBram Moolenaar else 2069f5be8cdbSBram Moolenaar # comment 207072abcf42SBram Moolenaar endif 207172abcf42SBram Moolenaar x += 1 207272abcf42SBram Moolenaar else 207372abcf42SBram Moolenaar x += 1000 207472abcf42SBram Moolenaar endif 207572abcf42SBram Moolenaar return x 207672abcf42SBram Moolenaarenddef 207772abcf42SBram Moolenaar 207872abcf42SBram Moolenaardef Test_nested_if() 207972abcf42SBram Moolenaar assert_equal(1, RunNested(1)) 208072abcf42SBram Moolenaar assert_equal(1000, RunNested(2)) 208172abcf42SBram Moolenaarenddef 208272abcf42SBram Moolenaar 2083ad39c094SBram Moolenaardef Test_execute_cmd() 2084e4984290SBram Moolenaar # missing argument is ignored 2085e4984290SBram Moolenaar execute 2086e4984290SBram Moolenaar execute # comment 2087e4984290SBram Moolenaar 2088ad39c094SBram Moolenaar new 2089ad39c094SBram Moolenaar setline(1, 'default') 2090d2c61705SBram Moolenaar execute 'setline(1, "execute-string")' 2091ad39c094SBram Moolenaar assert_equal('execute-string', getline(1)) 2092a72cfb80SBram Moolenaar 2093d2c61705SBram Moolenaar execute "setline(1, 'execute-string')" 2094a72cfb80SBram Moolenaar assert_equal('execute-string', getline(1)) 2095a72cfb80SBram Moolenaar 2096cfcd011fSBram Moolenaar var cmd1 = 'setline(1,' 2097cfcd011fSBram Moolenaar var cmd2 = '"execute-var")' 2098a72cfb80SBram Moolenaar execute cmd1 cmd2 # comment 2099ad39c094SBram Moolenaar assert_equal('execute-var', getline(1)) 2100a72cfb80SBram Moolenaar 2101d2c61705SBram Moolenaar execute cmd1 cmd2 '|setline(1, "execute-var-string")' 2102ad39c094SBram Moolenaar assert_equal('execute-var-string', getline(1)) 2103a72cfb80SBram Moolenaar 2104cfcd011fSBram Moolenaar var cmd_first = 'call ' 2105cfcd011fSBram Moolenaar var cmd_last = 'setline(1, "execute-var-var")' 2106ad39c094SBram Moolenaar execute cmd_first .. cmd_last 2107ad39c094SBram Moolenaar assert_equal('execute-var-var', getline(1)) 2108ad39c094SBram Moolenaar bwipe! 2109585fea7bSBram Moolenaar 2110cfcd011fSBram Moolenaar var n = true 21112d6b20d6SBram Moolenaar execute 'echomsg' (n ? '"true"' : '"no"') 21122d6b20d6SBram Moolenaar assert_match('^true$', Screenline(&lines)) 21132d6b20d6SBram Moolenaar 2114e0de171eSBram Moolenaar echomsg [1, 2, 3] {a: 1, b: 2} 2115e5abf7afSBram Moolenaar assert_match('^\[1, 2, 3\] {''a'': 1, ''b'': 2}$', Screenline(&lines)) 2116e5abf7afSBram Moolenaar 2117d2c61705SBram Moolenaar CheckDefFailure(['execute xxx'], 'E1001:', 1) 2118d2c61705SBram Moolenaar CheckDefExecFailure(['execute "tabnext " .. 8'], 'E475:', 1) 2119d2c61705SBram Moolenaar CheckDefFailure(['execute "cmd"# comment'], 'E488:', 1) 2120ad39c094SBram Moolenaarenddef 2121ad39c094SBram Moolenaar 212247e880d6SBram Moolenaardef Test_execute_cmd_vimscript() 2123f5be8cdbSBram Moolenaar # only checks line continuation 2124cfcd011fSBram Moolenaar var lines =<< trim END 212547e880d6SBram Moolenaar vim9script 212647e880d6SBram Moolenaar execute 'g:someVar' 212747e880d6SBram Moolenaar .. ' = ' .. 212847e880d6SBram Moolenaar '28' 212947e880d6SBram Moolenaar assert_equal(28, g:someVar) 213047e880d6SBram Moolenaar unlet g:someVar 213147e880d6SBram Moolenaar END 213247e880d6SBram Moolenaar CheckScriptSuccess(lines) 213347e880d6SBram Moolenaarenddef 213447e880d6SBram Moolenaar 2135ad39c094SBram Moolenaardef Test_echo_cmd() 2136a72cfb80SBram Moolenaar echo 'some' # comment 2137585fea7bSBram Moolenaar echon 'thing' 2138ad39c094SBram Moolenaar assert_match('^something$', Screenline(&lines)) 2139ad39c094SBram Moolenaar 2140a72cfb80SBram Moolenaar echo "some" # comment 2141a72cfb80SBram Moolenaar echon "thing" 2142a72cfb80SBram Moolenaar assert_match('^something$', Screenline(&lines)) 2143a72cfb80SBram Moolenaar 2144cfcd011fSBram Moolenaar var str1 = 'some' 2145cfcd011fSBram Moolenaar var str2 = 'more' 2146ad39c094SBram Moolenaar echo str1 str2 2147ad39c094SBram Moolenaar assert_match('^some more$', Screenline(&lines)) 2148a72cfb80SBram Moolenaar 2149d2c61705SBram Moolenaar CheckDefFailure(['echo "xxx"# comment'], 'E488:') 2150ad39c094SBram Moolenaarenddef 2151ad39c094SBram Moolenaar 2152f93c7feaSBram Moolenaardef Test_echomsg_cmd() 2153f93c7feaSBram Moolenaar echomsg 'some' 'more' # comment 2154f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 2155f93c7feaSBram Moolenaar echo 'clear' 2156df069eecSBram Moolenaar :1messages 2157f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 2158f93c7feaSBram Moolenaar 2159d2c61705SBram Moolenaar CheckDefFailure(['echomsg "xxx"# comment'], 'E488:') 2160f93c7feaSBram Moolenaarenddef 2161f93c7feaSBram Moolenaar 216247e880d6SBram Moolenaardef Test_echomsg_cmd_vimscript() 2163f5be8cdbSBram Moolenaar # only checks line continuation 2164cfcd011fSBram Moolenaar var lines =<< trim END 216547e880d6SBram Moolenaar vim9script 216647e880d6SBram Moolenaar echomsg 'here' 216747e880d6SBram Moolenaar .. ' is ' .. 216847e880d6SBram Moolenaar 'a message' 216947e880d6SBram Moolenaar assert_match('^here is a message$', Screenline(&lines)) 217047e880d6SBram Moolenaar END 217147e880d6SBram Moolenaar CheckScriptSuccess(lines) 217247e880d6SBram Moolenaarenddef 217347e880d6SBram Moolenaar 2174f93c7feaSBram Moolenaardef Test_echoerr_cmd() 217540ee466cSBram Moolenaar try 217640ee466cSBram Moolenaar echoerr 'something' 'wrong' # comment 217740ee466cSBram Moolenaar catch 217840ee466cSBram Moolenaar assert_match('something wrong', v:exception) 217940ee466cSBram Moolenaar endtry 2180f93c7feaSBram Moolenaarenddef 2181f93c7feaSBram Moolenaar 218247e880d6SBram Moolenaardef Test_echoerr_cmd_vimscript() 2183f5be8cdbSBram Moolenaar # only checks line continuation 2184cfcd011fSBram Moolenaar var lines =<< trim END 218547e880d6SBram Moolenaar vim9script 218647e880d6SBram Moolenaar try 218747e880d6SBram Moolenaar echoerr 'this' 218847e880d6SBram Moolenaar .. ' is ' .. 218947e880d6SBram Moolenaar 'wrong' 219047e880d6SBram Moolenaar catch 219147e880d6SBram Moolenaar assert_match('this is wrong', v:exception) 219247e880d6SBram Moolenaar endtry 219347e880d6SBram Moolenaar END 219447e880d6SBram Moolenaar CheckScriptSuccess(lines) 219547e880d6SBram Moolenaarenddef 219647e880d6SBram Moolenaar 219741fe0617SBram Moolenaardef Test_for_outside_of_function() 2198cfcd011fSBram Moolenaar var lines =<< trim END 219941fe0617SBram Moolenaar vim9script 220041fe0617SBram Moolenaar new 220141fe0617SBram Moolenaar for var in range(0, 3) 220241fe0617SBram Moolenaar append(line('$'), var) 220341fe0617SBram Moolenaar endfor 220441fe0617SBram Moolenaar assert_equal(['', '0', '1', '2', '3'], getline(1, '$')) 220541fe0617SBram Moolenaar bwipe! 220641fe0617SBram Moolenaar END 220741fe0617SBram Moolenaar writefile(lines, 'Xvim9for.vim') 220841fe0617SBram Moolenaar source Xvim9for.vim 220941fe0617SBram Moolenaar delete('Xvim9for.vim') 221041fe0617SBram Moolenaarenddef 22118a7d6542SBram Moolenaar 2212e8c4abbbSBram Moolenaardef Test_for_loop() 2213cfcd011fSBram Moolenaar var result = '' 2214e8c4abbbSBram Moolenaar for cnt in range(7) 2215e8c4abbbSBram Moolenaar if cnt == 4 2216e8c4abbbSBram Moolenaar break 2217e8c4abbbSBram Moolenaar endif 2218e8c4abbbSBram Moolenaar if cnt == 2 2219e8c4abbbSBram Moolenaar continue 2220e8c4abbbSBram Moolenaar endif 2221e8c4abbbSBram Moolenaar result ..= cnt .. '_' 2222e8c4abbbSBram Moolenaar endfor 2223e8c4abbbSBram Moolenaar assert_equal('0_1_3_', result) 22240ad3e894SBram Moolenaar 2225cfcd011fSBram Moolenaar var concat = '' 22260ad3e894SBram Moolenaar for str in eval('["one", "two"]') 22270ad3e894SBram Moolenaar concat ..= str 22280ad3e894SBram Moolenaar endfor 22290ad3e894SBram Moolenaar assert_equal('onetwo', concat) 223038bd8de5SBram Moolenaar 223138bd8de5SBram Moolenaar var total = 0 223238bd8de5SBram Moolenaar for nr in 223338bd8de5SBram Moolenaar [1, 2, 3] 223438bd8de5SBram Moolenaar total += nr 223538bd8de5SBram Moolenaar endfor 223638bd8de5SBram Moolenaar assert_equal(6, total) 223738bd8de5SBram Moolenaar 223838bd8de5SBram Moolenaar total = 0 223938bd8de5SBram Moolenaar for nr 224038bd8de5SBram Moolenaar in [1, 2, 3] 224138bd8de5SBram Moolenaar total += nr 224238bd8de5SBram Moolenaar endfor 224338bd8de5SBram Moolenaar assert_equal(6, total) 224438bd8de5SBram Moolenaar 224538bd8de5SBram Moolenaar total = 0 224638bd8de5SBram Moolenaar for nr 224738bd8de5SBram Moolenaar in 224838bd8de5SBram Moolenaar [1, 2, 3] 224938bd8de5SBram Moolenaar total += nr 225038bd8de5SBram Moolenaar endfor 225138bd8de5SBram Moolenaar assert_equal(6, total) 2252036d0714SBram Moolenaar 2253036d0714SBram Moolenaar var res = "" 2254036d0714SBram Moolenaar for [n: number, s: string] in [[1, 'a'], [2, 'b']] 2255036d0714SBram Moolenaar res ..= n .. s 2256036d0714SBram Moolenaar endfor 2257036d0714SBram Moolenaar assert_equal('1a2b', res) 2258e8c4abbbSBram Moolenaarenddef 2259e8c4abbbSBram Moolenaar 2260e8c4abbbSBram Moolenaardef Test_for_loop_fails() 2261025cb1caSBram Moolenaar CheckDefFailure(['for '], 'E1097:') 2262025cb1caSBram Moolenaar CheckDefFailure(['for x'], 'E1097:') 2263025cb1caSBram Moolenaar CheckDefFailure(['for x in'], 'E1097:') 2264675f716eSBram Moolenaar CheckDefFailure(['for # in range(5)'], 'E690:') 2265675f716eSBram Moolenaar CheckDefFailure(['for i In range(5)'], 'E690:') 2266cfcd011fSBram Moolenaar CheckDefFailure(['var x = 5', 'for x in range(5)'], 'E1017:') 2267822ba247SBram Moolenaar CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef', 'defcompile'], 'E1006:') 22682d870f8dSBram Moolenaar delfunc! g:Func 2269451c2e35SBram Moolenaar CheckDefFailure(['for i in "text"'], 'E1012:') 2270675f716eSBram Moolenaar CheckDefFailure(['for i in xxx'], 'E1001:') 2271675f716eSBram Moolenaar CheckDefFailure(['endfor'], 'E588:') 2272675f716eSBram Moolenaar CheckDefFailure(['for i in range(3)', 'echo 3'], 'E170:') 2273e8c4abbbSBram Moolenaarenddef 2274e8c4abbbSBram Moolenaar 2275ea87069dSBram Moolenaardef Test_for_loop_script_var() 2276ea87069dSBram Moolenaar # cannot use s:var in a :def function 2277ea87069dSBram Moolenaar CheckDefFailure(['for s:var in range(3)', 'echo 3'], 'E1101:') 2278ea87069dSBram Moolenaar 2279ea87069dSBram Moolenaar # can use s:var in Vim9 script, with or without s: 2280ea87069dSBram Moolenaar var lines =<< trim END 2281ea87069dSBram Moolenaar vim9script 2282ea87069dSBram Moolenaar var total = 0 2283ea87069dSBram Moolenaar for s:var in [1, 2, 3] 2284ea87069dSBram Moolenaar total += s:var 2285ea87069dSBram Moolenaar endfor 2286ea87069dSBram Moolenaar assert_equal(6, total) 2287ea87069dSBram Moolenaar 2288ea87069dSBram Moolenaar total = 0 2289ea87069dSBram Moolenaar for var in [1, 2, 3] 2290ea87069dSBram Moolenaar total += var 2291ea87069dSBram Moolenaar endfor 2292ea87069dSBram Moolenaar assert_equal(6, total) 2293ea87069dSBram Moolenaar END 2294ea87069dSBram Moolenaarenddef 2295ea87069dSBram Moolenaar 2296792f786aSBram Moolenaardef Test_for_loop_unpack() 22974b8a0651SBram Moolenaar var lines =<< trim END 2298792f786aSBram Moolenaar var result = [] 2299792f786aSBram Moolenaar for [v1, v2] in [[1, 2], [3, 4]] 2300792f786aSBram Moolenaar result->add(v1) 2301792f786aSBram Moolenaar result->add(v2) 2302792f786aSBram Moolenaar endfor 2303792f786aSBram Moolenaar assert_equal([1, 2, 3, 4], result) 2304792f786aSBram Moolenaar 2305792f786aSBram Moolenaar result = [] 2306792f786aSBram Moolenaar for [v1, v2; v3] in [[1, 2], [3, 4, 5, 6]] 2307792f786aSBram Moolenaar result->add(v1) 2308792f786aSBram Moolenaar result->add(v2) 2309792f786aSBram Moolenaar result->add(v3) 2310792f786aSBram Moolenaar endfor 2311792f786aSBram Moolenaar assert_equal([1, 2, [], 3, 4, [5, 6]], result) 2312792f786aSBram Moolenaar 23134b8a0651SBram Moolenaar result = [] 23144b8a0651SBram Moolenaar for [&ts, &sw] in [[1, 2], [3, 4]] 23154b8a0651SBram Moolenaar result->add(&ts) 23164b8a0651SBram Moolenaar result->add(&sw) 23174b8a0651SBram Moolenaar endfor 23184b8a0651SBram Moolenaar assert_equal([1, 2, 3, 4], result) 23194b8a0651SBram Moolenaar 23204b8a0651SBram Moolenaar var slist: list<string> 23214b8a0651SBram Moolenaar for [$LOOPVAR, @r, v:errmsg] in [['a', 'b', 'c'], ['d', 'e', 'f']] 23224b8a0651SBram Moolenaar slist->add($LOOPVAR) 23234b8a0651SBram Moolenaar slist->add(@r) 23244b8a0651SBram Moolenaar slist->add(v:errmsg) 23254b8a0651SBram Moolenaar endfor 23264b8a0651SBram Moolenaar assert_equal(['a', 'b', 'c', 'd', 'e', 'f'], slist) 23274b8a0651SBram Moolenaar 23284b8a0651SBram Moolenaar slist = [] 23294b8a0651SBram Moolenaar for [g:globalvar, b:bufvar, w:winvar, t:tabvar] in [['global', 'buf', 'win', 'tab'], ['1', '2', '3', '4']] 23304b8a0651SBram Moolenaar slist->add(g:globalvar) 23314b8a0651SBram Moolenaar slist->add(b:bufvar) 23324b8a0651SBram Moolenaar slist->add(w:winvar) 23334b8a0651SBram Moolenaar slist->add(t:tabvar) 23344b8a0651SBram Moolenaar endfor 23354b8a0651SBram Moolenaar assert_equal(['global', 'buf', 'win', 'tab', '1', '2', '3', '4'], slist) 2336f6c177abSBram Moolenaar unlet! g:globalvar b:bufvar w:winvar t:tabvar 23374b8a0651SBram Moolenaar END 23384b8a0651SBram Moolenaar CheckDefAndScriptSuccess(lines) 23394b8a0651SBram Moolenaar 23404b8a0651SBram Moolenaar lines =<< trim END 2341792f786aSBram Moolenaar for [v1, v2] in [[1, 2, 3], [3, 4]] 2342792f786aSBram Moolenaar echo v1 v2 2343792f786aSBram Moolenaar endfor 2344792f786aSBram Moolenaar END 2345792f786aSBram Moolenaar CheckDefExecFailure(lines, 'E710:', 1) 2346792f786aSBram Moolenaar 2347792f786aSBram Moolenaar lines =<< trim END 2348792f786aSBram Moolenaar for [v1, v2] in [[1], [3, 4]] 2349792f786aSBram Moolenaar echo v1 v2 2350792f786aSBram Moolenaar endfor 2351792f786aSBram Moolenaar END 2352792f786aSBram Moolenaar CheckDefExecFailure(lines, 'E711:', 1) 2353792f786aSBram Moolenaar 2354792f786aSBram Moolenaar lines =<< trim END 2355792f786aSBram Moolenaar for [v1, v1] in [[1, 2], [3, 4]] 2356792f786aSBram Moolenaar echo v1 2357792f786aSBram Moolenaar endfor 2358792f786aSBram Moolenaar END 2359792f786aSBram Moolenaar CheckDefExecFailure(lines, 'E1017:', 1) 2360792f786aSBram Moolenaarenddef 2361792f786aSBram Moolenaar 2362c150c09eSBram Moolenaardef Test_for_loop_with_try_continue() 2363c150c09eSBram Moolenaar var looped = 0 2364c150c09eSBram Moolenaar var cleanup = 0 2365c150c09eSBram Moolenaar for i in range(3) 2366c150c09eSBram Moolenaar looped += 1 2367c150c09eSBram Moolenaar try 2368c150c09eSBram Moolenaar eval [][0] 2369c150c09eSBram Moolenaar catch 2370c150c09eSBram Moolenaar continue 2371c150c09eSBram Moolenaar finally 2372c150c09eSBram Moolenaar cleanup += 1 2373c150c09eSBram Moolenaar endtry 2374c150c09eSBram Moolenaar endfor 2375c150c09eSBram Moolenaar assert_equal(3, looped) 2376c150c09eSBram Moolenaar assert_equal(3, cleanup) 2377c150c09eSBram Moolenaarenddef 2378c150c09eSBram Moolenaar 2379d0df1aacSBram Moolenaardef Test_while_loop() 2380cfcd011fSBram Moolenaar var result = '' 2381cfcd011fSBram Moolenaar var cnt = 0 2382d0df1aacSBram Moolenaar while cnt < 555 2383d0df1aacSBram Moolenaar if cnt == 3 2384d0df1aacSBram Moolenaar break 2385d0df1aacSBram Moolenaar endif 2386d0df1aacSBram Moolenaar cnt += 1 2387d0df1aacSBram Moolenaar if cnt == 2 2388d0df1aacSBram Moolenaar continue 2389d0df1aacSBram Moolenaar endif 2390d0df1aacSBram Moolenaar result ..= cnt .. '_' 2391d0df1aacSBram Moolenaar endwhile 2392d0df1aacSBram Moolenaar assert_equal('1_3_', result) 2393dee37dc7SBram Moolenaar 2394dee37dc7SBram Moolenaar var s = '' 23950123cc1eSBram Moolenaar while s == 'x' #{comment} 2396dee37dc7SBram Moolenaar endwhile 2397d0df1aacSBram Moolenaarenddef 2398d0df1aacSBram Moolenaar 2399e8c4abbbSBram Moolenaardef Test_while_loop_fails() 2400675f716eSBram Moolenaar CheckDefFailure(['while xxx'], 'E1001:') 2401675f716eSBram Moolenaar CheckDefFailure(['endwhile'], 'E588:') 2402675f716eSBram Moolenaar CheckDefFailure(['continue'], 'E586:') 2403675f716eSBram Moolenaar CheckDefFailure(['if true', 'continue'], 'E586:') 2404675f716eSBram Moolenaar CheckDefFailure(['break'], 'E587:') 2405675f716eSBram Moolenaar CheckDefFailure(['if true', 'break'], 'E587:') 2406675f716eSBram Moolenaar CheckDefFailure(['while 1', 'echo 3'], 'E170:') 24076628b7ebSBram Moolenaar 24086628b7ebSBram Moolenaar var lines =<< trim END 24096628b7ebSBram Moolenaar var s = '' 24106628b7ebSBram Moolenaar while s = '' 24116628b7ebSBram Moolenaar endwhile 24126628b7ebSBram Moolenaar END 24136628b7ebSBram Moolenaar CheckDefFailure(lines, 'E488:') 2414bd5da371SBram Moolenaarenddef 2415bd5da371SBram Moolenaar 24169645e2d9SBram Moolenaardef Test_interrupt_loop() 2417cfcd011fSBram Moolenaar var caught = false 2418cfcd011fSBram Moolenaar var x = 0 241997acfc78SBram Moolenaar try 24209645e2d9SBram Moolenaar while 1 24219645e2d9SBram Moolenaar x += 1 24229645e2d9SBram Moolenaar if x == 100 24239645e2d9SBram Moolenaar feedkeys("\<C-C>", 'Lt') 24249645e2d9SBram Moolenaar endif 24259645e2d9SBram Moolenaar endwhile 242697acfc78SBram Moolenaar catch 242797acfc78SBram Moolenaar caught = true 242897acfc78SBram Moolenaar assert_equal(100, x) 242997acfc78SBram Moolenaar endtry 243097acfc78SBram Moolenaar assert_true(caught, 'should have caught an exception') 243125859dd7SBram Moolenaar # consume the CTRL-C 243225859dd7SBram Moolenaar getchar(0) 24339645e2d9SBram Moolenaarenddef 243420431c9dSBram Moolenaar 24354fdae999SBram Moolenaardef Test_automatic_line_continuation() 2436cfcd011fSBram Moolenaar var mylist = [ 24374fdae999SBram Moolenaar 'one', 24384fdae999SBram Moolenaar 'two', 24394fdae999SBram Moolenaar 'three', 2440f5be8cdbSBram Moolenaar ] # comment 24414fdae999SBram Moolenaar assert_equal(['one', 'two', 'three'], mylist) 24424fdae999SBram Moolenaar 2443cfcd011fSBram Moolenaar var mydict = { 2444e0de171eSBram Moolenaar ['one']: 1, 2445e0de171eSBram Moolenaar ['two']: 2, 2446e0de171eSBram Moolenaar ['three']: 24474fdae999SBram Moolenaar 3, 2448f5be8cdbSBram Moolenaar } # comment 2449e0de171eSBram Moolenaar assert_equal({one: 1, two: 2, three: 3}, mydict) 2450e0de171eSBram Moolenaar mydict = { 24512c330432SBram Moolenaar one: 1, # comment 24522c330432SBram Moolenaar two: # comment 24532c330432SBram Moolenaar 2, # comment 24542c330432SBram Moolenaar three: 3 # comment 24552c330432SBram Moolenaar } 2456e0de171eSBram Moolenaar assert_equal({one: 1, two: 2, three: 3}, mydict) 2457e0de171eSBram Moolenaar mydict = { 24582c330432SBram Moolenaar one: 1, 24594fdae999SBram Moolenaar two: 24604fdae999SBram Moolenaar 2, 24612c330432SBram Moolenaar three: 3 24624fdae999SBram Moolenaar } 2463e0de171eSBram Moolenaar assert_equal({one: 1, two: 2, three: 3}, mydict) 2464e6085c53SBram Moolenaar 2465e6085c53SBram Moolenaar assert_equal( 2466e6085c53SBram Moolenaar ['one', 'two', 'three'], 2467e6085c53SBram Moolenaar split('one two three') 2468e6085c53SBram Moolenaar ) 24694fdae999SBram Moolenaarenddef 24704fdae999SBram Moolenaar 24717a092245SBram Moolenaardef Test_vim9_comment() 24727a092245SBram Moolenaar CheckScriptSuccess([ 24737a092245SBram Moolenaar 'vim9script', 24747a092245SBram Moolenaar '# something', 247593f82cbeSBram Moolenaar '#something', 247693f82cbeSBram Moolenaar '#{something', 24777a092245SBram Moolenaar ]) 247893f82cbeSBram Moolenaar 247993f82cbeSBram Moolenaar split Xfile 248093f82cbeSBram Moolenaar CheckScriptSuccess([ 248193f82cbeSBram Moolenaar 'vim9script', 248293f82cbeSBram Moolenaar 'edit #something', 248393f82cbeSBram Moolenaar ]) 248493f82cbeSBram Moolenaar CheckScriptSuccess([ 248593f82cbeSBram Moolenaar 'vim9script', 248693f82cbeSBram Moolenaar 'edit #{something', 248793f82cbeSBram Moolenaar ]) 248893f82cbeSBram Moolenaar close 248993f82cbeSBram Moolenaar 24907a092245SBram Moolenaar CheckScriptFailure([ 24917a092245SBram Moolenaar 'vim9script', 24927a092245SBram Moolenaar ':# something', 24937a092245SBram Moolenaar ], 'E488:') 24947a092245SBram Moolenaar CheckScriptFailure([ 24957a092245SBram Moolenaar '# something', 24967a092245SBram Moolenaar ], 'E488:') 24977a092245SBram Moolenaar CheckScriptFailure([ 24987a092245SBram Moolenaar ':# something', 24997a092245SBram Moolenaar ], 'E488:') 25007a092245SBram Moolenaar 25014a8d9f2eSBram Moolenaar { # block start 25024a8d9f2eSBram Moolenaar } # block end 25034a8d9f2eSBram Moolenaar CheckDefFailure([ 25044a8d9f2eSBram Moolenaar '{# comment', 25054a8d9f2eSBram Moolenaar ], 'E488:') 25064a8d9f2eSBram Moolenaar CheckDefFailure([ 25074a8d9f2eSBram Moolenaar '{', 25084a8d9f2eSBram Moolenaar '}# comment', 25094a8d9f2eSBram Moolenaar ], 'E488:') 25104a8d9f2eSBram Moolenaar 25114a8d9f2eSBram Moolenaar echo "yes" # comment 25124a8d9f2eSBram Moolenaar CheckDefFailure([ 25134a8d9f2eSBram Moolenaar 'echo "yes"# comment', 25144a8d9f2eSBram Moolenaar ], 'E488:') 25157a092245SBram Moolenaar CheckScriptSuccess([ 25167a092245SBram Moolenaar 'vim9script', 25177a092245SBram Moolenaar 'echo "yes" # something', 25187a092245SBram Moolenaar ]) 25197a092245SBram Moolenaar CheckScriptFailure([ 25207a092245SBram Moolenaar 'vim9script', 25217a092245SBram Moolenaar 'echo "yes"# something', 25227a092245SBram Moolenaar ], 'E121:') 25237a092245SBram Moolenaar CheckScriptFailure([ 25247a092245SBram Moolenaar 'vim9script', 25257a092245SBram Moolenaar 'echo# something', 2526f8103f27SBram Moolenaar ], 'E1144:') 25277a092245SBram Moolenaar CheckScriptFailure([ 25287a092245SBram Moolenaar 'echo "yes" # something', 25297a092245SBram Moolenaar ], 'E121:') 25307a092245SBram Moolenaar 25314a8d9f2eSBram Moolenaar exe "echo" # comment 25324a8d9f2eSBram Moolenaar CheckDefFailure([ 25334a8d9f2eSBram Moolenaar 'exe "echo"# comment', 25344a8d9f2eSBram Moolenaar ], 'E488:') 25354a8d9f2eSBram Moolenaar CheckScriptSuccess([ 25364a8d9f2eSBram Moolenaar 'vim9script', 25374a8d9f2eSBram Moolenaar 'exe "echo" # something', 25384a8d9f2eSBram Moolenaar ]) 25394a8d9f2eSBram Moolenaar CheckScriptFailure([ 25404a8d9f2eSBram Moolenaar 'vim9script', 25414a8d9f2eSBram Moolenaar 'exe "echo"# something', 25424a8d9f2eSBram Moolenaar ], 'E121:') 25434a8d9f2eSBram Moolenaar CheckScriptFailure([ 25444a8d9f2eSBram Moolenaar 'vim9script', 25454a8d9f2eSBram Moolenaar 'exe# something', 2546f8103f27SBram Moolenaar ], 'E1144:') 25474a8d9f2eSBram Moolenaar CheckScriptFailure([ 25484a8d9f2eSBram Moolenaar 'exe "echo" # something', 25494a8d9f2eSBram Moolenaar ], 'E121:') 25504a8d9f2eSBram Moolenaar 25517a092245SBram Moolenaar CheckDefFailure([ 25527a092245SBram Moolenaar 'try# comment', 25537a092245SBram Moolenaar ' echo "yes"', 25547a092245SBram Moolenaar 'catch', 25557a092245SBram Moolenaar 'endtry', 2556f8103f27SBram Moolenaar ], 'E1144:') 25572c5ed4e3SBram Moolenaar CheckScriptFailure([ 25582c5ed4e3SBram Moolenaar 'vim9script', 25592c5ed4e3SBram Moolenaar 'try# comment', 25602c5ed4e3SBram Moolenaar 'echo "yes"', 2561f8103f27SBram Moolenaar ], 'E1144:') 25627a092245SBram Moolenaar CheckDefFailure([ 25637a092245SBram Moolenaar 'try', 2564a72cfb80SBram Moolenaar ' throw#comment', 2565a72cfb80SBram Moolenaar 'catch', 2566a72cfb80SBram Moolenaar 'endtry', 2567f8103f27SBram Moolenaar ], 'E1144:') 2568a72cfb80SBram Moolenaar CheckDefFailure([ 2569a72cfb80SBram Moolenaar 'try', 2570a72cfb80SBram Moolenaar ' throw "yes"#comment', 2571a72cfb80SBram Moolenaar 'catch', 2572a72cfb80SBram Moolenaar 'endtry', 2573a72cfb80SBram Moolenaar ], 'E488:') 2574a72cfb80SBram Moolenaar CheckDefFailure([ 2575a72cfb80SBram Moolenaar 'try', 25767a092245SBram Moolenaar ' echo "yes"', 25777a092245SBram Moolenaar 'catch# comment', 25787a092245SBram Moolenaar 'endtry', 2579f8103f27SBram Moolenaar ], 'E1144:') 25802c5ed4e3SBram Moolenaar CheckScriptFailure([ 25812c5ed4e3SBram Moolenaar 'vim9script', 25822c5ed4e3SBram Moolenaar 'try', 25832c5ed4e3SBram Moolenaar ' echo "yes"', 25842c5ed4e3SBram Moolenaar 'catch# comment', 25852c5ed4e3SBram Moolenaar 'endtry', 2586f8103f27SBram Moolenaar ], 'E1144:') 25872c5ed4e3SBram Moolenaar CheckDefFailure([ 25882c5ed4e3SBram Moolenaar 'try', 25892c5ed4e3SBram Moolenaar ' echo "yes"', 25902c5ed4e3SBram Moolenaar 'catch /pat/# comment', 25912c5ed4e3SBram Moolenaar 'endtry', 25922c5ed4e3SBram Moolenaar ], 'E488:') 25937a092245SBram Moolenaar CheckDefFailure([ 25947a092245SBram Moolenaar 'try', 25957a092245SBram Moolenaar 'echo "yes"', 25967a092245SBram Moolenaar 'catch', 25977a092245SBram Moolenaar 'endtry# comment', 2598f8103f27SBram Moolenaar ], 'E1144:') 25992c5ed4e3SBram Moolenaar CheckScriptFailure([ 26002c5ed4e3SBram Moolenaar 'vim9script', 26012c5ed4e3SBram Moolenaar 'try', 26022c5ed4e3SBram Moolenaar ' echo "yes"', 26032c5ed4e3SBram Moolenaar 'catch', 26042c5ed4e3SBram Moolenaar 'endtry# comment', 2605f8103f27SBram Moolenaar ], 'E1144:') 26062c5ed4e3SBram Moolenaar 26072c5ed4e3SBram Moolenaar CheckScriptSuccess([ 26082c5ed4e3SBram Moolenaar 'vim9script', 26092c5ed4e3SBram Moolenaar 'hi # comment', 26102c5ed4e3SBram Moolenaar ]) 26112c5ed4e3SBram Moolenaar CheckScriptFailure([ 26122c5ed4e3SBram Moolenaar 'vim9script', 26132c5ed4e3SBram Moolenaar 'hi# comment', 2614f8103f27SBram Moolenaar ], 'E1144:') 26151966c248SBram Moolenaar CheckScriptSuccess([ 26161966c248SBram Moolenaar 'vim9script', 26171966c248SBram Moolenaar 'hi Search # comment', 26181966c248SBram Moolenaar ]) 26191966c248SBram Moolenaar CheckScriptFailure([ 26201966c248SBram Moolenaar 'vim9script', 26211966c248SBram Moolenaar 'hi Search# comment', 26221966c248SBram Moolenaar ], 'E416:') 26231966c248SBram Moolenaar CheckScriptSuccess([ 26241966c248SBram Moolenaar 'vim9script', 26251966c248SBram Moolenaar 'hi link This Search # comment', 26261966c248SBram Moolenaar ]) 26271966c248SBram Moolenaar CheckScriptFailure([ 26281966c248SBram Moolenaar 'vim9script', 26291966c248SBram Moolenaar 'hi link This That# comment', 26301966c248SBram Moolenaar ], 'E413:') 26311966c248SBram Moolenaar CheckScriptSuccess([ 26321966c248SBram Moolenaar 'vim9script', 26331966c248SBram Moolenaar 'hi clear This # comment', 26341966c248SBram Moolenaar 'hi clear # comment', 26351966c248SBram Moolenaar ]) 2636f5be8cdbSBram Moolenaar # not tested, because it doesn't give an error but a warning: 2637f5be8cdbSBram Moolenaar # hi clear This# comment', 26381966c248SBram Moolenaar CheckScriptFailure([ 26391966c248SBram Moolenaar 'vim9script', 26401966c248SBram Moolenaar 'hi clear# comment', 26411966c248SBram Moolenaar ], 'E416:') 26421966c248SBram Moolenaar 26431966c248SBram Moolenaar CheckScriptSuccess([ 26441966c248SBram Moolenaar 'vim9script', 26451966c248SBram Moolenaar 'hi Group term=bold', 26461966c248SBram Moolenaar 'match Group /todo/ # comment', 26471966c248SBram Moolenaar ]) 26481966c248SBram Moolenaar CheckScriptFailure([ 26491966c248SBram Moolenaar 'vim9script', 26501966c248SBram Moolenaar 'hi Group term=bold', 26511966c248SBram Moolenaar 'match Group /todo/# comment', 26521966c248SBram Moolenaar ], 'E488:') 26531966c248SBram Moolenaar CheckScriptSuccess([ 26541966c248SBram Moolenaar 'vim9script', 26551966c248SBram Moolenaar 'match # comment', 26561966c248SBram Moolenaar ]) 26571966c248SBram Moolenaar CheckScriptFailure([ 26581966c248SBram Moolenaar 'vim9script', 26591966c248SBram Moolenaar 'match# comment', 2660f8103f27SBram Moolenaar ], 'E1144:') 26611966c248SBram Moolenaar CheckScriptSuccess([ 26621966c248SBram Moolenaar 'vim9script', 26631966c248SBram Moolenaar 'match none # comment', 26641966c248SBram Moolenaar ]) 26651966c248SBram Moolenaar CheckScriptFailure([ 26661966c248SBram Moolenaar 'vim9script', 26671966c248SBram Moolenaar 'match none# comment', 26681966c248SBram Moolenaar ], 'E475:') 26691966c248SBram Moolenaar 26701966c248SBram Moolenaar CheckScriptSuccess([ 26711966c248SBram Moolenaar 'vim9script', 26721966c248SBram Moolenaar 'menutrans clear # comment', 26731966c248SBram Moolenaar ]) 26741966c248SBram Moolenaar CheckScriptFailure([ 26751966c248SBram Moolenaar 'vim9script', 26761966c248SBram Moolenaar 'menutrans clear# comment text', 26771966c248SBram Moolenaar ], 'E474:') 26781966c248SBram Moolenaar 26791966c248SBram Moolenaar CheckScriptSuccess([ 26801966c248SBram Moolenaar 'vim9script', 26811966c248SBram Moolenaar 'syntax clear # comment', 26821966c248SBram Moolenaar ]) 26831966c248SBram Moolenaar CheckScriptFailure([ 26841966c248SBram Moolenaar 'vim9script', 26851966c248SBram Moolenaar 'syntax clear# comment text', 26861966c248SBram Moolenaar ], 'E28:') 26871966c248SBram Moolenaar CheckScriptSuccess([ 26881966c248SBram Moolenaar 'vim9script', 26891966c248SBram Moolenaar 'syntax keyword Word some', 26901966c248SBram Moolenaar 'syntax clear Word # comment', 26911966c248SBram Moolenaar ]) 26921966c248SBram Moolenaar CheckScriptFailure([ 26931966c248SBram Moolenaar 'vim9script', 26941966c248SBram Moolenaar 'syntax keyword Word some', 26951966c248SBram Moolenaar 'syntax clear Word# comment text', 26961966c248SBram Moolenaar ], 'E28:') 26971966c248SBram Moolenaar 26981966c248SBram Moolenaar CheckScriptSuccess([ 26991966c248SBram Moolenaar 'vim9script', 27001966c248SBram Moolenaar 'syntax list # comment', 27011966c248SBram Moolenaar ]) 27021966c248SBram Moolenaar CheckScriptFailure([ 27031966c248SBram Moolenaar 'vim9script', 27041966c248SBram Moolenaar 'syntax list# comment text', 27051966c248SBram Moolenaar ], 'E28:') 27061966c248SBram Moolenaar 27071966c248SBram Moolenaar CheckScriptSuccess([ 27081966c248SBram Moolenaar 'vim9script', 27091966c248SBram Moolenaar 'syntax match Word /pat/ oneline # comment', 27101966c248SBram Moolenaar ]) 27111966c248SBram Moolenaar CheckScriptFailure([ 27121966c248SBram Moolenaar 'vim9script', 27131966c248SBram Moolenaar 'syntax match Word /pat/ oneline# comment', 27141966c248SBram Moolenaar ], 'E475:') 27151966c248SBram Moolenaar 27161966c248SBram Moolenaar CheckScriptSuccess([ 27171966c248SBram Moolenaar 'vim9script', 27181966c248SBram Moolenaar 'syntax keyword Word word # comm[ent', 27191966c248SBram Moolenaar ]) 27201966c248SBram Moolenaar CheckScriptFailure([ 27211966c248SBram Moolenaar 'vim9script', 27221966c248SBram Moolenaar 'syntax keyword Word word# comm[ent', 27231966c248SBram Moolenaar ], 'E789:') 27241966c248SBram Moolenaar 27251966c248SBram Moolenaar CheckScriptSuccess([ 27261966c248SBram Moolenaar 'vim9script', 27271966c248SBram Moolenaar 'syntax match Word /pat/ # comment', 27281966c248SBram Moolenaar ]) 27291966c248SBram Moolenaar CheckScriptFailure([ 27301966c248SBram Moolenaar 'vim9script', 27311966c248SBram Moolenaar 'syntax match Word /pat/# comment', 27321966c248SBram Moolenaar ], 'E402:') 27331966c248SBram Moolenaar 27341966c248SBram Moolenaar CheckScriptSuccess([ 27351966c248SBram Moolenaar 'vim9script', 27361966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something # comment', 27371966c248SBram Moolenaar ]) 27381966c248SBram Moolenaar CheckScriptFailure([ 27391966c248SBram Moolenaar 'vim9script', 27401966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something# comment', 27411966c248SBram Moolenaar ], 'E475:') 27421966c248SBram Moolenaar CheckScriptFailure([ 27431966c248SBram Moolenaar 'vim9script', 27441966c248SBram Moolenaar 'syntax match Word /pat/ contains= # comment', 27451966c248SBram Moolenaar ], 'E406:') 27461966c248SBram Moolenaar CheckScriptFailure([ 27471966c248SBram Moolenaar 'vim9script', 27481966c248SBram Moolenaar 'syntax match Word /pat/ contains=# comment', 27491966c248SBram Moolenaar ], 'E475:') 27501966c248SBram Moolenaar 27511966c248SBram Moolenaar CheckScriptSuccess([ 27521966c248SBram Moolenaar 'vim9script', 27531966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/ # comment', 27541966c248SBram Moolenaar ]) 27551966c248SBram Moolenaar CheckScriptFailure([ 27561966c248SBram Moolenaar 'vim9script', 27571966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/# comment', 2758d032f34aSBram Moolenaar ], 'E402:') 27591966c248SBram Moolenaar 27601966c248SBram Moolenaar CheckScriptSuccess([ 27611966c248SBram Moolenaar 'vim9script', 27621966c248SBram Moolenaar 'syntax sync # comment', 27631966c248SBram Moolenaar ]) 27641966c248SBram Moolenaar CheckScriptFailure([ 27651966c248SBram Moolenaar 'vim9script', 27661966c248SBram Moolenaar 'syntax sync# comment', 27671966c248SBram Moolenaar ], 'E404:') 27681966c248SBram Moolenaar CheckScriptSuccess([ 27691966c248SBram Moolenaar 'vim9script', 27701966c248SBram Moolenaar 'syntax sync ccomment # comment', 27711966c248SBram Moolenaar ]) 27721966c248SBram Moolenaar CheckScriptFailure([ 27731966c248SBram Moolenaar 'vim9script', 27741966c248SBram Moolenaar 'syntax sync ccomment# comment', 27751966c248SBram Moolenaar ], 'E404:') 27761966c248SBram Moolenaar 27771966c248SBram Moolenaar CheckScriptSuccess([ 27781966c248SBram Moolenaar 'vim9script', 27791966c248SBram Moolenaar 'syntax cluster Some contains=Word # comment', 27801966c248SBram Moolenaar ]) 27811966c248SBram Moolenaar CheckScriptFailure([ 27821966c248SBram Moolenaar 'vim9script', 27831966c248SBram Moolenaar 'syntax cluster Some contains=Word# comment', 27841966c248SBram Moolenaar ], 'E475:') 2785a72cfb80SBram Moolenaar 2786a72cfb80SBram Moolenaar CheckScriptSuccess([ 2787a72cfb80SBram Moolenaar 'vim9script', 2788a72cfb80SBram Moolenaar 'command Echo echo # comment', 2789a72cfb80SBram Moolenaar 'command Echo # comment', 27902d870f8dSBram Moolenaar 'delcommand Echo', 2791a72cfb80SBram Moolenaar ]) 2792a72cfb80SBram Moolenaar CheckScriptFailure([ 2793a72cfb80SBram Moolenaar 'vim9script', 2794a72cfb80SBram Moolenaar 'command Echo echo# comment', 2795a72cfb80SBram Moolenaar 'Echo', 2796f8103f27SBram Moolenaar ], 'E1144:') 27972d870f8dSBram Moolenaar delcommand Echo 279870249ee8SBram Moolenaar 279970249ee8SBram Moolenaar var curdir = getcwd() 280070249ee8SBram Moolenaar CheckScriptSuccess([ 280170249ee8SBram Moolenaar 'command Echo cd " comment', 280270249ee8SBram Moolenaar 'Echo', 280370249ee8SBram Moolenaar 'delcommand Echo', 280470249ee8SBram Moolenaar ]) 280570249ee8SBram Moolenaar CheckScriptSuccess([ 2806090728adSBram Moolenaar 'vim9script', 280770249ee8SBram Moolenaar 'command Echo cd # comment', 280870249ee8SBram Moolenaar 'Echo', 280970249ee8SBram Moolenaar 'delcommand Echo', 281070249ee8SBram Moolenaar ]) 281170249ee8SBram Moolenaar CheckScriptFailure([ 281270249ee8SBram Moolenaar 'vim9script', 281370249ee8SBram Moolenaar 'command Echo cd " comment', 281470249ee8SBram Moolenaar 'Echo', 281570249ee8SBram Moolenaar ], 'E344:') 281670249ee8SBram Moolenaar delcommand Echo 281770249ee8SBram Moolenaar chdir(curdir) 281870249ee8SBram Moolenaar 2819a72cfb80SBram Moolenaar CheckScriptFailure([ 2820a72cfb80SBram Moolenaar 'vim9script', 2821a72cfb80SBram Moolenaar 'command Echo# comment', 2822a72cfb80SBram Moolenaar ], 'E182:') 2823a72cfb80SBram Moolenaar CheckScriptFailure([ 2824a72cfb80SBram Moolenaar 'vim9script', 2825a72cfb80SBram Moolenaar 'command Echo echo', 2826a72cfb80SBram Moolenaar 'command Echo# comment', 2827a72cfb80SBram Moolenaar ], 'E182:') 28282d870f8dSBram Moolenaar delcommand Echo 2829a72cfb80SBram Moolenaar 2830a72cfb80SBram Moolenaar CheckScriptSuccess([ 2831a72cfb80SBram Moolenaar 'vim9script', 2832a72cfb80SBram Moolenaar 'function # comment', 2833a72cfb80SBram Moolenaar ]) 2834a72cfb80SBram Moolenaar CheckScriptFailure([ 2835a72cfb80SBram Moolenaar 'vim9script', 28369898107fSBram Moolenaar 'function " comment', 28379898107fSBram Moolenaar ], 'E129:') 28389898107fSBram Moolenaar CheckScriptFailure([ 28399898107fSBram Moolenaar 'vim9script', 2840a72cfb80SBram Moolenaar 'function# comment', 2841f8103f27SBram Moolenaar ], 'E1144:') 2842a72cfb80SBram Moolenaar CheckScriptSuccess([ 2843a72cfb80SBram Moolenaar 'vim9script', 2844a72cfb80SBram Moolenaar 'function CheckScriptSuccess # comment', 2845a72cfb80SBram Moolenaar ]) 2846a72cfb80SBram Moolenaar CheckScriptFailure([ 2847a72cfb80SBram Moolenaar 'vim9script', 2848a72cfb80SBram Moolenaar 'function CheckScriptSuccess# comment', 2849a72cfb80SBram Moolenaar ], 'E488:') 2850a72cfb80SBram Moolenaar 2851a72cfb80SBram Moolenaar CheckScriptSuccess([ 2852a72cfb80SBram Moolenaar 'vim9script', 28534c17ad94SBram Moolenaar 'func g:DeleteMeA()', 2854a72cfb80SBram Moolenaar 'endfunc', 28554c17ad94SBram Moolenaar 'delfunction g:DeleteMeA # comment', 2856a72cfb80SBram Moolenaar ]) 2857a72cfb80SBram Moolenaar CheckScriptFailure([ 2858a72cfb80SBram Moolenaar 'vim9script', 28594c17ad94SBram Moolenaar 'func g:DeleteMeB()', 2860a72cfb80SBram Moolenaar 'endfunc', 28614c17ad94SBram Moolenaar 'delfunction g:DeleteMeB# comment', 2862a72cfb80SBram Moolenaar ], 'E488:') 2863a72cfb80SBram Moolenaar 2864a72cfb80SBram Moolenaar CheckScriptSuccess([ 2865a72cfb80SBram Moolenaar 'vim9script', 2866a72cfb80SBram Moolenaar 'call execute("ls") # comment', 2867a72cfb80SBram Moolenaar ]) 2868a72cfb80SBram Moolenaar CheckScriptFailure([ 2869a72cfb80SBram Moolenaar 'vim9script', 2870a72cfb80SBram Moolenaar 'call execute("ls")# comment', 2871a72cfb80SBram Moolenaar ], 'E488:') 2872e7e4838fSBram Moolenaar 2873e7e4838fSBram Moolenaar CheckScriptFailure([ 2874e7e4838fSBram Moolenaar 'def Test() " comment', 2875e7e4838fSBram Moolenaar 'enddef', 2876e7e4838fSBram Moolenaar ], 'E488:') 2877e7e4838fSBram Moolenaar CheckScriptFailure([ 2878e7e4838fSBram Moolenaar 'vim9script', 2879e7e4838fSBram Moolenaar 'def Test() " comment', 2880e7e4838fSBram Moolenaar 'enddef', 2881e7e4838fSBram Moolenaar ], 'E488:') 2882e7e4838fSBram Moolenaar 2883e7e4838fSBram Moolenaar CheckScriptSuccess([ 2884e7e4838fSBram Moolenaar 'func Test() " comment', 2885e7e4838fSBram Moolenaar 'endfunc', 28862d870f8dSBram Moolenaar 'delfunc Test', 2887e7e4838fSBram Moolenaar ]) 28889898107fSBram Moolenaar CheckScriptSuccess([ 2889e7e4838fSBram Moolenaar 'vim9script', 2890e7e4838fSBram Moolenaar 'func Test() " comment', 2891e7e4838fSBram Moolenaar 'endfunc', 28929898107fSBram Moolenaar ]) 2893e7e4838fSBram Moolenaar 2894e7e4838fSBram Moolenaar CheckScriptSuccess([ 2895e7e4838fSBram Moolenaar 'def Test() # comment', 2896e7e4838fSBram Moolenaar 'enddef', 2897e7e4838fSBram Moolenaar ]) 2898e7e4838fSBram Moolenaar CheckScriptFailure([ 2899e7e4838fSBram Moolenaar 'func Test() # comment', 2900e7e4838fSBram Moolenaar 'endfunc', 2901e7e4838fSBram Moolenaar ], 'E488:') 29022c5ed4e3SBram Moolenaarenddef 29032c5ed4e3SBram Moolenaar 29042c5ed4e3SBram Moolenaardef Test_vim9_comment_gui() 29052c5ed4e3SBram Moolenaar CheckCanRunGui 29062c5ed4e3SBram Moolenaar 29072c5ed4e3SBram Moolenaar CheckScriptFailure([ 29082c5ed4e3SBram Moolenaar 'vim9script', 29092c5ed4e3SBram Moolenaar 'gui#comment' 2910f8103f27SBram Moolenaar ], 'E1144:') 29112c5ed4e3SBram Moolenaar CheckScriptFailure([ 29122c5ed4e3SBram Moolenaar 'vim9script', 29132c5ed4e3SBram Moolenaar 'gui -f#comment' 29142c5ed4e3SBram Moolenaar ], 'E499:') 29157a092245SBram Moolenaarenddef 29167a092245SBram Moolenaar 2917a26b9700SBram Moolenaardef Test_vim9_comment_not_compiled() 29186797966dSBram Moolenaar au TabEnter *.vim g:entered = 1 29196797966dSBram Moolenaar au TabEnter *.x g:entered = 2 2920a26b9700SBram Moolenaar 2921a26b9700SBram Moolenaar edit test.vim 2922a26b9700SBram Moolenaar doautocmd TabEnter #comment 2923a26b9700SBram Moolenaar assert_equal(1, g:entered) 2924a26b9700SBram Moolenaar 2925a26b9700SBram Moolenaar doautocmd TabEnter f.x 2926a26b9700SBram Moolenaar assert_equal(2, g:entered) 2927a26b9700SBram Moolenaar 2928a26b9700SBram Moolenaar g:entered = 0 2929a26b9700SBram Moolenaar doautocmd TabEnter f.x #comment 2930a26b9700SBram Moolenaar assert_equal(2, g:entered) 2931a26b9700SBram Moolenaar 2932a26b9700SBram Moolenaar assert_fails('doautocmd Syntax#comment', 'E216:') 2933a26b9700SBram Moolenaar 2934a26b9700SBram Moolenaar au! TabEnter 2935a26b9700SBram Moolenaar unlet g:entered 2936d72c1bf0SBram Moolenaar 2937d72c1bf0SBram Moolenaar CheckScriptSuccess([ 2938d72c1bf0SBram Moolenaar 'vim9script', 29396797966dSBram Moolenaar 'g:var = 123', 2940e55b1c09SBram Moolenaar 'b:var = 456', 2941e55b1c09SBram Moolenaar 'w:var = 777', 2942e55b1c09SBram Moolenaar 't:var = 888', 2943d72c1bf0SBram Moolenaar 'unlet g:var w:var # something', 2944d72c1bf0SBram Moolenaar ]) 2945d72c1bf0SBram Moolenaar 2946d72c1bf0SBram Moolenaar CheckScriptFailure([ 2947d72c1bf0SBram Moolenaar 'vim9script', 2948cfcd011fSBram Moolenaar 'let var = 123', 2949cfcd011fSBram Moolenaar ], 'E1126: Cannot use :let in Vim9 script') 2950cfcd011fSBram Moolenaar 2951cfcd011fSBram Moolenaar CheckScriptFailure([ 2952cfcd011fSBram Moolenaar 'vim9script', 2953cfcd011fSBram Moolenaar 'var g:var = 123', 2954e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a global variable:') 2955e55b1c09SBram Moolenaar 2956e55b1c09SBram Moolenaar CheckScriptFailure([ 2957e55b1c09SBram Moolenaar 'vim9script', 2958cfcd011fSBram Moolenaar 'var b:var = 123', 2959e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a buffer variable:') 2960e55b1c09SBram Moolenaar 2961e55b1c09SBram Moolenaar CheckScriptFailure([ 2962e55b1c09SBram Moolenaar 'vim9script', 2963cfcd011fSBram Moolenaar 'var w:var = 123', 2964e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a window variable:') 2965e55b1c09SBram Moolenaar 2966e55b1c09SBram Moolenaar CheckScriptFailure([ 2967e55b1c09SBram Moolenaar 'vim9script', 2968cfcd011fSBram Moolenaar 'var t:var = 123', 2969e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a tab variable:') 2970e55b1c09SBram Moolenaar 2971e55b1c09SBram Moolenaar CheckScriptFailure([ 2972e55b1c09SBram Moolenaar 'vim9script', 2973cfcd011fSBram Moolenaar 'var v:version = 123', 2974e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a v: variable:') 2975e55b1c09SBram Moolenaar 2976e55b1c09SBram Moolenaar CheckScriptFailure([ 2977e55b1c09SBram Moolenaar 'vim9script', 2978cfcd011fSBram Moolenaar 'var $VARIABLE = "text"', 2979e55b1c09SBram Moolenaar ], 'E1016: Cannot declare an environment variable:') 29806797966dSBram Moolenaar 29816797966dSBram Moolenaar CheckScriptFailure([ 29826797966dSBram Moolenaar 'vim9script', 29836797966dSBram Moolenaar 'g:var = 123', 298432e35117SBram Moolenaar 'unlet g:var# comment1', 2985d72c1bf0SBram Moolenaar ], 'E108:') 2986d72c1bf0SBram Moolenaar 2987d72c1bf0SBram Moolenaar CheckScriptFailure([ 2988d72c1bf0SBram Moolenaar 'let g:var = 123', 2989d72c1bf0SBram Moolenaar 'unlet g:var # something', 2990d72c1bf0SBram Moolenaar ], 'E488:') 2991faac4104SBram Moolenaar 2992faac4104SBram Moolenaar CheckScriptSuccess([ 2993faac4104SBram Moolenaar 'vim9script', 299432e35117SBram Moolenaar 'if 1 # comment2', 2995faac4104SBram Moolenaar ' echo "yes"', 2996faac4104SBram Moolenaar 'elseif 2 #comment', 2997faac4104SBram Moolenaar ' echo "no"', 2998faac4104SBram Moolenaar 'endif', 2999faac4104SBram Moolenaar ]) 3000faac4104SBram Moolenaar 3001faac4104SBram Moolenaar CheckScriptFailure([ 3002faac4104SBram Moolenaar 'vim9script', 300332e35117SBram Moolenaar 'if 1# comment3', 3004faac4104SBram Moolenaar ' echo "yes"', 3005faac4104SBram Moolenaar 'endif', 3006faac4104SBram Moolenaar ], 'E15:') 3007faac4104SBram Moolenaar 3008faac4104SBram Moolenaar CheckScriptFailure([ 3009faac4104SBram Moolenaar 'vim9script', 301032e35117SBram Moolenaar 'if 0 # comment4', 3011faac4104SBram Moolenaar ' echo "yes"', 3012faac4104SBram Moolenaar 'elseif 2#comment', 3013faac4104SBram Moolenaar ' echo "no"', 3014faac4104SBram Moolenaar 'endif', 3015faac4104SBram Moolenaar ], 'E15:') 3016faac4104SBram Moolenaar 3017faac4104SBram Moolenaar CheckScriptSuccess([ 3018faac4104SBram Moolenaar 'vim9script', 3019cfcd011fSBram Moolenaar 'var v = 1 # comment5', 3020faac4104SBram Moolenaar ]) 3021faac4104SBram Moolenaar 3022faac4104SBram Moolenaar CheckScriptFailure([ 3023faac4104SBram Moolenaar 'vim9script', 3024cfcd011fSBram Moolenaar 'var v = 1# comment6', 302532e35117SBram Moolenaar ], 'E15:') 3026faac4104SBram Moolenaar 3027faac4104SBram Moolenaar CheckScriptSuccess([ 3028faac4104SBram Moolenaar 'vim9script', 3029faac4104SBram Moolenaar 'new' 3030d2c61705SBram Moolenaar 'setline(1, ["# define pat", "last"])', 3031df069eecSBram Moolenaar ':$', 3032faac4104SBram Moolenaar 'dsearch /pat/ #comment', 3033faac4104SBram Moolenaar 'bwipe!', 3034faac4104SBram Moolenaar ]) 3035faac4104SBram Moolenaar 3036f5be8cdbSBram Moolenaar CheckScriptFailure([ 3037f5be8cdbSBram Moolenaar 'vim9script', 3038f5be8cdbSBram Moolenaar 'new' 3039d2c61705SBram Moolenaar 'setline(1, ["# define pat", "last"])', 3040f5be8cdbSBram Moolenaar ':$', 3041f5be8cdbSBram Moolenaar 'dsearch /pat/#comment', 3042f5be8cdbSBram Moolenaar 'bwipe!', 3043f5be8cdbSBram Moolenaar ], 'E488:') 3044f5be8cdbSBram Moolenaar 3045f5be8cdbSBram Moolenaar CheckScriptFailure([ 3046f5be8cdbSBram Moolenaar 'vim9script', 3047f5be8cdbSBram Moolenaar 'func! SomeFunc()', 3048f5be8cdbSBram Moolenaar ], 'E477:') 3049a26b9700SBram Moolenaarenddef 3050a26b9700SBram Moolenaar 30517e5bd91dSBram Moolenaardef Test_finish() 3052cfcd011fSBram Moolenaar var lines =<< trim END 30537e5bd91dSBram Moolenaar vim9script 30546797966dSBram Moolenaar g:res = 'one' 30557e5bd91dSBram Moolenaar if v:false | finish | endif 30566797966dSBram Moolenaar g:res = 'two' 30577e5bd91dSBram Moolenaar finish 30586797966dSBram Moolenaar g:res = 'three' 30597e5bd91dSBram Moolenaar END 30607e5bd91dSBram Moolenaar writefile(lines, 'Xfinished') 30617e5bd91dSBram Moolenaar source Xfinished 30627e5bd91dSBram Moolenaar assert_equal('two', g:res) 30637e5bd91dSBram Moolenaar 30647e5bd91dSBram Moolenaar unlet g:res 30657e5bd91dSBram Moolenaar delete('Xfinished') 30667e5bd91dSBram Moolenaarenddef 30677e5bd91dSBram Moolenaar 3068a5d0077eSBram Moolenaardef Test_forward_declaration() 3069cfcd011fSBram Moolenaar var lines =<< trim END 3070a5d0077eSBram Moolenaar vim9script 3071a5d0077eSBram Moolenaar def GetValue(): string 3072a5d0077eSBram Moolenaar return theVal 3073a5d0077eSBram Moolenaar enddef 3074cfcd011fSBram Moolenaar var theVal = 'something' 3075822ba247SBram Moolenaar g:initVal = GetValue() 3076a5d0077eSBram Moolenaar theVal = 'else' 3077a5d0077eSBram Moolenaar g:laterVal = GetValue() 3078a5d0077eSBram Moolenaar END 3079a5d0077eSBram Moolenaar writefile(lines, 'Xforward') 3080a5d0077eSBram Moolenaar source Xforward 3081a5d0077eSBram Moolenaar assert_equal('something', g:initVal) 3082a5d0077eSBram Moolenaar assert_equal('else', g:laterVal) 3083a5d0077eSBram Moolenaar 3084a5d0077eSBram Moolenaar unlet g:initVal 3085a5d0077eSBram Moolenaar unlet g:laterVal 3086a5d0077eSBram Moolenaar delete('Xforward') 3087a5d0077eSBram Moolenaarenddef 3088a5d0077eSBram Moolenaar 30899721fb4eSBram Moolenaardef Test_source_vim9_from_legacy() 3090a6294955SBram Moolenaar var vim9_lines =<< trim END 3091a6294955SBram Moolenaar vim9script 3092a6294955SBram Moolenaar var local = 'local' 3093a6294955SBram Moolenaar g:global = 'global' 3094a6294955SBram Moolenaar export var exported = 'exported' 3095a6294955SBram Moolenaar export def GetText(): string 3096a6294955SBram Moolenaar return 'text' 3097a6294955SBram Moolenaar enddef 3098a6294955SBram Moolenaar END 3099a6294955SBram Moolenaar writefile(vim9_lines, 'Xvim9_script.vim') 3100a6294955SBram Moolenaar 3101cfcd011fSBram Moolenaar var legacy_lines =<< trim END 31029721fb4eSBram Moolenaar source Xvim9_script.vim 31039721fb4eSBram Moolenaar 31049721fb4eSBram Moolenaar call assert_false(exists('local')) 31059721fb4eSBram Moolenaar call assert_false(exists('exported')) 31069721fb4eSBram Moolenaar call assert_false(exists('s:exported')) 31079721fb4eSBram Moolenaar call assert_equal('global', global) 31089721fb4eSBram Moolenaar call assert_equal('global', g:global) 31099721fb4eSBram Moolenaar 31109721fb4eSBram Moolenaar " imported variable becomes script-local 31119721fb4eSBram Moolenaar import exported from './Xvim9_script.vim' 31129721fb4eSBram Moolenaar call assert_equal('exported', s:exported) 31139721fb4eSBram Moolenaar call assert_false(exists('exported')) 31149721fb4eSBram Moolenaar 31159721fb4eSBram Moolenaar " imported function becomes script-local 31169721fb4eSBram Moolenaar import GetText from './Xvim9_script.vim' 31179721fb4eSBram Moolenaar call assert_equal('text', s:GetText()) 31189721fb4eSBram Moolenaar call assert_false(exists('*GetText')) 31199721fb4eSBram Moolenaar END 31209721fb4eSBram Moolenaar writefile(legacy_lines, 'Xlegacy_script.vim') 31219721fb4eSBram Moolenaar 31229721fb4eSBram Moolenaar source Xlegacy_script.vim 31239721fb4eSBram Moolenaar assert_equal('global', g:global) 3124f5be8cdbSBram Moolenaar unlet g:global 31259721fb4eSBram Moolenaar 31269721fb4eSBram Moolenaar delete('Xlegacy_script.vim') 31279721fb4eSBram Moolenaar delete('Xvim9_script.vim') 31289721fb4eSBram Moolenaarenddef 3129a5d0077eSBram Moolenaar 31307d699701SBram Moolenaarfunc Test_vim9script_not_global() 31317d699701SBram Moolenaar " check that items defined in Vim9 script are script-local, not global 31327d699701SBram Moolenaar let vim9lines =<< trim END 31337d699701SBram Moolenaar vim9script 3134cfcd011fSBram Moolenaar var name = 'local' 31357d699701SBram Moolenaar func TheFunc() 31367d699701SBram Moolenaar echo 'local' 31377d699701SBram Moolenaar endfunc 31387d699701SBram Moolenaar def DefFunc() 31397d699701SBram Moolenaar echo 'local' 31407d699701SBram Moolenaar enddef 31417d699701SBram Moolenaar END 31427d699701SBram Moolenaar call writefile(vim9lines, 'Xvim9script.vim') 31437d699701SBram Moolenaar source Xvim9script.vim 31447d699701SBram Moolenaar try 31457d699701SBram Moolenaar echo g:var 31467d699701SBram Moolenaar assert_report('did not fail') 31477d699701SBram Moolenaar catch /E121:/ 31487d699701SBram Moolenaar " caught 31497d699701SBram Moolenaar endtry 31507d699701SBram Moolenaar try 31517d699701SBram Moolenaar call TheFunc() 31527d699701SBram Moolenaar assert_report('did not fail') 31537d699701SBram Moolenaar catch /E117:/ 31547d699701SBram Moolenaar " caught 31557d699701SBram Moolenaar endtry 31567d699701SBram Moolenaar try 31577d699701SBram Moolenaar call DefFunc() 31587d699701SBram Moolenaar assert_report('did not fail') 31597d699701SBram Moolenaar catch /E117:/ 31607d699701SBram Moolenaar " caught 31617d699701SBram Moolenaar endtry 31627d699701SBram Moolenaar 316325859dd7SBram Moolenaar call delete('Xvim9script.vim') 31647d699701SBram Moolenaarendfunc 31657d699701SBram Moolenaar 3166eeb27bfeSBram Moolenaardef Test_vim9_copen() 3167eeb27bfeSBram Moolenaar # this was giving an error for setting w:quickfix_title 3168eeb27bfeSBram Moolenaar copen 3169eeb27bfeSBram Moolenaar quit 3170eeb27bfeSBram Moolenaarenddef 3171eeb27bfeSBram Moolenaar 317203290b84SBram Moolenaar" test using an auto-loaded function and variable 31732d6b20d6SBram Moolenaardef Test_vim9_autoload() 3174cfcd011fSBram Moolenaar var lines =<< trim END 31752d6b20d6SBram Moolenaar vim9script 317603290b84SBram Moolenaar def some#gettest(): string 317703290b84SBram Moolenaar return 'test' 317803290b84SBram Moolenaar enddef 317903290b84SBram Moolenaar g:some#name = 'name' 3180e3ffcd99SBram Moolenaar 3181e3ffcd99SBram Moolenaar def some#varargs(a1: string, ...l: list<string>): string 3182e3ffcd99SBram Moolenaar return a1 .. l[0] .. l[1] 3183e3ffcd99SBram Moolenaar enddef 318403290b84SBram Moolenaar END 318503290b84SBram Moolenaar 318603290b84SBram Moolenaar mkdir('Xdir/autoload', 'p') 318703290b84SBram Moolenaar writefile(lines, 'Xdir/autoload/some.vim') 318803290b84SBram Moolenaar var save_rtp = &rtp 318903290b84SBram Moolenaar exe 'set rtp^=' .. getcwd() .. '/Xdir' 319003290b84SBram Moolenaar 319103290b84SBram Moolenaar assert_equal('test', g:some#gettest()) 319203290b84SBram Moolenaar assert_equal('name', g:some#name) 319303290b84SBram Moolenaar g:some#other = 'other' 319403290b84SBram Moolenaar assert_equal('other', g:some#other) 319503290b84SBram Moolenaar 3196e3ffcd99SBram Moolenaar assert_equal('abc', some#varargs('a', 'b', 'c')) 3197e3ffcd99SBram Moolenaar 319817f700acSBram Moolenaar # upper case script name works 319917f700acSBram Moolenaar lines =<< trim END 320017f700acSBram Moolenaar vim9script 320117f700acSBram Moolenaar def Other#getOther(): string 320217f700acSBram Moolenaar return 'other' 320317f700acSBram Moolenaar enddef 320417f700acSBram Moolenaar END 320517f700acSBram Moolenaar writefile(lines, 'Xdir/autoload/Other.vim') 320617f700acSBram Moolenaar assert_equal('other', g:Other#getOther()) 320717f700acSBram Moolenaar 320803290b84SBram Moolenaar delete('Xdir', 'rf') 320903290b84SBram Moolenaar &rtp = save_rtp 321003290b84SBram Moolenaarenddef 321103290b84SBram Moolenaar 321203290b84SBram Moolenaar" test using a vim9script that is auto-loaded from an autocmd 321303290b84SBram Moolenaardef Test_vim9_aucmd_autoload() 321403290b84SBram Moolenaar var lines =<< trim END 321503290b84SBram Moolenaar vim9script 32162d6b20d6SBram Moolenaar def foo#test() 32172d6b20d6SBram Moolenaar echomsg getreg('"') 32182d6b20d6SBram Moolenaar enddef 32192d6b20d6SBram Moolenaar END 32202d6b20d6SBram Moolenaar 32212d6b20d6SBram Moolenaar mkdir('Xdir/autoload', 'p') 32222d6b20d6SBram Moolenaar writefile(lines, 'Xdir/autoload/foo.vim') 3223cfcd011fSBram Moolenaar var save_rtp = &rtp 32242d6b20d6SBram Moolenaar exe 'set rtp^=' .. getcwd() .. '/Xdir' 32252d6b20d6SBram Moolenaar augroup test 32262d6b20d6SBram Moolenaar autocmd TextYankPost * call foo#test() 32272d6b20d6SBram Moolenaar augroup END 32282d6b20d6SBram Moolenaar 32292d6b20d6SBram Moolenaar normal Y 32302d6b20d6SBram Moolenaar 32312d6b20d6SBram Moolenaar augroup test 32322d6b20d6SBram Moolenaar autocmd! 32332d6b20d6SBram Moolenaar augroup END 32342d6b20d6SBram Moolenaar delete('Xdir', 'rf') 32352d6b20d6SBram Moolenaar &rtp = save_rtp 32362d6b20d6SBram Moolenaarenddef 32372d6b20d6SBram Moolenaar 323877e5dcc3SBram Moolenaar" This was causing a crash because suppress_errthrow wasn't reset. 323977e5dcc3SBram Moolenaardef Test_vim9_autoload_error() 3240cfcd011fSBram Moolenaar var lines =<< trim END 324177e5dcc3SBram Moolenaar vim9script 324277e5dcc3SBram Moolenaar def crash#func() 324377e5dcc3SBram Moolenaar try 324477e5dcc3SBram Moolenaar for x in List() 324577e5dcc3SBram Moolenaar endfor 324677e5dcc3SBram Moolenaar catch 324777e5dcc3SBram Moolenaar endtry 324877e5dcc3SBram Moolenaar g:ok = true 324977e5dcc3SBram Moolenaar enddef 325077e5dcc3SBram Moolenaar fu List() 325177e5dcc3SBram Moolenaar invalid 325277e5dcc3SBram Moolenaar endfu 325377e5dcc3SBram Moolenaar try 325448e11c10SBram Moolenaar alsoinvalid 325577e5dcc3SBram Moolenaar catch /wontmatch/ 325677e5dcc3SBram Moolenaar endtry 325777e5dcc3SBram Moolenaar END 325877e5dcc3SBram Moolenaar call mkdir('Xruntime/autoload', 'p') 325977e5dcc3SBram Moolenaar call writefile(lines, 'Xruntime/autoload/crash.vim') 326077e5dcc3SBram Moolenaar 326177e5dcc3SBram Moolenaar # run in a separate Vim to avoid the side effects of assert_fails() 326277e5dcc3SBram Moolenaar lines =<< trim END 326377e5dcc3SBram Moolenaar exe 'set rtp^=' .. getcwd() .. '/Xruntime' 326477e5dcc3SBram Moolenaar call crash#func() 326577e5dcc3SBram Moolenaar call writefile(['ok'], 'Xdidit') 32669c4f5520SBram Moolenaar qall! 326777e5dcc3SBram Moolenaar END 326877e5dcc3SBram Moolenaar writefile(lines, 'Xscript') 326977e5dcc3SBram Moolenaar RunVim([], [], '-S Xscript') 327077e5dcc3SBram Moolenaar assert_equal(['ok'], readfile('Xdidit')) 327177e5dcc3SBram Moolenaar 327277e5dcc3SBram Moolenaar delete('Xdidit') 327377e5dcc3SBram Moolenaar delete('Xscript') 327477e5dcc3SBram Moolenaar delete('Xruntime', 'rf') 327503290b84SBram Moolenaar 327603290b84SBram Moolenaar lines =<< trim END 327703290b84SBram Moolenaar vim9script 327803290b84SBram Moolenaar var foo#bar = 'asdf' 327903290b84SBram Moolenaar END 328003290b84SBram Moolenaar CheckScriptFailure(lines, 'E461: Illegal variable name: foo#bar', 2) 328177e5dcc3SBram Moolenaarenddef 328277e5dcc3SBram Moolenaar 328381e17fbeSBram Moolenaardef Test_script_var_in_autocmd() 328481e17fbeSBram Moolenaar # using a script variable from an autocommand, defined in a :def function in a 328581e17fbeSBram Moolenaar # legacy Vim script, cannot check the variable type. 3286cfcd011fSBram Moolenaar var lines =<< trim END 328781e17fbeSBram Moolenaar let s:counter = 1 328881e17fbeSBram Moolenaar def s:Func() 328981e17fbeSBram Moolenaar au! CursorHold 329081e17fbeSBram Moolenaar au CursorHold * s:counter += 1 329181e17fbeSBram Moolenaar enddef 329281e17fbeSBram Moolenaar call s:Func() 329381e17fbeSBram Moolenaar doau CursorHold 329481e17fbeSBram Moolenaar call assert_equal(2, s:counter) 329581e17fbeSBram Moolenaar au! CursorHold 329681e17fbeSBram Moolenaar END 329781e17fbeSBram Moolenaar CheckScriptSuccess(lines) 329881e17fbeSBram Moolenaarenddef 329981e17fbeSBram Moolenaar 33003896a105SBram Moolenaardef Test_cmdline_win() 33013896a105SBram Moolenaar # if the Vim syntax highlighting uses Vim9 constructs they can be used from 33023896a105SBram Moolenaar # the command line window. 33033896a105SBram Moolenaar mkdir('rtp/syntax', 'p') 3304cfcd011fSBram Moolenaar var export_lines =<< trim END 33053896a105SBram Moolenaar vim9script 3306cfcd011fSBram Moolenaar export var That = 'yes' 33073896a105SBram Moolenaar END 33083896a105SBram Moolenaar writefile(export_lines, 'rtp/syntax/Xexport.vim') 3309cfcd011fSBram Moolenaar var import_lines =<< trim END 33103896a105SBram Moolenaar vim9script 33113896a105SBram Moolenaar import That from './Xexport.vim' 33123896a105SBram Moolenaar END 33133896a105SBram Moolenaar writefile(import_lines, 'rtp/syntax/vim.vim') 3314cfcd011fSBram Moolenaar var save_rtp = &rtp 33153896a105SBram Moolenaar &rtp = getcwd() .. '/rtp' .. ',' .. &rtp 33163896a105SBram Moolenaar syntax on 33173896a105SBram Moolenaar augroup CmdWin 33183896a105SBram Moolenaar autocmd CmdwinEnter * g:got_there = 'yes' 33193896a105SBram Moolenaar augroup END 33203896a105SBram Moolenaar # this will open and also close the cmdline window 33213896a105SBram Moolenaar feedkeys('q:', 'xt') 33223896a105SBram Moolenaar assert_equal('yes', g:got_there) 33233896a105SBram Moolenaar 33243896a105SBram Moolenaar augroup CmdWin 33253896a105SBram Moolenaar au! 33263896a105SBram Moolenaar augroup END 33273896a105SBram Moolenaar &rtp = save_rtp 33283896a105SBram Moolenaar delete('rtp', 'rf') 33293896a105SBram Moolenaarenddef 33303896a105SBram Moolenaar 3331e3d4685fSBram Moolenaardef Test_invalid_sid() 3332e3d4685fSBram Moolenaar assert_fails('func <SNR>1234_func', 'E123:') 333325859dd7SBram Moolenaar 33349c4f5520SBram Moolenaar if RunVim([], ['wq! Xdidit'], '+"func <SNR>1_func"') 3335d2c61705SBram Moolenaar assert_equal([], readfile('Xdidit')) 3336e3d4685fSBram Moolenaar endif 3337e3d4685fSBram Moolenaar delete('Xdidit') 3338e3d4685fSBram Moolenaarenddef 3339e3d4685fSBram Moolenaar 33409ec7026fSBram Moolenaardef Test_restoring_cpo() 33419ec7026fSBram Moolenaar writefile(['vim9script', 'set nocp'], 'Xsourced') 33429ec7026fSBram Moolenaar writefile(['call writefile(["done"], "Xdone")', 'quit!'], 'Xclose') 33439ec7026fSBram Moolenaar if RunVim([], [], '-u NONE +"set cpo+=a" -S Xsourced -S Xclose') 33449ec7026fSBram Moolenaar assert_equal(['done'], readfile('Xdone')) 33459ec7026fSBram Moolenaar endif 33469ec7026fSBram Moolenaar delete('Xsourced') 33479ec7026fSBram Moolenaar delete('Xclose') 3348090728adSBram Moolenaar delete('Xdone') 33490123cc1eSBram Moolenaar 33500123cc1eSBram Moolenaar writefile(['vim9script'], 'XanotherScript') 33510123cc1eSBram Moolenaar set cpo=aABceFsMny> 33520123cc1eSBram Moolenaar edit XanotherScript 33530123cc1eSBram Moolenaar so % 33540123cc1eSBram Moolenaar assert_equal('aABceFsMny>', &cpo) 33550123cc1eSBram Moolenaar :1del 33560123cc1eSBram Moolenaar w 33570123cc1eSBram Moolenaar so % 33580123cc1eSBram Moolenaar assert_equal('aABceFsMny>', &cpo) 33590123cc1eSBram Moolenaar 33600123cc1eSBram Moolenaar delete('XanotherScript') 33610123cc1eSBram Moolenaar set cpo&vim 33629ec7026fSBram Moolenaarenddef 33639ec7026fSBram Moolenaar 3364ffb7dcdbSBram Moolenaar" Use :function so we can use Check commands 3365ffb7dcdbSBram Moolenaarfunc Test_no_redraw_when_restoring_cpo() 336637294bd6SBram Moolenaar CheckScreendump 3367ffb7dcdbSBram Moolenaar CheckFeature timers 336837294bd6SBram Moolenaar 3369ffb7dcdbSBram Moolenaar let lines =<< trim END 337037294bd6SBram Moolenaar vim9script 337137294bd6SBram Moolenaar def script#func() 337237294bd6SBram Moolenaar enddef 337337294bd6SBram Moolenaar END 3374ffb7dcdbSBram Moolenaar call mkdir('Xdir/autoload', 'p') 3375ffb7dcdbSBram Moolenaar call writefile(lines, 'Xdir/autoload/script.vim') 337637294bd6SBram Moolenaar 3377ffb7dcdbSBram Moolenaar let lines =<< trim END 337837294bd6SBram Moolenaar vim9script 337937294bd6SBram Moolenaar set cpo+=M 338037294bd6SBram Moolenaar exe 'set rtp^=' .. getcwd() .. '/Xdir' 338137294bd6SBram Moolenaar au CmdlineEnter : ++once timer_start(0, () => script#func()) 338237294bd6SBram Moolenaar setline(1, 'some text') 338337294bd6SBram Moolenaar END 3384ffb7dcdbSBram Moolenaar call writefile(lines, 'XTest_redraw_cpo') 3385ffb7dcdbSBram Moolenaar let buf = RunVimInTerminal('-S XTest_redraw_cpo', {'rows': 6}) 3386ffb7dcdbSBram Moolenaar call term_sendkeys(buf, "V:") 3387ffb7dcdbSBram Moolenaar call VerifyScreenDump(buf, 'Test_vim9_no_redraw', {}) 338837294bd6SBram Moolenaar 3389ffb7dcdbSBram Moolenaar " clean up 3390ffb7dcdbSBram Moolenaar call term_sendkeys(buf, "\<Esc>u") 3391ffb7dcdbSBram Moolenaar call StopVimInTerminal(buf) 3392ffb7dcdbSBram Moolenaar call delete('XTest_redraw_cpo') 3393ffb7dcdbSBram Moolenaar call delete('Xdir', 'rf') 3394ffb7dcdbSBram Moolenaarendfunc 339537294bd6SBram Moolenaar 33969ec7026fSBram Moolenaar 3397f0afd9e1SBram Moolenaardef Test_unset_any_variable() 3398cfcd011fSBram Moolenaar var lines =<< trim END 3399cfcd011fSBram Moolenaar var name: any 3400cfcd011fSBram Moolenaar assert_equal(0, name) 3401f0afd9e1SBram Moolenaar END 3402f0afd9e1SBram Moolenaar CheckDefAndScriptSuccess(lines) 3403f0afd9e1SBram Moolenaarenddef 3404f0afd9e1SBram Moolenaar 34057e9210eaSBram Moolenaarfunc Test_define_func_at_command_line() 340658dbef33SBram Moolenaar CheckRunVimInTerminal 340758dbef33SBram Moolenaar 34087e9210eaSBram Moolenaar " call indirectly to avoid compilation error for missing functions 34097e9210eaSBram Moolenaar call Run_Test_define_func_at_command_line() 34107e9210eaSBram Moolenaarendfunc 34117e9210eaSBram Moolenaar 34127e9210eaSBram Moolenaardef Run_Test_define_func_at_command_line() 34139c4f5520SBram Moolenaar # run in a separate Vim instance to avoid the script context 3414cfcd011fSBram Moolenaar var lines =<< trim END 34159c4f5520SBram Moolenaar func CheckAndQuit() 34169c4f5520SBram Moolenaar call assert_fails('call Afunc()', 'E117: Unknown function: Bfunc') 34179c4f5520SBram Moolenaar call writefile(['errors: ' .. string(v:errors)], 'Xdidcmd') 34189c4f5520SBram Moolenaar endfunc 34199c4f5520SBram Moolenaar END 34209c4f5520SBram Moolenaar writefile([''], 'Xdidcmd') 34219c4f5520SBram Moolenaar writefile(lines, 'XcallFunc') 3422e0de171eSBram Moolenaar var buf = RunVimInTerminal('-S XcallFunc', {rows: 6}) 34239c4f5520SBram Moolenaar # define Afunc() on the command line 34249c4f5520SBram Moolenaar term_sendkeys(buf, ":def Afunc()\<CR>Bfunc()\<CR>enddef\<CR>") 34259c4f5520SBram Moolenaar term_sendkeys(buf, ":call CheckAndQuit()\<CR>") 34262949cfdbSBram Moolenaar WaitForAssert(() => assert_equal(['errors: []'], readfile('Xdidcmd'))) 34279c4f5520SBram Moolenaar 34289c4f5520SBram Moolenaar call StopVimInTerminal(buf) 34299c4f5520SBram Moolenaar delete('XcallFunc') 34309c4f5520SBram Moolenaar delete('Xdidcmd') 34319c4f5520SBram Moolenaarenddef 34329c4f5520SBram Moolenaar 3433fcdc5d83SBram Moolenaardef Test_script_var_scope() 3434fcdc5d83SBram Moolenaar var lines =<< trim END 3435fcdc5d83SBram Moolenaar vim9script 3436fcdc5d83SBram Moolenaar if true 3437fcdc5d83SBram Moolenaar if true 3438fcdc5d83SBram Moolenaar var one = 'one' 3439fcdc5d83SBram Moolenaar echo one 3440fcdc5d83SBram Moolenaar endif 3441fcdc5d83SBram Moolenaar echo one 3442fcdc5d83SBram Moolenaar endif 3443fcdc5d83SBram Moolenaar END 3444fcdc5d83SBram Moolenaar CheckScriptFailure(lines, 'E121:', 7) 3445fcdc5d83SBram Moolenaar 3446fcdc5d83SBram Moolenaar lines =<< trim END 3447fcdc5d83SBram Moolenaar vim9script 3448fcdc5d83SBram Moolenaar if true 3449fcdc5d83SBram Moolenaar if false 3450fcdc5d83SBram Moolenaar var one = 'one' 3451fcdc5d83SBram Moolenaar echo one 3452fcdc5d83SBram Moolenaar else 3453fcdc5d83SBram Moolenaar var one = 'one' 3454fcdc5d83SBram Moolenaar echo one 3455fcdc5d83SBram Moolenaar endif 3456fcdc5d83SBram Moolenaar echo one 3457fcdc5d83SBram Moolenaar endif 3458fcdc5d83SBram Moolenaar END 3459fcdc5d83SBram Moolenaar CheckScriptFailure(lines, 'E121:', 10) 3460fcdc5d83SBram Moolenaar 3461fcdc5d83SBram Moolenaar lines =<< trim END 3462fcdc5d83SBram Moolenaar vim9script 3463fcdc5d83SBram Moolenaar while true 3464fcdc5d83SBram Moolenaar var one = 'one' 3465fcdc5d83SBram Moolenaar echo one 3466fcdc5d83SBram Moolenaar break 3467fcdc5d83SBram Moolenaar endwhile 3468fcdc5d83SBram Moolenaar echo one 3469fcdc5d83SBram Moolenaar END 3470fcdc5d83SBram Moolenaar CheckScriptFailure(lines, 'E121:', 7) 3471fcdc5d83SBram Moolenaar 3472fcdc5d83SBram Moolenaar lines =<< trim END 3473fcdc5d83SBram Moolenaar vim9script 3474fcdc5d83SBram Moolenaar for i in range(1) 3475fcdc5d83SBram Moolenaar var one = 'one' 3476fcdc5d83SBram Moolenaar echo one 3477fcdc5d83SBram Moolenaar endfor 3478fcdc5d83SBram Moolenaar echo one 3479fcdc5d83SBram Moolenaar END 3480fcdc5d83SBram Moolenaar CheckScriptFailure(lines, 'E121:', 6) 34819becdf2bSBram Moolenaar 34829becdf2bSBram Moolenaar lines =<< trim END 34839becdf2bSBram Moolenaar vim9script 34849becdf2bSBram Moolenaar { 34859becdf2bSBram Moolenaar var one = 'one' 34869becdf2bSBram Moolenaar assert_equal('one', one) 34879becdf2bSBram Moolenaar } 34889becdf2bSBram Moolenaar assert_false(exists('one')) 34899becdf2bSBram Moolenaar assert_false(exists('s:one')) 34909becdf2bSBram Moolenaar END 34919becdf2bSBram Moolenaar CheckScriptSuccess(lines) 34929becdf2bSBram Moolenaar 34939becdf2bSBram Moolenaar lines =<< trim END 34949becdf2bSBram Moolenaar vim9script 34959becdf2bSBram Moolenaar { 34969becdf2bSBram Moolenaar var one = 'one' 34979becdf2bSBram Moolenaar echo one 34989becdf2bSBram Moolenaar } 34999becdf2bSBram Moolenaar echo one 35009becdf2bSBram Moolenaar END 35019becdf2bSBram Moolenaar CheckScriptFailure(lines, 'E121:', 6) 3502fcdc5d83SBram Moolenaarenddef 3503fcdc5d83SBram Moolenaar 3504352134bbSBram Moolenaardef Test_catch_exception_in_callback() 3505352134bbSBram Moolenaar var lines =<< trim END 3506352134bbSBram Moolenaar vim9script 3507352134bbSBram Moolenaar def Callback(...l: any) 3508352134bbSBram Moolenaar try 3509352134bbSBram Moolenaar var x: string 3510352134bbSBram Moolenaar var y: string 3511352134bbSBram Moolenaar # this error should be caught with CHECKLEN 3512352134bbSBram Moolenaar [x, y] = [''] 3513352134bbSBram Moolenaar catch 3514352134bbSBram Moolenaar g:caught = 'yes' 3515352134bbSBram Moolenaar endtry 3516352134bbSBram Moolenaar enddef 3517e0de171eSBram Moolenaar popup_menu('popup', {callback: Callback}) 3518352134bbSBram Moolenaar feedkeys("\r", 'xt') 3519352134bbSBram Moolenaar END 3520352134bbSBram Moolenaar CheckScriptSuccess(lines) 3521352134bbSBram Moolenaar 3522352134bbSBram Moolenaar unlet g:caught 3523352134bbSBram Moolenaarenddef 3524352134bbSBram Moolenaar 3525631e8f93SBram Moolenaardef Test_no_unknown_error_after_error() 3526631e8f93SBram Moolenaar if !has('unix') || !has('job') 3527631e8f93SBram Moolenaar throw 'Skipped: not unix of missing +job feature' 3528631e8f93SBram Moolenaar endif 3529631e8f93SBram Moolenaar var lines =<< trim END 3530631e8f93SBram Moolenaar vim9script 3531631e8f93SBram Moolenaar var source: list<number> 3532631e8f93SBram Moolenaar def Out_cb(...l: any) 3533631e8f93SBram Moolenaar eval [][0] 3534631e8f93SBram Moolenaar enddef 3535631e8f93SBram Moolenaar def Exit_cb(...l: any) 3536631e8f93SBram Moolenaar sleep 1m 3537631e8f93SBram Moolenaar source += l 3538631e8f93SBram Moolenaar enddef 3539e0de171eSBram Moolenaar var myjob = job_start('echo burp', {out_cb: Out_cb, exit_cb: Exit_cb, mode: 'raw'}) 35406f17a3f0SBram Moolenaar while job_status(myjob) == 'run' 35416f17a3f0SBram Moolenaar sleep 10m 35426f17a3f0SBram Moolenaar endwhile 3543206c2a6eSBram Moolenaar # wait for Exit_cb() to be called 3544206c2a6eSBram Moolenaar sleep 100m 3545631e8f93SBram Moolenaar END 3546631e8f93SBram Moolenaar writefile(lines, 'Xdef') 3547631e8f93SBram Moolenaar assert_fails('so Xdef', ['E684:', 'E1012:']) 3548631e8f93SBram Moolenaar delete('Xdef') 3549631e8f93SBram Moolenaarenddef 3550631e8f93SBram Moolenaar 35514324d87aSBram Moolenaardef InvokeNormal() 35524324d87aSBram Moolenaar exe "norm! :m+1\r" 35534324d87aSBram Moolenaarenddef 35544324d87aSBram Moolenaar 35554324d87aSBram Moolenaardef Test_invoke_normal_in_visual_mode() 35564324d87aSBram Moolenaar xnoremap <F3> <Cmd>call <SID>InvokeNormal()<CR> 35574324d87aSBram Moolenaar new 35584324d87aSBram Moolenaar setline(1, ['aaa', 'bbb']) 35594324d87aSBram Moolenaar feedkeys("V\<F3>", 'xt') 35604324d87aSBram Moolenaar assert_equal(['bbb', 'aaa'], getline(1, 2)) 35614324d87aSBram Moolenaar xunmap <F3> 3562b5b9480eSBram Moolenaarenddef 3563b5b9480eSBram Moolenaar 3564b5b9480eSBram Moolenaardef Test_white_space_after_command() 3565b5b9480eSBram Moolenaar var lines =<< trim END 3566b5b9480eSBram Moolenaar exit_cb: Func}) 3567b5b9480eSBram Moolenaar END 3568b5b9480eSBram Moolenaar CheckDefAndScriptFailure(lines, 'E1144:', 1) 3569f8103f27SBram Moolenaar 3570f8103f27SBram Moolenaar lines =<< trim END 3571f8103f27SBram Moolenaar e# 3572f8103f27SBram Moolenaar END 3573f8103f27SBram Moolenaar CheckDefAndScriptFailure(lines, 'E1144:', 1) 35744324d87aSBram Moolenaarenddef 35754324d87aSBram Moolenaar 35764aab88d9SBram Moolenaardef Test_script_var_gone_when_sourced_twice() 35774aab88d9SBram Moolenaar var lines =<< trim END 35784aab88d9SBram Moolenaar vim9script 35794aab88d9SBram Moolenaar if exists('g:guard') 35804aab88d9SBram Moolenaar finish 35814aab88d9SBram Moolenaar endif 35824aab88d9SBram Moolenaar g:guard = 1 35834aab88d9SBram Moolenaar var name = 'thename' 35844aab88d9SBram Moolenaar def g:GetName(): string 35854aab88d9SBram Moolenaar return name 35864aab88d9SBram Moolenaar enddef 35874aab88d9SBram Moolenaar def g:SetName(arg: string) 35884aab88d9SBram Moolenaar name = arg 35894aab88d9SBram Moolenaar enddef 35904aab88d9SBram Moolenaar END 35914aab88d9SBram Moolenaar writefile(lines, 'XscriptTwice.vim') 35924aab88d9SBram Moolenaar so XscriptTwice.vim 35934aab88d9SBram Moolenaar assert_equal('thename', g:GetName()) 35944aab88d9SBram Moolenaar g:SetName('newname') 35954aab88d9SBram Moolenaar assert_equal('newname', g:GetName()) 35964aab88d9SBram Moolenaar so XscriptTwice.vim 35974aab88d9SBram Moolenaar assert_fails('call g:GetName()', 'E1149:') 35984aab88d9SBram Moolenaar assert_fails('call g:SetName("x")', 'E1149:') 35994aab88d9SBram Moolenaar 36004aab88d9SBram Moolenaar delfunc g:GetName 36014aab88d9SBram Moolenaar delfunc g:SetName 36024aab88d9SBram Moolenaar delete('XscriptTwice.vim') 36034aab88d9SBram Moolenaar unlet g:guard 36044aab88d9SBram Moolenaarenddef 36054aab88d9SBram Moolenaar 36064aab88d9SBram Moolenaardef Test_import_gone_when_sourced_twice() 36074aab88d9SBram Moolenaar var exportlines =<< trim END 36084aab88d9SBram Moolenaar vim9script 36094aab88d9SBram Moolenaar if exists('g:guard') 36104aab88d9SBram Moolenaar finish 36114aab88d9SBram Moolenaar endif 36124aab88d9SBram Moolenaar g:guard = 1 36134aab88d9SBram Moolenaar export var name = 'someName' 36144aab88d9SBram Moolenaar END 36154aab88d9SBram Moolenaar writefile(exportlines, 'XexportScript.vim') 36164aab88d9SBram Moolenaar 36174aab88d9SBram Moolenaar var lines =<< trim END 36184aab88d9SBram Moolenaar vim9script 36194aab88d9SBram Moolenaar import name from './XexportScript.vim' 36204aab88d9SBram Moolenaar def g:GetName(): string 36214aab88d9SBram Moolenaar return name 36224aab88d9SBram Moolenaar enddef 36234aab88d9SBram Moolenaar END 36244aab88d9SBram Moolenaar writefile(lines, 'XscriptImport.vim') 36254aab88d9SBram Moolenaar so XscriptImport.vim 36264aab88d9SBram Moolenaar assert_equal('someName', g:GetName()) 36274aab88d9SBram Moolenaar 36284aab88d9SBram Moolenaar so XexportScript.vim 36294aab88d9SBram Moolenaar assert_fails('call g:GetName()', 'E1149:') 36304aab88d9SBram Moolenaar 36314aab88d9SBram Moolenaar delfunc g:GetName 36324aab88d9SBram Moolenaar delete('XexportScript.vim') 36334aab88d9SBram Moolenaar delete('XscriptImport.vim') 36344aab88d9SBram Moolenaar unlet g:guard 36354aab88d9SBram Moolenaarenddef 36364aab88d9SBram Moolenaar 363710b9421fSBram Moolenaardef Test_unsupported_commands() 363810b9421fSBram Moolenaar var lines =<< trim END 363910b9421fSBram Moolenaar ka 364010b9421fSBram Moolenaar END 364110b9421fSBram Moolenaar CheckDefAndScriptFailure(lines, 'E1100:') 364210b9421fSBram Moolenaar 364310b9421fSBram Moolenaar lines =<< trim END 3644ada1d870SBram Moolenaar :1ka 3645ada1d870SBram Moolenaar END 3646ada1d870SBram Moolenaar CheckDefAndScriptFailure(lines, 'E481:') 3647ada1d870SBram Moolenaar 3648ada1d870SBram Moolenaar lines =<< trim END 364910b9421fSBram Moolenaar t 365010b9421fSBram Moolenaar END 365110b9421fSBram Moolenaar CheckDefFailure(lines, 'E1100:') 365210b9421fSBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E1100:') 365310b9421fSBram Moolenaar 365410b9421fSBram Moolenaar lines =<< trim END 365510b9421fSBram Moolenaar x 365610b9421fSBram Moolenaar END 365710b9421fSBram Moolenaar CheckDefFailure(lines, 'E1100:') 365810b9421fSBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E1100:') 365910b9421fSBram Moolenaar 366010b9421fSBram Moolenaar lines =<< trim END 366110b9421fSBram Moolenaar xit 366210b9421fSBram Moolenaar END 366310b9421fSBram Moolenaar CheckDefFailure(lines, 'E1100:') 366410b9421fSBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E1100:') 366510b9421fSBram Moolenaarenddef 366610b9421fSBram Moolenaar 3667585fea7bSBram Moolenaar" Keep this last, it messes up highlighting. 3668585fea7bSBram Moolenaardef Test_substitute_cmd() 3669585fea7bSBram Moolenaar new 3670585fea7bSBram Moolenaar setline(1, 'something') 3671585fea7bSBram Moolenaar :substitute(some(other( 3672585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 3673585fea7bSBram Moolenaar bwipe! 3674585fea7bSBram Moolenaar 3675f5be8cdbSBram Moolenaar # also when the context is Vim9 script 3676cfcd011fSBram Moolenaar var lines =<< trim END 3677585fea7bSBram Moolenaar vim9script 3678585fea7bSBram Moolenaar new 3679585fea7bSBram Moolenaar setline(1, 'something') 3680585fea7bSBram Moolenaar :substitute(some(other( 3681585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 3682585fea7bSBram Moolenaar bwipe! 3683585fea7bSBram Moolenaar END 3684585fea7bSBram Moolenaar writefile(lines, 'Xvim9lines') 3685585fea7bSBram Moolenaar source Xvim9lines 3686585fea7bSBram Moolenaar 3687585fea7bSBram Moolenaar delete('Xvim9lines') 3688585fea7bSBram Moolenaarenddef 3689585fea7bSBram Moolenaar 36908a7d6542SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker 3691