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 2098a7d6542SBram Moolenaarlet s:export_script_lines =<< trim END 2108a7d6542SBram Moolenaar vim9script 2118a7d6542SBram Moolenaar let name: string = 'bob' 2128a7d6542SBram Moolenaar def Concat(arg: string): string 2138a7d6542SBram Moolenaar return name .. arg 2148a7d6542SBram Moolenaar enddef 2158a7d6542SBram Moolenaar let g:result = Concat('bie') 2168a7d6542SBram Moolenaar let g:localname = name 2178a7d6542SBram Moolenaar 2188a7d6542SBram Moolenaar export const CONST = 1234 2198a7d6542SBram Moolenaar export let exported = 9876 2206e587dcbSBram Moolenaar export let exp_name = 'John' 2218a7d6542SBram Moolenaar export def Exported(): string 2228a7d6542SBram Moolenaar return 'Exported' 2238a7d6542SBram Moolenaar enddef 2248a7d6542SBram MoolenaarEND 2258a7d6542SBram Moolenaar 2268a7d6542SBram Moolenaardef Test_vim9script() 2278a7d6542SBram Moolenaar let import_script_lines =<< trim END 2288a7d6542SBram Moolenaar vim9script 2298a7d6542SBram Moolenaar import {exported, Exported} from './Xexport.vim' 2308a7d6542SBram Moolenaar g:imported = exported 2316e587dcbSBram Moolenaar exported += 3 2326e587dcbSBram Moolenaar g:imported_added = exported 2338a7d6542SBram Moolenaar g:imported_func = Exported() 2346e587dcbSBram Moolenaar 2356e587dcbSBram Moolenaar import {exp_name} from './Xexport.vim' 2366e587dcbSBram Moolenaar g:imported_name = exp_name 2376e587dcbSBram Moolenaar exp_name ..= ' Doe' 2386e587dcbSBram Moolenaar g:imported_name_appended = exp_name 2398a7d6542SBram Moolenaar END 2408a7d6542SBram Moolenaar 2418a7d6542SBram Moolenaar writefile(import_script_lines, 'Ximport.vim') 2428a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport.vim') 2438a7d6542SBram Moolenaar 2448a7d6542SBram Moolenaar source Ximport.vim 2458a7d6542SBram Moolenaar 2468a7d6542SBram Moolenaar assert_equal('bobbie', g:result) 2478a7d6542SBram Moolenaar assert_equal('bob', g:localname) 2488a7d6542SBram Moolenaar assert_equal(9876, g:imported) 2496e587dcbSBram Moolenaar assert_equal(9879, g:imported_added) 2508a7d6542SBram Moolenaar assert_equal('Exported', g:imported_func) 2516e587dcbSBram Moolenaar assert_equal('John', g:imported_name) 2526e587dcbSBram Moolenaar assert_equal('John Doe', g:imported_name_appended) 2538a7d6542SBram Moolenaar assert_false(exists('g:name')) 2548a7d6542SBram Moolenaar 2558a7d6542SBram Moolenaar unlet g:result 2568a7d6542SBram Moolenaar unlet g:localname 2578a7d6542SBram Moolenaar unlet g:imported 2586e587dcbSBram Moolenaar unlet g:imported_added 2598a7d6542SBram Moolenaar unlet g:imported_func 2606e587dcbSBram Moolenaar unlet g:imported_name g:imported_name_appended 2618a7d6542SBram Moolenaar delete('Ximport.vim') 2628a7d6542SBram Moolenaar delete('Xexport.vim') 2638a7d6542SBram Moolenaar 2648a7d6542SBram Moolenaar CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:') 2658a7d6542SBram Moolenaar CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:') 2668a7d6542SBram Moolenaarenddef 2678a7d6542SBram Moolenaar 2688a7d6542SBram Moolenaardef Test_vim9script_call() 2698a7d6542SBram Moolenaar let lines =<< trim END 2708a7d6542SBram Moolenaar vim9script 2718a7d6542SBram Moolenaar let var = '' 2728a7d6542SBram Moolenaar def MyFunc(arg: string) 2738a7d6542SBram Moolenaar var = arg 2748a7d6542SBram Moolenaar enddef 2758a7d6542SBram Moolenaar MyFunc('foobar') 2768a7d6542SBram Moolenaar assert_equal('foobar', var) 2778a7d6542SBram Moolenaar 2788a7d6542SBram Moolenaar let str = 'barfoo' 2798a7d6542SBram Moolenaar str->MyFunc() 2808a7d6542SBram Moolenaar assert_equal('barfoo', var) 2818a7d6542SBram Moolenaar 2828a7d6542SBram Moolenaar let g:value = 'value' 2838a7d6542SBram Moolenaar g:value->MyFunc() 2848a7d6542SBram Moolenaar assert_equal('value', var) 2858a7d6542SBram Moolenaar 2868a7d6542SBram Moolenaar let listvar = [] 2878a7d6542SBram Moolenaar def ListFunc(arg: list<number>) 2888a7d6542SBram Moolenaar listvar = arg 2898a7d6542SBram Moolenaar enddef 2908a7d6542SBram Moolenaar [1, 2, 3]->ListFunc() 2918a7d6542SBram Moolenaar assert_equal([1, 2, 3], listvar) 2928a7d6542SBram Moolenaar 2938a7d6542SBram Moolenaar let dictvar = {} 2948a7d6542SBram Moolenaar def DictFunc(arg: dict<number>) 2958a7d6542SBram Moolenaar dictvar = arg 2968a7d6542SBram Moolenaar enddef 2978a7d6542SBram Moolenaar {'a': 1, 'b': 2}->DictFunc() 2988a7d6542SBram Moolenaar assert_equal(#{a: 1, b: 2}, dictvar) 2998a7d6542SBram Moolenaar #{a: 3, b: 4}->DictFunc() 3008a7d6542SBram Moolenaar assert_equal(#{a: 3, b: 4}, dictvar) 3018a7d6542SBram Moolenaar END 3028a7d6542SBram Moolenaar writefile(lines, 'Xcall.vim') 3038a7d6542SBram Moolenaar source Xcall.vim 3048a7d6542SBram Moolenaar delete('Xcall.vim') 3058a7d6542SBram Moolenaarenddef 3068a7d6542SBram Moolenaar 3078a7d6542SBram Moolenaardef Test_vim9script_call_fail_decl() 3088a7d6542SBram Moolenaar let lines =<< trim END 3098a7d6542SBram Moolenaar vim9script 3108a7d6542SBram Moolenaar let var = '' 3118a7d6542SBram Moolenaar def MyFunc(arg: string) 3128a7d6542SBram Moolenaar let var = 123 3138a7d6542SBram Moolenaar enddef 3148a7d6542SBram Moolenaar END 3158a7d6542SBram Moolenaar writefile(lines, 'Xcall_decl.vim') 3168a7d6542SBram Moolenaar assert_fails('source Xcall_decl.vim', 'E1054:') 3178a7d6542SBram Moolenaar delete('Xcall_decl.vim') 3188a7d6542SBram Moolenaarenddef 3198a7d6542SBram Moolenaar 3208a7d6542SBram Moolenaardef Test_vim9script_call_fail_const() 3218a7d6542SBram Moolenaar let lines =<< trim END 3228a7d6542SBram Moolenaar vim9script 3238a7d6542SBram Moolenaar const var = '' 3248a7d6542SBram Moolenaar def MyFunc(arg: string) 3258a7d6542SBram Moolenaar var = 'asdf' 3268a7d6542SBram Moolenaar enddef 3278a7d6542SBram Moolenaar END 3288a7d6542SBram Moolenaar writefile(lines, 'Xcall_const.vim') 3298a7d6542SBram Moolenaar assert_fails('source Xcall_const.vim', 'E46:') 3308a7d6542SBram Moolenaar delete('Xcall_const.vim') 3318a7d6542SBram Moolenaarenddef 3328a7d6542SBram Moolenaar 3338a7d6542SBram Moolenaardef Test_vim9script_reload() 3348a7d6542SBram Moolenaar let lines =<< trim END 3358a7d6542SBram Moolenaar vim9script 3368a7d6542SBram Moolenaar const var = '' 3378a7d6542SBram Moolenaar let valone = 1234 3388a7d6542SBram Moolenaar def MyFunc(arg: string) 3398a7d6542SBram Moolenaar valone = 5678 3408a7d6542SBram Moolenaar enddef 3418a7d6542SBram Moolenaar END 3428a7d6542SBram Moolenaar let morelines =<< trim END 3438a7d6542SBram Moolenaar let valtwo = 222 3448a7d6542SBram Moolenaar export def GetValtwo(): number 3458a7d6542SBram Moolenaar return valtwo 3468a7d6542SBram Moolenaar enddef 3478a7d6542SBram Moolenaar END 3488a7d6542SBram Moolenaar writefile(lines + morelines, 'Xreload.vim') 3498a7d6542SBram Moolenaar source Xreload.vim 3508a7d6542SBram Moolenaar source Xreload.vim 3518a7d6542SBram Moolenaar source Xreload.vim 3528a7d6542SBram Moolenaar 3538a7d6542SBram Moolenaar let testlines =<< trim END 3548a7d6542SBram Moolenaar vim9script 3558a7d6542SBram Moolenaar def TheFunc() 3568a7d6542SBram Moolenaar import GetValtwo from './Xreload.vim' 3578a7d6542SBram Moolenaar assert_equal(222, GetValtwo()) 3588a7d6542SBram Moolenaar enddef 3598a7d6542SBram Moolenaar TheFunc() 3608a7d6542SBram Moolenaar END 3618a7d6542SBram Moolenaar writefile(testlines, 'Ximport.vim') 3628a7d6542SBram Moolenaar source Ximport.vim 3638a7d6542SBram Moolenaar 3648a7d6542SBram Moolenaar " test that when not using "morelines" valtwo is still defined 3658a7d6542SBram Moolenaar " need to source Xreload.vim again, import doesn't reload a script 3668a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 3678a7d6542SBram Moolenaar source Xreload.vim 3688a7d6542SBram Moolenaar source Ximport.vim 3698a7d6542SBram Moolenaar 3708a7d6542SBram Moolenaar " cannot declare a var twice 3718a7d6542SBram Moolenaar lines =<< trim END 3728a7d6542SBram Moolenaar vim9script 3738a7d6542SBram Moolenaar let valone = 1234 3748a7d6542SBram Moolenaar let valone = 5678 3758a7d6542SBram Moolenaar END 3768a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 3778a7d6542SBram Moolenaar assert_fails('source Xreload.vim', 'E1041:') 3788a7d6542SBram Moolenaar 3798a7d6542SBram Moolenaar delete('Xreload.vim') 3808a7d6542SBram Moolenaar delete('Ximport.vim') 3818a7d6542SBram Moolenaarenddef 3828a7d6542SBram Moolenaar 3838a7d6542SBram Moolenaardef Test_import_absolute() 3848a7d6542SBram Moolenaar let import_lines = [ 3858a7d6542SBram Moolenaar \ 'vim9script', 3868a7d6542SBram Moolenaar \ 'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"', 387b283a8a6SBram Moolenaar \ 'def UseExported()', 3888a7d6542SBram Moolenaar \ ' g:imported_abs = exported', 3894e12a5dfSBram Moolenaar \ ' exported = 8888', 3904e12a5dfSBram Moolenaar \ ' g:imported_after = exported', 391b283a8a6SBram Moolenaar \ 'enddef', 392b283a8a6SBram Moolenaar \ 'UseExported()', 3934e12a5dfSBram Moolenaar \ 'g:import_disassembled = execute("disass UseExported")', 3948a7d6542SBram Moolenaar \ ] 3958a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_abs.vim') 3968a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport_abs.vim') 3978a7d6542SBram Moolenaar 3988a7d6542SBram Moolenaar source Ximport_abs.vim 3998a7d6542SBram Moolenaar 4008a7d6542SBram Moolenaar assert_equal(9876, g:imported_abs) 4014e12a5dfSBram Moolenaar assert_equal(8888, g:imported_after) 402b283a8a6SBram Moolenaar assert_match('<SNR>\d\+_UseExported.*' 403b283a8a6SBram Moolenaar \ .. 'g:imported_abs = exported.*' 404b283a8a6SBram Moolenaar \ .. '0 LOADSCRIPT exported from .*Xexport_abs.vim.*' 4054e12a5dfSBram Moolenaar \ .. '1 STOREG g:imported_abs.*' 4064e12a5dfSBram Moolenaar \ .. 'exported = 8888.*' 4074e12a5dfSBram Moolenaar \ .. '3 STORESCRIPT exported in .*Xexport_abs.vim.*' 4084e12a5dfSBram Moolenaar \ .. 'g:imported_after = exported.*' 4094e12a5dfSBram Moolenaar \ .. '4 LOADSCRIPT exported from .*Xexport_abs.vim.*' 4104e12a5dfSBram Moolenaar \ .. '5 STOREG g:imported_after.*' 4114e12a5dfSBram Moolenaar \, g:import_disassembled) 4128a7d6542SBram Moolenaar unlet g:imported_abs 4134e12a5dfSBram Moolenaar unlet g:import_disassembled 4148a7d6542SBram Moolenaar 4158a7d6542SBram Moolenaar delete('Ximport_abs.vim') 4168a7d6542SBram Moolenaar delete('Xexport_abs.vim') 4178a7d6542SBram Moolenaarenddef 4188a7d6542SBram Moolenaar 4198a7d6542SBram Moolenaardef Test_import_rtp() 4208a7d6542SBram Moolenaar let import_lines = [ 4218a7d6542SBram Moolenaar \ 'vim9script', 4228a7d6542SBram Moolenaar \ 'import exported from "Xexport_rtp.vim"', 4238a7d6542SBram Moolenaar \ 'g:imported_rtp = exported', 4248a7d6542SBram Moolenaar \ ] 4258a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_rtp.vim') 4268a7d6542SBram Moolenaar mkdir('import') 4278a7d6542SBram Moolenaar writefile(s:export_script_lines, 'import/Xexport_rtp.vim') 4288a7d6542SBram Moolenaar 4298a7d6542SBram Moolenaar let save_rtp = &rtp 4308a7d6542SBram Moolenaar &rtp = getcwd() 4318a7d6542SBram Moolenaar source Ximport_rtp.vim 4328a7d6542SBram Moolenaar &rtp = save_rtp 4338a7d6542SBram Moolenaar 4348a7d6542SBram Moolenaar assert_equal(9876, g:imported_rtp) 4358a7d6542SBram Moolenaar unlet g:imported_rtp 4368a7d6542SBram Moolenaar 4378a7d6542SBram Moolenaar delete('Ximport_rtp.vim') 4388a7d6542SBram Moolenaar delete('import/Xexport_rtp.vim') 4398a7d6542SBram Moolenaar delete('import', 'd') 4408a7d6542SBram Moolenaarenddef 4418a7d6542SBram Moolenaar 4428a7d6542SBram Moolenaardef Test_fixed_size_list() 4438a7d6542SBram Moolenaar " will be allocated as one piece of memory, check that changes work 4448a7d6542SBram Moolenaar let l = [1, 2, 3, 4] 4458a7d6542SBram Moolenaar l->remove(0) 4468a7d6542SBram Moolenaar l->add(5) 4478a7d6542SBram Moolenaar l->insert(99, 1) 4480f18b6d1SBram Moolenaar assert_equal([2, 99, 3, 4, 5], l) 4498a7d6542SBram Moolenaarenddef 4508a7d6542SBram Moolenaar 451673660abSBram Moolenaar" Test that inside :function a Python function can be defined, :def is not 452673660abSBram Moolenaar" recognized. 453673660abSBram Moolenaarfunc Test_function_python() 454673660abSBram Moolenaar CheckFeature python3 455673660abSBram Moolenaar let py = 'python3' 456673660abSBram Moolenaar execute py "<< EOF" 457673660abSBram Moolenaardef do_something(): 458673660abSBram Moolenaar return 1 459673660abSBram MoolenaarEOF 460673660abSBram Moolenaarendfunc 461673660abSBram Moolenaar 462158906cfSBram Moolenaardef IfElse(what: number): string 463158906cfSBram Moolenaar let res = '' 464158906cfSBram Moolenaar if what == 1 465158906cfSBram Moolenaar res = "one" 466158906cfSBram Moolenaar elseif what == 2 467158906cfSBram Moolenaar res = "two" 468a259d8d3SBram Moolenaar else 469158906cfSBram Moolenaar res = "three" 470a259d8d3SBram Moolenaar endif 471158906cfSBram Moolenaar return res 472a259d8d3SBram Moolenaarenddef 473a259d8d3SBram Moolenaar 474158906cfSBram Moolenaardef Test_if_elseif_else() 475158906cfSBram Moolenaar assert_equal('one', IfElse(1)) 476158906cfSBram Moolenaar assert_equal('two', IfElse(2)) 477158906cfSBram Moolenaar assert_equal('three', IfElse(3)) 4780f18b6d1SBram Moolenaarenddef 4790f18b6d1SBram Moolenaar 480*63ce4849SBram Moolenaardef Test_delfunc() 481*63ce4849SBram Moolenaar let lines =<< trim END 482*63ce4849SBram Moolenaar vim9script 483*63ce4849SBram Moolenaar def GoneSoon() 484*63ce4849SBram Moolenaar echo 'hello' 485*63ce4849SBram Moolenaar enddef 486*63ce4849SBram Moolenaar 487*63ce4849SBram Moolenaar def CallGoneSoon() 488*63ce4849SBram Moolenaar GoneSoon() 489*63ce4849SBram Moolenaar enddef 490*63ce4849SBram Moolenaar 491*63ce4849SBram Moolenaar delfunc GoneSoon 492*63ce4849SBram Moolenaar CallGoneSoon() 493*63ce4849SBram Moolenaar END 494*63ce4849SBram Moolenaar writefile(lines, 'XToDelFunc') 495*63ce4849SBram Moolenaar assert_fails('so XToDelFunc', 'E933') 496*63ce4849SBram Moolenaar assert_fails('so XToDelFunc', 'E933') 497*63ce4849SBram Moolenaar 498*63ce4849SBram Moolenaar delete('XToDelFunc') 499*63ce4849SBram Moolenaarenddef 500*63ce4849SBram Moolenaar 5018a7d6542SBram Moolenaar 5028a7d6542SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker 503