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 32401d9ffbSBram Moolenaarlet g:existing = 'yes' 336e587dcbSBram Moolenaar 348a7d6542SBram Moolenaardef Test_assignment() 358a7d6542SBram Moolenaar let bool1: bool = true 368a7d6542SBram Moolenaar assert_equal(v:true, bool1) 378a7d6542SBram Moolenaar let bool2: bool = false 388a7d6542SBram Moolenaar assert_equal(v:false, bool2) 398a7d6542SBram Moolenaar 408a7d6542SBram Moolenaar let list1: list<string> = ['sdf', 'asdf'] 418a7d6542SBram Moolenaar let list2: list<number> = [1, 2, 3] 428a7d6542SBram Moolenaar 438a7d6542SBram Moolenaar " TODO: does not work yet 448a7d6542SBram Moolenaar " let listS: list<string> = [] 458a7d6542SBram Moolenaar " let listN: list<number> = [] 468a7d6542SBram Moolenaar 478a7d6542SBram Moolenaar let dict1: dict<string> = #{key: 'value'} 488a7d6542SBram Moolenaar let dict2: dict<number> = #{one: 1, two: 2} 49b283a8a6SBram Moolenaar 50401d9ffbSBram Moolenaar g:newvar = 'new' 51401d9ffbSBram Moolenaar assert_equal('new', g:newvar) 52401d9ffbSBram Moolenaar 53401d9ffbSBram Moolenaar assert_equal('yes', g:existing) 54401d9ffbSBram Moolenaar g:existing = 'no' 55401d9ffbSBram Moolenaar assert_equal('no', g:existing) 56401d9ffbSBram Moolenaar 57b283a8a6SBram Moolenaar v:char = 'abc' 586e587dcbSBram Moolenaar assert_equal('abc', v:char) 59b283a8a6SBram Moolenaar 60b283a8a6SBram Moolenaar $ENVVAR = 'foobar' 616e587dcbSBram Moolenaar assert_equal('foobar', $ENVVAR) 62b283a8a6SBram Moolenaar $ENVVAR = '' 636e587dcbSBram Moolenaar 64*fd1823e0SBram Moolenaar s:appendToMe ..= 'yyy' 65*fd1823e0SBram Moolenaar assert_equal('xxxyyy', s:appendToMe) 66*fd1823e0SBram Moolenaar s:addToMe += 222 67*fd1823e0SBram Moolenaar assert_equal(333, s:addToMe) 688a7d6542SBram Moolenaarenddef 698a7d6542SBram Moolenaar 708a7d6542SBram Moolenaarfunc Test_assignment_failure() 718a7d6542SBram Moolenaar call CheckDefFailure(['let var=234'], 'E1004:') 728a7d6542SBram Moolenaar call CheckDefFailure(['let var =234'], 'E1004:') 738a7d6542SBram Moolenaar call CheckDefFailure(['let var= 234'], 'E1004:') 748a7d6542SBram Moolenaar 758a7d6542SBram Moolenaar call CheckDefFailure(['let true = 1'], 'E1034:') 768a7d6542SBram Moolenaar call CheckDefFailure(['let false = 1'], 'E1034:') 778a7d6542SBram Moolenaar 788a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<string> = [123]'], 'expected list<string> but got list<number>') 798a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<number> = ["xx"]'], 'expected list<number> but got list<string>') 808a7d6542SBram Moolenaar 818a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<string> = #{key: 123}'], 'expected dict<string> but got dict<number>') 828a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<number> = #{key: "xx"}'], 'expected dict<number> but got dict<string>') 838a7d6542SBram Moolenaar 848a7d6542SBram Moolenaar call CheckDefFailure(['let var = feedkeys("0")'], 'E1031:') 858a7d6542SBram Moolenaar call CheckDefFailure(['let var: number = feedkeys("0")'], 'expected number but got void') 868a7d6542SBram Moolenaarendfunc 878a7d6542SBram Moolenaar 888a7d6542SBram Moolenaarfunc Test_const() 898a7d6542SBram Moolenaar call CheckDefFailure(['const var = 234', 'var = 99'], 'E1018:') 908a7d6542SBram Moolenaar call CheckDefFailure(['const one = 234', 'let one = 99'], 'E1017:') 918a7d6542SBram Moolenaar call CheckDefFailure(['const two'], 'E1021:') 928a7d6542SBram Moolenaarendfunc 938a7d6542SBram Moolenaar 948a7d6542SBram Moolenaardef Test_block() 958a7d6542SBram Moolenaar let outer = 1 968a7d6542SBram Moolenaar { 978a7d6542SBram Moolenaar let inner = 2 988a7d6542SBram Moolenaar assert_equal(1, outer) 998a7d6542SBram Moolenaar assert_equal(2, inner) 1008a7d6542SBram Moolenaar } 1018a7d6542SBram Moolenaar assert_equal(1, outer) 1028a7d6542SBram Moolenaarenddef 1038a7d6542SBram Moolenaar 1048a7d6542SBram Moolenaarfunc Test_block_failure() 1058a7d6542SBram Moolenaar call CheckDefFailure(['{', 'let inner = 1', '}', 'echo inner'], 'E1001:') 1068a7d6542SBram Moolenaarendfunc 1078a7d6542SBram Moolenaar 1088a7d6542SBram Moolenaardef ReturnString(): string 1098a7d6542SBram Moolenaar return 'string' 1108a7d6542SBram Moolenaarenddef 1118a7d6542SBram Moolenaar 1128a7d6542SBram Moolenaardef ReturnNumber(): number 1138a7d6542SBram Moolenaar return 123 1148a7d6542SBram Moolenaarenddef 1158a7d6542SBram Moolenaar 1168a7d6542SBram Moolenaardef Test_return_string() 1178a7d6542SBram Moolenaar assert_equal('string', ReturnString()) 1188a7d6542SBram Moolenaar assert_equal(123, ReturnNumber()) 1198a7d6542SBram Moolenaarenddef 1208a7d6542SBram Moolenaar 1218a7d6542SBram Moolenaarfunc Increment() 1228a7d6542SBram Moolenaar let g:counter += 1 1238a7d6542SBram Moolenaarendfunc 1248a7d6542SBram Moolenaar 1258a7d6542SBram Moolenaardef Test_call_ufunc_count() 1268a7d6542SBram Moolenaar g:counter = 1 1278a7d6542SBram Moolenaar Increment() 1288a7d6542SBram Moolenaar Increment() 1298a7d6542SBram Moolenaar Increment() 1308a7d6542SBram Moolenaar " works with and without :call 1318a7d6542SBram Moolenaar assert_equal(4, g:counter) 132b283a8a6SBram Moolenaar call assert_equal(4, g:counter) 1338a7d6542SBram Moolenaar unlet g:counter 1348a7d6542SBram Moolenaarenddef 1358a7d6542SBram Moolenaar 1368a7d6542SBram Moolenaardef MyVarargs(arg: string, ...rest: list<string>): string 1378a7d6542SBram Moolenaar let res = arg 1388a7d6542SBram Moolenaar for s in rest 1398a7d6542SBram Moolenaar res ..= ',' .. s 1408a7d6542SBram Moolenaar endfor 1418a7d6542SBram Moolenaar return res 1428a7d6542SBram Moolenaarenddef 1438a7d6542SBram Moolenaar 1448a7d6542SBram Moolenaardef Test_call_varargs() 1458a7d6542SBram Moolenaar assert_equal('one', MyVarargs('one')) 1468a7d6542SBram Moolenaar assert_equal('one,two', MyVarargs('one', 'two')) 1478a7d6542SBram Moolenaar assert_equal('one,two,three', MyVarargs('one', 'two', 'three')) 1488a7d6542SBram Moolenaarenddef 1498a7d6542SBram Moolenaar 150170fcfcfSBram Moolenaardef MyDefaultArgs(name = 'string'): string 151170fcfcfSBram Moolenaar return name 152170fcfcfSBram Moolenaarenddef 153170fcfcfSBram Moolenaar 154170fcfcfSBram Moolenaardef Test_call_default_args() 155170fcfcfSBram Moolenaar assert_equal('string', MyDefaultArgs()) 156170fcfcfSBram Moolenaar assert_equal('one', MyDefaultArgs('one')) 157170fcfcfSBram Moolenaar assert_fails('call MyDefaultArgs("one", "two")', 'E118:') 158170fcfcfSBram Moolenaarenddef 159170fcfcfSBram Moolenaar 160170fcfcfSBram Moolenaarfunc Test_call_default_args_from_func() 161170fcfcfSBram Moolenaar call assert_equal('string', MyDefaultArgs()) 162170fcfcfSBram Moolenaar call assert_equal('one', MyDefaultArgs('one')) 163170fcfcfSBram Moolenaar call assert_fails('call MyDefaultArgs("one", "two")', 'E118:') 164170fcfcfSBram Moolenaarendfunc 165170fcfcfSBram Moolenaar 166170fcfcfSBram Moolenaar" Default arg and varargs 167170fcfcfSBram Moolenaardef MyDefVarargs(one: string, two = 'foo', ...rest: list<string>): string 168170fcfcfSBram Moolenaar let res = one .. ',' .. two 169170fcfcfSBram Moolenaar for s in rest 170170fcfcfSBram Moolenaar res ..= ',' .. s 171170fcfcfSBram Moolenaar endfor 172170fcfcfSBram Moolenaar return res 173170fcfcfSBram Moolenaarenddef 174170fcfcfSBram Moolenaar 175170fcfcfSBram Moolenaardef Test_call_def_varargs() 176170fcfcfSBram Moolenaar call assert_fails('call MyDefVarargs()', 'E119:') 177170fcfcfSBram Moolenaar assert_equal('one,foo', MyDefVarargs('one')) 178170fcfcfSBram Moolenaar assert_equal('one,two', MyDefVarargs('one', 'two')) 179170fcfcfSBram Moolenaar assert_equal('one,two,three', MyDefVarargs('one', 'two', 'three')) 180170fcfcfSBram Moolenaarenddef 181170fcfcfSBram Moolenaar 182170fcfcfSBram Moolenaar 18326e117e9SBram Moolenaar"def Test_call_func_defined_later() 18426e117e9SBram Moolenaar" call assert_equal('one', DefineLater('one')) 18526e117e9SBram Moolenaar" call assert_fails('call NotDefined("one")', 'E99:') 18626e117e9SBram Moolenaar"enddef 18726e117e9SBram Moolenaar 18826e117e9SBram Moolenaarfunc DefineLater(arg) 18926e117e9SBram Moolenaar return a:arg 19026e117e9SBram Moolenaarendfunc 19126e117e9SBram Moolenaar 1928a7d6542SBram Moolenaardef Test_return_type_wrong() 193978d170bSBram Moolenaar CheckScriptFailure(['def Func(): number', 'return "a"', 'enddef'], 'expected number but got string') 194978d170bSBram Moolenaar CheckScriptFailure(['def Func(): string', 'return 1', 'enddef'], 'expected string but got number') 195978d170bSBram Moolenaar CheckScriptFailure(['def Func(): void', 'return "a"', 'enddef'], 'expected void but got string') 196978d170bSBram Moolenaar CheckScriptFailure(['def Func()', 'return "a"', 'enddef'], 'expected void but got string') 1978a7d6542SBram Moolenaarenddef 1988a7d6542SBram Moolenaar 199bfe12043SBram Moolenaardef Test_arg_type_wrong() 200bfe12043SBram Moolenaar CheckScriptFailure(['def Func3(items: list)', 'echo "a"', 'enddef'], 'E1008: Missing <type>') 201bfe12043SBram Moolenaarenddef 202bfe12043SBram Moolenaar 2038a7d6542SBram Moolenaardef Test_try_catch() 2048a7d6542SBram Moolenaar let l = [] 2058a7d6542SBram Moolenaar try 2068a7d6542SBram Moolenaar add(l, '1') 2078a7d6542SBram Moolenaar throw 'wrong' 2088a7d6542SBram Moolenaar add(l, '2') 2098a7d6542SBram Moolenaar catch 2108a7d6542SBram Moolenaar add(l, v:exception) 2118a7d6542SBram Moolenaar finally 2128a7d6542SBram Moolenaar add(l, '3') 2138a7d6542SBram Moolenaar endtry 2148a7d6542SBram Moolenaar assert_equal(['1', 'wrong', '3'], l) 2158a7d6542SBram Moolenaarenddef 2168a7d6542SBram Moolenaar 217257cc5eeSBram Moolenaardef ThrowFromDef() 218257cc5eeSBram Moolenaar throw 'getout' 219257cc5eeSBram Moolenaarenddef 220257cc5eeSBram Moolenaar 221257cc5eeSBram Moolenaarfunc CatchInFunc() 222257cc5eeSBram Moolenaar try 223257cc5eeSBram Moolenaar call ThrowFromDef() 224257cc5eeSBram Moolenaar catch 225257cc5eeSBram Moolenaar let g:thrown_func = v:exception 226257cc5eeSBram Moolenaar endtry 227257cc5eeSBram Moolenaarendfunc 228257cc5eeSBram Moolenaar 229257cc5eeSBram Moolenaardef CatchInDef() 230257cc5eeSBram Moolenaar try 231257cc5eeSBram Moolenaar ThrowFromDef() 232257cc5eeSBram Moolenaar catch 233257cc5eeSBram Moolenaar g:thrown_def = v:exception 234257cc5eeSBram Moolenaar endtry 235257cc5eeSBram Moolenaarenddef 236257cc5eeSBram Moolenaar 237257cc5eeSBram Moolenaardef Test_try_catch_nested() 238257cc5eeSBram Moolenaar CatchInFunc() 239257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_func) 240257cc5eeSBram Moolenaar 241257cc5eeSBram Moolenaar CatchInDef() 242257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_def) 243257cc5eeSBram Moolenaarenddef 244257cc5eeSBram Moolenaar 2458a7d6542SBram Moolenaarlet s:export_script_lines =<< trim END 2468a7d6542SBram Moolenaar vim9script 2478a7d6542SBram Moolenaar let name: string = 'bob' 2488a7d6542SBram Moolenaar def Concat(arg: string): string 2498a7d6542SBram Moolenaar return name .. arg 2508a7d6542SBram Moolenaar enddef 2518a7d6542SBram Moolenaar let g:result = Concat('bie') 2528a7d6542SBram Moolenaar let g:localname = name 2538a7d6542SBram Moolenaar 2548a7d6542SBram Moolenaar export const CONST = 1234 2558a7d6542SBram Moolenaar export let exported = 9876 2566e587dcbSBram Moolenaar export let exp_name = 'John' 2578a7d6542SBram Moolenaar export def Exported(): string 2588a7d6542SBram Moolenaar return 'Exported' 2598a7d6542SBram Moolenaar enddef 2608a7d6542SBram MoolenaarEND 2618a7d6542SBram Moolenaar 2628a7d6542SBram Moolenaardef Test_vim9script() 2638a7d6542SBram Moolenaar let import_script_lines =<< trim END 2648a7d6542SBram Moolenaar vim9script 2658a7d6542SBram Moolenaar import {exported, Exported} from './Xexport.vim' 2668a7d6542SBram Moolenaar g:imported = exported 2676e587dcbSBram Moolenaar exported += 3 2686e587dcbSBram Moolenaar g:imported_added = exported 2698a7d6542SBram Moolenaar g:imported_func = Exported() 2706e587dcbSBram Moolenaar 2716e587dcbSBram Moolenaar import {exp_name} from './Xexport.vim' 2726e587dcbSBram Moolenaar g:imported_name = exp_name 2736e587dcbSBram Moolenaar exp_name ..= ' Doe' 2746e587dcbSBram Moolenaar g:imported_name_appended = exp_name 2758a7d6542SBram Moolenaar END 2768a7d6542SBram Moolenaar 2778a7d6542SBram Moolenaar writefile(import_script_lines, 'Ximport.vim') 2788a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport.vim') 2798a7d6542SBram Moolenaar 2808a7d6542SBram Moolenaar source Ximport.vim 2818a7d6542SBram Moolenaar 2828a7d6542SBram Moolenaar assert_equal('bobbie', g:result) 2838a7d6542SBram Moolenaar assert_equal('bob', g:localname) 2848a7d6542SBram Moolenaar assert_equal(9876, g:imported) 2856e587dcbSBram Moolenaar assert_equal(9879, g:imported_added) 2868a7d6542SBram Moolenaar assert_equal('Exported', g:imported_func) 2876e587dcbSBram Moolenaar assert_equal('John', g:imported_name) 2886e587dcbSBram Moolenaar assert_equal('John Doe', g:imported_name_appended) 2898a7d6542SBram Moolenaar assert_false(exists('g:name')) 2908a7d6542SBram Moolenaar 2918a7d6542SBram Moolenaar unlet g:result 2928a7d6542SBram Moolenaar unlet g:localname 2938a7d6542SBram Moolenaar unlet g:imported 2946e587dcbSBram Moolenaar unlet g:imported_added 2958a7d6542SBram Moolenaar unlet g:imported_func 2966e587dcbSBram Moolenaar unlet g:imported_name g:imported_name_appended 2978a7d6542SBram Moolenaar delete('Ximport.vim') 2988a7d6542SBram Moolenaar delete('Xexport.vim') 2998a7d6542SBram Moolenaar 3008a7d6542SBram Moolenaar CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:') 3018a7d6542SBram Moolenaar CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:') 3028a7d6542SBram Moolenaarenddef 3038a7d6542SBram Moolenaar 3048a7d6542SBram Moolenaardef Test_vim9script_call() 3058a7d6542SBram Moolenaar let lines =<< trim END 3068a7d6542SBram Moolenaar vim9script 3078a7d6542SBram Moolenaar let var = '' 3088a7d6542SBram Moolenaar def MyFunc(arg: string) 3098a7d6542SBram Moolenaar var = arg 3108a7d6542SBram Moolenaar enddef 3118a7d6542SBram Moolenaar MyFunc('foobar') 3128a7d6542SBram Moolenaar assert_equal('foobar', var) 3138a7d6542SBram Moolenaar 3148a7d6542SBram Moolenaar let str = 'barfoo' 3158a7d6542SBram Moolenaar str->MyFunc() 3168a7d6542SBram Moolenaar assert_equal('barfoo', var) 3178a7d6542SBram Moolenaar 3188a7d6542SBram Moolenaar let g:value = 'value' 3198a7d6542SBram Moolenaar g:value->MyFunc() 3208a7d6542SBram Moolenaar assert_equal('value', var) 3218a7d6542SBram Moolenaar 3228a7d6542SBram Moolenaar let listvar = [] 3238a7d6542SBram Moolenaar def ListFunc(arg: list<number>) 3248a7d6542SBram Moolenaar listvar = arg 3258a7d6542SBram Moolenaar enddef 3268a7d6542SBram Moolenaar [1, 2, 3]->ListFunc() 3278a7d6542SBram Moolenaar assert_equal([1, 2, 3], listvar) 3288a7d6542SBram Moolenaar 3298a7d6542SBram Moolenaar let dictvar = {} 3308a7d6542SBram Moolenaar def DictFunc(arg: dict<number>) 3318a7d6542SBram Moolenaar dictvar = arg 3328a7d6542SBram Moolenaar enddef 3338a7d6542SBram Moolenaar {'a': 1, 'b': 2}->DictFunc() 3348a7d6542SBram Moolenaar assert_equal(#{a: 1, b: 2}, dictvar) 3358a7d6542SBram Moolenaar #{a: 3, b: 4}->DictFunc() 3368a7d6542SBram Moolenaar assert_equal(#{a: 3, b: 4}, dictvar) 3378a7d6542SBram Moolenaar END 3388a7d6542SBram Moolenaar writefile(lines, 'Xcall.vim') 3398a7d6542SBram Moolenaar source Xcall.vim 3408a7d6542SBram Moolenaar delete('Xcall.vim') 3418a7d6542SBram Moolenaarenddef 3428a7d6542SBram Moolenaar 3438a7d6542SBram Moolenaardef Test_vim9script_call_fail_decl() 3448a7d6542SBram Moolenaar let lines =<< trim END 3458a7d6542SBram Moolenaar vim9script 3468a7d6542SBram Moolenaar let var = '' 3478a7d6542SBram Moolenaar def MyFunc(arg: string) 3488a7d6542SBram Moolenaar let var = 123 3498a7d6542SBram Moolenaar enddef 3508a7d6542SBram Moolenaar END 3518a7d6542SBram Moolenaar writefile(lines, 'Xcall_decl.vim') 3528a7d6542SBram Moolenaar assert_fails('source Xcall_decl.vim', 'E1054:') 3538a7d6542SBram Moolenaar delete('Xcall_decl.vim') 3548a7d6542SBram Moolenaarenddef 3558a7d6542SBram Moolenaar 3568a7d6542SBram Moolenaardef Test_vim9script_call_fail_const() 3578a7d6542SBram Moolenaar let lines =<< trim END 3588a7d6542SBram Moolenaar vim9script 3598a7d6542SBram Moolenaar const var = '' 3608a7d6542SBram Moolenaar def MyFunc(arg: string) 3618a7d6542SBram Moolenaar var = 'asdf' 3628a7d6542SBram Moolenaar enddef 3638a7d6542SBram Moolenaar END 3648a7d6542SBram Moolenaar writefile(lines, 'Xcall_const.vim') 3658a7d6542SBram Moolenaar assert_fails('source Xcall_const.vim', 'E46:') 3668a7d6542SBram Moolenaar delete('Xcall_const.vim') 3678a7d6542SBram Moolenaarenddef 3688a7d6542SBram Moolenaar 3698a7d6542SBram Moolenaardef Test_vim9script_reload() 3708a7d6542SBram Moolenaar let lines =<< trim END 3718a7d6542SBram Moolenaar vim9script 3728a7d6542SBram Moolenaar const var = '' 3738a7d6542SBram Moolenaar let valone = 1234 3748a7d6542SBram Moolenaar def MyFunc(arg: string) 3758a7d6542SBram Moolenaar valone = 5678 3768a7d6542SBram Moolenaar enddef 3778a7d6542SBram Moolenaar END 3788a7d6542SBram Moolenaar let morelines =<< trim END 3798a7d6542SBram Moolenaar let valtwo = 222 3808a7d6542SBram Moolenaar export def GetValtwo(): number 3818a7d6542SBram Moolenaar return valtwo 3828a7d6542SBram Moolenaar enddef 3838a7d6542SBram Moolenaar END 3848a7d6542SBram Moolenaar writefile(lines + morelines, 'Xreload.vim') 3858a7d6542SBram Moolenaar source Xreload.vim 3868a7d6542SBram Moolenaar source Xreload.vim 3878a7d6542SBram Moolenaar source Xreload.vim 3888a7d6542SBram Moolenaar 3898a7d6542SBram Moolenaar let testlines =<< trim END 3908a7d6542SBram Moolenaar vim9script 3918a7d6542SBram Moolenaar def TheFunc() 3928a7d6542SBram Moolenaar import GetValtwo from './Xreload.vim' 3938a7d6542SBram Moolenaar assert_equal(222, GetValtwo()) 3948a7d6542SBram Moolenaar enddef 3958a7d6542SBram Moolenaar TheFunc() 3968a7d6542SBram Moolenaar END 3978a7d6542SBram Moolenaar writefile(testlines, 'Ximport.vim') 3988a7d6542SBram Moolenaar source Ximport.vim 3998a7d6542SBram Moolenaar 4008a7d6542SBram Moolenaar " test that when not using "morelines" valtwo is still defined 4018a7d6542SBram Moolenaar " need to source Xreload.vim again, import doesn't reload a script 4028a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 4038a7d6542SBram Moolenaar source Xreload.vim 4048a7d6542SBram Moolenaar source Ximport.vim 4058a7d6542SBram Moolenaar 4068a7d6542SBram Moolenaar " cannot declare a var twice 4078a7d6542SBram Moolenaar lines =<< trim END 4088a7d6542SBram Moolenaar vim9script 4098a7d6542SBram Moolenaar let valone = 1234 4108a7d6542SBram Moolenaar let valone = 5678 4118a7d6542SBram Moolenaar END 4128a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 4138a7d6542SBram Moolenaar assert_fails('source Xreload.vim', 'E1041:') 4148a7d6542SBram Moolenaar 4158a7d6542SBram Moolenaar delete('Xreload.vim') 4168a7d6542SBram Moolenaar delete('Ximport.vim') 4178a7d6542SBram Moolenaarenddef 4188a7d6542SBram Moolenaar 4198a7d6542SBram Moolenaardef Test_import_absolute() 4208a7d6542SBram Moolenaar let import_lines = [ 4218a7d6542SBram Moolenaar \ 'vim9script', 4228a7d6542SBram Moolenaar \ 'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"', 423b283a8a6SBram Moolenaar \ 'def UseExported()', 4248a7d6542SBram Moolenaar \ ' g:imported_abs = exported', 4254e12a5dfSBram Moolenaar \ ' exported = 8888', 4264e12a5dfSBram Moolenaar \ ' g:imported_after = exported', 427b283a8a6SBram Moolenaar \ 'enddef', 428b283a8a6SBram Moolenaar \ 'UseExported()', 4294e12a5dfSBram Moolenaar \ 'g:import_disassembled = execute("disass UseExported")', 4308a7d6542SBram Moolenaar \ ] 4318a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_abs.vim') 4328a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport_abs.vim') 4338a7d6542SBram Moolenaar 4348a7d6542SBram Moolenaar source Ximport_abs.vim 4358a7d6542SBram Moolenaar 4368a7d6542SBram Moolenaar assert_equal(9876, g:imported_abs) 4374e12a5dfSBram Moolenaar assert_equal(8888, g:imported_after) 438b283a8a6SBram Moolenaar assert_match('<SNR>\d\+_UseExported.*' 439b283a8a6SBram Moolenaar \ .. 'g:imported_abs = exported.*' 440b283a8a6SBram Moolenaar \ .. '0 LOADSCRIPT exported from .*Xexport_abs.vim.*' 4414e12a5dfSBram Moolenaar \ .. '1 STOREG g:imported_abs.*' 4424e12a5dfSBram Moolenaar \ .. 'exported = 8888.*' 4434e12a5dfSBram Moolenaar \ .. '3 STORESCRIPT exported in .*Xexport_abs.vim.*' 4444e12a5dfSBram Moolenaar \ .. 'g:imported_after = exported.*' 4454e12a5dfSBram Moolenaar \ .. '4 LOADSCRIPT exported from .*Xexport_abs.vim.*' 4464e12a5dfSBram Moolenaar \ .. '5 STOREG g:imported_after.*' 4474e12a5dfSBram Moolenaar \, g:import_disassembled) 4488a7d6542SBram Moolenaar unlet g:imported_abs 4494e12a5dfSBram Moolenaar unlet g:import_disassembled 4508a7d6542SBram Moolenaar 4518a7d6542SBram Moolenaar delete('Ximport_abs.vim') 4528a7d6542SBram Moolenaar delete('Xexport_abs.vim') 4538a7d6542SBram Moolenaarenddef 4548a7d6542SBram Moolenaar 4558a7d6542SBram Moolenaardef Test_import_rtp() 4568a7d6542SBram Moolenaar let import_lines = [ 4578a7d6542SBram Moolenaar \ 'vim9script', 4588a7d6542SBram Moolenaar \ 'import exported from "Xexport_rtp.vim"', 4598a7d6542SBram Moolenaar \ 'g:imported_rtp = exported', 4608a7d6542SBram Moolenaar \ ] 4618a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_rtp.vim') 4628a7d6542SBram Moolenaar mkdir('import') 4638a7d6542SBram Moolenaar writefile(s:export_script_lines, 'import/Xexport_rtp.vim') 4648a7d6542SBram Moolenaar 4658a7d6542SBram Moolenaar let save_rtp = &rtp 4668a7d6542SBram Moolenaar &rtp = getcwd() 4678a7d6542SBram Moolenaar source Ximport_rtp.vim 4688a7d6542SBram Moolenaar &rtp = save_rtp 4698a7d6542SBram Moolenaar 4708a7d6542SBram Moolenaar assert_equal(9876, g:imported_rtp) 4718a7d6542SBram Moolenaar unlet g:imported_rtp 4728a7d6542SBram Moolenaar 4738a7d6542SBram Moolenaar delete('Ximport_rtp.vim') 4748a7d6542SBram Moolenaar delete('import/Xexport_rtp.vim') 4758a7d6542SBram Moolenaar delete('import', 'd') 4768a7d6542SBram Moolenaarenddef 4778a7d6542SBram Moolenaar 4788a7d6542SBram Moolenaardef Test_fixed_size_list() 4798a7d6542SBram Moolenaar " will be allocated as one piece of memory, check that changes work 4808a7d6542SBram Moolenaar let l = [1, 2, 3, 4] 4818a7d6542SBram Moolenaar l->remove(0) 4828a7d6542SBram Moolenaar l->add(5) 4838a7d6542SBram Moolenaar l->insert(99, 1) 4840f18b6d1SBram Moolenaar assert_equal([2, 99, 3, 4, 5], l) 4858a7d6542SBram Moolenaarenddef 4868a7d6542SBram Moolenaar 487673660abSBram Moolenaar" Test that inside :function a Python function can be defined, :def is not 488673660abSBram Moolenaar" recognized. 489673660abSBram Moolenaarfunc Test_function_python() 490673660abSBram Moolenaar CheckFeature python3 491673660abSBram Moolenaar let py = 'python3' 492673660abSBram Moolenaar execute py "<< EOF" 493673660abSBram Moolenaardef do_something(): 494673660abSBram Moolenaar return 1 495673660abSBram MoolenaarEOF 496673660abSBram Moolenaarendfunc 497673660abSBram Moolenaar 498158906cfSBram Moolenaardef IfElse(what: number): string 499158906cfSBram Moolenaar let res = '' 500158906cfSBram Moolenaar if what == 1 501158906cfSBram Moolenaar res = "one" 502158906cfSBram Moolenaar elseif what == 2 503158906cfSBram Moolenaar res = "two" 504a259d8d3SBram Moolenaar else 505158906cfSBram Moolenaar res = "three" 506a259d8d3SBram Moolenaar endif 507158906cfSBram Moolenaar return res 508a259d8d3SBram Moolenaarenddef 509a259d8d3SBram Moolenaar 510158906cfSBram Moolenaardef Test_if_elseif_else() 511158906cfSBram Moolenaar assert_equal('one', IfElse(1)) 512158906cfSBram Moolenaar assert_equal('two', IfElse(2)) 513158906cfSBram Moolenaar assert_equal('three', IfElse(3)) 5140f18b6d1SBram Moolenaarenddef 5150f18b6d1SBram Moolenaar 51663ce4849SBram Moolenaardef Test_delfunc() 51763ce4849SBram Moolenaar let lines =<< trim END 51863ce4849SBram Moolenaar vim9script 51963ce4849SBram Moolenaar def GoneSoon() 52063ce4849SBram Moolenaar echo 'hello' 52163ce4849SBram Moolenaar enddef 52263ce4849SBram Moolenaar 52363ce4849SBram Moolenaar def CallGoneSoon() 52463ce4849SBram Moolenaar GoneSoon() 52563ce4849SBram Moolenaar enddef 52663ce4849SBram Moolenaar 52763ce4849SBram Moolenaar delfunc GoneSoon 52863ce4849SBram Moolenaar CallGoneSoon() 52963ce4849SBram Moolenaar END 53063ce4849SBram Moolenaar writefile(lines, 'XToDelFunc') 53163ce4849SBram Moolenaar assert_fails('so XToDelFunc', 'E933') 53263ce4849SBram Moolenaar assert_fails('so XToDelFunc', 'E933') 53363ce4849SBram Moolenaar 53463ce4849SBram Moolenaar delete('XToDelFunc') 53563ce4849SBram Moolenaarenddef 53663ce4849SBram Moolenaar 5378a7d6542SBram Moolenaar 5388a7d6542SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker 539