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 6961a6d4e4SBram Moolenaar " type becomes list<any> 7061a6d4e4SBram Moolenaar let somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c'] 715381c7a1SBram Moolenaar " type becomes dict<any> 725381c7a1SBram Moolenaar let somedict = rand() > 0 ? #{a: 1, b: 2} : #{a: 'a', b: 'b'} 7361a6d4e4SBram Moolenaar 74401d9ffbSBram Moolenaar g:newvar = 'new' 75401d9ffbSBram Moolenaar assert_equal('new', g:newvar) 76401d9ffbSBram Moolenaar 77401d9ffbSBram Moolenaar assert_equal('yes', g:existing) 78401d9ffbSBram Moolenaar g:existing = 'no' 79401d9ffbSBram Moolenaar assert_equal('no', g:existing) 80401d9ffbSBram Moolenaar 81b283a8a6SBram Moolenaar v:char = 'abc' 826e587dcbSBram Moolenaar assert_equal('abc', v:char) 83b283a8a6SBram Moolenaar 84b283a8a6SBram Moolenaar $ENVVAR = 'foobar' 856e587dcbSBram Moolenaar assert_equal('foobar', $ENVVAR) 86b283a8a6SBram Moolenaar $ENVVAR = '' 876e587dcbSBram Moolenaar 88fd1823e0SBram Moolenaar s:appendToMe ..= 'yyy' 89fd1823e0SBram Moolenaar assert_equal('xxxyyy', s:appendToMe) 90fd1823e0SBram Moolenaar s:addToMe += 222 91fd1823e0SBram Moolenaar assert_equal(333, s:addToMe) 920bbf722aSBram Moolenaar s:newVar = 'new' 930bbf722aSBram Moolenaar assert_equal('new', s:newVar) 948a7d6542SBram Moolenaarenddef 958a7d6542SBram Moolenaar 968a7d6542SBram Moolenaarfunc Test_assignment_failure() 978a7d6542SBram Moolenaar call CheckDefFailure(['let var=234'], 'E1004:') 988a7d6542SBram Moolenaar call CheckDefFailure(['let var =234'], 'E1004:') 998a7d6542SBram Moolenaar call CheckDefFailure(['let var= 234'], 'E1004:') 1008a7d6542SBram Moolenaar 1018a7d6542SBram Moolenaar call CheckDefFailure(['let true = 1'], 'E1034:') 1028a7d6542SBram Moolenaar call CheckDefFailure(['let false = 1'], 'E1034:') 1038a7d6542SBram Moolenaar 1048a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<string> = [123]'], 'expected list<string> but got list<number>') 1058a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<number> = ["xx"]'], 'expected list<number> but got list<string>') 1068a7d6542SBram Moolenaar 1078a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<string> = #{key: 123}'], 'expected dict<string> but got dict<number>') 1088a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<number> = #{key: "xx"}'], 'expected dict<number> but got dict<string>') 1098a7d6542SBram Moolenaar 1108a7d6542SBram Moolenaar call CheckDefFailure(['let var = feedkeys("0")'], 'E1031:') 1118a7d6542SBram Moolenaar call CheckDefFailure(['let var: number = feedkeys("0")'], 'expected number but got void') 11242a480bfSBram Moolenaar 11342a480bfSBram Moolenaar call CheckDefFailure(['let var: dict <number>'], 'E1007:') 11442a480bfSBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 11542a480bfSBram Moolenaar 11642a480bfSBram Moolenaar call CheckDefFailure(['let var: ally'], 'E1010:') 11742a480bfSBram Moolenaar call CheckDefFailure(['let var: bram'], 'E1010:') 11842a480bfSBram Moolenaar call CheckDefFailure(['let var: cathy'], 'E1010:') 11942a480bfSBram Moolenaar call CheckDefFailure(['let var: dom'], 'E1010:') 12042a480bfSBram Moolenaar call CheckDefFailure(['let var: freddy'], 'E1010:') 12142a480bfSBram Moolenaar call CheckDefFailure(['let var: john'], 'E1010:') 12242a480bfSBram Moolenaar call CheckDefFailure(['let var: larry'], 'E1010:') 12342a480bfSBram Moolenaar call CheckDefFailure(['let var: ned'], 'E1010:') 12442a480bfSBram Moolenaar call CheckDefFailure(['let var: pam'], 'E1010:') 12542a480bfSBram Moolenaar call CheckDefFailure(['let var: sam'], 'E1010:') 12642a480bfSBram Moolenaar call CheckDefFailure(['let var: vim'], 'E1010:') 1278a7d6542SBram Moolenaarendfunc 1288a7d6542SBram Moolenaar 1298a7d6542SBram Moolenaarfunc Test_const() 1308a7d6542SBram Moolenaar call CheckDefFailure(['const var = 234', 'var = 99'], 'E1018:') 1318a7d6542SBram Moolenaar call CheckDefFailure(['const one = 234', 'let one = 99'], 'E1017:') 1328a7d6542SBram Moolenaar call CheckDefFailure(['const two'], 'E1021:') 1338a7d6542SBram Moolenaarendfunc 1348a7d6542SBram Moolenaar 1358a7d6542SBram Moolenaardef Test_block() 1368a7d6542SBram Moolenaar let outer = 1 1378a7d6542SBram Moolenaar { 1388a7d6542SBram Moolenaar let inner = 2 1398a7d6542SBram Moolenaar assert_equal(1, outer) 1408a7d6542SBram Moolenaar assert_equal(2, inner) 1418a7d6542SBram Moolenaar } 1428a7d6542SBram Moolenaar assert_equal(1, outer) 1438a7d6542SBram Moolenaarenddef 1448a7d6542SBram Moolenaar 1458a7d6542SBram Moolenaarfunc Test_block_failure() 1468a7d6542SBram Moolenaar call CheckDefFailure(['{', 'let inner = 1', '}', 'echo inner'], 'E1001:') 1478a7d6542SBram Moolenaarendfunc 1488a7d6542SBram Moolenaar 1498a7d6542SBram Moolenaardef ReturnString(): string 1508a7d6542SBram Moolenaar return 'string' 1518a7d6542SBram Moolenaarenddef 1528a7d6542SBram Moolenaar 1538a7d6542SBram Moolenaardef ReturnNumber(): number 1548a7d6542SBram Moolenaar return 123 1558a7d6542SBram Moolenaarenddef 1568a7d6542SBram Moolenaar 15709f28f49SBram Moolenaarlet g:notNumber = 'string' 15809f28f49SBram Moolenaar 15909f28f49SBram Moolenaardef ReturnGlobal(): number 16009f28f49SBram Moolenaar return g:notNumber 16109f28f49SBram Moolenaarenddef 16209f28f49SBram Moolenaar 1638a7d6542SBram Moolenaardef Test_return_string() 1648a7d6542SBram Moolenaar assert_equal('string', ReturnString()) 1658a7d6542SBram Moolenaar assert_equal(123, ReturnNumber()) 16609f28f49SBram Moolenaar assert_fails('call ReturnGlobal()', 'E1029: Expected number but got string') 1678a7d6542SBram Moolenaarenddef 1688a7d6542SBram Moolenaar 1698a7d6542SBram Moolenaarfunc Increment() 1708a7d6542SBram Moolenaar let g:counter += 1 1718a7d6542SBram Moolenaarendfunc 1728a7d6542SBram Moolenaar 1738a7d6542SBram Moolenaardef Test_call_ufunc_count() 1748a7d6542SBram Moolenaar g:counter = 1 1758a7d6542SBram Moolenaar Increment() 1768a7d6542SBram Moolenaar Increment() 1778a7d6542SBram Moolenaar Increment() 1788a7d6542SBram Moolenaar " works with and without :call 1798a7d6542SBram Moolenaar assert_equal(4, g:counter) 180b283a8a6SBram Moolenaar call assert_equal(4, g:counter) 1818a7d6542SBram Moolenaar unlet g:counter 1828a7d6542SBram Moolenaarenddef 1838a7d6542SBram Moolenaar 1848a7d6542SBram Moolenaardef MyVarargs(arg: string, ...rest: list<string>): string 1858a7d6542SBram Moolenaar let res = arg 1868a7d6542SBram Moolenaar for s in rest 1878a7d6542SBram Moolenaar res ..= ',' .. s 1888a7d6542SBram Moolenaar endfor 1898a7d6542SBram Moolenaar return res 1908a7d6542SBram Moolenaarenddef 1918a7d6542SBram Moolenaar 1928a7d6542SBram Moolenaardef Test_call_varargs() 1938a7d6542SBram Moolenaar assert_equal('one', MyVarargs('one')) 1948a7d6542SBram Moolenaar assert_equal('one,two', MyVarargs('one', 'two')) 1958a7d6542SBram Moolenaar assert_equal('one,two,three', MyVarargs('one', 'two', 'three')) 1968a7d6542SBram Moolenaarenddef 1978a7d6542SBram Moolenaar 198170fcfcfSBram Moolenaardef MyDefaultArgs(name = 'string'): string 199170fcfcfSBram Moolenaar return name 200170fcfcfSBram Moolenaarenddef 201170fcfcfSBram Moolenaar 202170fcfcfSBram Moolenaardef Test_call_default_args() 203170fcfcfSBram Moolenaar assert_equal('string', MyDefaultArgs()) 204170fcfcfSBram Moolenaar assert_equal('one', MyDefaultArgs('one')) 205170fcfcfSBram Moolenaar assert_fails('call MyDefaultArgs("one", "two")', 'E118:') 206170fcfcfSBram Moolenaarenddef 207170fcfcfSBram Moolenaar 208170fcfcfSBram Moolenaarfunc Test_call_default_args_from_func() 209170fcfcfSBram Moolenaar call assert_equal('string', MyDefaultArgs()) 210170fcfcfSBram Moolenaar call assert_equal('one', MyDefaultArgs('one')) 211170fcfcfSBram Moolenaar call assert_fails('call MyDefaultArgs("one", "two")', 'E118:') 212170fcfcfSBram Moolenaarendfunc 213170fcfcfSBram Moolenaar 214b35efa5eSBram Moolenaarfunc TakesOneArg(arg) 215b35efa5eSBram Moolenaar echo a:arg 216b35efa5eSBram Moolenaarendfunc 217b35efa5eSBram Moolenaar 218b35efa5eSBram Moolenaardef Test_call_wrong_arg_count() 219b35efa5eSBram Moolenaar call CheckDefFailure(['TakesOneArg()'], 'E119:') 220b35efa5eSBram Moolenaar call CheckDefFailure(['TakesOneArg(11, 22)'], 'E118:') 221b35efa5eSBram Moolenaarenddef 222b35efa5eSBram Moolenaar 223170fcfcfSBram Moolenaar" Default arg and varargs 224170fcfcfSBram Moolenaardef MyDefVarargs(one: string, two = 'foo', ...rest: list<string>): string 225170fcfcfSBram Moolenaar let res = one .. ',' .. two 226170fcfcfSBram Moolenaar for s in rest 227170fcfcfSBram Moolenaar res ..= ',' .. s 228170fcfcfSBram Moolenaar endfor 229170fcfcfSBram Moolenaar return res 230170fcfcfSBram Moolenaarenddef 231170fcfcfSBram Moolenaar 232170fcfcfSBram Moolenaardef Test_call_def_varargs() 233170fcfcfSBram Moolenaar call assert_fails('call MyDefVarargs()', 'E119:') 234170fcfcfSBram Moolenaar assert_equal('one,foo', MyDefVarargs('one')) 235170fcfcfSBram Moolenaar assert_equal('one,two', MyDefVarargs('one', 'two')) 236170fcfcfSBram Moolenaar assert_equal('one,two,three', MyDefVarargs('one', 'two', 'three')) 237170fcfcfSBram Moolenaarenddef 238170fcfcfSBram Moolenaar 23942a480bfSBram Moolenaardef Test_using_var_as_arg() 24042a480bfSBram Moolenaar call writefile(['def Func(x: number)', 'let x = 234', 'enddef'], 'Xdef') 24142a480bfSBram Moolenaar call assert_fails('so Xdef', 'E1006:') 24242a480bfSBram Moolenaar call delete('Xdef') 24342a480bfSBram Moolenaarenddef 24442a480bfSBram Moolenaar 245b35efa5eSBram Moolenaardef Test_call_func_defined_later() 246b35efa5eSBram Moolenaar call assert_equal('one', DefinedLater('one')) 247b35efa5eSBram Moolenaar call assert_fails('call NotDefined("one")', 'E117:') 248b35efa5eSBram Moolenaarenddef 249170fcfcfSBram Moolenaar 250b35efa5eSBram Moolenaarfunc DefinedLater(arg) 25126e117e9SBram Moolenaar return a:arg 25226e117e9SBram Moolenaarendfunc 25326e117e9SBram Moolenaar 2547eeefd4aSBram Moolenaardef FuncWithForwardCall() 2557eeefd4aSBram Moolenaar return DefinedEvenLater("yes") 2567eeefd4aSBram Moolenaarenddef 2577eeefd4aSBram Moolenaar 2587eeefd4aSBram Moolenaardef DefinedEvenLater(arg: string): string 2597eeefd4aSBram Moolenaar return arg 2607eeefd4aSBram Moolenaarenddef 2617eeefd4aSBram Moolenaar 2627eeefd4aSBram Moolenaardef Test_error_in_nested_function() 2637eeefd4aSBram Moolenaar " Error in called function requires unwinding the call stack. 2647eeefd4aSBram Moolenaar assert_fails('call FuncWithForwardCall()', 'E1029') 2657eeefd4aSBram Moolenaarenddef 2667eeefd4aSBram Moolenaar 2678a7d6542SBram Moolenaardef Test_return_type_wrong() 268978d170bSBram Moolenaar CheckScriptFailure(['def Func(): number', 'return "a"', 'enddef'], 'expected number but got string') 269978d170bSBram Moolenaar CheckScriptFailure(['def Func(): string', 'return 1', 'enddef'], 'expected string but got number') 270978d170bSBram Moolenaar CheckScriptFailure(['def Func(): void', 'return "a"', 'enddef'], 'expected void but got string') 271978d170bSBram Moolenaar CheckScriptFailure(['def Func()', 'return "a"', 'enddef'], 'expected void but got string') 2728a7d6542SBram Moolenaarenddef 2738a7d6542SBram Moolenaar 274bfe12043SBram Moolenaardef Test_arg_type_wrong() 275bfe12043SBram Moolenaar CheckScriptFailure(['def Func3(items: list)', 'echo "a"', 'enddef'], 'E1008: Missing <type>') 276bfe12043SBram Moolenaarenddef 277bfe12043SBram Moolenaar 2788a7d6542SBram Moolenaardef Test_try_catch() 2798a7d6542SBram Moolenaar let l = [] 2808a7d6542SBram Moolenaar try 2818a7d6542SBram Moolenaar add(l, '1') 2828a7d6542SBram Moolenaar throw 'wrong' 2838a7d6542SBram Moolenaar add(l, '2') 2848a7d6542SBram Moolenaar catch 2858a7d6542SBram Moolenaar add(l, v:exception) 2868a7d6542SBram Moolenaar finally 2878a7d6542SBram Moolenaar add(l, '3') 2888a7d6542SBram Moolenaar endtry 2898a7d6542SBram Moolenaar assert_equal(['1', 'wrong', '3'], l) 2908a7d6542SBram Moolenaarenddef 2918a7d6542SBram Moolenaar 292257cc5eeSBram Moolenaardef ThrowFromDef() 293257cc5eeSBram Moolenaar throw 'getout' 294257cc5eeSBram Moolenaarenddef 295257cc5eeSBram Moolenaar 296257cc5eeSBram Moolenaarfunc CatchInFunc() 297257cc5eeSBram Moolenaar try 298257cc5eeSBram Moolenaar call ThrowFromDef() 299257cc5eeSBram Moolenaar catch 300257cc5eeSBram Moolenaar let g:thrown_func = v:exception 301257cc5eeSBram Moolenaar endtry 302257cc5eeSBram Moolenaarendfunc 303257cc5eeSBram Moolenaar 304257cc5eeSBram Moolenaardef CatchInDef() 305257cc5eeSBram Moolenaar try 306257cc5eeSBram Moolenaar ThrowFromDef() 307257cc5eeSBram Moolenaar catch 308257cc5eeSBram Moolenaar g:thrown_def = v:exception 309257cc5eeSBram Moolenaar endtry 310257cc5eeSBram Moolenaarenddef 311257cc5eeSBram Moolenaar 312f575adffSBram Moolenaardef ReturnFinally(): string 313f575adffSBram Moolenaar try 314f575adffSBram Moolenaar return 'intry' 315f575adffSBram Moolenaar finally 316f575adffSBram Moolenaar g:in_finally = 'finally' 317f575adffSBram Moolenaar endtry 318f575adffSBram Moolenaar return 'end' 319f575adffSBram Moolenaarenddef 320f575adffSBram Moolenaar 321257cc5eeSBram Moolenaardef Test_try_catch_nested() 322257cc5eeSBram Moolenaar CatchInFunc() 323257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_func) 324257cc5eeSBram Moolenaar 325257cc5eeSBram Moolenaar CatchInDef() 326257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_def) 327f575adffSBram Moolenaar 328f575adffSBram Moolenaar assert_equal('intry', ReturnFinally()) 329f575adffSBram Moolenaar assert_equal('finally', g:in_finally) 330f575adffSBram Moolenaarenddef 331f575adffSBram Moolenaar 332f575adffSBram Moolenaardef Test_try_catch_match() 333f575adffSBram Moolenaar let seq = 'a' 334f575adffSBram Moolenaar try 335f575adffSBram Moolenaar throw 'something' 336f575adffSBram Moolenaar catch /nothing/ 337f575adffSBram Moolenaar seq ..= 'x' 338f575adffSBram Moolenaar catch /some/ 339f575adffSBram Moolenaar seq ..= 'b' 340f575adffSBram Moolenaar catch /asdf/ 341f575adffSBram Moolenaar seq ..= 'x' 342f575adffSBram Moolenaar finally 343f575adffSBram Moolenaar seq ..= 'c' 344f575adffSBram Moolenaar endtry 345f575adffSBram Moolenaar assert_equal('abc', seq) 346257cc5eeSBram Moolenaarenddef 347257cc5eeSBram Moolenaar 3488a7d6542SBram Moolenaarlet s:export_script_lines =<< trim END 3498a7d6542SBram Moolenaar vim9script 3508a7d6542SBram Moolenaar let name: string = 'bob' 3518a7d6542SBram Moolenaar def Concat(arg: string): string 3528a7d6542SBram Moolenaar return name .. arg 3538a7d6542SBram Moolenaar enddef 3548a7d6542SBram Moolenaar let g:result = Concat('bie') 3558a7d6542SBram Moolenaar let g:localname = name 3568a7d6542SBram Moolenaar 3578a7d6542SBram Moolenaar export const CONST = 1234 3588a7d6542SBram Moolenaar export let exported = 9876 3596e587dcbSBram Moolenaar export let exp_name = 'John' 3608a7d6542SBram Moolenaar export def Exported(): string 3618a7d6542SBram Moolenaar return 'Exported' 3628a7d6542SBram Moolenaar enddef 3638a7d6542SBram MoolenaarEND 3648a7d6542SBram Moolenaar 3658a7d6542SBram Moolenaardef Test_vim9script() 3668a7d6542SBram Moolenaar let import_script_lines =<< trim END 3678a7d6542SBram Moolenaar vim9script 3688a7d6542SBram Moolenaar import {exported, Exported} from './Xexport.vim' 3698a7d6542SBram Moolenaar g:imported = exported 3706e587dcbSBram Moolenaar exported += 3 3716e587dcbSBram Moolenaar g:imported_added = exported 3728a7d6542SBram Moolenaar g:imported_func = Exported() 3736e587dcbSBram Moolenaar 3746e587dcbSBram Moolenaar import {exp_name} from './Xexport.vim' 3756e587dcbSBram Moolenaar g:imported_name = exp_name 3766e587dcbSBram Moolenaar exp_name ..= ' Doe' 3776e587dcbSBram Moolenaar g:imported_name_appended = exp_name 3785381c7a1SBram Moolenaar g:imported_later = exported 3798a7d6542SBram Moolenaar END 3808a7d6542SBram Moolenaar 3818a7d6542SBram Moolenaar writefile(import_script_lines, 'Ximport.vim') 3828a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport.vim') 3838a7d6542SBram Moolenaar 3848a7d6542SBram Moolenaar source Ximport.vim 3858a7d6542SBram Moolenaar 3868a7d6542SBram Moolenaar assert_equal('bobbie', g:result) 3878a7d6542SBram Moolenaar assert_equal('bob', g:localname) 3888a7d6542SBram Moolenaar assert_equal(9876, g:imported) 3896e587dcbSBram Moolenaar assert_equal(9879, g:imported_added) 3905381c7a1SBram Moolenaar assert_equal(9879, g:imported_later) 3918a7d6542SBram Moolenaar assert_equal('Exported', g:imported_func) 3926e587dcbSBram Moolenaar assert_equal('John', g:imported_name) 3936e587dcbSBram Moolenaar assert_equal('John Doe', g:imported_name_appended) 3948a7d6542SBram Moolenaar assert_false(exists('g:name')) 3958a7d6542SBram Moolenaar 3968a7d6542SBram Moolenaar unlet g:result 3978a7d6542SBram Moolenaar unlet g:localname 3988a7d6542SBram Moolenaar unlet g:imported 3996e587dcbSBram Moolenaar unlet g:imported_added 4005381c7a1SBram Moolenaar unlet g:imported_later 4018a7d6542SBram Moolenaar unlet g:imported_func 4026e587dcbSBram Moolenaar unlet g:imported_name g:imported_name_appended 4038a7d6542SBram Moolenaar delete('Ximport.vim') 404f2d5c240SBram Moolenaar 4055381c7a1SBram Moolenaar let import_in_def_lines =<< trim END 4065381c7a1SBram Moolenaar vim9script 4075381c7a1SBram Moolenaar def ImportInDef() 4085381c7a1SBram Moolenaar import exported from './Xexport.vim' 4095381c7a1SBram Moolenaar g:imported = exported 4105381c7a1SBram Moolenaar exported += 7 4115381c7a1SBram Moolenaar g:imported_added = exported 4125381c7a1SBram Moolenaar enddef 4135381c7a1SBram Moolenaar ImportInDef() 4145381c7a1SBram Moolenaar END 4155381c7a1SBram Moolenaar writefile(import_in_def_lines, 'Ximport2.vim') 4165381c7a1SBram Moolenaar source Ximport2.vim 4175381c7a1SBram Moolenaar " TODO: this should be 9879 4185381c7a1SBram Moolenaar assert_equal(9876, g:imported) 4195381c7a1SBram Moolenaar assert_equal(9883, g:imported_added) 4205381c7a1SBram Moolenaar unlet g:imported 4215381c7a1SBram Moolenaar unlet g:imported_added 4225381c7a1SBram Moolenaar delete('Ximport2.vim') 4235381c7a1SBram Moolenaar 424f2d5c240SBram Moolenaar let import_star_as_lines =<< trim END 425f2d5c240SBram Moolenaar vim9script 426f2d5c240SBram Moolenaar import * as Export from './Xexport.vim' 427f2d5c240SBram Moolenaar def UseExport() 428f2d5c240SBram Moolenaar g:imported = Export.exported 429f2d5c240SBram Moolenaar enddef 430f2d5c240SBram Moolenaar UseExport() 431f2d5c240SBram Moolenaar END 432f2d5c240SBram Moolenaar writefile(import_star_as_lines, 'Ximport.vim') 433f2d5c240SBram Moolenaar source Ximport.vim 4345381c7a1SBram Moolenaar assert_equal(9883, g:imported) 435f2d5c240SBram Moolenaar 436f2d5c240SBram Moolenaar let import_star_lines =<< trim END 437f2d5c240SBram Moolenaar vim9script 438f2d5c240SBram Moolenaar import * from './Xexport.vim' 439f2d5c240SBram Moolenaar g:imported = exported 440f2d5c240SBram Moolenaar END 441f2d5c240SBram Moolenaar writefile(import_star_lines, 'Ximport.vim') 442f2d5c240SBram Moolenaar assert_fails('source Ximport.vim', 'E1045:') 443f2d5c240SBram Moolenaar 444fa29c8abSBram Moolenaar " try to import something that exists but is not exported 445fa29c8abSBram Moolenaar let import_not_exported_lines =<< trim END 446fa29c8abSBram Moolenaar vim9script 447fa29c8abSBram Moolenaar import name from './Xexport.vim' 448fa29c8abSBram Moolenaar END 449fa29c8abSBram Moolenaar writefile(import_not_exported_lines, 'Ximport.vim') 450fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1049:') 451fa29c8abSBram Moolenaar 452fa29c8abSBram Moolenaar " import a very long name, requires making a copy 453fa29c8abSBram Moolenaar let import_long_name_lines =<< trim END 454fa29c8abSBram Moolenaar vim9script 455fa29c8abSBram Moolenaar import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim' 456fa29c8abSBram Moolenaar END 457fa29c8abSBram Moolenaar writefile(import_long_name_lines, 'Ximport.vim') 458fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 459fa29c8abSBram Moolenaar 460fa29c8abSBram Moolenaar let import_no_from_lines =<< trim END 461fa29c8abSBram Moolenaar vim9script 462fa29c8abSBram Moolenaar import name './Xexport.vim' 463fa29c8abSBram Moolenaar END 464fa29c8abSBram Moolenaar writefile(import_no_from_lines, 'Ximport.vim') 465fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1070:') 466fa29c8abSBram Moolenaar 467fa29c8abSBram Moolenaar let import_invalid_string_lines =<< trim END 468fa29c8abSBram Moolenaar vim9script 469fa29c8abSBram Moolenaar import name from Xexport.vim 470fa29c8abSBram Moolenaar END 471fa29c8abSBram Moolenaar writefile(import_invalid_string_lines, 'Ximport.vim') 472fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1071:') 473fa29c8abSBram Moolenaar 474fa29c8abSBram Moolenaar let import_wrong_name_lines =<< trim END 475fa29c8abSBram Moolenaar vim9script 476fa29c8abSBram Moolenaar import name from './XnoExport.vim' 477fa29c8abSBram Moolenaar END 478fa29c8abSBram Moolenaar writefile(import_wrong_name_lines, 'Ximport.vim') 479fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1053:') 480fa29c8abSBram Moolenaar 481fa29c8abSBram Moolenaar let import_missing_comma_lines =<< trim END 482fa29c8abSBram Moolenaar vim9script 483fa29c8abSBram Moolenaar import {exported name} from './Xexport.vim' 484fa29c8abSBram Moolenaar END 485fa29c8abSBram Moolenaar writefile(import_missing_comma_lines, 'Ximport.vim') 486fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1046:') 487fa29c8abSBram Moolenaar 488f2d5c240SBram Moolenaar delete('Ximport.vim') 4898a7d6542SBram Moolenaar delete('Xexport.vim') 4908a7d6542SBram Moolenaar 491750802b5SBram Moolenaar " Check that in a Vim9 script 'cpo' is set to the Vim default. 492750802b5SBram Moolenaar set cpo&vi 493750802b5SBram Moolenaar let cpo_before = &cpo 494750802b5SBram Moolenaar let lines =<< trim END 495750802b5SBram Moolenaar vim9script 496750802b5SBram Moolenaar g:cpo_in_vim9script = &cpo 497750802b5SBram Moolenaar END 498750802b5SBram Moolenaar writefile(lines, 'Xvim9_script') 499750802b5SBram Moolenaar source Xvim9_script 500750802b5SBram Moolenaar assert_equal(cpo_before, &cpo) 501750802b5SBram Moolenaar set cpo&vim 502750802b5SBram Moolenaar assert_equal(&cpo, g:cpo_in_vim9script) 503750802b5SBram Moolenaar delete('Xvim9_script') 504750802b5SBram Moolenaarenddef 505750802b5SBram Moolenaar 506750802b5SBram Moolenaardef Test_vim9script_fails() 5078a7d6542SBram Moolenaar CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:') 5088a7d6542SBram Moolenaar CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:') 509750802b5SBram Moolenaar CheckScriptFailure(['export let some = 123'], 'E1042:') 510f2d5c240SBram Moolenaar CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1042:') 511750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export let g:some'], 'E1044:') 512750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:') 513750802b5SBram Moolenaar 514750802b5SBram Moolenaar assert_fails('vim9script', 'E1038') 515750802b5SBram Moolenaar assert_fails('export something', 'E1042') 5168a7d6542SBram Moolenaarenddef 5178a7d6542SBram Moolenaar 5188a7d6542SBram Moolenaardef Test_vim9script_call() 5198a7d6542SBram Moolenaar let lines =<< trim END 5208a7d6542SBram Moolenaar vim9script 5218a7d6542SBram Moolenaar let var = '' 5228a7d6542SBram Moolenaar def MyFunc(arg: string) 5238a7d6542SBram Moolenaar var = arg 5248a7d6542SBram Moolenaar enddef 5258a7d6542SBram Moolenaar MyFunc('foobar') 5268a7d6542SBram Moolenaar assert_equal('foobar', var) 5278a7d6542SBram Moolenaar 5288a7d6542SBram Moolenaar let str = 'barfoo' 5298a7d6542SBram Moolenaar str->MyFunc() 5308a7d6542SBram Moolenaar assert_equal('barfoo', var) 5318a7d6542SBram Moolenaar 5328a7d6542SBram Moolenaar let g:value = 'value' 5338a7d6542SBram Moolenaar g:value->MyFunc() 5348a7d6542SBram Moolenaar assert_equal('value', var) 5358a7d6542SBram Moolenaar 5368a7d6542SBram Moolenaar let listvar = [] 5378a7d6542SBram Moolenaar def ListFunc(arg: list<number>) 5388a7d6542SBram Moolenaar listvar = arg 5398a7d6542SBram Moolenaar enddef 5408a7d6542SBram Moolenaar [1, 2, 3]->ListFunc() 5418a7d6542SBram Moolenaar assert_equal([1, 2, 3], listvar) 5428a7d6542SBram Moolenaar 5438a7d6542SBram Moolenaar let dictvar = {} 5448a7d6542SBram Moolenaar def DictFunc(arg: dict<number>) 5458a7d6542SBram Moolenaar dictvar = arg 5468a7d6542SBram Moolenaar enddef 5478a7d6542SBram Moolenaar {'a': 1, 'b': 2}->DictFunc() 5488a7d6542SBram Moolenaar assert_equal(#{a: 1, b: 2}, dictvar) 5498a7d6542SBram Moolenaar #{a: 3, b: 4}->DictFunc() 5508a7d6542SBram Moolenaar assert_equal(#{a: 3, b: 4}, dictvar) 5510c6ceaf9SBram Moolenaar 5520c6ceaf9SBram Moolenaar ('text')->MyFunc() 5530c6ceaf9SBram Moolenaar assert_equal('text', var) 5540c6ceaf9SBram Moolenaar ("some")->MyFunc() 5550c6ceaf9SBram Moolenaar assert_equal('some', var) 5568a7d6542SBram Moolenaar END 5578a7d6542SBram Moolenaar writefile(lines, 'Xcall.vim') 5588a7d6542SBram Moolenaar source Xcall.vim 5598a7d6542SBram Moolenaar delete('Xcall.vim') 5608a7d6542SBram Moolenaarenddef 5618a7d6542SBram Moolenaar 5628a7d6542SBram Moolenaardef Test_vim9script_call_fail_decl() 5638a7d6542SBram Moolenaar let lines =<< trim END 5648a7d6542SBram Moolenaar vim9script 5658a7d6542SBram Moolenaar let var = '' 5668a7d6542SBram Moolenaar def MyFunc(arg: string) 5678a7d6542SBram Moolenaar let var = 123 5688a7d6542SBram Moolenaar enddef 5698a7d6542SBram Moolenaar END 5708a7d6542SBram Moolenaar writefile(lines, 'Xcall_decl.vim') 5718a7d6542SBram Moolenaar assert_fails('source Xcall_decl.vim', 'E1054:') 5728a7d6542SBram Moolenaar delete('Xcall_decl.vim') 5738a7d6542SBram Moolenaarenddef 5748a7d6542SBram Moolenaar 5758a7d6542SBram Moolenaardef Test_vim9script_call_fail_const() 5768a7d6542SBram Moolenaar let lines =<< trim END 5778a7d6542SBram Moolenaar vim9script 5788a7d6542SBram Moolenaar const var = '' 5798a7d6542SBram Moolenaar def MyFunc(arg: string) 5808a7d6542SBram Moolenaar var = 'asdf' 5818a7d6542SBram Moolenaar enddef 5828a7d6542SBram Moolenaar END 5838a7d6542SBram Moolenaar writefile(lines, 'Xcall_const.vim') 5848a7d6542SBram Moolenaar assert_fails('source Xcall_const.vim', 'E46:') 5858a7d6542SBram Moolenaar delete('Xcall_const.vim') 5868a7d6542SBram Moolenaarenddef 5878a7d6542SBram Moolenaar 5888a7d6542SBram Moolenaardef Test_vim9script_reload() 5898a7d6542SBram Moolenaar let lines =<< trim END 5908a7d6542SBram Moolenaar vim9script 5918a7d6542SBram Moolenaar const var = '' 5928a7d6542SBram Moolenaar let valone = 1234 5938a7d6542SBram Moolenaar def MyFunc(arg: string) 5948a7d6542SBram Moolenaar valone = 5678 5958a7d6542SBram Moolenaar enddef 5968a7d6542SBram Moolenaar END 5978a7d6542SBram Moolenaar let morelines =<< trim END 5988a7d6542SBram Moolenaar let valtwo = 222 5998a7d6542SBram Moolenaar export def GetValtwo(): number 6008a7d6542SBram Moolenaar return valtwo 6018a7d6542SBram Moolenaar enddef 6028a7d6542SBram Moolenaar END 6038a7d6542SBram Moolenaar writefile(lines + morelines, 'Xreload.vim') 6048a7d6542SBram Moolenaar source Xreload.vim 6058a7d6542SBram Moolenaar source Xreload.vim 6068a7d6542SBram Moolenaar source Xreload.vim 6078a7d6542SBram Moolenaar 6088a7d6542SBram Moolenaar let testlines =<< trim END 6098a7d6542SBram Moolenaar vim9script 6108a7d6542SBram Moolenaar def TheFunc() 6118a7d6542SBram Moolenaar import GetValtwo from './Xreload.vim' 6128a7d6542SBram Moolenaar assert_equal(222, GetValtwo()) 6138a7d6542SBram Moolenaar enddef 6148a7d6542SBram Moolenaar TheFunc() 6158a7d6542SBram Moolenaar END 6168a7d6542SBram Moolenaar writefile(testlines, 'Ximport.vim') 6178a7d6542SBram Moolenaar source Ximport.vim 6188a7d6542SBram Moolenaar 6198a7d6542SBram Moolenaar " test that when not using "morelines" valtwo is still defined 6208a7d6542SBram Moolenaar " need to source Xreload.vim again, import doesn't reload a script 6218a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 6228a7d6542SBram Moolenaar source Xreload.vim 6238a7d6542SBram Moolenaar source Ximport.vim 6248a7d6542SBram Moolenaar 6258a7d6542SBram Moolenaar " cannot declare a var twice 6268a7d6542SBram Moolenaar lines =<< trim END 6278a7d6542SBram Moolenaar vim9script 6288a7d6542SBram Moolenaar let valone = 1234 6298a7d6542SBram Moolenaar let valone = 5678 6308a7d6542SBram Moolenaar END 6318a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 6328a7d6542SBram Moolenaar assert_fails('source Xreload.vim', 'E1041:') 6338a7d6542SBram Moolenaar 6348a7d6542SBram Moolenaar delete('Xreload.vim') 6358a7d6542SBram Moolenaar delete('Ximport.vim') 6368a7d6542SBram Moolenaarenddef 6378a7d6542SBram Moolenaar 6388a7d6542SBram Moolenaardef Test_import_absolute() 6398a7d6542SBram Moolenaar let import_lines = [ 6408a7d6542SBram Moolenaar \ 'vim9script', 6418a7d6542SBram Moolenaar \ 'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"', 642b283a8a6SBram Moolenaar \ 'def UseExported()', 6438a7d6542SBram Moolenaar \ ' g:imported_abs = exported', 6444e12a5dfSBram Moolenaar \ ' exported = 8888', 6454e12a5dfSBram Moolenaar \ ' g:imported_after = exported', 646b283a8a6SBram Moolenaar \ 'enddef', 647b283a8a6SBram Moolenaar \ 'UseExported()', 6484e12a5dfSBram Moolenaar \ 'g:import_disassembled = execute("disass UseExported")', 6498a7d6542SBram Moolenaar \ ] 6508a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_abs.vim') 6518a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport_abs.vim') 6528a7d6542SBram Moolenaar 6538a7d6542SBram Moolenaar source Ximport_abs.vim 6548a7d6542SBram Moolenaar 6558a7d6542SBram Moolenaar assert_equal(9876, g:imported_abs) 6564e12a5dfSBram Moolenaar assert_equal(8888, g:imported_after) 657b283a8a6SBram Moolenaar assert_match('<SNR>\d\+_UseExported.*' 658b283a8a6SBram Moolenaar \ .. 'g:imported_abs = exported.*' 659b283a8a6SBram Moolenaar \ .. '0 LOADSCRIPT exported from .*Xexport_abs.vim.*' 6604e12a5dfSBram Moolenaar \ .. '1 STOREG g:imported_abs.*' 6614e12a5dfSBram Moolenaar \ .. 'exported = 8888.*' 6624e12a5dfSBram Moolenaar \ .. '3 STORESCRIPT exported in .*Xexport_abs.vim.*' 6634e12a5dfSBram Moolenaar \ .. 'g:imported_after = exported.*' 6644e12a5dfSBram Moolenaar \ .. '4 LOADSCRIPT exported from .*Xexport_abs.vim.*' 6654e12a5dfSBram Moolenaar \ .. '5 STOREG g:imported_after.*' 6664e12a5dfSBram Moolenaar \, g:import_disassembled) 6678a7d6542SBram Moolenaar unlet g:imported_abs 6684e12a5dfSBram Moolenaar unlet g:import_disassembled 6698a7d6542SBram Moolenaar 6708a7d6542SBram Moolenaar delete('Ximport_abs.vim') 6718a7d6542SBram Moolenaar delete('Xexport_abs.vim') 6728a7d6542SBram Moolenaarenddef 6738a7d6542SBram Moolenaar 6748a7d6542SBram Moolenaardef Test_import_rtp() 6758a7d6542SBram Moolenaar let import_lines = [ 6768a7d6542SBram Moolenaar \ 'vim9script', 6778a7d6542SBram Moolenaar \ 'import exported from "Xexport_rtp.vim"', 6788a7d6542SBram Moolenaar \ 'g:imported_rtp = exported', 6798a7d6542SBram Moolenaar \ ] 6808a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_rtp.vim') 6818a7d6542SBram Moolenaar mkdir('import') 6828a7d6542SBram Moolenaar writefile(s:export_script_lines, 'import/Xexport_rtp.vim') 6838a7d6542SBram Moolenaar 6848a7d6542SBram Moolenaar let save_rtp = &rtp 6858a7d6542SBram Moolenaar &rtp = getcwd() 6868a7d6542SBram Moolenaar source Ximport_rtp.vim 6878a7d6542SBram Moolenaar &rtp = save_rtp 6888a7d6542SBram Moolenaar 6898a7d6542SBram Moolenaar assert_equal(9876, g:imported_rtp) 6908a7d6542SBram Moolenaar unlet g:imported_rtp 6918a7d6542SBram Moolenaar 6928a7d6542SBram Moolenaar delete('Ximport_rtp.vim') 6938a7d6542SBram Moolenaar delete('import/Xexport_rtp.vim') 6948a7d6542SBram Moolenaar delete('import', 'd') 6958a7d6542SBram Moolenaarenddef 6968a7d6542SBram Moolenaar 6978a7d6542SBram Moolenaardef Test_fixed_size_list() 6988a7d6542SBram Moolenaar " will be allocated as one piece of memory, check that changes work 6998a7d6542SBram Moolenaar let l = [1, 2, 3, 4] 7008a7d6542SBram Moolenaar l->remove(0) 7018a7d6542SBram Moolenaar l->add(5) 7028a7d6542SBram Moolenaar l->insert(99, 1) 7030f18b6d1SBram Moolenaar assert_equal([2, 99, 3, 4, 5], l) 7048a7d6542SBram Moolenaarenddef 7058a7d6542SBram Moolenaar 706673660abSBram Moolenaar" Test that inside :function a Python function can be defined, :def is not 707673660abSBram Moolenaar" recognized. 708673660abSBram Moolenaarfunc Test_function_python() 709673660abSBram Moolenaar CheckFeature python3 710673660abSBram Moolenaar let py = 'python3' 711673660abSBram Moolenaar execute py "<< EOF" 712673660abSBram Moolenaardef do_something(): 713673660abSBram Moolenaar return 1 714673660abSBram MoolenaarEOF 715673660abSBram Moolenaarendfunc 716673660abSBram Moolenaar 717158906cfSBram Moolenaardef IfElse(what: number): string 718158906cfSBram Moolenaar let res = '' 719158906cfSBram Moolenaar if what == 1 720158906cfSBram Moolenaar res = "one" 721158906cfSBram Moolenaar elseif what == 2 722158906cfSBram Moolenaar res = "two" 723a259d8d3SBram Moolenaar else 724158906cfSBram Moolenaar res = "three" 725a259d8d3SBram Moolenaar endif 726158906cfSBram Moolenaar return res 727a259d8d3SBram Moolenaarenddef 728a259d8d3SBram Moolenaar 729158906cfSBram Moolenaardef Test_if_elseif_else() 730158906cfSBram Moolenaar assert_equal('one', IfElse(1)) 731158906cfSBram Moolenaar assert_equal('two', IfElse(2)) 732158906cfSBram Moolenaar assert_equal('three', IfElse(3)) 7330f18b6d1SBram Moolenaarenddef 7340f18b6d1SBram Moolenaar 735*6d69bf60SBram Moolenaarlet g:bool_true = v:true 736*6d69bf60SBram Moolenaarlet g:bool_false = v:false 737*6d69bf60SBram Moolenaar 738*6d69bf60SBram Moolenaardef Test_if_const_expr() 739*6d69bf60SBram Moolenaar let res = false 740*6d69bf60SBram Moolenaar if true ? true : false 741*6d69bf60SBram Moolenaar res = true 742*6d69bf60SBram Moolenaar endif 743*6d69bf60SBram Moolenaar assert_equal(true, res) 744*6d69bf60SBram Moolenaar 745*6d69bf60SBram Moolenaar res = false 746*6d69bf60SBram Moolenaar if g:bool_true ? true : false 747*6d69bf60SBram Moolenaar res = true 748*6d69bf60SBram Moolenaar endif 749*6d69bf60SBram Moolenaar assert_equal(true, res) 750*6d69bf60SBram Moolenaar 751*6d69bf60SBram Moolenaar res = false 752*6d69bf60SBram Moolenaar if true ? g:bool_true : false 753*6d69bf60SBram Moolenaar res = true 754*6d69bf60SBram Moolenaar endif 755*6d69bf60SBram Moolenaar assert_equal(true, res) 756*6d69bf60SBram Moolenaar 757*6d69bf60SBram Moolenaar res = false 758*6d69bf60SBram Moolenaar if true ? true : g:bool_false 759*6d69bf60SBram Moolenaar res = true 760*6d69bf60SBram Moolenaar endif 761*6d69bf60SBram Moolenaar assert_equal(true, res) 762*6d69bf60SBram Moolenaar 763*6d69bf60SBram Moolenaar res = false 764*6d69bf60SBram Moolenaar if true ? false : true 765*6d69bf60SBram Moolenaar res = true 766*6d69bf60SBram Moolenaar endif 767*6d69bf60SBram Moolenaar assert_equal(false, res) 768*6d69bf60SBram Moolenaar 769*6d69bf60SBram Moolenaar res = false 770*6d69bf60SBram Moolenaar if false ? false : true 771*6d69bf60SBram Moolenaar res = true 772*6d69bf60SBram Moolenaar endif 773*6d69bf60SBram Moolenaar assert_equal(true, res) 774*6d69bf60SBram Moolenaar 775*6d69bf60SBram Moolenaar res = false 776*6d69bf60SBram Moolenaar if false ? true : false 777*6d69bf60SBram Moolenaar res = true 778*6d69bf60SBram Moolenaar endif 779*6d69bf60SBram Moolenaar assert_equal(false, res) 780*6d69bf60SBram Moolenaar 781*6d69bf60SBram Moolenaar res = false 782*6d69bf60SBram Moolenaar if true && true 783*6d69bf60SBram Moolenaar res = true 784*6d69bf60SBram Moolenaar endif 785*6d69bf60SBram Moolenaar assert_equal(true, res) 786*6d69bf60SBram Moolenaar 787*6d69bf60SBram Moolenaar res = false 788*6d69bf60SBram Moolenaar if true && false 789*6d69bf60SBram Moolenaar res = true 790*6d69bf60SBram Moolenaar endif 791*6d69bf60SBram Moolenaar assert_equal(false, res) 792*6d69bf60SBram Moolenaar 793*6d69bf60SBram Moolenaar res = false 794*6d69bf60SBram Moolenaar if g:bool_true && false 795*6d69bf60SBram Moolenaar res = true 796*6d69bf60SBram Moolenaar endif 797*6d69bf60SBram Moolenaar assert_equal(false, res) 798*6d69bf60SBram Moolenaar 799*6d69bf60SBram Moolenaar res = false 800*6d69bf60SBram Moolenaar if true && g:bool_false 801*6d69bf60SBram Moolenaar res = true 802*6d69bf60SBram Moolenaar endif 803*6d69bf60SBram Moolenaar assert_equal(false, res) 804*6d69bf60SBram Moolenaar 805*6d69bf60SBram Moolenaar res = false 806*6d69bf60SBram Moolenaar if false && false 807*6d69bf60SBram Moolenaar res = true 808*6d69bf60SBram Moolenaar endif 809*6d69bf60SBram Moolenaar assert_equal(false, res) 810*6d69bf60SBram Moolenaar 811*6d69bf60SBram Moolenaar res = false 812*6d69bf60SBram Moolenaar if true || false 813*6d69bf60SBram Moolenaar res = true 814*6d69bf60SBram Moolenaar endif 815*6d69bf60SBram Moolenaar assert_equal(true, res) 816*6d69bf60SBram Moolenaar 817*6d69bf60SBram Moolenaar res = false 818*6d69bf60SBram Moolenaar if g:bool_true || false 819*6d69bf60SBram Moolenaar res = true 820*6d69bf60SBram Moolenaar endif 821*6d69bf60SBram Moolenaar assert_equal(true, res) 822*6d69bf60SBram Moolenaar 823*6d69bf60SBram Moolenaar res = false 824*6d69bf60SBram Moolenaar if true || g:bool_false 825*6d69bf60SBram Moolenaar res = true 826*6d69bf60SBram Moolenaar endif 827*6d69bf60SBram Moolenaar assert_equal(true, res) 828*6d69bf60SBram Moolenaar 829*6d69bf60SBram Moolenaar res = false 830*6d69bf60SBram Moolenaar if false || false 831*6d69bf60SBram Moolenaar res = true 832*6d69bf60SBram Moolenaar endif 833*6d69bf60SBram Moolenaar assert_equal(false, res) 834*6d69bf60SBram Moolenaar 835*6d69bf60SBram Moolenaarenddef 836*6d69bf60SBram Moolenaar 83763ce4849SBram Moolenaardef Test_delfunc() 83863ce4849SBram Moolenaar let lines =<< trim END 83963ce4849SBram Moolenaar vim9script 84063ce4849SBram Moolenaar def GoneSoon() 84163ce4849SBram Moolenaar echo 'hello' 84263ce4849SBram Moolenaar enddef 84363ce4849SBram Moolenaar 84463ce4849SBram Moolenaar def CallGoneSoon() 84563ce4849SBram Moolenaar GoneSoon() 84663ce4849SBram Moolenaar enddef 84763ce4849SBram Moolenaar 84863ce4849SBram Moolenaar delfunc GoneSoon 84963ce4849SBram Moolenaar CallGoneSoon() 85063ce4849SBram Moolenaar END 85163ce4849SBram Moolenaar writefile(lines, 'XToDelFunc') 85263ce4849SBram Moolenaar assert_fails('so XToDelFunc', 'E933') 85363ce4849SBram Moolenaar assert_fails('so XToDelFunc', 'E933') 85463ce4849SBram Moolenaar 85563ce4849SBram Moolenaar delete('XToDelFunc') 85663ce4849SBram Moolenaarenddef 85763ce4849SBram Moolenaar 8585b1c8fe3SBram Moolenaardef Test_substitute_cmd() 8595b1c8fe3SBram Moolenaar new 8605b1c8fe3SBram Moolenaar setline(1, 'something') 8615b1c8fe3SBram Moolenaar :substitute(some(other( 8625b1c8fe3SBram Moolenaar assert_equal('otherthing', getline(1)) 86383f37b91SBram Moolenaar bwipe! 86483f37b91SBram Moolenaar 86583f37b91SBram Moolenaar " also when the context is Vim9 script 86683f37b91SBram Moolenaar let lines =<< trim END 86783f37b91SBram Moolenaar vim9script 86883f37b91SBram Moolenaar new 86983f37b91SBram Moolenaar setline(1, 'something') 87083f37b91SBram Moolenaar :substitute(some(other( 87183f37b91SBram Moolenaar assert_equal('otherthing', getline(1)) 87283f37b91SBram Moolenaar bwipe! 87383f37b91SBram Moolenaar END 87483f37b91SBram Moolenaar writefile(lines, 'Xvim9lines') 87583f37b91SBram Moolenaar source Xvim9lines 87683f37b91SBram Moolenaar 87783f37b91SBram Moolenaar delete('Xvim9lines') 8785b1c8fe3SBram Moolenaarenddef 8795b1c8fe3SBram Moolenaar 880ad39c094SBram Moolenaardef Test_execute_cmd() 881ad39c094SBram Moolenaar new 882ad39c094SBram Moolenaar setline(1, 'default') 883ad39c094SBram Moolenaar execute 'call setline(1, "execute-string")' 884ad39c094SBram Moolenaar assert_equal('execute-string', getline(1)) 885ad39c094SBram Moolenaar let cmd1 = 'call setline(1,' 886ad39c094SBram Moolenaar let cmd2 = '"execute-var")' 887ad39c094SBram Moolenaar execute cmd1 cmd2 888ad39c094SBram Moolenaar assert_equal('execute-var', getline(1)) 889ad39c094SBram Moolenaar execute cmd1 cmd2 '|call setline(1, "execute-var-string")' 890ad39c094SBram Moolenaar assert_equal('execute-var-string', getline(1)) 891ad39c094SBram Moolenaar let cmd_first = 'call ' 892ad39c094SBram Moolenaar let cmd_last = 'setline(1, "execute-var-var")' 893ad39c094SBram Moolenaar execute cmd_first .. cmd_last 894ad39c094SBram Moolenaar assert_equal('execute-var-var', getline(1)) 895ad39c094SBram Moolenaar bwipe! 896ad39c094SBram Moolenaarenddef 897ad39c094SBram Moolenaar 898ad39c094SBram Moolenaardef Test_echo_cmd() 899ad39c094SBram Moolenaar echo 'something' 900ad39c094SBram Moolenaar assert_match('^something$', Screenline(&lines)) 901ad39c094SBram Moolenaar 902ad39c094SBram Moolenaar let str1 = 'some' 903ad39c094SBram Moolenaar let str2 = 'more' 904ad39c094SBram Moolenaar echo str1 str2 905ad39c094SBram Moolenaar assert_match('^some more$', Screenline(&lines)) 906ad39c094SBram Moolenaarenddef 907ad39c094SBram Moolenaar 90841fe0617SBram Moolenaardef Test_for_outside_of_function() 90941fe0617SBram Moolenaar let lines =<< trim END 91041fe0617SBram Moolenaar vim9script 91141fe0617SBram Moolenaar new 91241fe0617SBram Moolenaar for var in range(0, 3) 91341fe0617SBram Moolenaar append(line('$'), var) 91441fe0617SBram Moolenaar endfor 91541fe0617SBram Moolenaar assert_equal(['', '0', '1', '2', '3'], getline(1, '$')) 91641fe0617SBram Moolenaar bwipe! 91741fe0617SBram Moolenaar END 91841fe0617SBram Moolenaar writefile(lines, 'Xvim9for.vim') 91941fe0617SBram Moolenaar source Xvim9for.vim 92041fe0617SBram Moolenaar delete('Xvim9for.vim') 92141fe0617SBram Moolenaarenddef 9228a7d6542SBram Moolenaar 9238a7d6542SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker 924