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 5942a480bfSBram Moolenaar endif 60fbdd08edSBram Moolenaar if has('float') 61fbdd08edSBram Moolenaar let float1: float = 3.4 62fbdd08edSBram Moolenaar endif 63*087d2e15SBram Moolenaar let funky1: func 64*087d2e15SBram Moolenaar let funky2: func = function('len') 65*087d2e15SBram Moolenaar let party1: partial 66*087d2e15SBram Moolenaar let party2: partial = funcref('Test_syntax') 6742a480bfSBram Moolenaar 68401d9ffbSBram Moolenaar g:newvar = 'new' 69401d9ffbSBram Moolenaar assert_equal('new', g:newvar) 70401d9ffbSBram Moolenaar 71401d9ffbSBram Moolenaar assert_equal('yes', g:existing) 72401d9ffbSBram Moolenaar g:existing = 'no' 73401d9ffbSBram Moolenaar assert_equal('no', g:existing) 74401d9ffbSBram Moolenaar 75b283a8a6SBram Moolenaar v:char = 'abc' 766e587dcbSBram Moolenaar assert_equal('abc', v:char) 77b283a8a6SBram Moolenaar 78b283a8a6SBram Moolenaar $ENVVAR = 'foobar' 796e587dcbSBram Moolenaar assert_equal('foobar', $ENVVAR) 80b283a8a6SBram Moolenaar $ENVVAR = '' 816e587dcbSBram Moolenaar 82fd1823e0SBram Moolenaar s:appendToMe ..= 'yyy' 83fd1823e0SBram Moolenaar assert_equal('xxxyyy', s:appendToMe) 84fd1823e0SBram Moolenaar s:addToMe += 222 85fd1823e0SBram Moolenaar assert_equal(333, s:addToMe) 860bbf722aSBram Moolenaar s:newVar = 'new' 870bbf722aSBram Moolenaar assert_equal('new', s:newVar) 888a7d6542SBram Moolenaarenddef 898a7d6542SBram Moolenaar 908a7d6542SBram Moolenaarfunc Test_assignment_failure() 918a7d6542SBram Moolenaar call CheckDefFailure(['let var=234'], 'E1004:') 928a7d6542SBram Moolenaar call CheckDefFailure(['let var =234'], 'E1004:') 938a7d6542SBram Moolenaar call CheckDefFailure(['let var= 234'], 'E1004:') 948a7d6542SBram Moolenaar 958a7d6542SBram Moolenaar call CheckDefFailure(['let true = 1'], 'E1034:') 968a7d6542SBram Moolenaar call CheckDefFailure(['let false = 1'], 'E1034:') 978a7d6542SBram Moolenaar 988a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<string> = [123]'], 'expected list<string> but got list<number>') 998a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<number> = ["xx"]'], 'expected list<number> but got list<string>') 1008a7d6542SBram Moolenaar 1018a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<string> = #{key: 123}'], 'expected dict<string> but got dict<number>') 1028a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<number> = #{key: "xx"}'], 'expected dict<number> but got dict<string>') 1038a7d6542SBram Moolenaar 1048a7d6542SBram Moolenaar call CheckDefFailure(['let var = feedkeys("0")'], 'E1031:') 1058a7d6542SBram Moolenaar call CheckDefFailure(['let var: number = feedkeys("0")'], 'expected number but got void') 10642a480bfSBram Moolenaar 10742a480bfSBram Moolenaar call CheckDefFailure(['let var: dict <number>'], 'E1007:') 10842a480bfSBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 10942a480bfSBram Moolenaar 11042a480bfSBram Moolenaar call CheckDefFailure(['let var: ally'], 'E1010:') 11142a480bfSBram Moolenaar call CheckDefFailure(['let var: bram'], 'E1010:') 11242a480bfSBram Moolenaar call CheckDefFailure(['let var: cathy'], 'E1010:') 11342a480bfSBram Moolenaar call CheckDefFailure(['let var: dom'], 'E1010:') 11442a480bfSBram Moolenaar call CheckDefFailure(['let var: freddy'], 'E1010:') 11542a480bfSBram Moolenaar call CheckDefFailure(['let var: john'], 'E1010:') 11642a480bfSBram Moolenaar call CheckDefFailure(['let var: larry'], 'E1010:') 11742a480bfSBram Moolenaar call CheckDefFailure(['let var: ned'], 'E1010:') 11842a480bfSBram Moolenaar call CheckDefFailure(['let var: pam'], 'E1010:') 11942a480bfSBram Moolenaar call CheckDefFailure(['let var: sam'], 'E1010:') 12042a480bfSBram Moolenaar call CheckDefFailure(['let var: vim'], 'E1010:') 1218a7d6542SBram Moolenaarendfunc 1228a7d6542SBram Moolenaar 1238a7d6542SBram Moolenaarfunc Test_const() 1248a7d6542SBram Moolenaar call CheckDefFailure(['const var = 234', 'var = 99'], 'E1018:') 1258a7d6542SBram Moolenaar call CheckDefFailure(['const one = 234', 'let one = 99'], 'E1017:') 1268a7d6542SBram Moolenaar call CheckDefFailure(['const two'], 'E1021:') 1278a7d6542SBram Moolenaarendfunc 1288a7d6542SBram Moolenaar 1298a7d6542SBram Moolenaardef Test_block() 1308a7d6542SBram Moolenaar let outer = 1 1318a7d6542SBram Moolenaar { 1328a7d6542SBram Moolenaar let inner = 2 1338a7d6542SBram Moolenaar assert_equal(1, outer) 1348a7d6542SBram Moolenaar assert_equal(2, inner) 1358a7d6542SBram Moolenaar } 1368a7d6542SBram Moolenaar assert_equal(1, outer) 1378a7d6542SBram Moolenaarenddef 1388a7d6542SBram Moolenaar 1398a7d6542SBram Moolenaarfunc Test_block_failure() 1408a7d6542SBram Moolenaar call CheckDefFailure(['{', 'let inner = 1', '}', 'echo inner'], 'E1001:') 1418a7d6542SBram Moolenaarendfunc 1428a7d6542SBram Moolenaar 1438a7d6542SBram Moolenaardef ReturnString(): string 1448a7d6542SBram Moolenaar return 'string' 1458a7d6542SBram Moolenaarenddef 1468a7d6542SBram Moolenaar 1478a7d6542SBram Moolenaardef ReturnNumber(): number 1488a7d6542SBram Moolenaar return 123 1498a7d6542SBram Moolenaarenddef 1508a7d6542SBram Moolenaar 15109f28f49SBram Moolenaarlet g:notNumber = 'string' 15209f28f49SBram Moolenaar 15309f28f49SBram Moolenaardef ReturnGlobal(): number 15409f28f49SBram Moolenaar return g:notNumber 15509f28f49SBram Moolenaarenddef 15609f28f49SBram Moolenaar 1578a7d6542SBram Moolenaardef Test_return_string() 1588a7d6542SBram Moolenaar assert_equal('string', ReturnString()) 1598a7d6542SBram Moolenaar assert_equal(123, ReturnNumber()) 16009f28f49SBram Moolenaar assert_fails('call ReturnGlobal()', 'E1029: Expected number but got string') 1618a7d6542SBram Moolenaarenddef 1628a7d6542SBram Moolenaar 1638a7d6542SBram Moolenaarfunc Increment() 1648a7d6542SBram Moolenaar let g:counter += 1 1658a7d6542SBram Moolenaarendfunc 1668a7d6542SBram Moolenaar 1678a7d6542SBram Moolenaardef Test_call_ufunc_count() 1688a7d6542SBram Moolenaar g:counter = 1 1698a7d6542SBram Moolenaar Increment() 1708a7d6542SBram Moolenaar Increment() 1718a7d6542SBram Moolenaar Increment() 1728a7d6542SBram Moolenaar " works with and without :call 1738a7d6542SBram Moolenaar assert_equal(4, g:counter) 174b283a8a6SBram Moolenaar call assert_equal(4, g:counter) 1758a7d6542SBram Moolenaar unlet g:counter 1768a7d6542SBram Moolenaarenddef 1778a7d6542SBram Moolenaar 1788a7d6542SBram Moolenaardef MyVarargs(arg: string, ...rest: list<string>): string 1798a7d6542SBram Moolenaar let res = arg 1808a7d6542SBram Moolenaar for s in rest 1818a7d6542SBram Moolenaar res ..= ',' .. s 1828a7d6542SBram Moolenaar endfor 1838a7d6542SBram Moolenaar return res 1848a7d6542SBram Moolenaarenddef 1858a7d6542SBram Moolenaar 1868a7d6542SBram Moolenaardef Test_call_varargs() 1878a7d6542SBram Moolenaar assert_equal('one', MyVarargs('one')) 1888a7d6542SBram Moolenaar assert_equal('one,two', MyVarargs('one', 'two')) 1898a7d6542SBram Moolenaar assert_equal('one,two,three', MyVarargs('one', 'two', 'three')) 1908a7d6542SBram Moolenaarenddef 1918a7d6542SBram Moolenaar 192170fcfcfSBram Moolenaardef MyDefaultArgs(name = 'string'): string 193170fcfcfSBram Moolenaar return name 194170fcfcfSBram Moolenaarenddef 195170fcfcfSBram Moolenaar 196170fcfcfSBram Moolenaardef Test_call_default_args() 197170fcfcfSBram Moolenaar assert_equal('string', MyDefaultArgs()) 198170fcfcfSBram Moolenaar assert_equal('one', MyDefaultArgs('one')) 199170fcfcfSBram Moolenaar assert_fails('call MyDefaultArgs("one", "two")', 'E118:') 200170fcfcfSBram Moolenaarenddef 201170fcfcfSBram Moolenaar 202170fcfcfSBram Moolenaarfunc Test_call_default_args_from_func() 203170fcfcfSBram Moolenaar call assert_equal('string', MyDefaultArgs()) 204170fcfcfSBram Moolenaar call assert_equal('one', MyDefaultArgs('one')) 205170fcfcfSBram Moolenaar call assert_fails('call MyDefaultArgs("one", "two")', 'E118:') 206170fcfcfSBram Moolenaarendfunc 207170fcfcfSBram Moolenaar 208b35efa5eSBram Moolenaarfunc TakesOneArg(arg) 209b35efa5eSBram Moolenaar echo a:arg 210b35efa5eSBram Moolenaarendfunc 211b35efa5eSBram Moolenaar 212b35efa5eSBram Moolenaardef Test_call_wrong_arg_count() 213b35efa5eSBram Moolenaar call CheckDefFailure(['TakesOneArg()'], 'E119:') 214b35efa5eSBram Moolenaar call CheckDefFailure(['TakesOneArg(11, 22)'], 'E118:') 215b35efa5eSBram Moolenaarenddef 216b35efa5eSBram Moolenaar 217170fcfcfSBram Moolenaar" Default arg and varargs 218170fcfcfSBram Moolenaardef MyDefVarargs(one: string, two = 'foo', ...rest: list<string>): string 219170fcfcfSBram Moolenaar let res = one .. ',' .. two 220170fcfcfSBram Moolenaar for s in rest 221170fcfcfSBram Moolenaar res ..= ',' .. s 222170fcfcfSBram Moolenaar endfor 223170fcfcfSBram Moolenaar return res 224170fcfcfSBram Moolenaarenddef 225170fcfcfSBram Moolenaar 226170fcfcfSBram Moolenaardef Test_call_def_varargs() 227170fcfcfSBram Moolenaar call assert_fails('call MyDefVarargs()', 'E119:') 228170fcfcfSBram Moolenaar assert_equal('one,foo', MyDefVarargs('one')) 229170fcfcfSBram Moolenaar assert_equal('one,two', MyDefVarargs('one', 'two')) 230170fcfcfSBram Moolenaar assert_equal('one,two,three', MyDefVarargs('one', 'two', 'three')) 231170fcfcfSBram Moolenaarenddef 232170fcfcfSBram Moolenaar 23342a480bfSBram Moolenaardef Test_using_var_as_arg() 23442a480bfSBram Moolenaar call writefile(['def Func(x: number)', 'let x = 234', 'enddef'], 'Xdef') 23542a480bfSBram Moolenaar call assert_fails('so Xdef', 'E1006:') 23642a480bfSBram Moolenaar call delete('Xdef') 23742a480bfSBram Moolenaarenddef 23842a480bfSBram Moolenaar 239b35efa5eSBram Moolenaardef Test_call_func_defined_later() 240b35efa5eSBram Moolenaar call assert_equal('one', DefinedLater('one')) 241b35efa5eSBram Moolenaar call assert_fails('call NotDefined("one")', 'E117:') 242b35efa5eSBram Moolenaarenddef 243170fcfcfSBram Moolenaar 244b35efa5eSBram Moolenaarfunc DefinedLater(arg) 24526e117e9SBram Moolenaar return a:arg 24626e117e9SBram Moolenaarendfunc 24726e117e9SBram Moolenaar 2487eeefd4aSBram Moolenaardef FuncWithForwardCall() 2497eeefd4aSBram Moolenaar return DefinedEvenLater("yes") 2507eeefd4aSBram Moolenaarenddef 2517eeefd4aSBram Moolenaar 2527eeefd4aSBram Moolenaardef DefinedEvenLater(arg: string): string 2537eeefd4aSBram Moolenaar return arg 2547eeefd4aSBram Moolenaarenddef 2557eeefd4aSBram Moolenaar 2567eeefd4aSBram Moolenaardef Test_error_in_nested_function() 2577eeefd4aSBram Moolenaar " Error in called function requires unwinding the call stack. 2587eeefd4aSBram Moolenaar assert_fails('call FuncWithForwardCall()', 'E1029') 2597eeefd4aSBram Moolenaarenddef 2607eeefd4aSBram Moolenaar 2618a7d6542SBram Moolenaardef Test_return_type_wrong() 262978d170bSBram Moolenaar CheckScriptFailure(['def Func(): number', 'return "a"', 'enddef'], 'expected number but got string') 263978d170bSBram Moolenaar CheckScriptFailure(['def Func(): string', 'return 1', 'enddef'], 'expected string but got number') 264978d170bSBram Moolenaar CheckScriptFailure(['def Func(): void', 'return "a"', 'enddef'], 'expected void but got string') 265978d170bSBram Moolenaar CheckScriptFailure(['def Func()', 'return "a"', 'enddef'], 'expected void but got string') 2668a7d6542SBram Moolenaarenddef 2678a7d6542SBram Moolenaar 268bfe12043SBram Moolenaardef Test_arg_type_wrong() 269bfe12043SBram Moolenaar CheckScriptFailure(['def Func3(items: list)', 'echo "a"', 'enddef'], 'E1008: Missing <type>') 270bfe12043SBram Moolenaarenddef 271bfe12043SBram Moolenaar 2728a7d6542SBram Moolenaardef Test_try_catch() 2738a7d6542SBram Moolenaar let l = [] 2748a7d6542SBram Moolenaar try 2758a7d6542SBram Moolenaar add(l, '1') 2768a7d6542SBram Moolenaar throw 'wrong' 2778a7d6542SBram Moolenaar add(l, '2') 2788a7d6542SBram Moolenaar catch 2798a7d6542SBram Moolenaar add(l, v:exception) 2808a7d6542SBram Moolenaar finally 2818a7d6542SBram Moolenaar add(l, '3') 2828a7d6542SBram Moolenaar endtry 2838a7d6542SBram Moolenaar assert_equal(['1', 'wrong', '3'], l) 2848a7d6542SBram Moolenaarenddef 2858a7d6542SBram Moolenaar 286257cc5eeSBram Moolenaardef ThrowFromDef() 287257cc5eeSBram Moolenaar throw 'getout' 288257cc5eeSBram Moolenaarenddef 289257cc5eeSBram Moolenaar 290257cc5eeSBram Moolenaarfunc CatchInFunc() 291257cc5eeSBram Moolenaar try 292257cc5eeSBram Moolenaar call ThrowFromDef() 293257cc5eeSBram Moolenaar catch 294257cc5eeSBram Moolenaar let g:thrown_func = v:exception 295257cc5eeSBram Moolenaar endtry 296257cc5eeSBram Moolenaarendfunc 297257cc5eeSBram Moolenaar 298257cc5eeSBram Moolenaardef CatchInDef() 299257cc5eeSBram Moolenaar try 300257cc5eeSBram Moolenaar ThrowFromDef() 301257cc5eeSBram Moolenaar catch 302257cc5eeSBram Moolenaar g:thrown_def = v:exception 303257cc5eeSBram Moolenaar endtry 304257cc5eeSBram Moolenaarenddef 305257cc5eeSBram Moolenaar 306f575adffSBram Moolenaardef ReturnFinally(): string 307f575adffSBram Moolenaar try 308f575adffSBram Moolenaar return 'intry' 309f575adffSBram Moolenaar finally 310f575adffSBram Moolenaar g:in_finally = 'finally' 311f575adffSBram Moolenaar endtry 312f575adffSBram Moolenaar return 'end' 313f575adffSBram Moolenaarenddef 314f575adffSBram Moolenaar 315257cc5eeSBram Moolenaardef Test_try_catch_nested() 316257cc5eeSBram Moolenaar CatchInFunc() 317257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_func) 318257cc5eeSBram Moolenaar 319257cc5eeSBram Moolenaar CatchInDef() 320257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_def) 321f575adffSBram Moolenaar 322f575adffSBram Moolenaar assert_equal('intry', ReturnFinally()) 323f575adffSBram Moolenaar assert_equal('finally', g:in_finally) 324f575adffSBram Moolenaarenddef 325f575adffSBram Moolenaar 326f575adffSBram Moolenaardef Test_try_catch_match() 327f575adffSBram Moolenaar let seq = 'a' 328f575adffSBram Moolenaar try 329f575adffSBram Moolenaar throw 'something' 330f575adffSBram Moolenaar catch /nothing/ 331f575adffSBram Moolenaar seq ..= 'x' 332f575adffSBram Moolenaar catch /some/ 333f575adffSBram Moolenaar seq ..= 'b' 334f575adffSBram Moolenaar catch /asdf/ 335f575adffSBram Moolenaar seq ..= 'x' 336f575adffSBram Moolenaar finally 337f575adffSBram Moolenaar seq ..= 'c' 338f575adffSBram Moolenaar endtry 339f575adffSBram Moolenaar assert_equal('abc', seq) 340257cc5eeSBram Moolenaarenddef 341257cc5eeSBram Moolenaar 3428a7d6542SBram Moolenaarlet s:export_script_lines =<< trim END 3438a7d6542SBram Moolenaar vim9script 3448a7d6542SBram Moolenaar let name: string = 'bob' 3458a7d6542SBram Moolenaar def Concat(arg: string): string 3468a7d6542SBram Moolenaar return name .. arg 3478a7d6542SBram Moolenaar enddef 3488a7d6542SBram Moolenaar let g:result = Concat('bie') 3498a7d6542SBram Moolenaar let g:localname = name 3508a7d6542SBram Moolenaar 3518a7d6542SBram Moolenaar export const CONST = 1234 3528a7d6542SBram Moolenaar export let exported = 9876 3536e587dcbSBram Moolenaar export let exp_name = 'John' 3548a7d6542SBram Moolenaar export def Exported(): string 3558a7d6542SBram Moolenaar return 'Exported' 3568a7d6542SBram Moolenaar enddef 3578a7d6542SBram MoolenaarEND 3588a7d6542SBram Moolenaar 3598a7d6542SBram Moolenaardef Test_vim9script() 3608a7d6542SBram Moolenaar let import_script_lines =<< trim END 3618a7d6542SBram Moolenaar vim9script 3628a7d6542SBram Moolenaar import {exported, Exported} from './Xexport.vim' 3638a7d6542SBram Moolenaar g:imported = exported 3646e587dcbSBram Moolenaar exported += 3 3656e587dcbSBram Moolenaar g:imported_added = exported 3668a7d6542SBram Moolenaar g:imported_func = Exported() 3676e587dcbSBram Moolenaar 3686e587dcbSBram Moolenaar import {exp_name} from './Xexport.vim' 3696e587dcbSBram Moolenaar g:imported_name = exp_name 3706e587dcbSBram Moolenaar exp_name ..= ' Doe' 3716e587dcbSBram Moolenaar g:imported_name_appended = exp_name 3728a7d6542SBram Moolenaar END 3738a7d6542SBram Moolenaar 3748a7d6542SBram Moolenaar writefile(import_script_lines, 'Ximport.vim') 3758a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport.vim') 3768a7d6542SBram Moolenaar 3778a7d6542SBram Moolenaar source Ximport.vim 3788a7d6542SBram Moolenaar 3798a7d6542SBram Moolenaar assert_equal('bobbie', g:result) 3808a7d6542SBram Moolenaar assert_equal('bob', g:localname) 3818a7d6542SBram Moolenaar assert_equal(9876, g:imported) 3826e587dcbSBram Moolenaar assert_equal(9879, g:imported_added) 3838a7d6542SBram Moolenaar assert_equal('Exported', g:imported_func) 3846e587dcbSBram Moolenaar assert_equal('John', g:imported_name) 3856e587dcbSBram Moolenaar assert_equal('John Doe', g:imported_name_appended) 3868a7d6542SBram Moolenaar assert_false(exists('g:name')) 3878a7d6542SBram Moolenaar 3888a7d6542SBram Moolenaar unlet g:result 3898a7d6542SBram Moolenaar unlet g:localname 3908a7d6542SBram Moolenaar unlet g:imported 3916e587dcbSBram Moolenaar unlet g:imported_added 3928a7d6542SBram Moolenaar unlet g:imported_func 3936e587dcbSBram Moolenaar unlet g:imported_name g:imported_name_appended 3948a7d6542SBram Moolenaar delete('Ximport.vim') 395f2d5c240SBram Moolenaar 396f2d5c240SBram Moolenaar let import_star_as_lines =<< trim END 397f2d5c240SBram Moolenaar vim9script 398f2d5c240SBram Moolenaar import * as Export from './Xexport.vim' 399f2d5c240SBram Moolenaar def UseExport() 400f2d5c240SBram Moolenaar g:imported = Export.exported 401f2d5c240SBram Moolenaar enddef 402f2d5c240SBram Moolenaar UseExport() 403f2d5c240SBram Moolenaar END 404f2d5c240SBram Moolenaar writefile(import_star_as_lines, 'Ximport.vim') 405f2d5c240SBram Moolenaar source Ximport.vim 406f2d5c240SBram Moolenaar assert_equal(9876, g:imported) 407f2d5c240SBram Moolenaar 408f2d5c240SBram Moolenaar let import_star_lines =<< trim END 409f2d5c240SBram Moolenaar vim9script 410f2d5c240SBram Moolenaar import * from './Xexport.vim' 411f2d5c240SBram Moolenaar g:imported = exported 412f2d5c240SBram Moolenaar END 413f2d5c240SBram Moolenaar writefile(import_star_lines, 'Ximport.vim') 414f2d5c240SBram Moolenaar assert_fails('source Ximport.vim', 'E1045:') 415f2d5c240SBram Moolenaar 416fa29c8abSBram Moolenaar " try to import something that exists but is not exported 417fa29c8abSBram Moolenaar let import_not_exported_lines =<< trim END 418fa29c8abSBram Moolenaar vim9script 419fa29c8abSBram Moolenaar import name from './Xexport.vim' 420fa29c8abSBram Moolenaar END 421fa29c8abSBram Moolenaar writefile(import_not_exported_lines, 'Ximport.vim') 422fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1049:') 423fa29c8abSBram Moolenaar 424fa29c8abSBram Moolenaar " import a very long name, requires making a copy 425fa29c8abSBram Moolenaar let import_long_name_lines =<< trim END 426fa29c8abSBram Moolenaar vim9script 427fa29c8abSBram Moolenaar import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim' 428fa29c8abSBram Moolenaar END 429fa29c8abSBram Moolenaar writefile(import_long_name_lines, 'Ximport.vim') 430fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 431fa29c8abSBram Moolenaar 432fa29c8abSBram Moolenaar let import_no_from_lines =<< trim END 433fa29c8abSBram Moolenaar vim9script 434fa29c8abSBram Moolenaar import name './Xexport.vim' 435fa29c8abSBram Moolenaar END 436fa29c8abSBram Moolenaar writefile(import_no_from_lines, 'Ximport.vim') 437fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1070:') 438fa29c8abSBram Moolenaar 439fa29c8abSBram Moolenaar let import_invalid_string_lines =<< trim END 440fa29c8abSBram Moolenaar vim9script 441fa29c8abSBram Moolenaar import name from Xexport.vim 442fa29c8abSBram Moolenaar END 443fa29c8abSBram Moolenaar writefile(import_invalid_string_lines, 'Ximport.vim') 444fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1071:') 445fa29c8abSBram Moolenaar 446fa29c8abSBram Moolenaar let import_wrong_name_lines =<< trim END 447fa29c8abSBram Moolenaar vim9script 448fa29c8abSBram Moolenaar import name from './XnoExport.vim' 449fa29c8abSBram Moolenaar END 450fa29c8abSBram Moolenaar writefile(import_wrong_name_lines, 'Ximport.vim') 451fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1053:') 452fa29c8abSBram Moolenaar 453fa29c8abSBram Moolenaar let import_missing_comma_lines =<< trim END 454fa29c8abSBram Moolenaar vim9script 455fa29c8abSBram Moolenaar import {exported name} from './Xexport.vim' 456fa29c8abSBram Moolenaar END 457fa29c8abSBram Moolenaar writefile(import_missing_comma_lines, 'Ximport.vim') 458fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1046:') 459fa29c8abSBram Moolenaar 460f2d5c240SBram Moolenaar delete('Ximport.vim') 4618a7d6542SBram Moolenaar delete('Xexport.vim') 4628a7d6542SBram Moolenaar 463750802b5SBram Moolenaar " Check that in a Vim9 script 'cpo' is set to the Vim default. 464750802b5SBram Moolenaar set cpo&vi 465750802b5SBram Moolenaar let cpo_before = &cpo 466750802b5SBram Moolenaar let lines =<< trim END 467750802b5SBram Moolenaar vim9script 468750802b5SBram Moolenaar g:cpo_in_vim9script = &cpo 469750802b5SBram Moolenaar END 470750802b5SBram Moolenaar writefile(lines, 'Xvim9_script') 471750802b5SBram Moolenaar source Xvim9_script 472750802b5SBram Moolenaar assert_equal(cpo_before, &cpo) 473750802b5SBram Moolenaar set cpo&vim 474750802b5SBram Moolenaar assert_equal(&cpo, g:cpo_in_vim9script) 475750802b5SBram Moolenaar delete('Xvim9_script') 476750802b5SBram Moolenaarenddef 477750802b5SBram Moolenaar 478750802b5SBram Moolenaardef Test_vim9script_fails() 4798a7d6542SBram Moolenaar CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:') 4808a7d6542SBram Moolenaar CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:') 481750802b5SBram Moolenaar CheckScriptFailure(['export let some = 123'], 'E1042:') 482f2d5c240SBram Moolenaar CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1042:') 483750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export let g:some'], 'E1044:') 484750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:') 485750802b5SBram Moolenaar 486750802b5SBram Moolenaar assert_fails('vim9script', 'E1038') 487750802b5SBram Moolenaar assert_fails('export something', 'E1042') 4888a7d6542SBram Moolenaarenddef 4898a7d6542SBram Moolenaar 4908a7d6542SBram Moolenaardef Test_vim9script_call() 4918a7d6542SBram Moolenaar let lines =<< trim END 4928a7d6542SBram Moolenaar vim9script 4938a7d6542SBram Moolenaar let var = '' 4948a7d6542SBram Moolenaar def MyFunc(arg: string) 4958a7d6542SBram Moolenaar var = arg 4968a7d6542SBram Moolenaar enddef 4978a7d6542SBram Moolenaar MyFunc('foobar') 4988a7d6542SBram Moolenaar assert_equal('foobar', var) 4998a7d6542SBram Moolenaar 5008a7d6542SBram Moolenaar let str = 'barfoo' 5018a7d6542SBram Moolenaar str->MyFunc() 5028a7d6542SBram Moolenaar assert_equal('barfoo', var) 5038a7d6542SBram Moolenaar 5048a7d6542SBram Moolenaar let g:value = 'value' 5058a7d6542SBram Moolenaar g:value->MyFunc() 5068a7d6542SBram Moolenaar assert_equal('value', var) 5078a7d6542SBram Moolenaar 5088a7d6542SBram Moolenaar let listvar = [] 5098a7d6542SBram Moolenaar def ListFunc(arg: list<number>) 5108a7d6542SBram Moolenaar listvar = arg 5118a7d6542SBram Moolenaar enddef 5128a7d6542SBram Moolenaar [1, 2, 3]->ListFunc() 5138a7d6542SBram Moolenaar assert_equal([1, 2, 3], listvar) 5148a7d6542SBram Moolenaar 5158a7d6542SBram Moolenaar let dictvar = {} 5168a7d6542SBram Moolenaar def DictFunc(arg: dict<number>) 5178a7d6542SBram Moolenaar dictvar = arg 5188a7d6542SBram Moolenaar enddef 5198a7d6542SBram Moolenaar {'a': 1, 'b': 2}->DictFunc() 5208a7d6542SBram Moolenaar assert_equal(#{a: 1, b: 2}, dictvar) 5218a7d6542SBram Moolenaar #{a: 3, b: 4}->DictFunc() 5228a7d6542SBram Moolenaar assert_equal(#{a: 3, b: 4}, dictvar) 5230c6ceaf9SBram Moolenaar 5240c6ceaf9SBram Moolenaar ('text')->MyFunc() 5250c6ceaf9SBram Moolenaar assert_equal('text', var) 5260c6ceaf9SBram Moolenaar ("some")->MyFunc() 5270c6ceaf9SBram Moolenaar assert_equal('some', var) 5288a7d6542SBram Moolenaar END 5298a7d6542SBram Moolenaar writefile(lines, 'Xcall.vim') 5308a7d6542SBram Moolenaar source Xcall.vim 5318a7d6542SBram Moolenaar delete('Xcall.vim') 5328a7d6542SBram Moolenaarenddef 5338a7d6542SBram Moolenaar 5348a7d6542SBram Moolenaardef Test_vim9script_call_fail_decl() 5358a7d6542SBram Moolenaar let lines =<< trim END 5368a7d6542SBram Moolenaar vim9script 5378a7d6542SBram Moolenaar let var = '' 5388a7d6542SBram Moolenaar def MyFunc(arg: string) 5398a7d6542SBram Moolenaar let var = 123 5408a7d6542SBram Moolenaar enddef 5418a7d6542SBram Moolenaar END 5428a7d6542SBram Moolenaar writefile(lines, 'Xcall_decl.vim') 5438a7d6542SBram Moolenaar assert_fails('source Xcall_decl.vim', 'E1054:') 5448a7d6542SBram Moolenaar delete('Xcall_decl.vim') 5458a7d6542SBram Moolenaarenddef 5468a7d6542SBram Moolenaar 5478a7d6542SBram Moolenaardef Test_vim9script_call_fail_const() 5488a7d6542SBram Moolenaar let lines =<< trim END 5498a7d6542SBram Moolenaar vim9script 5508a7d6542SBram Moolenaar const var = '' 5518a7d6542SBram Moolenaar def MyFunc(arg: string) 5528a7d6542SBram Moolenaar var = 'asdf' 5538a7d6542SBram Moolenaar enddef 5548a7d6542SBram Moolenaar END 5558a7d6542SBram Moolenaar writefile(lines, 'Xcall_const.vim') 5568a7d6542SBram Moolenaar assert_fails('source Xcall_const.vim', 'E46:') 5578a7d6542SBram Moolenaar delete('Xcall_const.vim') 5588a7d6542SBram Moolenaarenddef 5598a7d6542SBram Moolenaar 5608a7d6542SBram Moolenaardef Test_vim9script_reload() 5618a7d6542SBram Moolenaar let lines =<< trim END 5628a7d6542SBram Moolenaar vim9script 5638a7d6542SBram Moolenaar const var = '' 5648a7d6542SBram Moolenaar let valone = 1234 5658a7d6542SBram Moolenaar def MyFunc(arg: string) 5668a7d6542SBram Moolenaar valone = 5678 5678a7d6542SBram Moolenaar enddef 5688a7d6542SBram Moolenaar END 5698a7d6542SBram Moolenaar let morelines =<< trim END 5708a7d6542SBram Moolenaar let valtwo = 222 5718a7d6542SBram Moolenaar export def GetValtwo(): number 5728a7d6542SBram Moolenaar return valtwo 5738a7d6542SBram Moolenaar enddef 5748a7d6542SBram Moolenaar END 5758a7d6542SBram Moolenaar writefile(lines + morelines, 'Xreload.vim') 5768a7d6542SBram Moolenaar source Xreload.vim 5778a7d6542SBram Moolenaar source Xreload.vim 5788a7d6542SBram Moolenaar source Xreload.vim 5798a7d6542SBram Moolenaar 5808a7d6542SBram Moolenaar let testlines =<< trim END 5818a7d6542SBram Moolenaar vim9script 5828a7d6542SBram Moolenaar def TheFunc() 5838a7d6542SBram Moolenaar import GetValtwo from './Xreload.vim' 5848a7d6542SBram Moolenaar assert_equal(222, GetValtwo()) 5858a7d6542SBram Moolenaar enddef 5868a7d6542SBram Moolenaar TheFunc() 5878a7d6542SBram Moolenaar END 5888a7d6542SBram Moolenaar writefile(testlines, 'Ximport.vim') 5898a7d6542SBram Moolenaar source Ximport.vim 5908a7d6542SBram Moolenaar 5918a7d6542SBram Moolenaar " test that when not using "morelines" valtwo is still defined 5928a7d6542SBram Moolenaar " need to source Xreload.vim again, import doesn't reload a script 5938a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 5948a7d6542SBram Moolenaar source Xreload.vim 5958a7d6542SBram Moolenaar source Ximport.vim 5968a7d6542SBram Moolenaar 5978a7d6542SBram Moolenaar " cannot declare a var twice 5988a7d6542SBram Moolenaar lines =<< trim END 5998a7d6542SBram Moolenaar vim9script 6008a7d6542SBram Moolenaar let valone = 1234 6018a7d6542SBram Moolenaar let valone = 5678 6028a7d6542SBram Moolenaar END 6038a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 6048a7d6542SBram Moolenaar assert_fails('source Xreload.vim', 'E1041:') 6058a7d6542SBram Moolenaar 6068a7d6542SBram Moolenaar delete('Xreload.vim') 6078a7d6542SBram Moolenaar delete('Ximport.vim') 6088a7d6542SBram Moolenaarenddef 6098a7d6542SBram Moolenaar 6108a7d6542SBram Moolenaardef Test_import_absolute() 6118a7d6542SBram Moolenaar let import_lines = [ 6128a7d6542SBram Moolenaar \ 'vim9script', 6138a7d6542SBram Moolenaar \ 'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"', 614b283a8a6SBram Moolenaar \ 'def UseExported()', 6158a7d6542SBram Moolenaar \ ' g:imported_abs = exported', 6164e12a5dfSBram Moolenaar \ ' exported = 8888', 6174e12a5dfSBram Moolenaar \ ' g:imported_after = exported', 618b283a8a6SBram Moolenaar \ 'enddef', 619b283a8a6SBram Moolenaar \ 'UseExported()', 6204e12a5dfSBram Moolenaar \ 'g:import_disassembled = execute("disass UseExported")', 6218a7d6542SBram Moolenaar \ ] 6228a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_abs.vim') 6238a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport_abs.vim') 6248a7d6542SBram Moolenaar 6258a7d6542SBram Moolenaar source Ximport_abs.vim 6268a7d6542SBram Moolenaar 6278a7d6542SBram Moolenaar assert_equal(9876, g:imported_abs) 6284e12a5dfSBram Moolenaar assert_equal(8888, g:imported_after) 629b283a8a6SBram Moolenaar assert_match('<SNR>\d\+_UseExported.*' 630b283a8a6SBram Moolenaar \ .. 'g:imported_abs = exported.*' 631b283a8a6SBram Moolenaar \ .. '0 LOADSCRIPT exported from .*Xexport_abs.vim.*' 6324e12a5dfSBram Moolenaar \ .. '1 STOREG g:imported_abs.*' 6334e12a5dfSBram Moolenaar \ .. 'exported = 8888.*' 6344e12a5dfSBram Moolenaar \ .. '3 STORESCRIPT exported in .*Xexport_abs.vim.*' 6354e12a5dfSBram Moolenaar \ .. 'g:imported_after = exported.*' 6364e12a5dfSBram Moolenaar \ .. '4 LOADSCRIPT exported from .*Xexport_abs.vim.*' 6374e12a5dfSBram Moolenaar \ .. '5 STOREG g:imported_after.*' 6384e12a5dfSBram Moolenaar \, g:import_disassembled) 6398a7d6542SBram Moolenaar unlet g:imported_abs 6404e12a5dfSBram Moolenaar unlet g:import_disassembled 6418a7d6542SBram Moolenaar 6428a7d6542SBram Moolenaar delete('Ximport_abs.vim') 6438a7d6542SBram Moolenaar delete('Xexport_abs.vim') 6448a7d6542SBram Moolenaarenddef 6458a7d6542SBram Moolenaar 6468a7d6542SBram Moolenaardef Test_import_rtp() 6478a7d6542SBram Moolenaar let import_lines = [ 6488a7d6542SBram Moolenaar \ 'vim9script', 6498a7d6542SBram Moolenaar \ 'import exported from "Xexport_rtp.vim"', 6508a7d6542SBram Moolenaar \ 'g:imported_rtp = exported', 6518a7d6542SBram Moolenaar \ ] 6528a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_rtp.vim') 6538a7d6542SBram Moolenaar mkdir('import') 6548a7d6542SBram Moolenaar writefile(s:export_script_lines, 'import/Xexport_rtp.vim') 6558a7d6542SBram Moolenaar 6568a7d6542SBram Moolenaar let save_rtp = &rtp 6578a7d6542SBram Moolenaar &rtp = getcwd() 6588a7d6542SBram Moolenaar source Ximport_rtp.vim 6598a7d6542SBram Moolenaar &rtp = save_rtp 6608a7d6542SBram Moolenaar 6618a7d6542SBram Moolenaar assert_equal(9876, g:imported_rtp) 6628a7d6542SBram Moolenaar unlet g:imported_rtp 6638a7d6542SBram Moolenaar 6648a7d6542SBram Moolenaar delete('Ximport_rtp.vim') 6658a7d6542SBram Moolenaar delete('import/Xexport_rtp.vim') 6668a7d6542SBram Moolenaar delete('import', 'd') 6678a7d6542SBram Moolenaarenddef 6688a7d6542SBram Moolenaar 6698a7d6542SBram Moolenaardef Test_fixed_size_list() 6708a7d6542SBram Moolenaar " will be allocated as one piece of memory, check that changes work 6718a7d6542SBram Moolenaar let l = [1, 2, 3, 4] 6728a7d6542SBram Moolenaar l->remove(0) 6738a7d6542SBram Moolenaar l->add(5) 6748a7d6542SBram Moolenaar l->insert(99, 1) 6750f18b6d1SBram Moolenaar assert_equal([2, 99, 3, 4, 5], l) 6768a7d6542SBram Moolenaarenddef 6778a7d6542SBram Moolenaar 678673660abSBram Moolenaar" Test that inside :function a Python function can be defined, :def is not 679673660abSBram Moolenaar" recognized. 680673660abSBram Moolenaarfunc Test_function_python() 681673660abSBram Moolenaar CheckFeature python3 682673660abSBram Moolenaar let py = 'python3' 683673660abSBram Moolenaar execute py "<< EOF" 684673660abSBram Moolenaardef do_something(): 685673660abSBram Moolenaar return 1 686673660abSBram MoolenaarEOF 687673660abSBram Moolenaarendfunc 688673660abSBram Moolenaar 689158906cfSBram Moolenaardef IfElse(what: number): string 690158906cfSBram Moolenaar let res = '' 691158906cfSBram Moolenaar if what == 1 692158906cfSBram Moolenaar res = "one" 693158906cfSBram Moolenaar elseif what == 2 694158906cfSBram Moolenaar res = "two" 695a259d8d3SBram Moolenaar else 696158906cfSBram Moolenaar res = "three" 697a259d8d3SBram Moolenaar endif 698158906cfSBram Moolenaar return res 699a259d8d3SBram Moolenaarenddef 700a259d8d3SBram Moolenaar 701158906cfSBram Moolenaardef Test_if_elseif_else() 702158906cfSBram Moolenaar assert_equal('one', IfElse(1)) 703158906cfSBram Moolenaar assert_equal('two', IfElse(2)) 704158906cfSBram Moolenaar assert_equal('three', IfElse(3)) 7050f18b6d1SBram Moolenaarenddef 7060f18b6d1SBram Moolenaar 70763ce4849SBram Moolenaardef Test_delfunc() 70863ce4849SBram Moolenaar let lines =<< trim END 70963ce4849SBram Moolenaar vim9script 71063ce4849SBram Moolenaar def GoneSoon() 71163ce4849SBram Moolenaar echo 'hello' 71263ce4849SBram Moolenaar enddef 71363ce4849SBram Moolenaar 71463ce4849SBram Moolenaar def CallGoneSoon() 71563ce4849SBram Moolenaar GoneSoon() 71663ce4849SBram Moolenaar enddef 71763ce4849SBram Moolenaar 71863ce4849SBram Moolenaar delfunc GoneSoon 71963ce4849SBram Moolenaar CallGoneSoon() 72063ce4849SBram Moolenaar END 72163ce4849SBram Moolenaar writefile(lines, 'XToDelFunc') 72263ce4849SBram Moolenaar assert_fails('so XToDelFunc', 'E933') 72363ce4849SBram Moolenaar assert_fails('so XToDelFunc', 'E933') 72463ce4849SBram Moolenaar 72563ce4849SBram Moolenaar delete('XToDelFunc') 72663ce4849SBram Moolenaarenddef 72763ce4849SBram Moolenaar 7285b1c8fe3SBram Moolenaardef Test_substitute_cmd() 7295b1c8fe3SBram Moolenaar new 7305b1c8fe3SBram Moolenaar setline(1, 'something') 7315b1c8fe3SBram Moolenaar :substitute(some(other( 7325b1c8fe3SBram Moolenaar assert_equal('otherthing', getline(1)) 73383f37b91SBram Moolenaar bwipe! 73483f37b91SBram Moolenaar 73583f37b91SBram Moolenaar " also when the context is Vim9 script 73683f37b91SBram Moolenaar let lines =<< trim END 73783f37b91SBram Moolenaar vim9script 73883f37b91SBram Moolenaar new 73983f37b91SBram Moolenaar setline(1, 'something') 74083f37b91SBram Moolenaar :substitute(some(other( 74183f37b91SBram Moolenaar assert_equal('otherthing', getline(1)) 74283f37b91SBram Moolenaar bwipe! 74383f37b91SBram Moolenaar END 74483f37b91SBram Moolenaar writefile(lines, 'Xvim9lines') 74583f37b91SBram Moolenaar source Xvim9lines 74683f37b91SBram Moolenaar 74783f37b91SBram Moolenaar delete('Xvim9lines') 7485b1c8fe3SBram Moolenaarenddef 7495b1c8fe3SBram Moolenaar 750ad39c094SBram Moolenaardef Test_execute_cmd() 751ad39c094SBram Moolenaar new 752ad39c094SBram Moolenaar setline(1, 'default') 753ad39c094SBram Moolenaar execute 'call setline(1, "execute-string")' 754ad39c094SBram Moolenaar assert_equal('execute-string', getline(1)) 755ad39c094SBram Moolenaar let cmd1 = 'call setline(1,' 756ad39c094SBram Moolenaar let cmd2 = '"execute-var")' 757ad39c094SBram Moolenaar execute cmd1 cmd2 758ad39c094SBram Moolenaar assert_equal('execute-var', getline(1)) 759ad39c094SBram Moolenaar execute cmd1 cmd2 '|call setline(1, "execute-var-string")' 760ad39c094SBram Moolenaar assert_equal('execute-var-string', getline(1)) 761ad39c094SBram Moolenaar let cmd_first = 'call ' 762ad39c094SBram Moolenaar let cmd_last = 'setline(1, "execute-var-var")' 763ad39c094SBram Moolenaar execute cmd_first .. cmd_last 764ad39c094SBram Moolenaar assert_equal('execute-var-var', getline(1)) 765ad39c094SBram Moolenaar bwipe! 766ad39c094SBram Moolenaarenddef 767ad39c094SBram Moolenaar 768ad39c094SBram Moolenaardef Test_echo_cmd() 769ad39c094SBram Moolenaar echo 'something' 770ad39c094SBram Moolenaar assert_match('^something$', Screenline(&lines)) 771ad39c094SBram Moolenaar 772ad39c094SBram Moolenaar let str1 = 'some' 773ad39c094SBram Moolenaar let str2 = 'more' 774ad39c094SBram Moolenaar echo str1 str2 775ad39c094SBram Moolenaar assert_match('^some more$', Screenline(&lines)) 776ad39c094SBram Moolenaarenddef 777ad39c094SBram Moolenaar 7788a7d6542SBram Moolenaar 7798a7d6542SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker 780