18a7d6542SBram Moolenaar" Test various aspects of the Vim9 script language. 28a7d6542SBram Moolenaar 3673660abSBram Moolenaarsource check.vim 4673660abSBram Moolenaar 58a7d6542SBram Moolenaar" Check that "lines" inside ":def" results in an "error" message. 68a7d6542SBram Moolenaarfunc CheckDefFailure(lines, error) 7978d170bSBram Moolenaar call writefile(['def Func()'] + a:lines + ['enddef'], 'Xdef') 88a7d6542SBram Moolenaar call assert_fails('so Xdef', a:error, a:lines) 98a7d6542SBram Moolenaar call delete('Xdef') 108a7d6542SBram Moolenaarendfunc 118a7d6542SBram Moolenaar 128a7d6542SBram Moolenaarfunc CheckScriptFailure(lines, error) 138a7d6542SBram Moolenaar call writefile(a:lines, 'Xdef') 148a7d6542SBram Moolenaar call assert_fails('so Xdef', a:error, a:lines) 158a7d6542SBram Moolenaar call delete('Xdef') 168a7d6542SBram Moolenaarendfunc 178a7d6542SBram Moolenaar 188a7d6542SBram Moolenaardef Test_syntax() 198a7d6542SBram Moolenaar let var = 234 208a7d6542SBram Moolenaar let other: list<string> = ['asdf'] 218a7d6542SBram Moolenaarenddef 228a7d6542SBram Moolenaar 238a7d6542SBram Moolenaarfunc Test_def_basic() 248a7d6542SBram Moolenaar def SomeFunc(): string 258a7d6542SBram Moolenaar return 'yes' 268a7d6542SBram Moolenaar enddef 278a7d6542SBram Moolenaar call assert_equal('yes', SomeFunc()) 288a7d6542SBram Moolenaarendfunc 298a7d6542SBram Moolenaar 306e587dcbSBram Moolenaarlet s:appendToMe = 'xxx' 316e587dcbSBram Moolenaarlet s:addToMe = 111 326e587dcbSBram Moolenaar 338a7d6542SBram Moolenaardef Test_assignment() 348a7d6542SBram Moolenaar let bool1: bool = true 358a7d6542SBram Moolenaar assert_equal(v:true, bool1) 368a7d6542SBram Moolenaar let bool2: bool = false 378a7d6542SBram Moolenaar assert_equal(v:false, bool2) 388a7d6542SBram Moolenaar 398a7d6542SBram Moolenaar let list1: list<string> = ['sdf', 'asdf'] 408a7d6542SBram Moolenaar let list2: list<number> = [1, 2, 3] 418a7d6542SBram Moolenaar 428a7d6542SBram Moolenaar " TODO: does not work yet 438a7d6542SBram Moolenaar " let listS: list<string> = [] 448a7d6542SBram Moolenaar " let listN: list<number> = [] 458a7d6542SBram Moolenaar 468a7d6542SBram Moolenaar let dict1: dict<string> = #{key: 'value'} 478a7d6542SBram Moolenaar let dict2: dict<number> = #{one: 1, two: 2} 48b283a8a6SBram Moolenaar 49b283a8a6SBram Moolenaar v:char = 'abc' 506e587dcbSBram Moolenaar assert_equal('abc', v:char) 51b283a8a6SBram Moolenaar 52b283a8a6SBram Moolenaar $ENVVAR = 'foobar' 536e587dcbSBram Moolenaar assert_equal('foobar', $ENVVAR) 54b283a8a6SBram Moolenaar $ENVVAR = '' 556e587dcbSBram Moolenaar 566e587dcbSBram Moolenaar appendToMe ..= 'yyy' 576e587dcbSBram Moolenaar assert_equal('xxxyyy', appendToMe) 586e587dcbSBram Moolenaar addToMe += 222 596e587dcbSBram Moolenaar assert_equal(333, addToMe) 608a7d6542SBram Moolenaarenddef 618a7d6542SBram Moolenaar 628a7d6542SBram Moolenaarfunc Test_assignment_failure() 638a7d6542SBram Moolenaar call CheckDefFailure(['let var=234'], 'E1004:') 648a7d6542SBram Moolenaar call CheckDefFailure(['let var =234'], 'E1004:') 658a7d6542SBram Moolenaar call CheckDefFailure(['let var= 234'], 'E1004:') 668a7d6542SBram Moolenaar 678a7d6542SBram Moolenaar call CheckDefFailure(['let true = 1'], 'E1034:') 688a7d6542SBram Moolenaar call CheckDefFailure(['let false = 1'], 'E1034:') 698a7d6542SBram Moolenaar 708a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<string> = [123]'], 'expected list<string> but got list<number>') 718a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<number> = ["xx"]'], 'expected list<number> but got list<string>') 728a7d6542SBram Moolenaar 738a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<string> = #{key: 123}'], 'expected dict<string> but got dict<number>') 748a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<number> = #{key: "xx"}'], 'expected dict<number> but got dict<string>') 758a7d6542SBram Moolenaar 768a7d6542SBram Moolenaar call CheckDefFailure(['let var = feedkeys("0")'], 'E1031:') 778a7d6542SBram Moolenaar call CheckDefFailure(['let var: number = feedkeys("0")'], 'expected number but got void') 788a7d6542SBram Moolenaarendfunc 798a7d6542SBram Moolenaar 808a7d6542SBram Moolenaarfunc Test_const() 818a7d6542SBram Moolenaar call CheckDefFailure(['const var = 234', 'var = 99'], 'E1018:') 828a7d6542SBram Moolenaar call CheckDefFailure(['const one = 234', 'let one = 99'], 'E1017:') 838a7d6542SBram Moolenaar call CheckDefFailure(['const two'], 'E1021:') 848a7d6542SBram Moolenaarendfunc 858a7d6542SBram Moolenaar 868a7d6542SBram Moolenaardef Test_block() 878a7d6542SBram Moolenaar let outer = 1 888a7d6542SBram Moolenaar { 898a7d6542SBram Moolenaar let inner = 2 908a7d6542SBram Moolenaar assert_equal(1, outer) 918a7d6542SBram Moolenaar assert_equal(2, inner) 928a7d6542SBram Moolenaar } 938a7d6542SBram Moolenaar assert_equal(1, outer) 948a7d6542SBram Moolenaarenddef 958a7d6542SBram Moolenaar 968a7d6542SBram Moolenaarfunc Test_block_failure() 978a7d6542SBram Moolenaar call CheckDefFailure(['{', 'let inner = 1', '}', 'echo inner'], 'E1001:') 988a7d6542SBram Moolenaarendfunc 998a7d6542SBram Moolenaar 1008a7d6542SBram Moolenaardef ReturnString(): string 1018a7d6542SBram Moolenaar return 'string' 1028a7d6542SBram Moolenaarenddef 1038a7d6542SBram Moolenaar 1048a7d6542SBram Moolenaardef ReturnNumber(): number 1058a7d6542SBram Moolenaar return 123 1068a7d6542SBram Moolenaarenddef 1078a7d6542SBram Moolenaar 1088a7d6542SBram Moolenaardef Test_return_string() 1098a7d6542SBram Moolenaar assert_equal('string', ReturnString()) 1108a7d6542SBram Moolenaar assert_equal(123, ReturnNumber()) 1118a7d6542SBram Moolenaarenddef 1128a7d6542SBram Moolenaar 1138a7d6542SBram Moolenaarfunc Increment() 1148a7d6542SBram Moolenaar let g:counter += 1 1158a7d6542SBram Moolenaarendfunc 1168a7d6542SBram Moolenaar 1178a7d6542SBram Moolenaardef Test_call_ufunc_count() 1188a7d6542SBram Moolenaar g:counter = 1 1198a7d6542SBram Moolenaar Increment() 1208a7d6542SBram Moolenaar Increment() 1218a7d6542SBram Moolenaar Increment() 1228a7d6542SBram Moolenaar " works with and without :call 1238a7d6542SBram Moolenaar assert_equal(4, g:counter) 124b283a8a6SBram Moolenaar call assert_equal(4, g:counter) 1258a7d6542SBram Moolenaar unlet g:counter 1268a7d6542SBram Moolenaarenddef 1278a7d6542SBram Moolenaar 1288a7d6542SBram Moolenaardef MyVarargs(arg: string, ...rest: list<string>): string 1298a7d6542SBram Moolenaar let res = arg 1308a7d6542SBram Moolenaar for s in rest 1318a7d6542SBram Moolenaar res ..= ',' .. s 1328a7d6542SBram Moolenaar endfor 1338a7d6542SBram Moolenaar return res 1348a7d6542SBram Moolenaarenddef 1358a7d6542SBram Moolenaar 1368a7d6542SBram Moolenaardef Test_call_varargs() 1378a7d6542SBram Moolenaar assert_equal('one', MyVarargs('one')) 1388a7d6542SBram Moolenaar assert_equal('one,two', MyVarargs('one', 'two')) 1398a7d6542SBram Moolenaar assert_equal('one,two,three', MyVarargs('one', 'two', 'three')) 1408a7d6542SBram Moolenaarenddef 1418a7d6542SBram Moolenaar 142170fcfcfSBram Moolenaardef MyDefaultArgs(name = 'string'): string 143170fcfcfSBram Moolenaar return name 144170fcfcfSBram Moolenaarenddef 145170fcfcfSBram Moolenaar 146170fcfcfSBram Moolenaardef Test_call_default_args() 147170fcfcfSBram Moolenaar assert_equal('string', MyDefaultArgs()) 148170fcfcfSBram Moolenaar assert_equal('one', MyDefaultArgs('one')) 149170fcfcfSBram Moolenaar assert_fails('call MyDefaultArgs("one", "two")', 'E118:') 150170fcfcfSBram Moolenaarenddef 151170fcfcfSBram Moolenaar 152170fcfcfSBram Moolenaarfunc Test_call_default_args_from_func() 153170fcfcfSBram Moolenaar call assert_equal('string', MyDefaultArgs()) 154170fcfcfSBram Moolenaar call assert_equal('one', MyDefaultArgs('one')) 155170fcfcfSBram Moolenaar call assert_fails('call MyDefaultArgs("one", "two")', 'E118:') 156170fcfcfSBram Moolenaarendfunc 157170fcfcfSBram Moolenaar 158170fcfcfSBram Moolenaar" Default arg and varargs 159170fcfcfSBram Moolenaardef MyDefVarargs(one: string, two = 'foo', ...rest: list<string>): string 160170fcfcfSBram Moolenaar let res = one .. ',' .. two 161170fcfcfSBram Moolenaar for s in rest 162170fcfcfSBram Moolenaar res ..= ',' .. s 163170fcfcfSBram Moolenaar endfor 164170fcfcfSBram Moolenaar return res 165170fcfcfSBram Moolenaarenddef 166170fcfcfSBram Moolenaar 167170fcfcfSBram Moolenaardef Test_call_def_varargs() 168170fcfcfSBram Moolenaar call assert_fails('call MyDefVarargs()', 'E119:') 169170fcfcfSBram Moolenaar assert_equal('one,foo', MyDefVarargs('one')) 170170fcfcfSBram Moolenaar assert_equal('one,two', MyDefVarargs('one', 'two')) 171170fcfcfSBram Moolenaar assert_equal('one,two,three', MyDefVarargs('one', 'two', 'three')) 172170fcfcfSBram Moolenaarenddef 173170fcfcfSBram Moolenaar 174170fcfcfSBram Moolenaar 17526e117e9SBram Moolenaar"def Test_call_func_defined_later() 17626e117e9SBram Moolenaar" call assert_equal('one', DefineLater('one')) 17726e117e9SBram Moolenaar" call assert_fails('call NotDefined("one")', 'E99:') 17826e117e9SBram Moolenaar"enddef 17926e117e9SBram Moolenaar 18026e117e9SBram Moolenaarfunc DefineLater(arg) 18126e117e9SBram Moolenaar return a:arg 18226e117e9SBram Moolenaarendfunc 18326e117e9SBram Moolenaar 1848a7d6542SBram Moolenaardef Test_return_type_wrong() 185978d170bSBram Moolenaar CheckScriptFailure(['def Func(): number', 'return "a"', 'enddef'], 'expected number but got string') 186978d170bSBram Moolenaar CheckScriptFailure(['def Func(): string', 'return 1', 'enddef'], 'expected string but got number') 187978d170bSBram Moolenaar CheckScriptFailure(['def Func(): void', 'return "a"', 'enddef'], 'expected void but got string') 188978d170bSBram Moolenaar CheckScriptFailure(['def Func()', 'return "a"', 'enddef'], 'expected void but got string') 1898a7d6542SBram Moolenaarenddef 1908a7d6542SBram Moolenaar 191bfe12043SBram Moolenaardef Test_arg_type_wrong() 192bfe12043SBram Moolenaar CheckScriptFailure(['def Func3(items: list)', 'echo "a"', 'enddef'], 'E1008: Missing <type>') 193bfe12043SBram Moolenaarenddef 194bfe12043SBram Moolenaar 1958a7d6542SBram Moolenaardef Test_try_catch() 1968a7d6542SBram Moolenaar let l = [] 1978a7d6542SBram Moolenaar try 1988a7d6542SBram Moolenaar add(l, '1') 1998a7d6542SBram Moolenaar throw 'wrong' 2008a7d6542SBram Moolenaar add(l, '2') 2018a7d6542SBram Moolenaar catch 2028a7d6542SBram Moolenaar add(l, v:exception) 2038a7d6542SBram Moolenaar finally 2048a7d6542SBram Moolenaar add(l, '3') 2058a7d6542SBram Moolenaar endtry 2068a7d6542SBram Moolenaar assert_equal(['1', 'wrong', '3'], l) 2078a7d6542SBram Moolenaarenddef 2088a7d6542SBram Moolenaar 209*257cc5eeSBram Moolenaardef ThrowFromDef() 210*257cc5eeSBram Moolenaar throw 'getout' 211*257cc5eeSBram Moolenaarenddef 212*257cc5eeSBram Moolenaar 213*257cc5eeSBram Moolenaarfunc CatchInFunc() 214*257cc5eeSBram Moolenaar try 215*257cc5eeSBram Moolenaar call ThrowFromDef() 216*257cc5eeSBram Moolenaar catch 217*257cc5eeSBram Moolenaar let g:thrown_func = v:exception 218*257cc5eeSBram Moolenaar endtry 219*257cc5eeSBram Moolenaarendfunc 220*257cc5eeSBram Moolenaar 221*257cc5eeSBram Moolenaardef CatchInDef() 222*257cc5eeSBram Moolenaar try 223*257cc5eeSBram Moolenaar ThrowFromDef() 224*257cc5eeSBram Moolenaar catch 225*257cc5eeSBram Moolenaar g:thrown_def = v:exception 226*257cc5eeSBram Moolenaar endtry 227*257cc5eeSBram Moolenaarenddef 228*257cc5eeSBram Moolenaar 229*257cc5eeSBram Moolenaardef Test_try_catch_nested() 230*257cc5eeSBram Moolenaar CatchInFunc() 231*257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_func) 232*257cc5eeSBram Moolenaar 233*257cc5eeSBram Moolenaar CatchInDef() 234*257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_def) 235*257cc5eeSBram Moolenaarenddef 236*257cc5eeSBram Moolenaar 2378a7d6542SBram Moolenaarlet s:export_script_lines =<< trim END 2388a7d6542SBram Moolenaar vim9script 2398a7d6542SBram Moolenaar let name: string = 'bob' 2408a7d6542SBram Moolenaar def Concat(arg: string): string 2418a7d6542SBram Moolenaar return name .. arg 2428a7d6542SBram Moolenaar enddef 2438a7d6542SBram Moolenaar let g:result = Concat('bie') 2448a7d6542SBram Moolenaar let g:localname = name 2458a7d6542SBram Moolenaar 2468a7d6542SBram Moolenaar export const CONST = 1234 2478a7d6542SBram Moolenaar export let exported = 9876 2486e587dcbSBram Moolenaar export let exp_name = 'John' 2498a7d6542SBram Moolenaar export def Exported(): string 2508a7d6542SBram Moolenaar return 'Exported' 2518a7d6542SBram Moolenaar enddef 2528a7d6542SBram MoolenaarEND 2538a7d6542SBram Moolenaar 2548a7d6542SBram Moolenaardef Test_vim9script() 2558a7d6542SBram Moolenaar let import_script_lines =<< trim END 2568a7d6542SBram Moolenaar vim9script 2578a7d6542SBram Moolenaar import {exported, Exported} from './Xexport.vim' 2588a7d6542SBram Moolenaar g:imported = exported 2596e587dcbSBram Moolenaar exported += 3 2606e587dcbSBram Moolenaar g:imported_added = exported 2618a7d6542SBram Moolenaar g:imported_func = Exported() 2626e587dcbSBram Moolenaar 2636e587dcbSBram Moolenaar import {exp_name} from './Xexport.vim' 2646e587dcbSBram Moolenaar g:imported_name = exp_name 2656e587dcbSBram Moolenaar exp_name ..= ' Doe' 2666e587dcbSBram Moolenaar g:imported_name_appended = exp_name 2678a7d6542SBram Moolenaar END 2688a7d6542SBram Moolenaar 2698a7d6542SBram Moolenaar writefile(import_script_lines, 'Ximport.vim') 2708a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport.vim') 2718a7d6542SBram Moolenaar 2728a7d6542SBram Moolenaar source Ximport.vim 2738a7d6542SBram Moolenaar 2748a7d6542SBram Moolenaar assert_equal('bobbie', g:result) 2758a7d6542SBram Moolenaar assert_equal('bob', g:localname) 2768a7d6542SBram Moolenaar assert_equal(9876, g:imported) 2776e587dcbSBram Moolenaar assert_equal(9879, g:imported_added) 2788a7d6542SBram Moolenaar assert_equal('Exported', g:imported_func) 2796e587dcbSBram Moolenaar assert_equal('John', g:imported_name) 2806e587dcbSBram Moolenaar assert_equal('John Doe', g:imported_name_appended) 2818a7d6542SBram Moolenaar assert_false(exists('g:name')) 2828a7d6542SBram Moolenaar 2838a7d6542SBram Moolenaar unlet g:result 2848a7d6542SBram Moolenaar unlet g:localname 2858a7d6542SBram Moolenaar unlet g:imported 2866e587dcbSBram Moolenaar unlet g:imported_added 2878a7d6542SBram Moolenaar unlet g:imported_func 2886e587dcbSBram Moolenaar unlet g:imported_name g:imported_name_appended 2898a7d6542SBram Moolenaar delete('Ximport.vim') 2908a7d6542SBram Moolenaar delete('Xexport.vim') 2918a7d6542SBram Moolenaar 2928a7d6542SBram Moolenaar CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:') 2938a7d6542SBram Moolenaar CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:') 2948a7d6542SBram Moolenaarenddef 2958a7d6542SBram Moolenaar 2968a7d6542SBram Moolenaardef Test_vim9script_call() 2978a7d6542SBram Moolenaar let lines =<< trim END 2988a7d6542SBram Moolenaar vim9script 2998a7d6542SBram Moolenaar let var = '' 3008a7d6542SBram Moolenaar def MyFunc(arg: string) 3018a7d6542SBram Moolenaar var = arg 3028a7d6542SBram Moolenaar enddef 3038a7d6542SBram Moolenaar MyFunc('foobar') 3048a7d6542SBram Moolenaar assert_equal('foobar', var) 3058a7d6542SBram Moolenaar 3068a7d6542SBram Moolenaar let str = 'barfoo' 3078a7d6542SBram Moolenaar str->MyFunc() 3088a7d6542SBram Moolenaar assert_equal('barfoo', var) 3098a7d6542SBram Moolenaar 3108a7d6542SBram Moolenaar let g:value = 'value' 3118a7d6542SBram Moolenaar g:value->MyFunc() 3128a7d6542SBram Moolenaar assert_equal('value', var) 3138a7d6542SBram Moolenaar 3148a7d6542SBram Moolenaar let listvar = [] 3158a7d6542SBram Moolenaar def ListFunc(arg: list<number>) 3168a7d6542SBram Moolenaar listvar = arg 3178a7d6542SBram Moolenaar enddef 3188a7d6542SBram Moolenaar [1, 2, 3]->ListFunc() 3198a7d6542SBram Moolenaar assert_equal([1, 2, 3], listvar) 3208a7d6542SBram Moolenaar 3218a7d6542SBram Moolenaar let dictvar = {} 3228a7d6542SBram Moolenaar def DictFunc(arg: dict<number>) 3238a7d6542SBram Moolenaar dictvar = arg 3248a7d6542SBram Moolenaar enddef 3258a7d6542SBram Moolenaar {'a': 1, 'b': 2}->DictFunc() 3268a7d6542SBram Moolenaar assert_equal(#{a: 1, b: 2}, dictvar) 3278a7d6542SBram Moolenaar #{a: 3, b: 4}->DictFunc() 3288a7d6542SBram Moolenaar assert_equal(#{a: 3, b: 4}, dictvar) 3298a7d6542SBram Moolenaar END 3308a7d6542SBram Moolenaar writefile(lines, 'Xcall.vim') 3318a7d6542SBram Moolenaar source Xcall.vim 3328a7d6542SBram Moolenaar delete('Xcall.vim') 3338a7d6542SBram Moolenaarenddef 3348a7d6542SBram Moolenaar 3358a7d6542SBram Moolenaardef Test_vim9script_call_fail_decl() 3368a7d6542SBram Moolenaar let lines =<< trim END 3378a7d6542SBram Moolenaar vim9script 3388a7d6542SBram Moolenaar let var = '' 3398a7d6542SBram Moolenaar def MyFunc(arg: string) 3408a7d6542SBram Moolenaar let var = 123 3418a7d6542SBram Moolenaar enddef 3428a7d6542SBram Moolenaar END 3438a7d6542SBram Moolenaar writefile(lines, 'Xcall_decl.vim') 3448a7d6542SBram Moolenaar assert_fails('source Xcall_decl.vim', 'E1054:') 3458a7d6542SBram Moolenaar delete('Xcall_decl.vim') 3468a7d6542SBram Moolenaarenddef 3478a7d6542SBram Moolenaar 3488a7d6542SBram Moolenaardef Test_vim9script_call_fail_const() 3498a7d6542SBram Moolenaar let lines =<< trim END 3508a7d6542SBram Moolenaar vim9script 3518a7d6542SBram Moolenaar const var = '' 3528a7d6542SBram Moolenaar def MyFunc(arg: string) 3538a7d6542SBram Moolenaar var = 'asdf' 3548a7d6542SBram Moolenaar enddef 3558a7d6542SBram Moolenaar END 3568a7d6542SBram Moolenaar writefile(lines, 'Xcall_const.vim') 3578a7d6542SBram Moolenaar assert_fails('source Xcall_const.vim', 'E46:') 3588a7d6542SBram Moolenaar delete('Xcall_const.vim') 3598a7d6542SBram Moolenaarenddef 3608a7d6542SBram Moolenaar 3618a7d6542SBram Moolenaardef Test_vim9script_reload() 3628a7d6542SBram Moolenaar let lines =<< trim END 3638a7d6542SBram Moolenaar vim9script 3648a7d6542SBram Moolenaar const var = '' 3658a7d6542SBram Moolenaar let valone = 1234 3668a7d6542SBram Moolenaar def MyFunc(arg: string) 3678a7d6542SBram Moolenaar valone = 5678 3688a7d6542SBram Moolenaar enddef 3698a7d6542SBram Moolenaar END 3708a7d6542SBram Moolenaar let morelines =<< trim END 3718a7d6542SBram Moolenaar let valtwo = 222 3728a7d6542SBram Moolenaar export def GetValtwo(): number 3738a7d6542SBram Moolenaar return valtwo 3748a7d6542SBram Moolenaar enddef 3758a7d6542SBram Moolenaar END 3768a7d6542SBram Moolenaar writefile(lines + morelines, 'Xreload.vim') 3778a7d6542SBram Moolenaar source Xreload.vim 3788a7d6542SBram Moolenaar source Xreload.vim 3798a7d6542SBram Moolenaar source Xreload.vim 3808a7d6542SBram Moolenaar 3818a7d6542SBram Moolenaar let testlines =<< trim END 3828a7d6542SBram Moolenaar vim9script 3838a7d6542SBram Moolenaar def TheFunc() 3848a7d6542SBram Moolenaar import GetValtwo from './Xreload.vim' 3858a7d6542SBram Moolenaar assert_equal(222, GetValtwo()) 3868a7d6542SBram Moolenaar enddef 3878a7d6542SBram Moolenaar TheFunc() 3888a7d6542SBram Moolenaar END 3898a7d6542SBram Moolenaar writefile(testlines, 'Ximport.vim') 3908a7d6542SBram Moolenaar source Ximport.vim 3918a7d6542SBram Moolenaar 3928a7d6542SBram Moolenaar " test that when not using "morelines" valtwo is still defined 3938a7d6542SBram Moolenaar " need to source Xreload.vim again, import doesn't reload a script 3948a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 3958a7d6542SBram Moolenaar source Xreload.vim 3968a7d6542SBram Moolenaar source Ximport.vim 3978a7d6542SBram Moolenaar 3988a7d6542SBram Moolenaar " cannot declare a var twice 3998a7d6542SBram Moolenaar lines =<< trim END 4008a7d6542SBram Moolenaar vim9script 4018a7d6542SBram Moolenaar let valone = 1234 4028a7d6542SBram Moolenaar let valone = 5678 4038a7d6542SBram Moolenaar END 4048a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 4058a7d6542SBram Moolenaar assert_fails('source Xreload.vim', 'E1041:') 4068a7d6542SBram Moolenaar 4078a7d6542SBram Moolenaar delete('Xreload.vim') 4088a7d6542SBram Moolenaar delete('Ximport.vim') 4098a7d6542SBram Moolenaarenddef 4108a7d6542SBram Moolenaar 4118a7d6542SBram Moolenaardef Test_import_absolute() 4128a7d6542SBram Moolenaar let import_lines = [ 4138a7d6542SBram Moolenaar \ 'vim9script', 4148a7d6542SBram Moolenaar \ 'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"', 415b283a8a6SBram Moolenaar \ 'def UseExported()', 4168a7d6542SBram Moolenaar \ ' g:imported_abs = exported', 4174e12a5dfSBram Moolenaar \ ' exported = 8888', 4184e12a5dfSBram Moolenaar \ ' g:imported_after = exported', 419b283a8a6SBram Moolenaar \ 'enddef', 420b283a8a6SBram Moolenaar \ 'UseExported()', 4214e12a5dfSBram Moolenaar \ 'g:import_disassembled = execute("disass UseExported")', 4228a7d6542SBram Moolenaar \ ] 4238a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_abs.vim') 4248a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport_abs.vim') 4258a7d6542SBram Moolenaar 4268a7d6542SBram Moolenaar source Ximport_abs.vim 4278a7d6542SBram Moolenaar 4288a7d6542SBram Moolenaar assert_equal(9876, g:imported_abs) 4294e12a5dfSBram Moolenaar assert_equal(8888, g:imported_after) 430b283a8a6SBram Moolenaar assert_match('<SNR>\d\+_UseExported.*' 431b283a8a6SBram Moolenaar \ .. 'g:imported_abs = exported.*' 432b283a8a6SBram Moolenaar \ .. '0 LOADSCRIPT exported from .*Xexport_abs.vim.*' 4334e12a5dfSBram Moolenaar \ .. '1 STOREG g:imported_abs.*' 4344e12a5dfSBram Moolenaar \ .. 'exported = 8888.*' 4354e12a5dfSBram Moolenaar \ .. '3 STORESCRIPT exported in .*Xexport_abs.vim.*' 4364e12a5dfSBram Moolenaar \ .. 'g:imported_after = exported.*' 4374e12a5dfSBram Moolenaar \ .. '4 LOADSCRIPT exported from .*Xexport_abs.vim.*' 4384e12a5dfSBram Moolenaar \ .. '5 STOREG g:imported_after.*' 4394e12a5dfSBram Moolenaar \, g:import_disassembled) 4408a7d6542SBram Moolenaar unlet g:imported_abs 4414e12a5dfSBram Moolenaar unlet g:import_disassembled 4428a7d6542SBram Moolenaar 4438a7d6542SBram Moolenaar delete('Ximport_abs.vim') 4448a7d6542SBram Moolenaar delete('Xexport_abs.vim') 4458a7d6542SBram Moolenaarenddef 4468a7d6542SBram Moolenaar 4478a7d6542SBram Moolenaardef Test_import_rtp() 4488a7d6542SBram Moolenaar let import_lines = [ 4498a7d6542SBram Moolenaar \ 'vim9script', 4508a7d6542SBram Moolenaar \ 'import exported from "Xexport_rtp.vim"', 4518a7d6542SBram Moolenaar \ 'g:imported_rtp = exported', 4528a7d6542SBram Moolenaar \ ] 4538a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_rtp.vim') 4548a7d6542SBram Moolenaar mkdir('import') 4558a7d6542SBram Moolenaar writefile(s:export_script_lines, 'import/Xexport_rtp.vim') 4568a7d6542SBram Moolenaar 4578a7d6542SBram Moolenaar let save_rtp = &rtp 4588a7d6542SBram Moolenaar &rtp = getcwd() 4598a7d6542SBram Moolenaar source Ximport_rtp.vim 4608a7d6542SBram Moolenaar &rtp = save_rtp 4618a7d6542SBram Moolenaar 4628a7d6542SBram Moolenaar assert_equal(9876, g:imported_rtp) 4638a7d6542SBram Moolenaar unlet g:imported_rtp 4648a7d6542SBram Moolenaar 4658a7d6542SBram Moolenaar delete('Ximport_rtp.vim') 4668a7d6542SBram Moolenaar delete('import/Xexport_rtp.vim') 4678a7d6542SBram Moolenaar delete('import', 'd') 4688a7d6542SBram Moolenaarenddef 4698a7d6542SBram Moolenaar 4708a7d6542SBram Moolenaardef Test_fixed_size_list() 4718a7d6542SBram Moolenaar " will be allocated as one piece of memory, check that changes work 4728a7d6542SBram Moolenaar let l = [1, 2, 3, 4] 4738a7d6542SBram Moolenaar l->remove(0) 4748a7d6542SBram Moolenaar l->add(5) 4758a7d6542SBram Moolenaar l->insert(99, 1) 4760f18b6d1SBram Moolenaar assert_equal([2, 99, 3, 4, 5], l) 4778a7d6542SBram Moolenaarenddef 4788a7d6542SBram Moolenaar 479673660abSBram Moolenaar" Test that inside :function a Python function can be defined, :def is not 480673660abSBram Moolenaar" recognized. 481673660abSBram Moolenaarfunc Test_function_python() 482673660abSBram Moolenaar CheckFeature python3 483673660abSBram Moolenaar let py = 'python3' 484673660abSBram Moolenaar execute py "<< EOF" 485673660abSBram Moolenaardef do_something(): 486673660abSBram Moolenaar return 1 487673660abSBram MoolenaarEOF 488673660abSBram Moolenaarendfunc 489673660abSBram Moolenaar 490158906cfSBram Moolenaardef IfElse(what: number): string 491158906cfSBram Moolenaar let res = '' 492158906cfSBram Moolenaar if what == 1 493158906cfSBram Moolenaar res = "one" 494158906cfSBram Moolenaar elseif what == 2 495158906cfSBram Moolenaar res = "two" 496a259d8d3SBram Moolenaar else 497158906cfSBram Moolenaar res = "three" 498a259d8d3SBram Moolenaar endif 499158906cfSBram Moolenaar return res 500a259d8d3SBram Moolenaarenddef 501a259d8d3SBram Moolenaar 502158906cfSBram Moolenaardef Test_if_elseif_else() 503158906cfSBram Moolenaar assert_equal('one', IfElse(1)) 504158906cfSBram Moolenaar assert_equal('two', IfElse(2)) 505158906cfSBram Moolenaar assert_equal('three', IfElse(3)) 5060f18b6d1SBram Moolenaarenddef 5070f18b6d1SBram Moolenaar 50863ce4849SBram Moolenaardef Test_delfunc() 50963ce4849SBram Moolenaar let lines =<< trim END 51063ce4849SBram Moolenaar vim9script 51163ce4849SBram Moolenaar def GoneSoon() 51263ce4849SBram Moolenaar echo 'hello' 51363ce4849SBram Moolenaar enddef 51463ce4849SBram Moolenaar 51563ce4849SBram Moolenaar def CallGoneSoon() 51663ce4849SBram Moolenaar GoneSoon() 51763ce4849SBram Moolenaar enddef 51863ce4849SBram Moolenaar 51963ce4849SBram Moolenaar delfunc GoneSoon 52063ce4849SBram Moolenaar CallGoneSoon() 52163ce4849SBram Moolenaar END 52263ce4849SBram Moolenaar writefile(lines, 'XToDelFunc') 52363ce4849SBram Moolenaar assert_fails('so XToDelFunc', 'E933') 52463ce4849SBram Moolenaar assert_fails('so XToDelFunc', 'E933') 52563ce4849SBram Moolenaar 52663ce4849SBram Moolenaar delete('XToDelFunc') 52763ce4849SBram Moolenaarenddef 52863ce4849SBram Moolenaar 5298a7d6542SBram Moolenaar 5308a7d6542SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker 531