18a7d6542SBram Moolenaar" Test various aspects of the Vim9 script language. 28a7d6542SBram Moolenaar 3673660abSBram Moolenaarsource check.vim 4ad39c094SBram Moolenaarsource view_util.vim 5673660abSBram Moolenaar 68a7d6542SBram Moolenaar" Check that "lines" inside ":def" results in an "error" message. 78a7d6542SBram Moolenaarfunc CheckDefFailure(lines, error) 8978d170bSBram Moolenaar call writefile(['def Func()'] + a:lines + ['enddef'], 'Xdef') 98a7d6542SBram Moolenaar call assert_fails('so Xdef', a:error, a:lines) 108a7d6542SBram Moolenaar call delete('Xdef') 118a7d6542SBram Moolenaarendfunc 128a7d6542SBram Moolenaar 138a7d6542SBram Moolenaarfunc CheckScriptFailure(lines, error) 148a7d6542SBram Moolenaar call writefile(a:lines, 'Xdef') 158a7d6542SBram Moolenaar call assert_fails('so Xdef', a:error, a:lines) 168a7d6542SBram Moolenaar call delete('Xdef') 178a7d6542SBram Moolenaarendfunc 188a7d6542SBram Moolenaar 198a7d6542SBram Moolenaardef Test_syntax() 208a7d6542SBram Moolenaar let var = 234 218a7d6542SBram Moolenaar let other: list<string> = ['asdf'] 228a7d6542SBram Moolenaarenddef 238a7d6542SBram Moolenaar 248a7d6542SBram Moolenaarfunc Test_def_basic() 258a7d6542SBram Moolenaar def SomeFunc(): string 268a7d6542SBram Moolenaar return 'yes' 278a7d6542SBram Moolenaar enddef 288a7d6542SBram Moolenaar call assert_equal('yes', SomeFunc()) 298a7d6542SBram Moolenaarendfunc 308a7d6542SBram Moolenaar 316e587dcbSBram Moolenaarlet s:appendToMe = 'xxx' 326e587dcbSBram Moolenaarlet s:addToMe = 111 33401d9ffbSBram Moolenaarlet g:existing = 'yes' 346e587dcbSBram Moolenaar 358a7d6542SBram Moolenaardef Test_assignment() 368a7d6542SBram Moolenaar let bool1: bool = true 378a7d6542SBram Moolenaar assert_equal(v:true, bool1) 388a7d6542SBram Moolenaar let bool2: bool = false 398a7d6542SBram Moolenaar assert_equal(v:false, bool2) 408a7d6542SBram Moolenaar 410c2ca58eSBram Moolenaar let list1: list<bool> = [false, true, false] 428a7d6542SBram Moolenaar let list2: list<number> = [1, 2, 3] 430c2ca58eSBram Moolenaar let list3: list<string> = ['sdf', 'asdf'] 440c2ca58eSBram Moolenaar let list4: list<any> = ['yes', true, 1234] 450c2ca58eSBram Moolenaar let list5: list<blob> = [0z01, 0z02] 468a7d6542SBram Moolenaar 47436472f5SBram Moolenaar let listS: list<string> = [] 48436472f5SBram Moolenaar let listN: list<number> = [] 498a7d6542SBram Moolenaar 500c2ca58eSBram Moolenaar let dict1: dict<bool> = #{one: false, two: true} 518a7d6542SBram Moolenaar let dict2: dict<number> = #{one: 1, two: 2} 520c2ca58eSBram Moolenaar let dict3: dict<string> = #{key: 'value'} 530c2ca58eSBram Moolenaar let dict4: dict<any> = #{one: 1, two: '2'} 540c2ca58eSBram Moolenaar let dict5: dict<blob> = #{one: 0z01, tw: 0z02} 55b283a8a6SBram Moolenaar 5642a480bfSBram Moolenaar if has('channel') 5742a480bfSBram Moolenaar let chan1: channel 58fbdd08edSBram Moolenaar let job1: job 59f51cb4e0SBram Moolenaar let job2: job = job_start('willfail') 6042a480bfSBram Moolenaar endif 61fbdd08edSBram Moolenaar if has('float') 62fbdd08edSBram Moolenaar let float1: float = 3.4 63fbdd08edSBram Moolenaar endif 64087d2e15SBram Moolenaar let funky1: func 65087d2e15SBram Moolenaar let funky2: func = function('len') 66087d2e15SBram Moolenaar let party1: partial 67087d2e15SBram Moolenaar let party2: partial = funcref('Test_syntax') 6842a480bfSBram Moolenaar 69*61a6d4e4SBram Moolenaar " type becomes list<any> 70*61a6d4e4SBram Moolenaar let somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c'] 71*61a6d4e4SBram Moolenaar 72401d9ffbSBram Moolenaar g:newvar = 'new' 73401d9ffbSBram Moolenaar assert_equal('new', g:newvar) 74401d9ffbSBram Moolenaar 75401d9ffbSBram Moolenaar assert_equal('yes', g:existing) 76401d9ffbSBram Moolenaar g:existing = 'no' 77401d9ffbSBram Moolenaar assert_equal('no', g:existing) 78401d9ffbSBram Moolenaar 79b283a8a6SBram Moolenaar v:char = 'abc' 806e587dcbSBram Moolenaar assert_equal('abc', v:char) 81b283a8a6SBram Moolenaar 82b283a8a6SBram Moolenaar $ENVVAR = 'foobar' 836e587dcbSBram Moolenaar assert_equal('foobar', $ENVVAR) 84b283a8a6SBram Moolenaar $ENVVAR = '' 856e587dcbSBram Moolenaar 86fd1823e0SBram Moolenaar s:appendToMe ..= 'yyy' 87fd1823e0SBram Moolenaar assert_equal('xxxyyy', s:appendToMe) 88fd1823e0SBram Moolenaar s:addToMe += 222 89fd1823e0SBram Moolenaar assert_equal(333, s:addToMe) 900bbf722aSBram Moolenaar s:newVar = 'new' 910bbf722aSBram Moolenaar assert_equal('new', s:newVar) 928a7d6542SBram Moolenaarenddef 938a7d6542SBram Moolenaar 948a7d6542SBram Moolenaarfunc Test_assignment_failure() 958a7d6542SBram Moolenaar call CheckDefFailure(['let var=234'], 'E1004:') 968a7d6542SBram Moolenaar call CheckDefFailure(['let var =234'], 'E1004:') 978a7d6542SBram Moolenaar call CheckDefFailure(['let var= 234'], 'E1004:') 988a7d6542SBram Moolenaar 998a7d6542SBram Moolenaar call CheckDefFailure(['let true = 1'], 'E1034:') 1008a7d6542SBram Moolenaar call CheckDefFailure(['let false = 1'], 'E1034:') 1018a7d6542SBram Moolenaar 1028a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<string> = [123]'], 'expected list<string> but got list<number>') 1038a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<number> = ["xx"]'], 'expected list<number> but got list<string>') 1048a7d6542SBram Moolenaar 1058a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<string> = #{key: 123}'], 'expected dict<string> but got dict<number>') 1068a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<number> = #{key: "xx"}'], 'expected dict<number> but got dict<string>') 1078a7d6542SBram Moolenaar 1088a7d6542SBram Moolenaar call CheckDefFailure(['let var = feedkeys("0")'], 'E1031:') 1098a7d6542SBram Moolenaar call CheckDefFailure(['let var: number = feedkeys("0")'], 'expected number but got void') 11042a480bfSBram Moolenaar 11142a480bfSBram Moolenaar call CheckDefFailure(['let var: dict <number>'], 'E1007:') 11242a480bfSBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 11342a480bfSBram Moolenaar 11442a480bfSBram Moolenaar call CheckDefFailure(['let var: ally'], 'E1010:') 11542a480bfSBram Moolenaar call CheckDefFailure(['let var: bram'], 'E1010:') 11642a480bfSBram Moolenaar call CheckDefFailure(['let var: cathy'], 'E1010:') 11742a480bfSBram Moolenaar call CheckDefFailure(['let var: dom'], 'E1010:') 11842a480bfSBram Moolenaar call CheckDefFailure(['let var: freddy'], 'E1010:') 11942a480bfSBram Moolenaar call CheckDefFailure(['let var: john'], 'E1010:') 12042a480bfSBram Moolenaar call CheckDefFailure(['let var: larry'], 'E1010:') 12142a480bfSBram Moolenaar call CheckDefFailure(['let var: ned'], 'E1010:') 12242a480bfSBram Moolenaar call CheckDefFailure(['let var: pam'], 'E1010:') 12342a480bfSBram Moolenaar call CheckDefFailure(['let var: sam'], 'E1010:') 12442a480bfSBram Moolenaar call CheckDefFailure(['let var: vim'], 'E1010:') 1258a7d6542SBram Moolenaarendfunc 1268a7d6542SBram Moolenaar 1278a7d6542SBram Moolenaarfunc Test_const() 1288a7d6542SBram Moolenaar call CheckDefFailure(['const var = 234', 'var = 99'], 'E1018:') 1298a7d6542SBram Moolenaar call CheckDefFailure(['const one = 234', 'let one = 99'], 'E1017:') 1308a7d6542SBram Moolenaar call CheckDefFailure(['const two'], 'E1021:') 1318a7d6542SBram Moolenaarendfunc 1328a7d6542SBram Moolenaar 1338a7d6542SBram Moolenaardef Test_block() 1348a7d6542SBram Moolenaar let outer = 1 1358a7d6542SBram Moolenaar { 1368a7d6542SBram Moolenaar let inner = 2 1378a7d6542SBram Moolenaar assert_equal(1, outer) 1388a7d6542SBram Moolenaar assert_equal(2, inner) 1398a7d6542SBram Moolenaar } 1408a7d6542SBram Moolenaar assert_equal(1, outer) 1418a7d6542SBram Moolenaarenddef 1428a7d6542SBram Moolenaar 1438a7d6542SBram Moolenaarfunc Test_block_failure() 1448a7d6542SBram Moolenaar call CheckDefFailure(['{', 'let inner = 1', '}', 'echo inner'], 'E1001:') 1458a7d6542SBram Moolenaarendfunc 1468a7d6542SBram Moolenaar 1478a7d6542SBram Moolenaardef ReturnString(): string 1488a7d6542SBram Moolenaar return 'string' 1498a7d6542SBram Moolenaarenddef 1508a7d6542SBram Moolenaar 1518a7d6542SBram Moolenaardef ReturnNumber(): number 1528a7d6542SBram Moolenaar return 123 1538a7d6542SBram Moolenaarenddef 1548a7d6542SBram Moolenaar 15509f28f49SBram Moolenaarlet g:notNumber = 'string' 15609f28f49SBram Moolenaar 15709f28f49SBram Moolenaardef ReturnGlobal(): number 15809f28f49SBram Moolenaar return g:notNumber 15909f28f49SBram Moolenaarenddef 16009f28f49SBram Moolenaar 1618a7d6542SBram Moolenaardef Test_return_string() 1628a7d6542SBram Moolenaar assert_equal('string', ReturnString()) 1638a7d6542SBram Moolenaar assert_equal(123, ReturnNumber()) 16409f28f49SBram Moolenaar assert_fails('call ReturnGlobal()', 'E1029: Expected number but got string') 1658a7d6542SBram Moolenaarenddef 1668a7d6542SBram Moolenaar 1678a7d6542SBram Moolenaarfunc Increment() 1688a7d6542SBram Moolenaar let g:counter += 1 1698a7d6542SBram Moolenaarendfunc 1708a7d6542SBram Moolenaar 1718a7d6542SBram Moolenaardef Test_call_ufunc_count() 1728a7d6542SBram Moolenaar g:counter = 1 1738a7d6542SBram Moolenaar Increment() 1748a7d6542SBram Moolenaar Increment() 1758a7d6542SBram Moolenaar Increment() 1768a7d6542SBram Moolenaar " works with and without :call 1778a7d6542SBram Moolenaar assert_equal(4, g:counter) 178b283a8a6SBram Moolenaar call assert_equal(4, g:counter) 1798a7d6542SBram Moolenaar unlet g:counter 1808a7d6542SBram Moolenaarenddef 1818a7d6542SBram Moolenaar 1828a7d6542SBram Moolenaardef MyVarargs(arg: string, ...rest: list<string>): string 1838a7d6542SBram Moolenaar let res = arg 1848a7d6542SBram Moolenaar for s in rest 1858a7d6542SBram Moolenaar res ..= ',' .. s 1868a7d6542SBram Moolenaar endfor 1878a7d6542SBram Moolenaar return res 1888a7d6542SBram Moolenaarenddef 1898a7d6542SBram Moolenaar 1908a7d6542SBram Moolenaardef Test_call_varargs() 1918a7d6542SBram Moolenaar assert_equal('one', MyVarargs('one')) 1928a7d6542SBram Moolenaar assert_equal('one,two', MyVarargs('one', 'two')) 1938a7d6542SBram Moolenaar assert_equal('one,two,three', MyVarargs('one', 'two', 'three')) 1948a7d6542SBram Moolenaarenddef 1958a7d6542SBram Moolenaar 196170fcfcfSBram Moolenaardef MyDefaultArgs(name = 'string'): string 197170fcfcfSBram Moolenaar return name 198170fcfcfSBram Moolenaarenddef 199170fcfcfSBram Moolenaar 200170fcfcfSBram Moolenaardef Test_call_default_args() 201170fcfcfSBram Moolenaar assert_equal('string', MyDefaultArgs()) 202170fcfcfSBram Moolenaar assert_equal('one', MyDefaultArgs('one')) 203170fcfcfSBram Moolenaar assert_fails('call MyDefaultArgs("one", "two")', 'E118:') 204170fcfcfSBram Moolenaarenddef 205170fcfcfSBram Moolenaar 206170fcfcfSBram Moolenaarfunc Test_call_default_args_from_func() 207170fcfcfSBram Moolenaar call assert_equal('string', MyDefaultArgs()) 208170fcfcfSBram Moolenaar call assert_equal('one', MyDefaultArgs('one')) 209170fcfcfSBram Moolenaar call assert_fails('call MyDefaultArgs("one", "two")', 'E118:') 210170fcfcfSBram Moolenaarendfunc 211170fcfcfSBram Moolenaar 212b35efa5eSBram Moolenaarfunc TakesOneArg(arg) 213b35efa5eSBram Moolenaar echo a:arg 214b35efa5eSBram Moolenaarendfunc 215b35efa5eSBram Moolenaar 216b35efa5eSBram Moolenaardef Test_call_wrong_arg_count() 217b35efa5eSBram Moolenaar call CheckDefFailure(['TakesOneArg()'], 'E119:') 218b35efa5eSBram Moolenaar call CheckDefFailure(['TakesOneArg(11, 22)'], 'E118:') 219b35efa5eSBram Moolenaarenddef 220b35efa5eSBram Moolenaar 221170fcfcfSBram Moolenaar" Default arg and varargs 222170fcfcfSBram Moolenaardef MyDefVarargs(one: string, two = 'foo', ...rest: list<string>): string 223170fcfcfSBram Moolenaar let res = one .. ',' .. two 224170fcfcfSBram Moolenaar for s in rest 225170fcfcfSBram Moolenaar res ..= ',' .. s 226170fcfcfSBram Moolenaar endfor 227170fcfcfSBram Moolenaar return res 228170fcfcfSBram Moolenaarenddef 229170fcfcfSBram Moolenaar 230170fcfcfSBram Moolenaardef Test_call_def_varargs() 231170fcfcfSBram Moolenaar call assert_fails('call MyDefVarargs()', 'E119:') 232170fcfcfSBram Moolenaar assert_equal('one,foo', MyDefVarargs('one')) 233170fcfcfSBram Moolenaar assert_equal('one,two', MyDefVarargs('one', 'two')) 234170fcfcfSBram Moolenaar assert_equal('one,two,three', MyDefVarargs('one', 'two', 'three')) 235170fcfcfSBram Moolenaarenddef 236170fcfcfSBram Moolenaar 23742a480bfSBram Moolenaardef Test_using_var_as_arg() 23842a480bfSBram Moolenaar call writefile(['def Func(x: number)', 'let x = 234', 'enddef'], 'Xdef') 23942a480bfSBram Moolenaar call assert_fails('so Xdef', 'E1006:') 24042a480bfSBram Moolenaar call delete('Xdef') 24142a480bfSBram Moolenaarenddef 24242a480bfSBram Moolenaar 243b35efa5eSBram Moolenaardef Test_call_func_defined_later() 244b35efa5eSBram Moolenaar call assert_equal('one', DefinedLater('one')) 245b35efa5eSBram Moolenaar call assert_fails('call NotDefined("one")', 'E117:') 246b35efa5eSBram Moolenaarenddef 247170fcfcfSBram Moolenaar 248b35efa5eSBram Moolenaarfunc DefinedLater(arg) 24926e117e9SBram Moolenaar return a:arg 25026e117e9SBram Moolenaarendfunc 25126e117e9SBram Moolenaar 2527eeefd4aSBram Moolenaardef FuncWithForwardCall() 2537eeefd4aSBram Moolenaar return DefinedEvenLater("yes") 2547eeefd4aSBram Moolenaarenddef 2557eeefd4aSBram Moolenaar 2567eeefd4aSBram Moolenaardef DefinedEvenLater(arg: string): string 2577eeefd4aSBram Moolenaar return arg 2587eeefd4aSBram Moolenaarenddef 2597eeefd4aSBram Moolenaar 2607eeefd4aSBram Moolenaardef Test_error_in_nested_function() 2617eeefd4aSBram Moolenaar " Error in called function requires unwinding the call stack. 2627eeefd4aSBram Moolenaar assert_fails('call FuncWithForwardCall()', 'E1029') 2637eeefd4aSBram Moolenaarenddef 2647eeefd4aSBram Moolenaar 2658a7d6542SBram Moolenaardef Test_return_type_wrong() 266978d170bSBram Moolenaar CheckScriptFailure(['def Func(): number', 'return "a"', 'enddef'], 'expected number but got string') 267978d170bSBram Moolenaar CheckScriptFailure(['def Func(): string', 'return 1', 'enddef'], 'expected string but got number') 268978d170bSBram Moolenaar CheckScriptFailure(['def Func(): void', 'return "a"', 'enddef'], 'expected void but got string') 269978d170bSBram Moolenaar CheckScriptFailure(['def Func()', 'return "a"', 'enddef'], 'expected void but got string') 2708a7d6542SBram Moolenaarenddef 2718a7d6542SBram Moolenaar 272bfe12043SBram Moolenaardef Test_arg_type_wrong() 273bfe12043SBram Moolenaar CheckScriptFailure(['def Func3(items: list)', 'echo "a"', 'enddef'], 'E1008: Missing <type>') 274bfe12043SBram Moolenaarenddef 275bfe12043SBram Moolenaar 2768a7d6542SBram Moolenaardef Test_try_catch() 2778a7d6542SBram Moolenaar let l = [] 2788a7d6542SBram Moolenaar try 2798a7d6542SBram Moolenaar add(l, '1') 2808a7d6542SBram Moolenaar throw 'wrong' 2818a7d6542SBram Moolenaar add(l, '2') 2828a7d6542SBram Moolenaar catch 2838a7d6542SBram Moolenaar add(l, v:exception) 2848a7d6542SBram Moolenaar finally 2858a7d6542SBram Moolenaar add(l, '3') 2868a7d6542SBram Moolenaar endtry 2878a7d6542SBram Moolenaar assert_equal(['1', 'wrong', '3'], l) 2888a7d6542SBram Moolenaarenddef 2898a7d6542SBram Moolenaar 290257cc5eeSBram Moolenaardef ThrowFromDef() 291257cc5eeSBram Moolenaar throw 'getout' 292257cc5eeSBram Moolenaarenddef 293257cc5eeSBram Moolenaar 294257cc5eeSBram Moolenaarfunc CatchInFunc() 295257cc5eeSBram Moolenaar try 296257cc5eeSBram Moolenaar call ThrowFromDef() 297257cc5eeSBram Moolenaar catch 298257cc5eeSBram Moolenaar let g:thrown_func = v:exception 299257cc5eeSBram Moolenaar endtry 300257cc5eeSBram Moolenaarendfunc 301257cc5eeSBram Moolenaar 302257cc5eeSBram Moolenaardef CatchInDef() 303257cc5eeSBram Moolenaar try 304257cc5eeSBram Moolenaar ThrowFromDef() 305257cc5eeSBram Moolenaar catch 306257cc5eeSBram Moolenaar g:thrown_def = v:exception 307257cc5eeSBram Moolenaar endtry 308257cc5eeSBram Moolenaarenddef 309257cc5eeSBram Moolenaar 310f575adffSBram Moolenaardef ReturnFinally(): string 311f575adffSBram Moolenaar try 312f575adffSBram Moolenaar return 'intry' 313f575adffSBram Moolenaar finally 314f575adffSBram Moolenaar g:in_finally = 'finally' 315f575adffSBram Moolenaar endtry 316f575adffSBram Moolenaar return 'end' 317f575adffSBram Moolenaarenddef 318f575adffSBram Moolenaar 319257cc5eeSBram Moolenaardef Test_try_catch_nested() 320257cc5eeSBram Moolenaar CatchInFunc() 321257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_func) 322257cc5eeSBram Moolenaar 323257cc5eeSBram Moolenaar CatchInDef() 324257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_def) 325f575adffSBram Moolenaar 326f575adffSBram Moolenaar assert_equal('intry', ReturnFinally()) 327f575adffSBram Moolenaar assert_equal('finally', g:in_finally) 328f575adffSBram Moolenaarenddef 329f575adffSBram Moolenaar 330f575adffSBram Moolenaardef Test_try_catch_match() 331f575adffSBram Moolenaar let seq = 'a' 332f575adffSBram Moolenaar try 333f575adffSBram Moolenaar throw 'something' 334f575adffSBram Moolenaar catch /nothing/ 335f575adffSBram Moolenaar seq ..= 'x' 336f575adffSBram Moolenaar catch /some/ 337f575adffSBram Moolenaar seq ..= 'b' 338f575adffSBram Moolenaar catch /asdf/ 339f575adffSBram Moolenaar seq ..= 'x' 340f575adffSBram Moolenaar finally 341f575adffSBram Moolenaar seq ..= 'c' 342f575adffSBram Moolenaar endtry 343f575adffSBram Moolenaar assert_equal('abc', seq) 344257cc5eeSBram Moolenaarenddef 345257cc5eeSBram Moolenaar 3468a7d6542SBram Moolenaarlet s:export_script_lines =<< trim END 3478a7d6542SBram Moolenaar vim9script 3488a7d6542SBram Moolenaar let name: string = 'bob' 3498a7d6542SBram Moolenaar def Concat(arg: string): string 3508a7d6542SBram Moolenaar return name .. arg 3518a7d6542SBram Moolenaar enddef 3528a7d6542SBram Moolenaar let g:result = Concat('bie') 3538a7d6542SBram Moolenaar let g:localname = name 3548a7d6542SBram Moolenaar 3558a7d6542SBram Moolenaar export const CONST = 1234 3568a7d6542SBram Moolenaar export let exported = 9876 3576e587dcbSBram Moolenaar export let exp_name = 'John' 3588a7d6542SBram Moolenaar export def Exported(): string 3598a7d6542SBram Moolenaar return 'Exported' 3608a7d6542SBram Moolenaar enddef 3618a7d6542SBram MoolenaarEND 3628a7d6542SBram Moolenaar 3638a7d6542SBram Moolenaardef Test_vim9script() 3648a7d6542SBram Moolenaar let import_script_lines =<< trim END 3658a7d6542SBram Moolenaar vim9script 3668a7d6542SBram Moolenaar import {exported, Exported} from './Xexport.vim' 3678a7d6542SBram Moolenaar g:imported = exported 3686e587dcbSBram Moolenaar exported += 3 3696e587dcbSBram Moolenaar g:imported_added = exported 3708a7d6542SBram Moolenaar g:imported_func = Exported() 3716e587dcbSBram Moolenaar 3726e587dcbSBram Moolenaar import {exp_name} from './Xexport.vim' 3736e587dcbSBram Moolenaar g:imported_name = exp_name 3746e587dcbSBram Moolenaar exp_name ..= ' Doe' 3756e587dcbSBram Moolenaar g:imported_name_appended = exp_name 3768a7d6542SBram Moolenaar END 3778a7d6542SBram Moolenaar 3788a7d6542SBram Moolenaar writefile(import_script_lines, 'Ximport.vim') 3798a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport.vim') 3808a7d6542SBram Moolenaar 3818a7d6542SBram Moolenaar source Ximport.vim 3828a7d6542SBram Moolenaar 3838a7d6542SBram Moolenaar assert_equal('bobbie', g:result) 3848a7d6542SBram Moolenaar assert_equal('bob', g:localname) 3858a7d6542SBram Moolenaar assert_equal(9876, g:imported) 3866e587dcbSBram Moolenaar assert_equal(9879, g:imported_added) 3878a7d6542SBram Moolenaar assert_equal('Exported', g:imported_func) 3886e587dcbSBram Moolenaar assert_equal('John', g:imported_name) 3896e587dcbSBram Moolenaar assert_equal('John Doe', g:imported_name_appended) 3908a7d6542SBram Moolenaar assert_false(exists('g:name')) 3918a7d6542SBram Moolenaar 3928a7d6542SBram Moolenaar unlet g:result 3938a7d6542SBram Moolenaar unlet g:localname 3948a7d6542SBram Moolenaar unlet g:imported 3956e587dcbSBram Moolenaar unlet g:imported_added 3968a7d6542SBram Moolenaar unlet g:imported_func 3976e587dcbSBram Moolenaar unlet g:imported_name g:imported_name_appended 3988a7d6542SBram Moolenaar delete('Ximport.vim') 399f2d5c240SBram Moolenaar 400f2d5c240SBram Moolenaar let import_star_as_lines =<< trim END 401f2d5c240SBram Moolenaar vim9script 402f2d5c240SBram Moolenaar import * as Export from './Xexport.vim' 403f2d5c240SBram Moolenaar def UseExport() 404f2d5c240SBram Moolenaar g:imported = Export.exported 405f2d5c240SBram Moolenaar enddef 406f2d5c240SBram Moolenaar UseExport() 407f2d5c240SBram Moolenaar END 408f2d5c240SBram Moolenaar writefile(import_star_as_lines, 'Ximport.vim') 409f2d5c240SBram Moolenaar source Ximport.vim 410f2d5c240SBram Moolenaar assert_equal(9876, g:imported) 411f2d5c240SBram Moolenaar 412f2d5c240SBram Moolenaar let import_star_lines =<< trim END 413f2d5c240SBram Moolenaar vim9script 414f2d5c240SBram Moolenaar import * from './Xexport.vim' 415f2d5c240SBram Moolenaar g:imported = exported 416f2d5c240SBram Moolenaar END 417f2d5c240SBram Moolenaar writefile(import_star_lines, 'Ximport.vim') 418f2d5c240SBram Moolenaar assert_fails('source Ximport.vim', 'E1045:') 419f2d5c240SBram Moolenaar 420fa29c8abSBram Moolenaar " try to import something that exists but is not exported 421fa29c8abSBram Moolenaar let import_not_exported_lines =<< trim END 422fa29c8abSBram Moolenaar vim9script 423fa29c8abSBram Moolenaar import name from './Xexport.vim' 424fa29c8abSBram Moolenaar END 425fa29c8abSBram Moolenaar writefile(import_not_exported_lines, 'Ximport.vim') 426fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1049:') 427fa29c8abSBram Moolenaar 428fa29c8abSBram Moolenaar " import a very long name, requires making a copy 429fa29c8abSBram Moolenaar let import_long_name_lines =<< trim END 430fa29c8abSBram Moolenaar vim9script 431fa29c8abSBram Moolenaar import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim' 432fa29c8abSBram Moolenaar END 433fa29c8abSBram Moolenaar writefile(import_long_name_lines, 'Ximport.vim') 434fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 435fa29c8abSBram Moolenaar 436fa29c8abSBram Moolenaar let import_no_from_lines =<< trim END 437fa29c8abSBram Moolenaar vim9script 438fa29c8abSBram Moolenaar import name './Xexport.vim' 439fa29c8abSBram Moolenaar END 440fa29c8abSBram Moolenaar writefile(import_no_from_lines, 'Ximport.vim') 441fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1070:') 442fa29c8abSBram Moolenaar 443fa29c8abSBram Moolenaar let import_invalid_string_lines =<< trim END 444fa29c8abSBram Moolenaar vim9script 445fa29c8abSBram Moolenaar import name from Xexport.vim 446fa29c8abSBram Moolenaar END 447fa29c8abSBram Moolenaar writefile(import_invalid_string_lines, 'Ximport.vim') 448fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1071:') 449fa29c8abSBram Moolenaar 450fa29c8abSBram Moolenaar let import_wrong_name_lines =<< trim END 451fa29c8abSBram Moolenaar vim9script 452fa29c8abSBram Moolenaar import name from './XnoExport.vim' 453fa29c8abSBram Moolenaar END 454fa29c8abSBram Moolenaar writefile(import_wrong_name_lines, 'Ximport.vim') 455fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1053:') 456fa29c8abSBram Moolenaar 457fa29c8abSBram Moolenaar let import_missing_comma_lines =<< trim END 458fa29c8abSBram Moolenaar vim9script 459fa29c8abSBram Moolenaar import {exported name} from './Xexport.vim' 460fa29c8abSBram Moolenaar END 461fa29c8abSBram Moolenaar writefile(import_missing_comma_lines, 'Ximport.vim') 462fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1046:') 463fa29c8abSBram Moolenaar 464f2d5c240SBram Moolenaar delete('Ximport.vim') 4658a7d6542SBram Moolenaar delete('Xexport.vim') 4668a7d6542SBram Moolenaar 467750802b5SBram Moolenaar " Check that in a Vim9 script 'cpo' is set to the Vim default. 468750802b5SBram Moolenaar set cpo&vi 469750802b5SBram Moolenaar let cpo_before = &cpo 470750802b5SBram Moolenaar let lines =<< trim END 471750802b5SBram Moolenaar vim9script 472750802b5SBram Moolenaar g:cpo_in_vim9script = &cpo 473750802b5SBram Moolenaar END 474750802b5SBram Moolenaar writefile(lines, 'Xvim9_script') 475750802b5SBram Moolenaar source Xvim9_script 476750802b5SBram Moolenaar assert_equal(cpo_before, &cpo) 477750802b5SBram Moolenaar set cpo&vim 478750802b5SBram Moolenaar assert_equal(&cpo, g:cpo_in_vim9script) 479750802b5SBram Moolenaar delete('Xvim9_script') 480750802b5SBram Moolenaarenddef 481750802b5SBram Moolenaar 482750802b5SBram Moolenaardef Test_vim9script_fails() 4838a7d6542SBram Moolenaar CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:') 4848a7d6542SBram Moolenaar CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:') 485750802b5SBram Moolenaar CheckScriptFailure(['export let some = 123'], 'E1042:') 486f2d5c240SBram Moolenaar CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1042:') 487750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export let g:some'], 'E1044:') 488750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:') 489750802b5SBram Moolenaar 490750802b5SBram Moolenaar assert_fails('vim9script', 'E1038') 491750802b5SBram Moolenaar assert_fails('export something', 'E1042') 4928a7d6542SBram Moolenaarenddef 4938a7d6542SBram Moolenaar 4948a7d6542SBram Moolenaardef Test_vim9script_call() 4958a7d6542SBram Moolenaar let lines =<< trim END 4968a7d6542SBram Moolenaar vim9script 4978a7d6542SBram Moolenaar let var = '' 4988a7d6542SBram Moolenaar def MyFunc(arg: string) 4998a7d6542SBram Moolenaar var = arg 5008a7d6542SBram Moolenaar enddef 5018a7d6542SBram Moolenaar MyFunc('foobar') 5028a7d6542SBram Moolenaar assert_equal('foobar', var) 5038a7d6542SBram Moolenaar 5048a7d6542SBram Moolenaar let str = 'barfoo' 5058a7d6542SBram Moolenaar str->MyFunc() 5068a7d6542SBram Moolenaar assert_equal('barfoo', var) 5078a7d6542SBram Moolenaar 5088a7d6542SBram Moolenaar let g:value = 'value' 5098a7d6542SBram Moolenaar g:value->MyFunc() 5108a7d6542SBram Moolenaar assert_equal('value', var) 5118a7d6542SBram Moolenaar 5128a7d6542SBram Moolenaar let listvar = [] 5138a7d6542SBram Moolenaar def ListFunc(arg: list<number>) 5148a7d6542SBram Moolenaar listvar = arg 5158a7d6542SBram Moolenaar enddef 5168a7d6542SBram Moolenaar [1, 2, 3]->ListFunc() 5178a7d6542SBram Moolenaar assert_equal([1, 2, 3], listvar) 5188a7d6542SBram Moolenaar 5198a7d6542SBram Moolenaar let dictvar = {} 5208a7d6542SBram Moolenaar def DictFunc(arg: dict<number>) 5218a7d6542SBram Moolenaar dictvar = arg 5228a7d6542SBram Moolenaar enddef 5238a7d6542SBram Moolenaar {'a': 1, 'b': 2}->DictFunc() 5248a7d6542SBram Moolenaar assert_equal(#{a: 1, b: 2}, dictvar) 5258a7d6542SBram Moolenaar #{a: 3, b: 4}->DictFunc() 5268a7d6542SBram Moolenaar assert_equal(#{a: 3, b: 4}, dictvar) 5270c6ceaf9SBram Moolenaar 5280c6ceaf9SBram Moolenaar ('text')->MyFunc() 5290c6ceaf9SBram Moolenaar assert_equal('text', var) 5300c6ceaf9SBram Moolenaar ("some")->MyFunc() 5310c6ceaf9SBram Moolenaar assert_equal('some', var) 5328a7d6542SBram Moolenaar END 5338a7d6542SBram Moolenaar writefile(lines, 'Xcall.vim') 5348a7d6542SBram Moolenaar source Xcall.vim 5358a7d6542SBram Moolenaar delete('Xcall.vim') 5368a7d6542SBram Moolenaarenddef 5378a7d6542SBram Moolenaar 5388a7d6542SBram Moolenaardef Test_vim9script_call_fail_decl() 5398a7d6542SBram Moolenaar let lines =<< trim END 5408a7d6542SBram Moolenaar vim9script 5418a7d6542SBram Moolenaar let var = '' 5428a7d6542SBram Moolenaar def MyFunc(arg: string) 5438a7d6542SBram Moolenaar let var = 123 5448a7d6542SBram Moolenaar enddef 5458a7d6542SBram Moolenaar END 5468a7d6542SBram Moolenaar writefile(lines, 'Xcall_decl.vim') 5478a7d6542SBram Moolenaar assert_fails('source Xcall_decl.vim', 'E1054:') 5488a7d6542SBram Moolenaar delete('Xcall_decl.vim') 5498a7d6542SBram Moolenaarenddef 5508a7d6542SBram Moolenaar 5518a7d6542SBram Moolenaardef Test_vim9script_call_fail_const() 5528a7d6542SBram Moolenaar let lines =<< trim END 5538a7d6542SBram Moolenaar vim9script 5548a7d6542SBram Moolenaar const var = '' 5558a7d6542SBram Moolenaar def MyFunc(arg: string) 5568a7d6542SBram Moolenaar var = 'asdf' 5578a7d6542SBram Moolenaar enddef 5588a7d6542SBram Moolenaar END 5598a7d6542SBram Moolenaar writefile(lines, 'Xcall_const.vim') 5608a7d6542SBram Moolenaar assert_fails('source Xcall_const.vim', 'E46:') 5618a7d6542SBram Moolenaar delete('Xcall_const.vim') 5628a7d6542SBram Moolenaarenddef 5638a7d6542SBram Moolenaar 5648a7d6542SBram Moolenaardef Test_vim9script_reload() 5658a7d6542SBram Moolenaar let lines =<< trim END 5668a7d6542SBram Moolenaar vim9script 5678a7d6542SBram Moolenaar const var = '' 5688a7d6542SBram Moolenaar let valone = 1234 5698a7d6542SBram Moolenaar def MyFunc(arg: string) 5708a7d6542SBram Moolenaar valone = 5678 5718a7d6542SBram Moolenaar enddef 5728a7d6542SBram Moolenaar END 5738a7d6542SBram Moolenaar let morelines =<< trim END 5748a7d6542SBram Moolenaar let valtwo = 222 5758a7d6542SBram Moolenaar export def GetValtwo(): number 5768a7d6542SBram Moolenaar return valtwo 5778a7d6542SBram Moolenaar enddef 5788a7d6542SBram Moolenaar END 5798a7d6542SBram Moolenaar writefile(lines + morelines, 'Xreload.vim') 5808a7d6542SBram Moolenaar source Xreload.vim 5818a7d6542SBram Moolenaar source Xreload.vim 5828a7d6542SBram Moolenaar source Xreload.vim 5838a7d6542SBram Moolenaar 5848a7d6542SBram Moolenaar let testlines =<< trim END 5858a7d6542SBram Moolenaar vim9script 5868a7d6542SBram Moolenaar def TheFunc() 5878a7d6542SBram Moolenaar import GetValtwo from './Xreload.vim' 5888a7d6542SBram Moolenaar assert_equal(222, GetValtwo()) 5898a7d6542SBram Moolenaar enddef 5908a7d6542SBram Moolenaar TheFunc() 5918a7d6542SBram Moolenaar END 5928a7d6542SBram Moolenaar writefile(testlines, 'Ximport.vim') 5938a7d6542SBram Moolenaar source Ximport.vim 5948a7d6542SBram Moolenaar 5958a7d6542SBram Moolenaar " test that when not using "morelines" valtwo is still defined 5968a7d6542SBram Moolenaar " need to source Xreload.vim again, import doesn't reload a script 5978a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 5988a7d6542SBram Moolenaar source Xreload.vim 5998a7d6542SBram Moolenaar source Ximport.vim 6008a7d6542SBram Moolenaar 6018a7d6542SBram Moolenaar " cannot declare a var twice 6028a7d6542SBram Moolenaar lines =<< trim END 6038a7d6542SBram Moolenaar vim9script 6048a7d6542SBram Moolenaar let valone = 1234 6058a7d6542SBram Moolenaar let valone = 5678 6068a7d6542SBram Moolenaar END 6078a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 6088a7d6542SBram Moolenaar assert_fails('source Xreload.vim', 'E1041:') 6098a7d6542SBram Moolenaar 6108a7d6542SBram Moolenaar delete('Xreload.vim') 6118a7d6542SBram Moolenaar delete('Ximport.vim') 6128a7d6542SBram Moolenaarenddef 6138a7d6542SBram Moolenaar 6148a7d6542SBram Moolenaardef Test_import_absolute() 6158a7d6542SBram Moolenaar let import_lines = [ 6168a7d6542SBram Moolenaar \ 'vim9script', 6178a7d6542SBram Moolenaar \ 'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"', 618b283a8a6SBram Moolenaar \ 'def UseExported()', 6198a7d6542SBram Moolenaar \ ' g:imported_abs = exported', 6204e12a5dfSBram Moolenaar \ ' exported = 8888', 6214e12a5dfSBram Moolenaar \ ' g:imported_after = exported', 622b283a8a6SBram Moolenaar \ 'enddef', 623b283a8a6SBram Moolenaar \ 'UseExported()', 6244e12a5dfSBram Moolenaar \ 'g:import_disassembled = execute("disass UseExported")', 6258a7d6542SBram Moolenaar \ ] 6268a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_abs.vim') 6278a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport_abs.vim') 6288a7d6542SBram Moolenaar 6298a7d6542SBram Moolenaar source Ximport_abs.vim 6308a7d6542SBram Moolenaar 6318a7d6542SBram Moolenaar assert_equal(9876, g:imported_abs) 6324e12a5dfSBram Moolenaar assert_equal(8888, g:imported_after) 633b283a8a6SBram Moolenaar assert_match('<SNR>\d\+_UseExported.*' 634b283a8a6SBram Moolenaar \ .. 'g:imported_abs = exported.*' 635b283a8a6SBram Moolenaar \ .. '0 LOADSCRIPT exported from .*Xexport_abs.vim.*' 6364e12a5dfSBram Moolenaar \ .. '1 STOREG g:imported_abs.*' 6374e12a5dfSBram Moolenaar \ .. 'exported = 8888.*' 6384e12a5dfSBram Moolenaar \ .. '3 STORESCRIPT exported in .*Xexport_abs.vim.*' 6394e12a5dfSBram Moolenaar \ .. 'g:imported_after = exported.*' 6404e12a5dfSBram Moolenaar \ .. '4 LOADSCRIPT exported from .*Xexport_abs.vim.*' 6414e12a5dfSBram Moolenaar \ .. '5 STOREG g:imported_after.*' 6424e12a5dfSBram Moolenaar \, g:import_disassembled) 6438a7d6542SBram Moolenaar unlet g:imported_abs 6444e12a5dfSBram Moolenaar unlet g:import_disassembled 6458a7d6542SBram Moolenaar 6468a7d6542SBram Moolenaar delete('Ximport_abs.vim') 6478a7d6542SBram Moolenaar delete('Xexport_abs.vim') 6488a7d6542SBram Moolenaarenddef 6498a7d6542SBram Moolenaar 6508a7d6542SBram Moolenaardef Test_import_rtp() 6518a7d6542SBram Moolenaar let import_lines = [ 6528a7d6542SBram Moolenaar \ 'vim9script', 6538a7d6542SBram Moolenaar \ 'import exported from "Xexport_rtp.vim"', 6548a7d6542SBram Moolenaar \ 'g:imported_rtp = exported', 6558a7d6542SBram Moolenaar \ ] 6568a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_rtp.vim') 6578a7d6542SBram Moolenaar mkdir('import') 6588a7d6542SBram Moolenaar writefile(s:export_script_lines, 'import/Xexport_rtp.vim') 6598a7d6542SBram Moolenaar 6608a7d6542SBram Moolenaar let save_rtp = &rtp 6618a7d6542SBram Moolenaar &rtp = getcwd() 6628a7d6542SBram Moolenaar source Ximport_rtp.vim 6638a7d6542SBram Moolenaar &rtp = save_rtp 6648a7d6542SBram Moolenaar 6658a7d6542SBram Moolenaar assert_equal(9876, g:imported_rtp) 6668a7d6542SBram Moolenaar unlet g:imported_rtp 6678a7d6542SBram Moolenaar 6688a7d6542SBram Moolenaar delete('Ximport_rtp.vim') 6698a7d6542SBram Moolenaar delete('import/Xexport_rtp.vim') 6708a7d6542SBram Moolenaar delete('import', 'd') 6718a7d6542SBram Moolenaarenddef 6728a7d6542SBram Moolenaar 6738a7d6542SBram Moolenaardef Test_fixed_size_list() 6748a7d6542SBram Moolenaar " will be allocated as one piece of memory, check that changes work 6758a7d6542SBram Moolenaar let l = [1, 2, 3, 4] 6768a7d6542SBram Moolenaar l->remove(0) 6778a7d6542SBram Moolenaar l->add(5) 6788a7d6542SBram Moolenaar l->insert(99, 1) 6790f18b6d1SBram Moolenaar assert_equal([2, 99, 3, 4, 5], l) 6808a7d6542SBram Moolenaarenddef 6818a7d6542SBram Moolenaar 682673660abSBram Moolenaar" Test that inside :function a Python function can be defined, :def is not 683673660abSBram Moolenaar" recognized. 684673660abSBram Moolenaarfunc Test_function_python() 685673660abSBram Moolenaar CheckFeature python3 686673660abSBram Moolenaar let py = 'python3' 687673660abSBram Moolenaar execute py "<< EOF" 688673660abSBram Moolenaardef do_something(): 689673660abSBram Moolenaar return 1 690673660abSBram MoolenaarEOF 691673660abSBram Moolenaarendfunc 692673660abSBram Moolenaar 693158906cfSBram Moolenaardef IfElse(what: number): string 694158906cfSBram Moolenaar let res = '' 695158906cfSBram Moolenaar if what == 1 696158906cfSBram Moolenaar res = "one" 697158906cfSBram Moolenaar elseif what == 2 698158906cfSBram Moolenaar res = "two" 699a259d8d3SBram Moolenaar else 700158906cfSBram Moolenaar res = "three" 701a259d8d3SBram Moolenaar endif 702158906cfSBram Moolenaar return res 703a259d8d3SBram Moolenaarenddef 704a259d8d3SBram Moolenaar 705158906cfSBram Moolenaardef Test_if_elseif_else() 706158906cfSBram Moolenaar assert_equal('one', IfElse(1)) 707158906cfSBram Moolenaar assert_equal('two', IfElse(2)) 708158906cfSBram Moolenaar assert_equal('three', IfElse(3)) 7090f18b6d1SBram Moolenaarenddef 7100f18b6d1SBram Moolenaar 71163ce4849SBram Moolenaardef Test_delfunc() 71263ce4849SBram Moolenaar let lines =<< trim END 71363ce4849SBram Moolenaar vim9script 71463ce4849SBram Moolenaar def GoneSoon() 71563ce4849SBram Moolenaar echo 'hello' 71663ce4849SBram Moolenaar enddef 71763ce4849SBram Moolenaar 71863ce4849SBram Moolenaar def CallGoneSoon() 71963ce4849SBram Moolenaar GoneSoon() 72063ce4849SBram Moolenaar enddef 72163ce4849SBram Moolenaar 72263ce4849SBram Moolenaar delfunc GoneSoon 72363ce4849SBram Moolenaar CallGoneSoon() 72463ce4849SBram Moolenaar END 72563ce4849SBram Moolenaar writefile(lines, 'XToDelFunc') 72663ce4849SBram Moolenaar assert_fails('so XToDelFunc', 'E933') 72763ce4849SBram Moolenaar assert_fails('so XToDelFunc', 'E933') 72863ce4849SBram Moolenaar 72963ce4849SBram Moolenaar delete('XToDelFunc') 73063ce4849SBram Moolenaarenddef 73163ce4849SBram Moolenaar 7325b1c8fe3SBram Moolenaardef Test_substitute_cmd() 7335b1c8fe3SBram Moolenaar new 7345b1c8fe3SBram Moolenaar setline(1, 'something') 7355b1c8fe3SBram Moolenaar :substitute(some(other( 7365b1c8fe3SBram Moolenaar assert_equal('otherthing', getline(1)) 73783f37b91SBram Moolenaar bwipe! 73883f37b91SBram Moolenaar 73983f37b91SBram Moolenaar " also when the context is Vim9 script 74083f37b91SBram Moolenaar let lines =<< trim END 74183f37b91SBram Moolenaar vim9script 74283f37b91SBram Moolenaar new 74383f37b91SBram Moolenaar setline(1, 'something') 74483f37b91SBram Moolenaar :substitute(some(other( 74583f37b91SBram Moolenaar assert_equal('otherthing', getline(1)) 74683f37b91SBram Moolenaar bwipe! 74783f37b91SBram Moolenaar END 74883f37b91SBram Moolenaar writefile(lines, 'Xvim9lines') 74983f37b91SBram Moolenaar source Xvim9lines 75083f37b91SBram Moolenaar 75183f37b91SBram Moolenaar delete('Xvim9lines') 7525b1c8fe3SBram Moolenaarenddef 7535b1c8fe3SBram Moolenaar 754ad39c094SBram Moolenaardef Test_execute_cmd() 755ad39c094SBram Moolenaar new 756ad39c094SBram Moolenaar setline(1, 'default') 757ad39c094SBram Moolenaar execute 'call setline(1, "execute-string")' 758ad39c094SBram Moolenaar assert_equal('execute-string', getline(1)) 759ad39c094SBram Moolenaar let cmd1 = 'call setline(1,' 760ad39c094SBram Moolenaar let cmd2 = '"execute-var")' 761ad39c094SBram Moolenaar execute cmd1 cmd2 762ad39c094SBram Moolenaar assert_equal('execute-var', getline(1)) 763ad39c094SBram Moolenaar execute cmd1 cmd2 '|call setline(1, "execute-var-string")' 764ad39c094SBram Moolenaar assert_equal('execute-var-string', getline(1)) 765ad39c094SBram Moolenaar let cmd_first = 'call ' 766ad39c094SBram Moolenaar let cmd_last = 'setline(1, "execute-var-var")' 767ad39c094SBram Moolenaar execute cmd_first .. cmd_last 768ad39c094SBram Moolenaar assert_equal('execute-var-var', getline(1)) 769ad39c094SBram Moolenaar bwipe! 770ad39c094SBram Moolenaarenddef 771ad39c094SBram Moolenaar 772ad39c094SBram Moolenaardef Test_echo_cmd() 773ad39c094SBram Moolenaar echo 'something' 774ad39c094SBram Moolenaar assert_match('^something$', Screenline(&lines)) 775ad39c094SBram Moolenaar 776ad39c094SBram Moolenaar let str1 = 'some' 777ad39c094SBram Moolenaar let str2 = 'more' 778ad39c094SBram Moolenaar echo str1 str2 779ad39c094SBram Moolenaar assert_match('^some more$', Screenline(&lines)) 780ad39c094SBram Moolenaarenddef 781ad39c094SBram Moolenaar 78241fe0617SBram Moolenaardef Test_for_outside_of_function() 78341fe0617SBram Moolenaar let lines =<< trim END 78441fe0617SBram Moolenaar vim9script 78541fe0617SBram Moolenaar new 78641fe0617SBram Moolenaar for var in range(0, 3) 78741fe0617SBram Moolenaar append(line('$'), var) 78841fe0617SBram Moolenaar endfor 78941fe0617SBram Moolenaar assert_equal(['', '0', '1', '2', '3'], getline(1, '$')) 79041fe0617SBram Moolenaar bwipe! 79141fe0617SBram Moolenaar END 79241fe0617SBram Moolenaar writefile(lines, 'Xvim9for.vim') 79341fe0617SBram Moolenaar source Xvim9for.vim 79441fe0617SBram Moolenaar delete('Xvim9for.vim') 79541fe0617SBram Moolenaarenddef 7968a7d6542SBram Moolenaar 7978a7d6542SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker 798