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 56*42a480bfSBram Moolenaar if has('channel') 57*42a480bfSBram Moolenaar let chan1: channel 58*42a480bfSBram Moolenaar endif 59*42a480bfSBram Moolenaar 60401d9ffbSBram Moolenaar g:newvar = 'new' 61401d9ffbSBram Moolenaar assert_equal('new', g:newvar) 62401d9ffbSBram Moolenaar 63401d9ffbSBram Moolenaar assert_equal('yes', g:existing) 64401d9ffbSBram Moolenaar g:existing = 'no' 65401d9ffbSBram Moolenaar assert_equal('no', g:existing) 66401d9ffbSBram Moolenaar 67b283a8a6SBram Moolenaar v:char = 'abc' 686e587dcbSBram Moolenaar assert_equal('abc', v:char) 69b283a8a6SBram Moolenaar 70b283a8a6SBram Moolenaar $ENVVAR = 'foobar' 716e587dcbSBram Moolenaar assert_equal('foobar', $ENVVAR) 72b283a8a6SBram Moolenaar $ENVVAR = '' 736e587dcbSBram Moolenaar 74fd1823e0SBram Moolenaar s:appendToMe ..= 'yyy' 75fd1823e0SBram Moolenaar assert_equal('xxxyyy', s:appendToMe) 76fd1823e0SBram Moolenaar s:addToMe += 222 77fd1823e0SBram Moolenaar assert_equal(333, s:addToMe) 780bbf722aSBram Moolenaar s:newVar = 'new' 790bbf722aSBram Moolenaar assert_equal('new', s:newVar) 808a7d6542SBram Moolenaarenddef 818a7d6542SBram Moolenaar 828a7d6542SBram Moolenaarfunc Test_assignment_failure() 838a7d6542SBram Moolenaar call CheckDefFailure(['let var=234'], 'E1004:') 848a7d6542SBram Moolenaar call CheckDefFailure(['let var =234'], 'E1004:') 858a7d6542SBram Moolenaar call CheckDefFailure(['let var= 234'], 'E1004:') 868a7d6542SBram Moolenaar 878a7d6542SBram Moolenaar call CheckDefFailure(['let true = 1'], 'E1034:') 888a7d6542SBram Moolenaar call CheckDefFailure(['let false = 1'], 'E1034:') 898a7d6542SBram Moolenaar 908a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<string> = [123]'], 'expected list<string> but got list<number>') 918a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<number> = ["xx"]'], 'expected list<number> but got list<string>') 928a7d6542SBram Moolenaar 938a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<string> = #{key: 123}'], 'expected dict<string> but got dict<number>') 948a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<number> = #{key: "xx"}'], 'expected dict<number> but got dict<string>') 958a7d6542SBram Moolenaar 968a7d6542SBram Moolenaar call CheckDefFailure(['let var = feedkeys("0")'], 'E1031:') 978a7d6542SBram Moolenaar call CheckDefFailure(['let var: number = feedkeys("0")'], 'expected number but got void') 98*42a480bfSBram Moolenaar 99*42a480bfSBram Moolenaar call CheckDefFailure(['let var: dict <number>'], 'E1007:') 100*42a480bfSBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 101*42a480bfSBram Moolenaar 102*42a480bfSBram Moolenaar call CheckDefFailure(['let var: ally'], 'E1010:') 103*42a480bfSBram Moolenaar call CheckDefFailure(['let var: bram'], 'E1010:') 104*42a480bfSBram Moolenaar call CheckDefFailure(['let var: cathy'], 'E1010:') 105*42a480bfSBram Moolenaar call CheckDefFailure(['let var: dom'], 'E1010:') 106*42a480bfSBram Moolenaar call CheckDefFailure(['let var: freddy'], 'E1010:') 107*42a480bfSBram Moolenaar call CheckDefFailure(['let var: john'], 'E1010:') 108*42a480bfSBram Moolenaar call CheckDefFailure(['let var: larry'], 'E1010:') 109*42a480bfSBram Moolenaar call CheckDefFailure(['let var: ned'], 'E1010:') 110*42a480bfSBram Moolenaar call CheckDefFailure(['let var: pam'], 'E1010:') 111*42a480bfSBram Moolenaar call CheckDefFailure(['let var: sam'], 'E1010:') 112*42a480bfSBram Moolenaar call CheckDefFailure(['let var: vim'], 'E1010:') 1138a7d6542SBram Moolenaarendfunc 1148a7d6542SBram Moolenaar 1158a7d6542SBram Moolenaarfunc Test_const() 1168a7d6542SBram Moolenaar call CheckDefFailure(['const var = 234', 'var = 99'], 'E1018:') 1178a7d6542SBram Moolenaar call CheckDefFailure(['const one = 234', 'let one = 99'], 'E1017:') 1188a7d6542SBram Moolenaar call CheckDefFailure(['const two'], 'E1021:') 1198a7d6542SBram Moolenaarendfunc 1208a7d6542SBram Moolenaar 1218a7d6542SBram Moolenaardef Test_block() 1228a7d6542SBram Moolenaar let outer = 1 1238a7d6542SBram Moolenaar { 1248a7d6542SBram Moolenaar let inner = 2 1258a7d6542SBram Moolenaar assert_equal(1, outer) 1268a7d6542SBram Moolenaar assert_equal(2, inner) 1278a7d6542SBram Moolenaar } 1288a7d6542SBram Moolenaar assert_equal(1, outer) 1298a7d6542SBram Moolenaarenddef 1308a7d6542SBram Moolenaar 1318a7d6542SBram Moolenaarfunc Test_block_failure() 1328a7d6542SBram Moolenaar call CheckDefFailure(['{', 'let inner = 1', '}', 'echo inner'], 'E1001:') 1338a7d6542SBram Moolenaarendfunc 1348a7d6542SBram Moolenaar 1358a7d6542SBram Moolenaardef ReturnString(): string 1368a7d6542SBram Moolenaar return 'string' 1378a7d6542SBram Moolenaarenddef 1388a7d6542SBram Moolenaar 1398a7d6542SBram Moolenaardef ReturnNumber(): number 1408a7d6542SBram Moolenaar return 123 1418a7d6542SBram Moolenaarenddef 1428a7d6542SBram Moolenaar 14309f28f49SBram Moolenaarlet g:notNumber = 'string' 14409f28f49SBram Moolenaar 14509f28f49SBram Moolenaardef ReturnGlobal(): number 14609f28f49SBram Moolenaar return g:notNumber 14709f28f49SBram Moolenaarenddef 14809f28f49SBram Moolenaar 1498a7d6542SBram Moolenaardef Test_return_string() 1508a7d6542SBram Moolenaar assert_equal('string', ReturnString()) 1518a7d6542SBram Moolenaar assert_equal(123, ReturnNumber()) 15209f28f49SBram Moolenaar assert_fails('call ReturnGlobal()', 'E1029: Expected number but got string') 1538a7d6542SBram Moolenaarenddef 1548a7d6542SBram Moolenaar 1558a7d6542SBram Moolenaarfunc Increment() 1568a7d6542SBram Moolenaar let g:counter += 1 1578a7d6542SBram Moolenaarendfunc 1588a7d6542SBram Moolenaar 1598a7d6542SBram Moolenaardef Test_call_ufunc_count() 1608a7d6542SBram Moolenaar g:counter = 1 1618a7d6542SBram Moolenaar Increment() 1628a7d6542SBram Moolenaar Increment() 1638a7d6542SBram Moolenaar Increment() 1648a7d6542SBram Moolenaar " works with and without :call 1658a7d6542SBram Moolenaar assert_equal(4, g:counter) 166b283a8a6SBram Moolenaar call assert_equal(4, g:counter) 1678a7d6542SBram Moolenaar unlet g:counter 1688a7d6542SBram Moolenaarenddef 1698a7d6542SBram Moolenaar 1708a7d6542SBram Moolenaardef MyVarargs(arg: string, ...rest: list<string>): string 1718a7d6542SBram Moolenaar let res = arg 1728a7d6542SBram Moolenaar for s in rest 1738a7d6542SBram Moolenaar res ..= ',' .. s 1748a7d6542SBram Moolenaar endfor 1758a7d6542SBram Moolenaar return res 1768a7d6542SBram Moolenaarenddef 1778a7d6542SBram Moolenaar 1788a7d6542SBram Moolenaardef Test_call_varargs() 1798a7d6542SBram Moolenaar assert_equal('one', MyVarargs('one')) 1808a7d6542SBram Moolenaar assert_equal('one,two', MyVarargs('one', 'two')) 1818a7d6542SBram Moolenaar assert_equal('one,two,three', MyVarargs('one', 'two', 'three')) 1828a7d6542SBram Moolenaarenddef 1838a7d6542SBram Moolenaar 184170fcfcfSBram Moolenaardef MyDefaultArgs(name = 'string'): string 185170fcfcfSBram Moolenaar return name 186170fcfcfSBram Moolenaarenddef 187170fcfcfSBram Moolenaar 188170fcfcfSBram Moolenaardef Test_call_default_args() 189170fcfcfSBram Moolenaar assert_equal('string', MyDefaultArgs()) 190170fcfcfSBram Moolenaar assert_equal('one', MyDefaultArgs('one')) 191170fcfcfSBram Moolenaar assert_fails('call MyDefaultArgs("one", "two")', 'E118:') 192170fcfcfSBram Moolenaarenddef 193170fcfcfSBram Moolenaar 194170fcfcfSBram Moolenaarfunc Test_call_default_args_from_func() 195170fcfcfSBram Moolenaar call assert_equal('string', MyDefaultArgs()) 196170fcfcfSBram Moolenaar call assert_equal('one', MyDefaultArgs('one')) 197170fcfcfSBram Moolenaar call assert_fails('call MyDefaultArgs("one", "two")', 'E118:') 198170fcfcfSBram Moolenaarendfunc 199170fcfcfSBram Moolenaar 200b35efa5eSBram Moolenaarfunc TakesOneArg(arg) 201b35efa5eSBram Moolenaar echo a:arg 202b35efa5eSBram Moolenaarendfunc 203b35efa5eSBram Moolenaar 204b35efa5eSBram Moolenaardef Test_call_wrong_arg_count() 205b35efa5eSBram Moolenaar call CheckDefFailure(['TakesOneArg()'], 'E119:') 206b35efa5eSBram Moolenaar call CheckDefFailure(['TakesOneArg(11, 22)'], 'E118:') 207b35efa5eSBram Moolenaarenddef 208b35efa5eSBram Moolenaar 209170fcfcfSBram Moolenaar" Default arg and varargs 210170fcfcfSBram Moolenaardef MyDefVarargs(one: string, two = 'foo', ...rest: list<string>): string 211170fcfcfSBram Moolenaar let res = one .. ',' .. two 212170fcfcfSBram Moolenaar for s in rest 213170fcfcfSBram Moolenaar res ..= ',' .. s 214170fcfcfSBram Moolenaar endfor 215170fcfcfSBram Moolenaar return res 216170fcfcfSBram Moolenaarenddef 217170fcfcfSBram Moolenaar 218170fcfcfSBram Moolenaardef Test_call_def_varargs() 219170fcfcfSBram Moolenaar call assert_fails('call MyDefVarargs()', 'E119:') 220170fcfcfSBram Moolenaar assert_equal('one,foo', MyDefVarargs('one')) 221170fcfcfSBram Moolenaar assert_equal('one,two', MyDefVarargs('one', 'two')) 222170fcfcfSBram Moolenaar assert_equal('one,two,three', MyDefVarargs('one', 'two', 'three')) 223170fcfcfSBram Moolenaarenddef 224170fcfcfSBram Moolenaar 225*42a480bfSBram Moolenaardef Test_using_var_as_arg() 226*42a480bfSBram Moolenaar call writefile(['def Func(x: number)', 'let x = 234', 'enddef'], 'Xdef') 227*42a480bfSBram Moolenaar call assert_fails('so Xdef', 'E1006:') 228*42a480bfSBram Moolenaar call delete('Xdef') 229*42a480bfSBram Moolenaarenddef 230*42a480bfSBram Moolenaar 231b35efa5eSBram Moolenaardef Test_call_func_defined_later() 232b35efa5eSBram Moolenaar call assert_equal('one', DefinedLater('one')) 233b35efa5eSBram Moolenaar call assert_fails('call NotDefined("one")', 'E117:') 234b35efa5eSBram Moolenaarenddef 235170fcfcfSBram Moolenaar 236b35efa5eSBram Moolenaarfunc DefinedLater(arg) 23726e117e9SBram Moolenaar return a:arg 23826e117e9SBram Moolenaarendfunc 23926e117e9SBram Moolenaar 2407eeefd4aSBram Moolenaardef FuncWithForwardCall() 2417eeefd4aSBram Moolenaar return DefinedEvenLater("yes") 2427eeefd4aSBram Moolenaarenddef 2437eeefd4aSBram Moolenaar 2447eeefd4aSBram Moolenaardef DefinedEvenLater(arg: string): string 2457eeefd4aSBram Moolenaar return arg 2467eeefd4aSBram Moolenaarenddef 2477eeefd4aSBram Moolenaar 2487eeefd4aSBram Moolenaardef Test_error_in_nested_function() 2497eeefd4aSBram Moolenaar " Error in called function requires unwinding the call stack. 2507eeefd4aSBram Moolenaar assert_fails('call FuncWithForwardCall()', 'E1029') 2517eeefd4aSBram Moolenaarenddef 2527eeefd4aSBram Moolenaar 2538a7d6542SBram Moolenaardef Test_return_type_wrong() 254978d170bSBram Moolenaar CheckScriptFailure(['def Func(): number', 'return "a"', 'enddef'], 'expected number but got string') 255978d170bSBram Moolenaar CheckScriptFailure(['def Func(): string', 'return 1', 'enddef'], 'expected string but got number') 256978d170bSBram Moolenaar CheckScriptFailure(['def Func(): void', 'return "a"', 'enddef'], 'expected void but got string') 257978d170bSBram Moolenaar CheckScriptFailure(['def Func()', 'return "a"', 'enddef'], 'expected void but got string') 2588a7d6542SBram Moolenaarenddef 2598a7d6542SBram Moolenaar 260bfe12043SBram Moolenaardef Test_arg_type_wrong() 261bfe12043SBram Moolenaar CheckScriptFailure(['def Func3(items: list)', 'echo "a"', 'enddef'], 'E1008: Missing <type>') 262bfe12043SBram Moolenaarenddef 263bfe12043SBram Moolenaar 2648a7d6542SBram Moolenaardef Test_try_catch() 2658a7d6542SBram Moolenaar let l = [] 2668a7d6542SBram Moolenaar try 2678a7d6542SBram Moolenaar add(l, '1') 2688a7d6542SBram Moolenaar throw 'wrong' 2698a7d6542SBram Moolenaar add(l, '2') 2708a7d6542SBram Moolenaar catch 2718a7d6542SBram Moolenaar add(l, v:exception) 2728a7d6542SBram Moolenaar finally 2738a7d6542SBram Moolenaar add(l, '3') 2748a7d6542SBram Moolenaar endtry 2758a7d6542SBram Moolenaar assert_equal(['1', 'wrong', '3'], l) 2768a7d6542SBram Moolenaarenddef 2778a7d6542SBram Moolenaar 278257cc5eeSBram Moolenaardef ThrowFromDef() 279257cc5eeSBram Moolenaar throw 'getout' 280257cc5eeSBram Moolenaarenddef 281257cc5eeSBram Moolenaar 282257cc5eeSBram Moolenaarfunc CatchInFunc() 283257cc5eeSBram Moolenaar try 284257cc5eeSBram Moolenaar call ThrowFromDef() 285257cc5eeSBram Moolenaar catch 286257cc5eeSBram Moolenaar let g:thrown_func = v:exception 287257cc5eeSBram Moolenaar endtry 288257cc5eeSBram Moolenaarendfunc 289257cc5eeSBram Moolenaar 290257cc5eeSBram Moolenaardef CatchInDef() 291257cc5eeSBram Moolenaar try 292257cc5eeSBram Moolenaar ThrowFromDef() 293257cc5eeSBram Moolenaar catch 294257cc5eeSBram Moolenaar g:thrown_def = v:exception 295257cc5eeSBram Moolenaar endtry 296257cc5eeSBram Moolenaarenddef 297257cc5eeSBram Moolenaar 298f575adffSBram Moolenaardef ReturnFinally(): string 299f575adffSBram Moolenaar try 300f575adffSBram Moolenaar return 'intry' 301f575adffSBram Moolenaar finally 302f575adffSBram Moolenaar g:in_finally = 'finally' 303f575adffSBram Moolenaar endtry 304f575adffSBram Moolenaar return 'end' 305f575adffSBram Moolenaarenddef 306f575adffSBram Moolenaar 307257cc5eeSBram Moolenaardef Test_try_catch_nested() 308257cc5eeSBram Moolenaar CatchInFunc() 309257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_func) 310257cc5eeSBram Moolenaar 311257cc5eeSBram Moolenaar CatchInDef() 312257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_def) 313f575adffSBram Moolenaar 314f575adffSBram Moolenaar assert_equal('intry', ReturnFinally()) 315f575adffSBram Moolenaar assert_equal('finally', g:in_finally) 316f575adffSBram Moolenaarenddef 317f575adffSBram Moolenaar 318f575adffSBram Moolenaardef Test_try_catch_match() 319f575adffSBram Moolenaar let seq = 'a' 320f575adffSBram Moolenaar try 321f575adffSBram Moolenaar throw 'something' 322f575adffSBram Moolenaar catch /nothing/ 323f575adffSBram Moolenaar seq ..= 'x' 324f575adffSBram Moolenaar catch /some/ 325f575adffSBram Moolenaar seq ..= 'b' 326f575adffSBram Moolenaar catch /asdf/ 327f575adffSBram Moolenaar seq ..= 'x' 328f575adffSBram Moolenaar finally 329f575adffSBram Moolenaar seq ..= 'c' 330f575adffSBram Moolenaar endtry 331f575adffSBram Moolenaar assert_equal('abc', seq) 332257cc5eeSBram Moolenaarenddef 333257cc5eeSBram Moolenaar 3348a7d6542SBram Moolenaarlet s:export_script_lines =<< trim END 3358a7d6542SBram Moolenaar vim9script 3368a7d6542SBram Moolenaar let name: string = 'bob' 3378a7d6542SBram Moolenaar def Concat(arg: string): string 3388a7d6542SBram Moolenaar return name .. arg 3398a7d6542SBram Moolenaar enddef 3408a7d6542SBram Moolenaar let g:result = Concat('bie') 3418a7d6542SBram Moolenaar let g:localname = name 3428a7d6542SBram Moolenaar 3438a7d6542SBram Moolenaar export const CONST = 1234 3448a7d6542SBram Moolenaar export let exported = 9876 3456e587dcbSBram Moolenaar export let exp_name = 'John' 3468a7d6542SBram Moolenaar export def Exported(): string 3478a7d6542SBram Moolenaar return 'Exported' 3488a7d6542SBram Moolenaar enddef 3498a7d6542SBram MoolenaarEND 3508a7d6542SBram Moolenaar 3518a7d6542SBram Moolenaardef Test_vim9script() 3528a7d6542SBram Moolenaar let import_script_lines =<< trim END 3538a7d6542SBram Moolenaar vim9script 3548a7d6542SBram Moolenaar import {exported, Exported} from './Xexport.vim' 3558a7d6542SBram Moolenaar g:imported = exported 3566e587dcbSBram Moolenaar exported += 3 3576e587dcbSBram Moolenaar g:imported_added = exported 3588a7d6542SBram Moolenaar g:imported_func = Exported() 3596e587dcbSBram Moolenaar 3606e587dcbSBram Moolenaar import {exp_name} from './Xexport.vim' 3616e587dcbSBram Moolenaar g:imported_name = exp_name 3626e587dcbSBram Moolenaar exp_name ..= ' Doe' 3636e587dcbSBram Moolenaar g:imported_name_appended = exp_name 3648a7d6542SBram Moolenaar END 3658a7d6542SBram Moolenaar 3668a7d6542SBram Moolenaar writefile(import_script_lines, 'Ximport.vim') 3678a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport.vim') 3688a7d6542SBram Moolenaar 3698a7d6542SBram Moolenaar source Ximport.vim 3708a7d6542SBram Moolenaar 3718a7d6542SBram Moolenaar assert_equal('bobbie', g:result) 3728a7d6542SBram Moolenaar assert_equal('bob', g:localname) 3738a7d6542SBram Moolenaar assert_equal(9876, g:imported) 3746e587dcbSBram Moolenaar assert_equal(9879, g:imported_added) 3758a7d6542SBram Moolenaar assert_equal('Exported', g:imported_func) 3766e587dcbSBram Moolenaar assert_equal('John', g:imported_name) 3776e587dcbSBram Moolenaar assert_equal('John Doe', g:imported_name_appended) 3788a7d6542SBram Moolenaar assert_false(exists('g:name')) 3798a7d6542SBram Moolenaar 3808a7d6542SBram Moolenaar unlet g:result 3818a7d6542SBram Moolenaar unlet g:localname 3828a7d6542SBram Moolenaar unlet g:imported 3836e587dcbSBram Moolenaar unlet g:imported_added 3848a7d6542SBram Moolenaar unlet g:imported_func 3856e587dcbSBram Moolenaar unlet g:imported_name g:imported_name_appended 3868a7d6542SBram Moolenaar delete('Ximport.vim') 387f2d5c240SBram Moolenaar 388f2d5c240SBram Moolenaar let import_star_as_lines =<< trim END 389f2d5c240SBram Moolenaar vim9script 390f2d5c240SBram Moolenaar import * as Export from './Xexport.vim' 391f2d5c240SBram Moolenaar def UseExport() 392f2d5c240SBram Moolenaar g:imported = Export.exported 393f2d5c240SBram Moolenaar enddef 394f2d5c240SBram Moolenaar UseExport() 395f2d5c240SBram Moolenaar END 396f2d5c240SBram Moolenaar writefile(import_star_as_lines, 'Ximport.vim') 397f2d5c240SBram Moolenaar source Ximport.vim 398f2d5c240SBram Moolenaar assert_equal(9876, g:imported) 399f2d5c240SBram Moolenaar 400f2d5c240SBram Moolenaar let import_star_lines =<< trim END 401f2d5c240SBram Moolenaar vim9script 402f2d5c240SBram Moolenaar import * from './Xexport.vim' 403f2d5c240SBram Moolenaar g:imported = exported 404f2d5c240SBram Moolenaar END 405f2d5c240SBram Moolenaar writefile(import_star_lines, 'Ximport.vim') 406f2d5c240SBram Moolenaar assert_fails('source Ximport.vim', 'E1045:') 407f2d5c240SBram Moolenaar 408fa29c8abSBram Moolenaar " try to import something that exists but is not exported 409fa29c8abSBram Moolenaar let import_not_exported_lines =<< trim END 410fa29c8abSBram Moolenaar vim9script 411fa29c8abSBram Moolenaar import name from './Xexport.vim' 412fa29c8abSBram Moolenaar END 413fa29c8abSBram Moolenaar writefile(import_not_exported_lines, 'Ximport.vim') 414fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1049:') 415fa29c8abSBram Moolenaar 416fa29c8abSBram Moolenaar " import a very long name, requires making a copy 417fa29c8abSBram Moolenaar let import_long_name_lines =<< trim END 418fa29c8abSBram Moolenaar vim9script 419fa29c8abSBram Moolenaar import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim' 420fa29c8abSBram Moolenaar END 421fa29c8abSBram Moolenaar writefile(import_long_name_lines, 'Ximport.vim') 422fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 423fa29c8abSBram Moolenaar 424fa29c8abSBram Moolenaar let import_no_from_lines =<< trim END 425fa29c8abSBram Moolenaar vim9script 426fa29c8abSBram Moolenaar import name './Xexport.vim' 427fa29c8abSBram Moolenaar END 428fa29c8abSBram Moolenaar writefile(import_no_from_lines, 'Ximport.vim') 429fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1070:') 430fa29c8abSBram Moolenaar 431fa29c8abSBram Moolenaar let import_invalid_string_lines =<< trim END 432fa29c8abSBram Moolenaar vim9script 433fa29c8abSBram Moolenaar import name from Xexport.vim 434fa29c8abSBram Moolenaar END 435fa29c8abSBram Moolenaar writefile(import_invalid_string_lines, 'Ximport.vim') 436fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1071:') 437fa29c8abSBram Moolenaar 438fa29c8abSBram Moolenaar let import_wrong_name_lines =<< trim END 439fa29c8abSBram Moolenaar vim9script 440fa29c8abSBram Moolenaar import name from './XnoExport.vim' 441fa29c8abSBram Moolenaar END 442fa29c8abSBram Moolenaar writefile(import_wrong_name_lines, 'Ximport.vim') 443fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1053:') 444fa29c8abSBram Moolenaar 445fa29c8abSBram Moolenaar let import_missing_comma_lines =<< trim END 446fa29c8abSBram Moolenaar vim9script 447fa29c8abSBram Moolenaar import {exported name} from './Xexport.vim' 448fa29c8abSBram Moolenaar END 449fa29c8abSBram Moolenaar writefile(import_missing_comma_lines, 'Ximport.vim') 450fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1046:') 451fa29c8abSBram Moolenaar 452f2d5c240SBram Moolenaar delete('Ximport.vim') 4538a7d6542SBram Moolenaar delete('Xexport.vim') 4548a7d6542SBram Moolenaar 455750802b5SBram Moolenaar " Check that in a Vim9 script 'cpo' is set to the Vim default. 456750802b5SBram Moolenaar set cpo&vi 457750802b5SBram Moolenaar let cpo_before = &cpo 458750802b5SBram Moolenaar let lines =<< trim END 459750802b5SBram Moolenaar vim9script 460750802b5SBram Moolenaar g:cpo_in_vim9script = &cpo 461750802b5SBram Moolenaar END 462750802b5SBram Moolenaar writefile(lines, 'Xvim9_script') 463750802b5SBram Moolenaar source Xvim9_script 464750802b5SBram Moolenaar assert_equal(cpo_before, &cpo) 465750802b5SBram Moolenaar set cpo&vim 466750802b5SBram Moolenaar assert_equal(&cpo, g:cpo_in_vim9script) 467750802b5SBram Moolenaar delete('Xvim9_script') 468750802b5SBram Moolenaarenddef 469750802b5SBram Moolenaar 470750802b5SBram Moolenaardef Test_vim9script_fails() 4718a7d6542SBram Moolenaar CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:') 4728a7d6542SBram Moolenaar CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:') 473750802b5SBram Moolenaar CheckScriptFailure(['export let some = 123'], 'E1042:') 474f2d5c240SBram Moolenaar CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1042:') 475750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export let g:some'], 'E1044:') 476750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:') 477750802b5SBram Moolenaar 478750802b5SBram Moolenaar assert_fails('vim9script', 'E1038') 479750802b5SBram Moolenaar assert_fails('export something', 'E1042') 4808a7d6542SBram Moolenaarenddef 4818a7d6542SBram Moolenaar 4828a7d6542SBram Moolenaardef Test_vim9script_call() 4838a7d6542SBram Moolenaar let lines =<< trim END 4848a7d6542SBram Moolenaar vim9script 4858a7d6542SBram Moolenaar let var = '' 4868a7d6542SBram Moolenaar def MyFunc(arg: string) 4878a7d6542SBram Moolenaar var = arg 4888a7d6542SBram Moolenaar enddef 4898a7d6542SBram Moolenaar MyFunc('foobar') 4908a7d6542SBram Moolenaar assert_equal('foobar', var) 4918a7d6542SBram Moolenaar 4928a7d6542SBram Moolenaar let str = 'barfoo' 4938a7d6542SBram Moolenaar str->MyFunc() 4948a7d6542SBram Moolenaar assert_equal('barfoo', var) 4958a7d6542SBram Moolenaar 4968a7d6542SBram Moolenaar let g:value = 'value' 4978a7d6542SBram Moolenaar g:value->MyFunc() 4988a7d6542SBram Moolenaar assert_equal('value', var) 4998a7d6542SBram Moolenaar 5008a7d6542SBram Moolenaar let listvar = [] 5018a7d6542SBram Moolenaar def ListFunc(arg: list<number>) 5028a7d6542SBram Moolenaar listvar = arg 5038a7d6542SBram Moolenaar enddef 5048a7d6542SBram Moolenaar [1, 2, 3]->ListFunc() 5058a7d6542SBram Moolenaar assert_equal([1, 2, 3], listvar) 5068a7d6542SBram Moolenaar 5078a7d6542SBram Moolenaar let dictvar = {} 5088a7d6542SBram Moolenaar def DictFunc(arg: dict<number>) 5098a7d6542SBram Moolenaar dictvar = arg 5108a7d6542SBram Moolenaar enddef 5118a7d6542SBram Moolenaar {'a': 1, 'b': 2}->DictFunc() 5128a7d6542SBram Moolenaar assert_equal(#{a: 1, b: 2}, dictvar) 5138a7d6542SBram Moolenaar #{a: 3, b: 4}->DictFunc() 5148a7d6542SBram Moolenaar assert_equal(#{a: 3, b: 4}, dictvar) 5150c6ceaf9SBram Moolenaar 5160c6ceaf9SBram Moolenaar ('text')->MyFunc() 5170c6ceaf9SBram Moolenaar assert_equal('text', var) 5180c6ceaf9SBram Moolenaar ("some")->MyFunc() 5190c6ceaf9SBram Moolenaar assert_equal('some', var) 5208a7d6542SBram Moolenaar END 5218a7d6542SBram Moolenaar writefile(lines, 'Xcall.vim') 5228a7d6542SBram Moolenaar source Xcall.vim 5238a7d6542SBram Moolenaar delete('Xcall.vim') 5248a7d6542SBram Moolenaarenddef 5258a7d6542SBram Moolenaar 5268a7d6542SBram Moolenaardef Test_vim9script_call_fail_decl() 5278a7d6542SBram Moolenaar let lines =<< trim END 5288a7d6542SBram Moolenaar vim9script 5298a7d6542SBram Moolenaar let var = '' 5308a7d6542SBram Moolenaar def MyFunc(arg: string) 5318a7d6542SBram Moolenaar let var = 123 5328a7d6542SBram Moolenaar enddef 5338a7d6542SBram Moolenaar END 5348a7d6542SBram Moolenaar writefile(lines, 'Xcall_decl.vim') 5358a7d6542SBram Moolenaar assert_fails('source Xcall_decl.vim', 'E1054:') 5368a7d6542SBram Moolenaar delete('Xcall_decl.vim') 5378a7d6542SBram Moolenaarenddef 5388a7d6542SBram Moolenaar 5398a7d6542SBram Moolenaardef Test_vim9script_call_fail_const() 5408a7d6542SBram Moolenaar let lines =<< trim END 5418a7d6542SBram Moolenaar vim9script 5428a7d6542SBram Moolenaar const var = '' 5438a7d6542SBram Moolenaar def MyFunc(arg: string) 5448a7d6542SBram Moolenaar var = 'asdf' 5458a7d6542SBram Moolenaar enddef 5468a7d6542SBram Moolenaar END 5478a7d6542SBram Moolenaar writefile(lines, 'Xcall_const.vim') 5488a7d6542SBram Moolenaar assert_fails('source Xcall_const.vim', 'E46:') 5498a7d6542SBram Moolenaar delete('Xcall_const.vim') 5508a7d6542SBram Moolenaarenddef 5518a7d6542SBram Moolenaar 5528a7d6542SBram Moolenaardef Test_vim9script_reload() 5538a7d6542SBram Moolenaar let lines =<< trim END 5548a7d6542SBram Moolenaar vim9script 5558a7d6542SBram Moolenaar const var = '' 5568a7d6542SBram Moolenaar let valone = 1234 5578a7d6542SBram Moolenaar def MyFunc(arg: string) 5588a7d6542SBram Moolenaar valone = 5678 5598a7d6542SBram Moolenaar enddef 5608a7d6542SBram Moolenaar END 5618a7d6542SBram Moolenaar let morelines =<< trim END 5628a7d6542SBram Moolenaar let valtwo = 222 5638a7d6542SBram Moolenaar export def GetValtwo(): number 5648a7d6542SBram Moolenaar return valtwo 5658a7d6542SBram Moolenaar enddef 5668a7d6542SBram Moolenaar END 5678a7d6542SBram Moolenaar writefile(lines + morelines, 'Xreload.vim') 5688a7d6542SBram Moolenaar source Xreload.vim 5698a7d6542SBram Moolenaar source Xreload.vim 5708a7d6542SBram Moolenaar source Xreload.vim 5718a7d6542SBram Moolenaar 5728a7d6542SBram Moolenaar let testlines =<< trim END 5738a7d6542SBram Moolenaar vim9script 5748a7d6542SBram Moolenaar def TheFunc() 5758a7d6542SBram Moolenaar import GetValtwo from './Xreload.vim' 5768a7d6542SBram Moolenaar assert_equal(222, GetValtwo()) 5778a7d6542SBram Moolenaar enddef 5788a7d6542SBram Moolenaar TheFunc() 5798a7d6542SBram Moolenaar END 5808a7d6542SBram Moolenaar writefile(testlines, 'Ximport.vim') 5818a7d6542SBram Moolenaar source Ximport.vim 5828a7d6542SBram Moolenaar 5838a7d6542SBram Moolenaar " test that when not using "morelines" valtwo is still defined 5848a7d6542SBram Moolenaar " need to source Xreload.vim again, import doesn't reload a script 5858a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 5868a7d6542SBram Moolenaar source Xreload.vim 5878a7d6542SBram Moolenaar source Ximport.vim 5888a7d6542SBram Moolenaar 5898a7d6542SBram Moolenaar " cannot declare a var twice 5908a7d6542SBram Moolenaar lines =<< trim END 5918a7d6542SBram Moolenaar vim9script 5928a7d6542SBram Moolenaar let valone = 1234 5938a7d6542SBram Moolenaar let valone = 5678 5948a7d6542SBram Moolenaar END 5958a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 5968a7d6542SBram Moolenaar assert_fails('source Xreload.vim', 'E1041:') 5978a7d6542SBram Moolenaar 5988a7d6542SBram Moolenaar delete('Xreload.vim') 5998a7d6542SBram Moolenaar delete('Ximport.vim') 6008a7d6542SBram Moolenaarenddef 6018a7d6542SBram Moolenaar 6028a7d6542SBram Moolenaardef Test_import_absolute() 6038a7d6542SBram Moolenaar let import_lines = [ 6048a7d6542SBram Moolenaar \ 'vim9script', 6058a7d6542SBram Moolenaar \ 'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"', 606b283a8a6SBram Moolenaar \ 'def UseExported()', 6078a7d6542SBram Moolenaar \ ' g:imported_abs = exported', 6084e12a5dfSBram Moolenaar \ ' exported = 8888', 6094e12a5dfSBram Moolenaar \ ' g:imported_after = exported', 610b283a8a6SBram Moolenaar \ 'enddef', 611b283a8a6SBram Moolenaar \ 'UseExported()', 6124e12a5dfSBram Moolenaar \ 'g:import_disassembled = execute("disass UseExported")', 6138a7d6542SBram Moolenaar \ ] 6148a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_abs.vim') 6158a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport_abs.vim') 6168a7d6542SBram Moolenaar 6178a7d6542SBram Moolenaar source Ximport_abs.vim 6188a7d6542SBram Moolenaar 6198a7d6542SBram Moolenaar assert_equal(9876, g:imported_abs) 6204e12a5dfSBram Moolenaar assert_equal(8888, g:imported_after) 621b283a8a6SBram Moolenaar assert_match('<SNR>\d\+_UseExported.*' 622b283a8a6SBram Moolenaar \ .. 'g:imported_abs = exported.*' 623b283a8a6SBram Moolenaar \ .. '0 LOADSCRIPT exported from .*Xexport_abs.vim.*' 6244e12a5dfSBram Moolenaar \ .. '1 STOREG g:imported_abs.*' 6254e12a5dfSBram Moolenaar \ .. 'exported = 8888.*' 6264e12a5dfSBram Moolenaar \ .. '3 STORESCRIPT exported in .*Xexport_abs.vim.*' 6274e12a5dfSBram Moolenaar \ .. 'g:imported_after = exported.*' 6284e12a5dfSBram Moolenaar \ .. '4 LOADSCRIPT exported from .*Xexport_abs.vim.*' 6294e12a5dfSBram Moolenaar \ .. '5 STOREG g:imported_after.*' 6304e12a5dfSBram Moolenaar \, g:import_disassembled) 6318a7d6542SBram Moolenaar unlet g:imported_abs 6324e12a5dfSBram Moolenaar unlet g:import_disassembled 6338a7d6542SBram Moolenaar 6348a7d6542SBram Moolenaar delete('Ximport_abs.vim') 6358a7d6542SBram Moolenaar delete('Xexport_abs.vim') 6368a7d6542SBram Moolenaarenddef 6378a7d6542SBram Moolenaar 6388a7d6542SBram Moolenaardef Test_import_rtp() 6398a7d6542SBram Moolenaar let import_lines = [ 6408a7d6542SBram Moolenaar \ 'vim9script', 6418a7d6542SBram Moolenaar \ 'import exported from "Xexport_rtp.vim"', 6428a7d6542SBram Moolenaar \ 'g:imported_rtp = exported', 6438a7d6542SBram Moolenaar \ ] 6448a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_rtp.vim') 6458a7d6542SBram Moolenaar mkdir('import') 6468a7d6542SBram Moolenaar writefile(s:export_script_lines, 'import/Xexport_rtp.vim') 6478a7d6542SBram Moolenaar 6488a7d6542SBram Moolenaar let save_rtp = &rtp 6498a7d6542SBram Moolenaar &rtp = getcwd() 6508a7d6542SBram Moolenaar source Ximport_rtp.vim 6518a7d6542SBram Moolenaar &rtp = save_rtp 6528a7d6542SBram Moolenaar 6538a7d6542SBram Moolenaar assert_equal(9876, g:imported_rtp) 6548a7d6542SBram Moolenaar unlet g:imported_rtp 6558a7d6542SBram Moolenaar 6568a7d6542SBram Moolenaar delete('Ximport_rtp.vim') 6578a7d6542SBram Moolenaar delete('import/Xexport_rtp.vim') 6588a7d6542SBram Moolenaar delete('import', 'd') 6598a7d6542SBram Moolenaarenddef 6608a7d6542SBram Moolenaar 6618a7d6542SBram Moolenaardef Test_fixed_size_list() 6628a7d6542SBram Moolenaar " will be allocated as one piece of memory, check that changes work 6638a7d6542SBram Moolenaar let l = [1, 2, 3, 4] 6648a7d6542SBram Moolenaar l->remove(0) 6658a7d6542SBram Moolenaar l->add(5) 6668a7d6542SBram Moolenaar l->insert(99, 1) 6670f18b6d1SBram Moolenaar assert_equal([2, 99, 3, 4, 5], l) 6688a7d6542SBram Moolenaarenddef 6698a7d6542SBram Moolenaar 670673660abSBram Moolenaar" Test that inside :function a Python function can be defined, :def is not 671673660abSBram Moolenaar" recognized. 672673660abSBram Moolenaarfunc Test_function_python() 673673660abSBram Moolenaar CheckFeature python3 674673660abSBram Moolenaar let py = 'python3' 675673660abSBram Moolenaar execute py "<< EOF" 676673660abSBram Moolenaardef do_something(): 677673660abSBram Moolenaar return 1 678673660abSBram MoolenaarEOF 679673660abSBram Moolenaarendfunc 680673660abSBram Moolenaar 681158906cfSBram Moolenaardef IfElse(what: number): string 682158906cfSBram Moolenaar let res = '' 683158906cfSBram Moolenaar if what == 1 684158906cfSBram Moolenaar res = "one" 685158906cfSBram Moolenaar elseif what == 2 686158906cfSBram Moolenaar res = "two" 687a259d8d3SBram Moolenaar else 688158906cfSBram Moolenaar res = "three" 689a259d8d3SBram Moolenaar endif 690158906cfSBram Moolenaar return res 691a259d8d3SBram Moolenaarenddef 692a259d8d3SBram Moolenaar 693158906cfSBram Moolenaardef Test_if_elseif_else() 694158906cfSBram Moolenaar assert_equal('one', IfElse(1)) 695158906cfSBram Moolenaar assert_equal('two', IfElse(2)) 696158906cfSBram Moolenaar assert_equal('three', IfElse(3)) 6970f18b6d1SBram Moolenaarenddef 6980f18b6d1SBram Moolenaar 69963ce4849SBram Moolenaardef Test_delfunc() 70063ce4849SBram Moolenaar let lines =<< trim END 70163ce4849SBram Moolenaar vim9script 70263ce4849SBram Moolenaar def GoneSoon() 70363ce4849SBram Moolenaar echo 'hello' 70463ce4849SBram Moolenaar enddef 70563ce4849SBram Moolenaar 70663ce4849SBram Moolenaar def CallGoneSoon() 70763ce4849SBram Moolenaar GoneSoon() 70863ce4849SBram Moolenaar enddef 70963ce4849SBram Moolenaar 71063ce4849SBram Moolenaar delfunc GoneSoon 71163ce4849SBram Moolenaar CallGoneSoon() 71263ce4849SBram Moolenaar END 71363ce4849SBram Moolenaar writefile(lines, 'XToDelFunc') 71463ce4849SBram Moolenaar assert_fails('so XToDelFunc', 'E933') 71563ce4849SBram Moolenaar assert_fails('so XToDelFunc', 'E933') 71663ce4849SBram Moolenaar 71763ce4849SBram Moolenaar delete('XToDelFunc') 71863ce4849SBram Moolenaarenddef 71963ce4849SBram Moolenaar 7205b1c8fe3SBram Moolenaardef Test_substitute_cmd() 7215b1c8fe3SBram Moolenaar new 7225b1c8fe3SBram Moolenaar setline(1, 'something') 7235b1c8fe3SBram Moolenaar :substitute(some(other( 7245b1c8fe3SBram Moolenaar assert_equal('otherthing', getline(1)) 72583f37b91SBram Moolenaar bwipe! 72683f37b91SBram Moolenaar 72783f37b91SBram Moolenaar " also when the context is Vim9 script 72883f37b91SBram Moolenaar let lines =<< trim END 72983f37b91SBram Moolenaar vim9script 73083f37b91SBram Moolenaar new 73183f37b91SBram Moolenaar setline(1, 'something') 73283f37b91SBram Moolenaar :substitute(some(other( 73383f37b91SBram Moolenaar assert_equal('otherthing', getline(1)) 73483f37b91SBram Moolenaar bwipe! 73583f37b91SBram Moolenaar END 73683f37b91SBram Moolenaar writefile(lines, 'Xvim9lines') 73783f37b91SBram Moolenaar source Xvim9lines 73883f37b91SBram Moolenaar 73983f37b91SBram Moolenaar delete('Xvim9lines') 7405b1c8fe3SBram Moolenaarenddef 7415b1c8fe3SBram Moolenaar 742ad39c094SBram Moolenaardef Test_execute_cmd() 743ad39c094SBram Moolenaar new 744ad39c094SBram Moolenaar setline(1, 'default') 745ad39c094SBram Moolenaar execute 'call setline(1, "execute-string")' 746ad39c094SBram Moolenaar assert_equal('execute-string', getline(1)) 747ad39c094SBram Moolenaar let cmd1 = 'call setline(1,' 748ad39c094SBram Moolenaar let cmd2 = '"execute-var")' 749ad39c094SBram Moolenaar execute cmd1 cmd2 750ad39c094SBram Moolenaar assert_equal('execute-var', getline(1)) 751ad39c094SBram Moolenaar execute cmd1 cmd2 '|call setline(1, "execute-var-string")' 752ad39c094SBram Moolenaar assert_equal('execute-var-string', getline(1)) 753ad39c094SBram Moolenaar let cmd_first = 'call ' 754ad39c094SBram Moolenaar let cmd_last = 'setline(1, "execute-var-var")' 755ad39c094SBram Moolenaar execute cmd_first .. cmd_last 756ad39c094SBram Moolenaar assert_equal('execute-var-var', getline(1)) 757ad39c094SBram Moolenaar bwipe! 758ad39c094SBram Moolenaarenddef 759ad39c094SBram Moolenaar 760ad39c094SBram Moolenaardef Test_echo_cmd() 761ad39c094SBram Moolenaar echo 'something' 762ad39c094SBram Moolenaar assert_match('^something$', Screenline(&lines)) 763ad39c094SBram Moolenaar 764ad39c094SBram Moolenaar let str1 = 'some' 765ad39c094SBram Moolenaar let str2 = 'more' 766ad39c094SBram Moolenaar echo str1 str2 767ad39c094SBram Moolenaar assert_match('^some more$', Screenline(&lines)) 768ad39c094SBram Moolenaarenddef 769ad39c094SBram Moolenaar 7708a7d6542SBram Moolenaar 7718a7d6542SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker 772