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 137a092245SBram Moolenaardef CheckScriptFailure(lines: list<string>, error: string) 147a092245SBram Moolenaar writefile(lines, 'Xdef') 157a092245SBram Moolenaar assert_fails('so Xdef', error, lines) 167a092245SBram Moolenaar delete('Xdef') 177a092245SBram Moolenaarenddef 187a092245SBram Moolenaar 197a092245SBram Moolenaardef CheckScriptSuccess(lines: list<string>) 207a092245SBram Moolenaar writefile(lines, 'Xdef') 217a092245SBram Moolenaar so Xdef 227a092245SBram Moolenaar delete('Xdef') 237a092245SBram Moolenaarenddef 248a7d6542SBram Moolenaar 258a7d6542SBram Moolenaardef Test_syntax() 268a7d6542SBram Moolenaar let var = 234 278a7d6542SBram Moolenaar let other: list<string> = ['asdf'] 288a7d6542SBram Moolenaarenddef 298a7d6542SBram Moolenaar 306e587dcbSBram Moolenaarlet s:appendToMe = 'xxx' 316e587dcbSBram Moolenaarlet s:addToMe = 111 32401d9ffbSBram Moolenaarlet g:existing = 'yes' 33a8c17704SBram Moolenaarlet g:inc_counter = 1 34a8c17704SBram Moolenaarlet $SOME_ENV_VAR = 'some' 356e587dcbSBram Moolenaar 368a7d6542SBram Moolenaardef Test_assignment() 378a7d6542SBram Moolenaar let bool1: bool = true 388a7d6542SBram Moolenaar assert_equal(v:true, bool1) 398a7d6542SBram Moolenaar let bool2: bool = false 408a7d6542SBram Moolenaar assert_equal(v:false, bool2) 418a7d6542SBram Moolenaar 420c2ca58eSBram Moolenaar let list1: list<bool> = [false, true, false] 438a7d6542SBram Moolenaar let list2: list<number> = [1, 2, 3] 440c2ca58eSBram Moolenaar let list3: list<string> = ['sdf', 'asdf'] 450c2ca58eSBram Moolenaar let list4: list<any> = ['yes', true, 1234] 460c2ca58eSBram Moolenaar let list5: list<blob> = [0z01, 0z02] 478a7d6542SBram Moolenaar 48436472f5SBram Moolenaar let listS: list<string> = [] 49436472f5SBram Moolenaar let listN: list<number> = [] 508a7d6542SBram Moolenaar 510c2ca58eSBram Moolenaar let dict1: dict<bool> = #{one: false, two: true} 528a7d6542SBram Moolenaar let dict2: dict<number> = #{one: 1, two: 2} 530c2ca58eSBram Moolenaar let dict3: dict<string> = #{key: 'value'} 540c2ca58eSBram Moolenaar let dict4: dict<any> = #{one: 1, two: '2'} 550c2ca58eSBram Moolenaar let dict5: dict<blob> = #{one: 0z01, tw: 0z02} 56b283a8a6SBram Moolenaar 579be61bbbSBram Moolenaar let a: number = 6 589be61bbbSBram Moolenaar assert_equal(6, a) 599be61bbbSBram Moolenaar 6042a480bfSBram Moolenaar if has('channel') 6142a480bfSBram Moolenaar let chan1: channel 62fbdd08edSBram Moolenaar let job1: job 63f51cb4e0SBram Moolenaar let job2: job = job_start('willfail') 6442a480bfSBram Moolenaar endif 65fbdd08edSBram Moolenaar if has('float') 66fbdd08edSBram Moolenaar let float1: float = 3.4 67fbdd08edSBram Moolenaar endif 685deeb3f1SBram Moolenaar let Funky1: func 695deeb3f1SBram Moolenaar let Funky2: func = function('len') 705deeb3f1SBram Moolenaar let Party2: func = funcref('Test_syntax') 7142a480bfSBram Moolenaar 72cb711abfSBram Moolenaar # type becomes list<any> 7361a6d4e4SBram Moolenaar let somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c'] 74cb711abfSBram Moolenaar # type becomes dict<any> 755381c7a1SBram Moolenaar let somedict = rand() > 0 ? #{a: 1, b: 2} : #{a: 'a', b: 'b'} 7661a6d4e4SBram Moolenaar 77401d9ffbSBram Moolenaar g:newvar = 'new' 78401d9ffbSBram Moolenaar assert_equal('new', g:newvar) 79401d9ffbSBram Moolenaar 80401d9ffbSBram Moolenaar assert_equal('yes', g:existing) 81401d9ffbSBram Moolenaar g:existing = 'no' 82401d9ffbSBram Moolenaar assert_equal('no', g:existing) 83401d9ffbSBram Moolenaar 84b283a8a6SBram Moolenaar v:char = 'abc' 856e587dcbSBram Moolenaar assert_equal('abc', v:char) 86b283a8a6SBram Moolenaar 87b283a8a6SBram Moolenaar $ENVVAR = 'foobar' 886e587dcbSBram Moolenaar assert_equal('foobar', $ENVVAR) 89b283a8a6SBram Moolenaar $ENVVAR = '' 906e587dcbSBram Moolenaar 91fd1823e0SBram Moolenaar s:appendToMe ..= 'yyy' 92fd1823e0SBram Moolenaar assert_equal('xxxyyy', s:appendToMe) 93fd1823e0SBram Moolenaar s:addToMe += 222 94fd1823e0SBram Moolenaar assert_equal(333, s:addToMe) 950bbf722aSBram Moolenaar s:newVar = 'new' 960bbf722aSBram Moolenaar assert_equal('new', s:newVar) 97a8c17704SBram Moolenaar 98a8c17704SBram Moolenaar set ts=7 99a8c17704SBram Moolenaar &ts += 1 100a8c17704SBram Moolenaar assert_equal(8, &ts) 10180c34ca3SBram Moolenaar &ts -= 3 10280c34ca3SBram Moolenaar assert_equal(5, &ts) 10380c34ca3SBram Moolenaar &ts *= 2 10480c34ca3SBram Moolenaar assert_equal(10, &ts) 10580c34ca3SBram Moolenaar &ts /= 3 10680c34ca3SBram Moolenaar assert_equal(3, &ts) 10780c34ca3SBram Moolenaar set ts=10 10880c34ca3SBram Moolenaar &ts %= 4 10980c34ca3SBram Moolenaar assert_equal(2, &ts) 110a8c17704SBram Moolenaar call CheckDefFailure(['¬ex += 3'], 'E113:') 111a8c17704SBram Moolenaar call CheckDefFailure(['&ts ..= "xxx"'], 'E1019:') 112a8c17704SBram Moolenaar call CheckDefFailure(['&path += 3'], 'E1013:') 113cb711abfSBram Moolenaar # test freeing ISN_STOREOPT 114585fea7bSBram Moolenaar call CheckDefFailure(['&ts = 3', 'let asdf'], 'E1022:') 11580c34ca3SBram Moolenaar &ts = 8 116a8c17704SBram Moolenaar 117a8c17704SBram Moolenaar g:inc_counter += 1 118a8c17704SBram Moolenaar assert_equal(2, g:inc_counter) 119a8c17704SBram Moolenaar 120a8c17704SBram Moolenaar $SOME_ENV_VAR ..= 'more' 121a8c17704SBram Moolenaar assert_equal('somemore', $SOME_ENV_VAR) 122a8c17704SBram Moolenaar call CheckDefFailure(['$SOME_ENV_VAR += "more"'], 'E1013:') 123a8c17704SBram Moolenaar call CheckDefFailure(['$SOME_ENV_VAR += 123'], 'E1013:') 124a8c17704SBram Moolenaar 125a8c17704SBram Moolenaar @a = 'areg' 126a8c17704SBram Moolenaar @a ..= 'add' 127a8c17704SBram Moolenaar assert_equal('aregadd', @a) 128a8c17704SBram Moolenaar call CheckDefFailure(['@a += "more"'], 'E1013:') 129a8c17704SBram Moolenaar call CheckDefFailure(['@a += 123'], 'E1013:') 130e69f6d04SBram Moolenaar 131e69f6d04SBram Moolenaar v:errmsg = 'none' 132e69f6d04SBram Moolenaar v:errmsg ..= 'again' 133e69f6d04SBram Moolenaar assert_equal('noneagain', v:errmsg) 134e69f6d04SBram Moolenaar call CheckDefFailure(['v:errmsg += "more"'], 'E1013:') 135e69f6d04SBram Moolenaar call CheckDefFailure(['v:errmsg += 123'], 'E1013:') 1365deeb3f1SBram Moolenaarenddef 1375deeb3f1SBram Moolenaar 138*d3aac291SBram Moolenaardef Test_assignment_local() 139*d3aac291SBram Moolenaar " Test in a separated file in order not to the current buffer/window/tab is 140*d3aac291SBram Moolenaar " changed. 141*d3aac291SBram Moolenaar let script_lines: list<string> =<< trim END 142*d3aac291SBram Moolenaar let b:existing = 'yes' 143*d3aac291SBram Moolenaar let w:existing = 'yes' 144*d3aac291SBram Moolenaar let t:existing = 'yes' 145*d3aac291SBram Moolenaar 146*d3aac291SBram Moolenaar def Test_assignment_local_internal() 147*d3aac291SBram Moolenaar b:newvar = 'new' 148*d3aac291SBram Moolenaar assert_equal('new', b:newvar) 149*d3aac291SBram Moolenaar assert_equal('yes', b:existing) 150*d3aac291SBram Moolenaar b:existing = 'no' 151*d3aac291SBram Moolenaar assert_equal('no', b:existing) 152*d3aac291SBram Moolenaar 153*d3aac291SBram Moolenaar w:newvar = 'new' 154*d3aac291SBram Moolenaar assert_equal('new', w:newvar) 155*d3aac291SBram Moolenaar assert_equal('yes', w:existing) 156*d3aac291SBram Moolenaar w:existing = 'no' 157*d3aac291SBram Moolenaar assert_equal('no', w:existing) 158*d3aac291SBram Moolenaar 159*d3aac291SBram Moolenaar t:newvar = 'new' 160*d3aac291SBram Moolenaar assert_equal('new', t:newvar) 161*d3aac291SBram Moolenaar assert_equal('yes', t:existing) 162*d3aac291SBram Moolenaar t:existing = 'no' 163*d3aac291SBram Moolenaar assert_equal('no', t:existing) 164*d3aac291SBram Moolenaar enddef 165*d3aac291SBram Moolenaar call Test_assignment_local_internal() 166*d3aac291SBram Moolenaar END 167*d3aac291SBram Moolenaar call CheckScriptSuccess(script_lines) 168*d3aac291SBram Moolenaarenddef 169*d3aac291SBram Moolenaar 1705deeb3f1SBram Moolenaardef Test_assignment_default() 171e69f6d04SBram Moolenaar 172cb711abfSBram Moolenaar # Test default values. 173e69f6d04SBram Moolenaar let thebool: bool 174e69f6d04SBram Moolenaar assert_equal(v:false, thebool) 175e69f6d04SBram Moolenaar 176e69f6d04SBram Moolenaar let thenumber: number 177e69f6d04SBram Moolenaar assert_equal(0, thenumber) 178e69f6d04SBram Moolenaar 179e69f6d04SBram Moolenaar if has('float') 180e69f6d04SBram Moolenaar let thefloat: float 181e69f6d04SBram Moolenaar assert_equal(0.0, thefloat) 182e69f6d04SBram Moolenaar endif 183e69f6d04SBram Moolenaar 184e69f6d04SBram Moolenaar let thestring: string 185e69f6d04SBram Moolenaar assert_equal('', thestring) 186e69f6d04SBram Moolenaar 187e69f6d04SBram Moolenaar let theblob: blob 188e69f6d04SBram Moolenaar assert_equal(0z, theblob) 189e69f6d04SBram Moolenaar 1905deeb3f1SBram Moolenaar let Thefunc: func 1915deeb3f1SBram Moolenaar assert_equal(test_null_function(), Thefunc) 192e69f6d04SBram Moolenaar 193e69f6d04SBram Moolenaar let thelist: list<any> 194e69f6d04SBram Moolenaar assert_equal([], thelist) 195e69f6d04SBram Moolenaar 196e69f6d04SBram Moolenaar let thedict: dict<any> 197e69f6d04SBram Moolenaar assert_equal({}, thedict) 198e69f6d04SBram Moolenaar 1992c869deeSBram Moolenaar if has('channel') 200e69f6d04SBram Moolenaar let thejob: job 201e69f6d04SBram Moolenaar assert_equal(test_null_job(), thejob) 202e69f6d04SBram Moolenaar 203e69f6d04SBram Moolenaar let thechannel: channel 204e69f6d04SBram Moolenaar assert_equal(test_null_channel(), thechannel) 2052c869deeSBram Moolenaar endif 206585fea7bSBram Moolenaar 207585fea7bSBram Moolenaar let nr = 1234 | nr = 5678 208585fea7bSBram Moolenaar assert_equal(5678, nr) 2098a7d6542SBram Moolenaarenddef 2108a7d6542SBram Moolenaar 211cab27678SBram Moolenaardef Mess(): string 212cab27678SBram Moolenaar v:foldstart = 123 213cab27678SBram Moolenaar return 'xxx' 214cab27678SBram Moolenaarenddef 215cab27678SBram Moolenaar 2168a7d6542SBram Moolenaarfunc Test_assignment_failure() 2178a7d6542SBram Moolenaar call CheckDefFailure(['let var=234'], 'E1004:') 2188a7d6542SBram Moolenaar call CheckDefFailure(['let var =234'], 'E1004:') 2198a7d6542SBram Moolenaar call CheckDefFailure(['let var= 234'], 'E1004:') 2208a7d6542SBram Moolenaar 2218a7d6542SBram Moolenaar call CheckDefFailure(['let true = 1'], 'E1034:') 2228a7d6542SBram Moolenaar call CheckDefFailure(['let false = 1'], 'E1034:') 2238a7d6542SBram Moolenaar 2249be61bbbSBram Moolenaar call CheckDefFailure(['let [a; b; c] = g:list'], 'E452:') 2259be61bbbSBram Moolenaar 226e69f6d04SBram Moolenaar call CheckDefFailure(['let somevar'], "E1022:") 2279be61bbbSBram Moolenaar call CheckDefFailure(['let &option'], 'E1052:') 2289be61bbbSBram Moolenaar call CheckDefFailure(['&g:option = 5'], 'E113:') 2299be61bbbSBram Moolenaar 2309be61bbbSBram Moolenaar call CheckDefFailure(['let $VAR = 5'], 'E1065:') 2319be61bbbSBram Moolenaar 2329be61bbbSBram Moolenaar call CheckDefFailure(['let @~ = 5'], 'E354:') 2339be61bbbSBram Moolenaar call CheckDefFailure(['let @a = 5'], 'E1066:') 2349be61bbbSBram Moolenaar 2359be61bbbSBram Moolenaar call CheckDefFailure(['let g:var = 5'], 'E1016:') 236*d3aac291SBram Moolenaar call CheckDefFailure(['let w:var = 5'], 'E1079:') 237*d3aac291SBram Moolenaar call CheckDefFailure(['let b:var = 5'], 'E1078:') 238*d3aac291SBram Moolenaar call CheckDefFailure(['let t:var = 5'], 'E1080:') 2399be61bbbSBram Moolenaar 2409be61bbbSBram Moolenaar call CheckDefFailure(['let anr = 4', 'anr ..= "text"'], 'E1019:') 2419be61bbbSBram Moolenaar call CheckDefFailure(['let xnr += 4'], 'E1020:') 2429be61bbbSBram Moolenaar 24333fa29cfSBram Moolenaar call CheckScriptFailure(['vim9script', 'def Func()', 'let dummy = s:notfound', 'enddef'], 'E1050:') 244*d3aac291SBram Moolenaar " TODO: implement this error 245*d3aac291SBram Moolenaar "call CheckScriptFailure(['vim9script', 'let svar = 123', 'unlet svar'], 'E1050:') 246*d3aac291SBram Moolenaar "call CheckScriptFailure(['vim9script', 'let svar = 123', 'unlet s:svar'], 'E1050:') 24733fa29cfSBram Moolenaar 2488a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<string> = [123]'], 'expected list<string> but got list<number>') 2498a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<number> = ["xx"]'], 'expected list<number> but got list<string>') 2508a7d6542SBram Moolenaar 2518a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<string> = #{key: 123}'], 'expected dict<string> but got dict<number>') 2528a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<number> = #{key: "xx"}'], 'expected dict<number> but got dict<string>') 2538a7d6542SBram Moolenaar 2548a7d6542SBram Moolenaar call CheckDefFailure(['let var = feedkeys("0")'], 'E1031:') 2558a7d6542SBram Moolenaar call CheckDefFailure(['let var: number = feedkeys("0")'], 'expected number but got void') 25642a480bfSBram Moolenaar 257d77a8525SBram Moolenaar call CheckDefFailure(['let var: dict <number>'], 'E1068:') 25842a480bfSBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 259cab27678SBram Moolenaar 260cab27678SBram Moolenaar call assert_fails('s/^/\=Mess()/n', 'E794:') 261cab27678SBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 262599c89c8SBram Moolenaarendfunc 263599c89c8SBram Moolenaar 264599c89c8SBram Moolenaarfunc Test_wrong_type() 265599c89c8SBram Moolenaar call CheckDefFailure(['let var: list<nothing>'], 'E1010:') 266599c89c8SBram Moolenaar call CheckDefFailure(['let var: list<list<nothing>>'], 'E1010:') 267599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<nothing>'], 'E1010:') 268599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<dict<nothing>>'], 'E1010:') 269599c89c8SBram Moolenaar 270599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 271599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<list<number>'], 'E1009:') 27242a480bfSBram Moolenaar 27342a480bfSBram Moolenaar call CheckDefFailure(['let var: ally'], 'E1010:') 27442a480bfSBram Moolenaar call CheckDefFailure(['let var: bram'], 'E1010:') 27542a480bfSBram Moolenaar call CheckDefFailure(['let var: cathy'], 'E1010:') 27642a480bfSBram Moolenaar call CheckDefFailure(['let var: dom'], 'E1010:') 27742a480bfSBram Moolenaar call CheckDefFailure(['let var: freddy'], 'E1010:') 27842a480bfSBram Moolenaar call CheckDefFailure(['let var: john'], 'E1010:') 27942a480bfSBram Moolenaar call CheckDefFailure(['let var: larry'], 'E1010:') 28042a480bfSBram Moolenaar call CheckDefFailure(['let var: ned'], 'E1010:') 28142a480bfSBram Moolenaar call CheckDefFailure(['let var: pam'], 'E1010:') 28242a480bfSBram Moolenaar call CheckDefFailure(['let var: sam'], 'E1010:') 28342a480bfSBram Moolenaar call CheckDefFailure(['let var: vim'], 'E1010:') 2848a7d6542SBram Moolenaarendfunc 2858a7d6542SBram Moolenaar 2868a7d6542SBram Moolenaarfunc Test_const() 2878a7d6542SBram Moolenaar call CheckDefFailure(['const var = 234', 'var = 99'], 'E1018:') 2888a7d6542SBram Moolenaar call CheckDefFailure(['const one = 234', 'let one = 99'], 'E1017:') 2898a7d6542SBram Moolenaar call CheckDefFailure(['const two'], 'E1021:') 2909be61bbbSBram Moolenaar call CheckDefFailure(['const &option'], 'E996:') 2918a7d6542SBram Moolenaarendfunc 2928a7d6542SBram Moolenaar 2938a7d6542SBram Moolenaardef Test_block() 2948a7d6542SBram Moolenaar let outer = 1 2958a7d6542SBram Moolenaar { 2968a7d6542SBram Moolenaar let inner = 2 2978a7d6542SBram Moolenaar assert_equal(1, outer) 2988a7d6542SBram Moolenaar assert_equal(2, inner) 2998a7d6542SBram Moolenaar } 3008a7d6542SBram Moolenaar assert_equal(1, outer) 3018a7d6542SBram Moolenaarenddef 3028a7d6542SBram Moolenaar 3038a7d6542SBram Moolenaarfunc Test_block_failure() 3048a7d6542SBram Moolenaar call CheckDefFailure(['{', 'let inner = 1', '}', 'echo inner'], 'E1001:') 305585fea7bSBram Moolenaar call CheckDefFailure(['}'], 'E1025:') 306585fea7bSBram Moolenaar call CheckDefFailure(['{', 'echo 1'], 'E1026:') 3078a7d6542SBram Moolenaarendfunc 3088a7d6542SBram Moolenaar 309585fea7bSBram Moolenaardef Test_cmd_modifier() 310585fea7bSBram Moolenaar tab echo '0' 311585fea7bSBram Moolenaar call CheckDefFailure(['5tab echo 3'], 'E16:') 312585fea7bSBram Moolenaarenddef 313585fea7bSBram Moolenaar 3148a7d6542SBram Moolenaardef Test_try_catch() 3158a7d6542SBram Moolenaar let l = [] 3167a092245SBram Moolenaar try # comment 3178a7d6542SBram Moolenaar add(l, '1') 3188a7d6542SBram Moolenaar throw 'wrong' 3198a7d6542SBram Moolenaar add(l, '2') 3207a092245SBram Moolenaar catch # comment 3218a7d6542SBram Moolenaar add(l, v:exception) 3227a092245SBram Moolenaar finally # comment 3238a7d6542SBram Moolenaar add(l, '3') 3247a092245SBram Moolenaar endtry # comment 3258a7d6542SBram Moolenaar assert_equal(['1', 'wrong', '3'], l) 3268a7d6542SBram Moolenaarenddef 3278a7d6542SBram Moolenaar 328257cc5eeSBram Moolenaardef ThrowFromDef() 329257cc5eeSBram Moolenaar throw 'getout' 330257cc5eeSBram Moolenaarenddef 331257cc5eeSBram Moolenaar 332257cc5eeSBram Moolenaarfunc CatchInFunc() 333257cc5eeSBram Moolenaar try 334257cc5eeSBram Moolenaar call ThrowFromDef() 335257cc5eeSBram Moolenaar catch 336257cc5eeSBram Moolenaar let g:thrown_func = v:exception 337257cc5eeSBram Moolenaar endtry 338257cc5eeSBram Moolenaarendfunc 339257cc5eeSBram Moolenaar 340257cc5eeSBram Moolenaardef CatchInDef() 341257cc5eeSBram Moolenaar try 342257cc5eeSBram Moolenaar ThrowFromDef() 343257cc5eeSBram Moolenaar catch 344257cc5eeSBram Moolenaar g:thrown_def = v:exception 345257cc5eeSBram Moolenaar endtry 346257cc5eeSBram Moolenaarenddef 347257cc5eeSBram Moolenaar 348f575adffSBram Moolenaardef ReturnFinally(): string 349f575adffSBram Moolenaar try 350f575adffSBram Moolenaar return 'intry' 351f575adffSBram Moolenaar finally 352f575adffSBram Moolenaar g:in_finally = 'finally' 353f575adffSBram Moolenaar endtry 354f575adffSBram Moolenaar return 'end' 355f575adffSBram Moolenaarenddef 356f575adffSBram Moolenaar 357257cc5eeSBram Moolenaardef Test_try_catch_nested() 358257cc5eeSBram Moolenaar CatchInFunc() 359257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_func) 360257cc5eeSBram Moolenaar 361257cc5eeSBram Moolenaar CatchInDef() 362257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_def) 363f575adffSBram Moolenaar 364f575adffSBram Moolenaar assert_equal('intry', ReturnFinally()) 365f575adffSBram Moolenaar assert_equal('finally', g:in_finally) 366f575adffSBram Moolenaarenddef 367f575adffSBram Moolenaar 368f575adffSBram Moolenaardef Test_try_catch_match() 369f575adffSBram Moolenaar let seq = 'a' 370f575adffSBram Moolenaar try 371f575adffSBram Moolenaar throw 'something' 372f575adffSBram Moolenaar catch /nothing/ 373f575adffSBram Moolenaar seq ..= 'x' 374f575adffSBram Moolenaar catch /some/ 375f575adffSBram Moolenaar seq ..= 'b' 376f575adffSBram Moolenaar catch /asdf/ 377f575adffSBram Moolenaar seq ..= 'x' 378e8c4abbbSBram Moolenaar catch ?a\?sdf? 379e8c4abbbSBram Moolenaar seq ..= 'y' 380f575adffSBram Moolenaar finally 381f575adffSBram Moolenaar seq ..= 'c' 382f575adffSBram Moolenaar endtry 383f575adffSBram Moolenaar assert_equal('abc', seq) 384257cc5eeSBram Moolenaarenddef 385257cc5eeSBram Moolenaar 386e8c4abbbSBram Moolenaardef Test_try_catch_fails() 387e8c4abbbSBram Moolenaar call CheckDefFailure(['catch'], 'E603:') 388e8c4abbbSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'catch','catch'], 'E1033:') 389e8c4abbbSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'catch /pat'], 'E1067:') 390585fea7bSBram Moolenaar call CheckDefFailure(['finally'], 'E606:') 391585fea7bSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'finally', 'echo 1', 'finally'], 'E607:') 392585fea7bSBram Moolenaar call CheckDefFailure(['endtry'], 'E602:') 393585fea7bSBram Moolenaar call CheckDefFailure(['while 1', 'endtry'], 'E170:') 394585fea7bSBram Moolenaar call CheckDefFailure(['for i in range(5)', 'endtry'], 'E170:') 395585fea7bSBram Moolenaar call CheckDefFailure(['if 2', 'endtry'], 'E171:') 396585fea7bSBram Moolenaar call CheckDefFailure(['try', 'echo 1', 'endtry'], 'E1032:') 397585fea7bSBram Moolenaar 398585fea7bSBram Moolenaar call CheckDefFailure(['throw'], 'E471:') 399585fea7bSBram Moolenaar call CheckDefFailure(['throw xxx'], 'E1001:') 400e8c4abbbSBram Moolenaarenddef 401e8c4abbbSBram Moolenaar 4028a7d6542SBram Moolenaarlet s:export_script_lines =<< trim END 4038a7d6542SBram Moolenaar vim9script 4048a7d6542SBram Moolenaar let name: string = 'bob' 4058a7d6542SBram Moolenaar def Concat(arg: string): string 4068a7d6542SBram Moolenaar return name .. arg 4078a7d6542SBram Moolenaar enddef 4088a7d6542SBram Moolenaar let g:result = Concat('bie') 4098a7d6542SBram Moolenaar let g:localname = name 4108a7d6542SBram Moolenaar 4118a7d6542SBram Moolenaar export const CONST = 1234 4128a7d6542SBram Moolenaar export let exported = 9876 4136e587dcbSBram Moolenaar export let exp_name = 'John' 4148a7d6542SBram Moolenaar export def Exported(): string 4158a7d6542SBram Moolenaar return 'Exported' 4168a7d6542SBram Moolenaar enddef 4178a7d6542SBram MoolenaarEND 4188a7d6542SBram Moolenaar 4195269bd2aSBram Moolenaardef Test_vim9_import_export() 4208a7d6542SBram Moolenaar let import_script_lines =<< trim END 4218a7d6542SBram Moolenaar vim9script 4228a7d6542SBram Moolenaar import {exported, Exported} from './Xexport.vim' 4238a7d6542SBram Moolenaar g:imported = exported 4246e587dcbSBram Moolenaar exported += 3 4256e587dcbSBram Moolenaar g:imported_added = exported 4268a7d6542SBram Moolenaar g:imported_func = Exported() 4276e587dcbSBram Moolenaar 4286e587dcbSBram Moolenaar import {exp_name} from './Xexport.vim' 4296e587dcbSBram Moolenaar g:imported_name = exp_name 4306e587dcbSBram Moolenaar exp_name ..= ' Doe' 4316e587dcbSBram Moolenaar g:imported_name_appended = exp_name 4325381c7a1SBram Moolenaar g:imported_later = exported 4338a7d6542SBram Moolenaar END 4348a7d6542SBram Moolenaar 4358a7d6542SBram Moolenaar writefile(import_script_lines, 'Ximport.vim') 4368a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport.vim') 4378a7d6542SBram Moolenaar 4388a7d6542SBram Moolenaar source Ximport.vim 4398a7d6542SBram Moolenaar 4408a7d6542SBram Moolenaar assert_equal('bobbie', g:result) 4418a7d6542SBram Moolenaar assert_equal('bob', g:localname) 4428a7d6542SBram Moolenaar assert_equal(9876, g:imported) 4436e587dcbSBram Moolenaar assert_equal(9879, g:imported_added) 4445381c7a1SBram Moolenaar assert_equal(9879, g:imported_later) 4458a7d6542SBram Moolenaar assert_equal('Exported', g:imported_func) 4466e587dcbSBram Moolenaar assert_equal('John', g:imported_name) 4476e587dcbSBram Moolenaar assert_equal('John Doe', g:imported_name_appended) 4488a7d6542SBram Moolenaar assert_false(exists('g:name')) 4498a7d6542SBram Moolenaar 4508a7d6542SBram Moolenaar unlet g:result 4518a7d6542SBram Moolenaar unlet g:localname 4528a7d6542SBram Moolenaar unlet g:imported 4536e587dcbSBram Moolenaar unlet g:imported_added 4545381c7a1SBram Moolenaar unlet g:imported_later 4558a7d6542SBram Moolenaar unlet g:imported_func 4566e587dcbSBram Moolenaar unlet g:imported_name g:imported_name_appended 4578a7d6542SBram Moolenaar delete('Ximport.vim') 458f2d5c240SBram Moolenaar 4595381c7a1SBram Moolenaar let import_in_def_lines =<< trim END 4605381c7a1SBram Moolenaar vim9script 4615381c7a1SBram Moolenaar def ImportInDef() 4625381c7a1SBram Moolenaar import exported from './Xexport.vim' 4635381c7a1SBram Moolenaar g:imported = exported 4645381c7a1SBram Moolenaar exported += 7 4655381c7a1SBram Moolenaar g:imported_added = exported 4665381c7a1SBram Moolenaar enddef 4675381c7a1SBram Moolenaar ImportInDef() 4685381c7a1SBram Moolenaar END 4695381c7a1SBram Moolenaar writefile(import_in_def_lines, 'Ximport2.vim') 4705381c7a1SBram Moolenaar source Ximport2.vim 4715381c7a1SBram Moolenaar " TODO: this should be 9879 4725381c7a1SBram Moolenaar assert_equal(9876, g:imported) 4735381c7a1SBram Moolenaar assert_equal(9883, g:imported_added) 4745381c7a1SBram Moolenaar unlet g:imported 4755381c7a1SBram Moolenaar unlet g:imported_added 4765381c7a1SBram Moolenaar delete('Ximport2.vim') 4775381c7a1SBram Moolenaar 478f2d5c240SBram Moolenaar let import_star_as_lines =<< trim END 479f2d5c240SBram Moolenaar vim9script 480f2d5c240SBram Moolenaar import * as Export from './Xexport.vim' 481f2d5c240SBram Moolenaar def UseExport() 482f2d5c240SBram Moolenaar g:imported = Export.exported 483f2d5c240SBram Moolenaar enddef 484f2d5c240SBram Moolenaar UseExport() 485f2d5c240SBram Moolenaar END 486f2d5c240SBram Moolenaar writefile(import_star_as_lines, 'Ximport.vim') 487f2d5c240SBram Moolenaar source Ximport.vim 4885381c7a1SBram Moolenaar assert_equal(9883, g:imported) 489f2d5c240SBram Moolenaar 490599c89c8SBram Moolenaar let import_star_as_lines_no_dot =<< trim END 491599c89c8SBram Moolenaar vim9script 492599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 493599c89c8SBram Moolenaar def Func() 494599c89c8SBram Moolenaar let dummy = 1 495599c89c8SBram Moolenaar let imported = Export + dummy 496599c89c8SBram Moolenaar enddef 497599c89c8SBram Moolenaar END 498599c89c8SBram Moolenaar writefile(import_star_as_lines_no_dot, 'Ximport.vim') 499599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1060:') 500599c89c8SBram Moolenaar 501599c89c8SBram Moolenaar let import_star_as_lines_dot_space =<< trim END 502599c89c8SBram Moolenaar vim9script 503599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 504599c89c8SBram Moolenaar def Func() 505599c89c8SBram Moolenaar let imported = Export . exported 506599c89c8SBram Moolenaar enddef 507599c89c8SBram Moolenaar END 508599c89c8SBram Moolenaar writefile(import_star_as_lines_dot_space, 'Ximport.vim') 509599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1074:') 510599c89c8SBram Moolenaar 511599c89c8SBram Moolenaar let import_star_as_lines_missing_name =<< trim END 512599c89c8SBram Moolenaar vim9script 513599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 514599c89c8SBram Moolenaar def Func() 515599c89c8SBram Moolenaar let imported = Export. 516599c89c8SBram Moolenaar enddef 517599c89c8SBram Moolenaar END 518599c89c8SBram Moolenaar writefile(import_star_as_lines_missing_name, 'Ximport.vim') 519599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 520599c89c8SBram Moolenaar 521f2d5c240SBram Moolenaar let import_star_lines =<< trim END 522f2d5c240SBram Moolenaar vim9script 523f2d5c240SBram Moolenaar import * from './Xexport.vim' 524f2d5c240SBram Moolenaar g:imported = exported 525f2d5c240SBram Moolenaar END 526f2d5c240SBram Moolenaar writefile(import_star_lines, 'Ximport.vim') 527f2d5c240SBram Moolenaar assert_fails('source Ximport.vim', 'E1045:') 528f2d5c240SBram Moolenaar 529fa29c8abSBram Moolenaar " try to import something that exists but is not exported 530fa29c8abSBram Moolenaar let import_not_exported_lines =<< trim END 531fa29c8abSBram Moolenaar vim9script 532fa29c8abSBram Moolenaar import name from './Xexport.vim' 533fa29c8abSBram Moolenaar END 534fa29c8abSBram Moolenaar writefile(import_not_exported_lines, 'Ximport.vim') 535fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1049:') 536fa29c8abSBram Moolenaar 5375269bd2aSBram Moolenaar " try to import something that is already defined 5385269bd2aSBram Moolenaar let import_already_defined =<< trim END 5395269bd2aSBram Moolenaar vim9script 5405269bd2aSBram Moolenaar let exported = 'something' 5415269bd2aSBram Moolenaar import exported from './Xexport.vim' 5425269bd2aSBram Moolenaar END 5435269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 5445269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 5455269bd2aSBram Moolenaar 5465269bd2aSBram Moolenaar " try to import something that is already defined 5475269bd2aSBram Moolenaar import_already_defined =<< trim END 5485269bd2aSBram Moolenaar vim9script 5495269bd2aSBram Moolenaar let exported = 'something' 5505269bd2aSBram Moolenaar import * as exported from './Xexport.vim' 5515269bd2aSBram Moolenaar END 5525269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 5535269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 5545269bd2aSBram Moolenaar 5555269bd2aSBram Moolenaar " try to import something that is already defined 5565269bd2aSBram Moolenaar import_already_defined =<< trim END 5575269bd2aSBram Moolenaar vim9script 5585269bd2aSBram Moolenaar let exported = 'something' 5595269bd2aSBram Moolenaar import {exported} from './Xexport.vim' 5605269bd2aSBram Moolenaar END 5615269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 5625269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 5635269bd2aSBram Moolenaar 564fa29c8abSBram Moolenaar " import a very long name, requires making a copy 565fa29c8abSBram Moolenaar let import_long_name_lines =<< trim END 566fa29c8abSBram Moolenaar vim9script 567fa29c8abSBram Moolenaar import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim' 568fa29c8abSBram Moolenaar END 569fa29c8abSBram Moolenaar writefile(import_long_name_lines, 'Ximport.vim') 570fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 571fa29c8abSBram Moolenaar 572fa29c8abSBram Moolenaar let import_no_from_lines =<< trim END 573fa29c8abSBram Moolenaar vim9script 574fa29c8abSBram Moolenaar import name './Xexport.vim' 575fa29c8abSBram Moolenaar END 576fa29c8abSBram Moolenaar writefile(import_no_from_lines, 'Ximport.vim') 577fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1070:') 578fa29c8abSBram Moolenaar 579fa29c8abSBram Moolenaar let import_invalid_string_lines =<< trim END 580fa29c8abSBram Moolenaar vim9script 581fa29c8abSBram Moolenaar import name from Xexport.vim 582fa29c8abSBram Moolenaar END 583fa29c8abSBram Moolenaar writefile(import_invalid_string_lines, 'Ximport.vim') 584fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1071:') 585fa29c8abSBram Moolenaar 586fa29c8abSBram Moolenaar let import_wrong_name_lines =<< trim END 587fa29c8abSBram Moolenaar vim9script 588fa29c8abSBram Moolenaar import name from './XnoExport.vim' 589fa29c8abSBram Moolenaar END 590fa29c8abSBram Moolenaar writefile(import_wrong_name_lines, 'Ximport.vim') 591fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1053:') 592fa29c8abSBram Moolenaar 593fa29c8abSBram Moolenaar let import_missing_comma_lines =<< trim END 594fa29c8abSBram Moolenaar vim9script 595fa29c8abSBram Moolenaar import {exported name} from './Xexport.vim' 596fa29c8abSBram Moolenaar END 5975269bd2aSBram Moolenaar writefile(import_missing_comma_lines, 'Ximport3.vim') 5985269bd2aSBram Moolenaar assert_fails('source Ximport3.vim', 'E1046:') 599fa29c8abSBram Moolenaar 600f2d5c240SBram Moolenaar delete('Ximport.vim') 6015269bd2aSBram Moolenaar delete('Ximport3.vim') 6028a7d6542SBram Moolenaar delete('Xexport.vim') 6038a7d6542SBram Moolenaar 604750802b5SBram Moolenaar " Check that in a Vim9 script 'cpo' is set to the Vim default. 605750802b5SBram Moolenaar set cpo&vi 606750802b5SBram Moolenaar let cpo_before = &cpo 607750802b5SBram Moolenaar let lines =<< trim END 608750802b5SBram Moolenaar vim9script 609750802b5SBram Moolenaar g:cpo_in_vim9script = &cpo 610750802b5SBram Moolenaar END 611750802b5SBram Moolenaar writefile(lines, 'Xvim9_script') 612750802b5SBram Moolenaar source Xvim9_script 613750802b5SBram Moolenaar assert_equal(cpo_before, &cpo) 614750802b5SBram Moolenaar set cpo&vim 615750802b5SBram Moolenaar assert_equal(&cpo, g:cpo_in_vim9script) 616750802b5SBram Moolenaar delete('Xvim9_script') 617750802b5SBram Moolenaarenddef 618750802b5SBram Moolenaar 619750802b5SBram Moolenaardef Test_vim9script_fails() 6208a7d6542SBram Moolenaar CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:') 6218a7d6542SBram Moolenaar CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:') 622750802b5SBram Moolenaar CheckScriptFailure(['export let some = 123'], 'E1042:') 623f2d5c240SBram Moolenaar CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1042:') 624750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export let g:some'], 'E1044:') 625750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:') 626750802b5SBram Moolenaar 627750802b5SBram Moolenaar assert_fails('vim9script', 'E1038') 628a26b9700SBram Moolenaar assert_fails('export something', 'E1043') 6298a7d6542SBram Moolenaarenddef 6308a7d6542SBram Moolenaar 6318a7d6542SBram Moolenaardef Test_vim9script_reload() 6328a7d6542SBram Moolenaar let lines =<< trim END 6338a7d6542SBram Moolenaar vim9script 6348a7d6542SBram Moolenaar const var = '' 6358a7d6542SBram Moolenaar let valone = 1234 6368a7d6542SBram Moolenaar def MyFunc(arg: string) 6378a7d6542SBram Moolenaar valone = 5678 6388a7d6542SBram Moolenaar enddef 6398a7d6542SBram Moolenaar END 6408a7d6542SBram Moolenaar let morelines =<< trim END 6418a7d6542SBram Moolenaar let valtwo = 222 6428a7d6542SBram Moolenaar export def GetValtwo(): number 6438a7d6542SBram Moolenaar return valtwo 6448a7d6542SBram Moolenaar enddef 6458a7d6542SBram Moolenaar END 646675f716eSBram Moolenaar writefile(lines + morelines, 647675f716eSBram Moolenaar 'Xreload.vim') 6488a7d6542SBram Moolenaar source Xreload.vim 6498a7d6542SBram Moolenaar source Xreload.vim 6508a7d6542SBram Moolenaar source Xreload.vim 6518a7d6542SBram Moolenaar 6528a7d6542SBram Moolenaar let testlines =<< trim END 6538a7d6542SBram Moolenaar vim9script 6548a7d6542SBram Moolenaar def TheFunc() 6558a7d6542SBram Moolenaar import GetValtwo from './Xreload.vim' 6568a7d6542SBram Moolenaar assert_equal(222, GetValtwo()) 6578a7d6542SBram Moolenaar enddef 6588a7d6542SBram Moolenaar TheFunc() 6598a7d6542SBram Moolenaar END 6608a7d6542SBram Moolenaar writefile(testlines, 'Ximport.vim') 6618a7d6542SBram Moolenaar source Ximport.vim 6628a7d6542SBram Moolenaar 6638a7d6542SBram Moolenaar " test that when not using "morelines" valtwo is still defined 6648a7d6542SBram Moolenaar " need to source Xreload.vim again, import doesn't reload a script 6658a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 6668a7d6542SBram Moolenaar source Xreload.vim 6678a7d6542SBram Moolenaar source Ximport.vim 6688a7d6542SBram Moolenaar 6698a7d6542SBram Moolenaar " cannot declare a var twice 6708a7d6542SBram Moolenaar lines =<< trim END 6718a7d6542SBram Moolenaar vim9script 6728a7d6542SBram Moolenaar let valone = 1234 6738a7d6542SBram Moolenaar let valone = 5678 6748a7d6542SBram Moolenaar END 6758a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 6768a7d6542SBram Moolenaar assert_fails('source Xreload.vim', 'E1041:') 6778a7d6542SBram Moolenaar 6788a7d6542SBram Moolenaar delete('Xreload.vim') 6798a7d6542SBram Moolenaar delete('Ximport.vim') 6808a7d6542SBram Moolenaarenddef 6818a7d6542SBram Moolenaar 6828a7d6542SBram Moolenaardef Test_import_absolute() 6838a7d6542SBram Moolenaar let import_lines = [ 684e6085c53SBram Moolenaar 'vim9script', 685e6085c53SBram Moolenaar 'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"', 686e6085c53SBram Moolenaar 'def UseExported()', 687e6085c53SBram Moolenaar ' g:imported_abs = exported', 688e6085c53SBram Moolenaar ' exported = 8888', 689e6085c53SBram Moolenaar ' g:imported_after = exported', 690e6085c53SBram Moolenaar 'enddef', 691e6085c53SBram Moolenaar 'UseExported()', 692e6085c53SBram Moolenaar 'g:import_disassembled = execute("disass UseExported")', 693e6085c53SBram Moolenaar ] 6948a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_abs.vim') 6958a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport_abs.vim') 6968a7d6542SBram Moolenaar 6978a7d6542SBram Moolenaar source Ximport_abs.vim 6988a7d6542SBram Moolenaar 6998a7d6542SBram Moolenaar assert_equal(9876, g:imported_abs) 7004e12a5dfSBram Moolenaar assert_equal(8888, g:imported_after) 701675f716eSBram Moolenaar assert_match('<SNR>\d\+_UseExported.*' .. 702675f716eSBram Moolenaar 'g:imported_abs = exported.*' .. 703675f716eSBram Moolenaar '0 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 704675f716eSBram Moolenaar '1 STOREG g:imported_abs.*' .. 705675f716eSBram Moolenaar 'exported = 8888.*' .. 706675f716eSBram Moolenaar '3 STORESCRIPT exported in .*Xexport_abs.vim.*' .. 707675f716eSBram Moolenaar 'g:imported_after = exported.*' .. 708675f716eSBram Moolenaar '4 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 709675f716eSBram Moolenaar '5 STOREG g:imported_after.*', 710e6085c53SBram Moolenaar g:import_disassembled) 7118a7d6542SBram Moolenaar unlet g:imported_abs 7124e12a5dfSBram Moolenaar unlet g:import_disassembled 7138a7d6542SBram Moolenaar 7148a7d6542SBram Moolenaar delete('Ximport_abs.vim') 7158a7d6542SBram Moolenaar delete('Xexport_abs.vim') 7168a7d6542SBram Moolenaarenddef 7178a7d6542SBram Moolenaar 7188a7d6542SBram Moolenaardef Test_import_rtp() 7198a7d6542SBram Moolenaar let import_lines = [ 720e6085c53SBram Moolenaar 'vim9script', 721e6085c53SBram Moolenaar 'import exported from "Xexport_rtp.vim"', 722e6085c53SBram Moolenaar 'g:imported_rtp = exported', 723e6085c53SBram Moolenaar ] 7248a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_rtp.vim') 7258a7d6542SBram Moolenaar mkdir('import') 7268a7d6542SBram Moolenaar writefile(s:export_script_lines, 'import/Xexport_rtp.vim') 7278a7d6542SBram Moolenaar 7288a7d6542SBram Moolenaar let save_rtp = &rtp 7298a7d6542SBram Moolenaar &rtp = getcwd() 7308a7d6542SBram Moolenaar source Ximport_rtp.vim 7318a7d6542SBram Moolenaar &rtp = save_rtp 7328a7d6542SBram Moolenaar 7338a7d6542SBram Moolenaar assert_equal(9876, g:imported_rtp) 7348a7d6542SBram Moolenaar unlet g:imported_rtp 7358a7d6542SBram Moolenaar 7368a7d6542SBram Moolenaar delete('Ximport_rtp.vim') 7378a7d6542SBram Moolenaar delete('import/Xexport_rtp.vim') 7388a7d6542SBram Moolenaar delete('import', 'd') 7398a7d6542SBram Moolenaarenddef 7408a7d6542SBram Moolenaar 7418a7d6542SBram Moolenaardef Test_fixed_size_list() 7428a7d6542SBram Moolenaar " will be allocated as one piece of memory, check that changes work 7438a7d6542SBram Moolenaar let l = [1, 2, 3, 4] 7448a7d6542SBram Moolenaar l->remove(0) 7458a7d6542SBram Moolenaar l->add(5) 7468a7d6542SBram Moolenaar l->insert(99, 1) 7470f18b6d1SBram Moolenaar assert_equal([2, 99, 3, 4, 5], l) 7488a7d6542SBram Moolenaarenddef 7498a7d6542SBram Moolenaar 750158906cfSBram Moolenaardef IfElse(what: number): string 751158906cfSBram Moolenaar let res = '' 752158906cfSBram Moolenaar if what == 1 753158906cfSBram Moolenaar res = "one" 754158906cfSBram Moolenaar elseif what == 2 755158906cfSBram Moolenaar res = "two" 756a259d8d3SBram Moolenaar else 757158906cfSBram Moolenaar res = "three" 758a259d8d3SBram Moolenaar endif 759158906cfSBram Moolenaar return res 760a259d8d3SBram Moolenaarenddef 761a259d8d3SBram Moolenaar 762158906cfSBram Moolenaardef Test_if_elseif_else() 763158906cfSBram Moolenaar assert_equal('one', IfElse(1)) 764158906cfSBram Moolenaar assert_equal('two', IfElse(2)) 765158906cfSBram Moolenaar assert_equal('three', IfElse(3)) 7660f18b6d1SBram Moolenaarenddef 7670f18b6d1SBram Moolenaar 768e8c4abbbSBram Moolenaardef Test_if_elseif_else_fails() 769e8c4abbbSBram Moolenaar call CheckDefFailure(['elseif true'], 'E582:') 770e8c4abbbSBram Moolenaar call CheckDefFailure(['else'], 'E581:') 771e8c4abbbSBram Moolenaar call CheckDefFailure(['endif'], 'E580:') 772e8c4abbbSBram Moolenaar call CheckDefFailure(['if true', 'elseif xxx'], 'E1001:') 773585fea7bSBram Moolenaar call CheckDefFailure(['if true', 'echo 1'], 'E171:') 774e8c4abbbSBram Moolenaarenddef 775e8c4abbbSBram Moolenaar 7766d69bf60SBram Moolenaarlet g:bool_true = v:true 7776d69bf60SBram Moolenaarlet g:bool_false = v:false 7786d69bf60SBram Moolenaar 7796d69bf60SBram Moolenaardef Test_if_const_expr() 7806d69bf60SBram Moolenaar let res = false 7816d69bf60SBram Moolenaar if true ? true : false 7826d69bf60SBram Moolenaar res = true 7836d69bf60SBram Moolenaar endif 7846d69bf60SBram Moolenaar assert_equal(true, res) 7856d69bf60SBram Moolenaar 786585fea7bSBram Moolenaar g:glob = 2 787585fea7bSBram Moolenaar if false 788585fea7bSBram Moolenaar execute('let g:glob = 3') 789585fea7bSBram Moolenaar endif 790585fea7bSBram Moolenaar assert_equal(2, g:glob) 791585fea7bSBram Moolenaar if true 792585fea7bSBram Moolenaar execute('let g:glob = 3') 793585fea7bSBram Moolenaar endif 794585fea7bSBram Moolenaar assert_equal(3, g:glob) 795585fea7bSBram Moolenaar 7966d69bf60SBram Moolenaar res = false 7976d69bf60SBram Moolenaar if g:bool_true ? true : false 7986d69bf60SBram Moolenaar res = true 7996d69bf60SBram Moolenaar endif 8006d69bf60SBram Moolenaar assert_equal(true, res) 8016d69bf60SBram Moolenaar 8026d69bf60SBram Moolenaar res = false 8036d69bf60SBram Moolenaar if true ? g:bool_true : false 8046d69bf60SBram Moolenaar res = true 8056d69bf60SBram Moolenaar endif 8066d69bf60SBram Moolenaar assert_equal(true, res) 8076d69bf60SBram Moolenaar 8086d69bf60SBram Moolenaar res = false 8096d69bf60SBram Moolenaar if true ? true : g:bool_false 8106d69bf60SBram Moolenaar res = true 8116d69bf60SBram Moolenaar endif 8126d69bf60SBram Moolenaar assert_equal(true, res) 8136d69bf60SBram Moolenaar 8146d69bf60SBram Moolenaar res = false 8156d69bf60SBram Moolenaar if true ? false : true 8166d69bf60SBram Moolenaar res = true 8176d69bf60SBram Moolenaar endif 8186d69bf60SBram Moolenaar assert_equal(false, res) 8196d69bf60SBram Moolenaar 8206d69bf60SBram Moolenaar res = false 8216d69bf60SBram Moolenaar if false ? false : true 8226d69bf60SBram Moolenaar res = true 8236d69bf60SBram Moolenaar endif 8246d69bf60SBram Moolenaar assert_equal(true, res) 8256d69bf60SBram Moolenaar 8266d69bf60SBram Moolenaar res = false 8276d69bf60SBram Moolenaar if false ? true : false 8286d69bf60SBram Moolenaar res = true 8296d69bf60SBram Moolenaar endif 8306d69bf60SBram Moolenaar assert_equal(false, res) 8316d69bf60SBram Moolenaar 8326d69bf60SBram Moolenaar res = false 833e8c4abbbSBram Moolenaar if has('xyz') ? true : false 834e8c4abbbSBram Moolenaar res = true 835e8c4abbbSBram Moolenaar endif 836e8c4abbbSBram Moolenaar assert_equal(false, res) 837e8c4abbbSBram Moolenaar 838e8c4abbbSBram Moolenaar res = false 8396d69bf60SBram Moolenaar if true && true 8406d69bf60SBram Moolenaar res = true 8416d69bf60SBram Moolenaar endif 8426d69bf60SBram Moolenaar assert_equal(true, res) 8436d69bf60SBram Moolenaar 8446d69bf60SBram Moolenaar res = false 8456d69bf60SBram Moolenaar if true && false 8466d69bf60SBram Moolenaar res = true 8476d69bf60SBram Moolenaar endif 8486d69bf60SBram Moolenaar assert_equal(false, res) 8496d69bf60SBram Moolenaar 8506d69bf60SBram Moolenaar res = false 8516d69bf60SBram Moolenaar if g:bool_true && false 8526d69bf60SBram Moolenaar res = true 8536d69bf60SBram Moolenaar endif 8546d69bf60SBram Moolenaar assert_equal(false, res) 8556d69bf60SBram Moolenaar 8566d69bf60SBram Moolenaar res = false 8576d69bf60SBram Moolenaar if true && g:bool_false 8586d69bf60SBram Moolenaar res = true 8596d69bf60SBram Moolenaar endif 8606d69bf60SBram Moolenaar assert_equal(false, res) 8616d69bf60SBram Moolenaar 8626d69bf60SBram Moolenaar res = false 8636d69bf60SBram Moolenaar if false && false 8646d69bf60SBram Moolenaar res = true 8656d69bf60SBram Moolenaar endif 8666d69bf60SBram Moolenaar assert_equal(false, res) 8676d69bf60SBram Moolenaar 8686d69bf60SBram Moolenaar res = false 8696d69bf60SBram Moolenaar if true || false 8706d69bf60SBram Moolenaar res = true 8716d69bf60SBram Moolenaar endif 8726d69bf60SBram Moolenaar assert_equal(true, res) 8736d69bf60SBram Moolenaar 8746d69bf60SBram Moolenaar res = false 8756d69bf60SBram Moolenaar if g:bool_true || false 8766d69bf60SBram Moolenaar res = true 8776d69bf60SBram Moolenaar endif 8786d69bf60SBram Moolenaar assert_equal(true, res) 8796d69bf60SBram Moolenaar 8806d69bf60SBram Moolenaar res = false 8816d69bf60SBram Moolenaar if true || g:bool_false 8826d69bf60SBram Moolenaar res = true 8836d69bf60SBram Moolenaar endif 8846d69bf60SBram Moolenaar assert_equal(true, res) 8856d69bf60SBram Moolenaar 8866d69bf60SBram Moolenaar res = false 8876d69bf60SBram Moolenaar if false || false 8886d69bf60SBram Moolenaar res = true 8896d69bf60SBram Moolenaar endif 8906d69bf60SBram Moolenaar assert_equal(false, res) 89180c34ca3SBram Moolenaarenddef 8926d69bf60SBram Moolenaar 89380c34ca3SBram Moolenaardef Test_if_const_expr_fails() 89480c34ca3SBram Moolenaar call CheckDefFailure(['if "aaa" == "bbb'], 'E114:') 89580c34ca3SBram Moolenaar call CheckDefFailure(["if 'aaa' == 'bbb"], 'E115:') 896e8c4abbbSBram Moolenaar call CheckDefFailure(["if has('aaa'"], 'E110:') 897e8c4abbbSBram Moolenaar call CheckDefFailure(["if has('aaa') ? true false"], 'E109:') 8986d69bf60SBram Moolenaarenddef 8996d69bf60SBram Moolenaar 900ad39c094SBram Moolenaardef Test_execute_cmd() 901ad39c094SBram Moolenaar new 902ad39c094SBram Moolenaar setline(1, 'default') 903ad39c094SBram Moolenaar execute 'call setline(1, "execute-string")' 904ad39c094SBram Moolenaar assert_equal('execute-string', getline(1)) 905ad39c094SBram Moolenaar let cmd1 = 'call setline(1,' 906ad39c094SBram Moolenaar let cmd2 = '"execute-var")' 907ad39c094SBram Moolenaar execute cmd1 cmd2 908ad39c094SBram Moolenaar assert_equal('execute-var', getline(1)) 909ad39c094SBram Moolenaar execute cmd1 cmd2 '|call setline(1, "execute-var-string")' 910ad39c094SBram Moolenaar assert_equal('execute-var-string', getline(1)) 911ad39c094SBram Moolenaar let cmd_first = 'call ' 912ad39c094SBram Moolenaar let cmd_last = 'setline(1, "execute-var-var")' 913ad39c094SBram Moolenaar execute cmd_first .. cmd_last 914ad39c094SBram Moolenaar assert_equal('execute-var-var', getline(1)) 915ad39c094SBram Moolenaar bwipe! 916585fea7bSBram Moolenaar 917585fea7bSBram Moolenaar call CheckDefFailure(['execute xxx'], 'E1001:') 918ad39c094SBram Moolenaarenddef 919ad39c094SBram Moolenaar 920ad39c094SBram Moolenaardef Test_echo_cmd() 921585fea7bSBram Moolenaar echo 'some' 922585fea7bSBram Moolenaar echon 'thing' 923ad39c094SBram Moolenaar assert_match('^something$', Screenline(&lines)) 924ad39c094SBram Moolenaar 925ad39c094SBram Moolenaar let str1 = 'some' 926ad39c094SBram Moolenaar let str2 = 'more' 927ad39c094SBram Moolenaar echo str1 str2 928ad39c094SBram Moolenaar assert_match('^some more$', Screenline(&lines)) 929ad39c094SBram Moolenaarenddef 930ad39c094SBram Moolenaar 93141fe0617SBram Moolenaardef Test_for_outside_of_function() 93241fe0617SBram Moolenaar let lines =<< trim END 93341fe0617SBram Moolenaar vim9script 93441fe0617SBram Moolenaar new 93541fe0617SBram Moolenaar for var in range(0, 3) 93641fe0617SBram Moolenaar append(line('$'), var) 93741fe0617SBram Moolenaar endfor 93841fe0617SBram Moolenaar assert_equal(['', '0', '1', '2', '3'], getline(1, '$')) 93941fe0617SBram Moolenaar bwipe! 94041fe0617SBram Moolenaar END 94141fe0617SBram Moolenaar writefile(lines, 'Xvim9for.vim') 94241fe0617SBram Moolenaar source Xvim9for.vim 94341fe0617SBram Moolenaar delete('Xvim9for.vim') 94441fe0617SBram Moolenaarenddef 9458a7d6542SBram Moolenaar 946e8c4abbbSBram Moolenaardef Test_for_loop() 947e8c4abbbSBram Moolenaar let result = '' 948e8c4abbbSBram Moolenaar for cnt in range(7) 949e8c4abbbSBram Moolenaar if cnt == 4 950e8c4abbbSBram Moolenaar break 951e8c4abbbSBram Moolenaar endif 952e8c4abbbSBram Moolenaar if cnt == 2 953e8c4abbbSBram Moolenaar continue 954e8c4abbbSBram Moolenaar endif 955e8c4abbbSBram Moolenaar result ..= cnt .. '_' 956e8c4abbbSBram Moolenaar endfor 957e8c4abbbSBram Moolenaar assert_equal('0_1_3_', result) 958e8c4abbbSBram Moolenaarenddef 959e8c4abbbSBram Moolenaar 960e8c4abbbSBram Moolenaardef Test_for_loop_fails() 961675f716eSBram Moolenaar CheckDefFailure(['for # in range(5)'], 'E690:') 962675f716eSBram Moolenaar CheckDefFailure(['for i In range(5)'], 'E690:') 963675f716eSBram Moolenaar CheckDefFailure(['let x = 5', 'for x in range(5)'], 'E1023:') 9646e949784SBram Moolenaar CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef'], 'E1006:') 965675f716eSBram Moolenaar CheckDefFailure(['for i in "text"'], 'E1024:') 966675f716eSBram Moolenaar CheckDefFailure(['for i in xxx'], 'E1001:') 967675f716eSBram Moolenaar CheckDefFailure(['endfor'], 'E588:') 968675f716eSBram Moolenaar CheckDefFailure(['for i in range(3)', 'echo 3'], 'E170:') 969e8c4abbbSBram Moolenaarenddef 970e8c4abbbSBram Moolenaar 971d0df1aacSBram Moolenaardef Test_while_loop() 972d0df1aacSBram Moolenaar let result = '' 973d0df1aacSBram Moolenaar let cnt = 0 974d0df1aacSBram Moolenaar while cnt < 555 975d0df1aacSBram Moolenaar if cnt == 3 976d0df1aacSBram Moolenaar break 977d0df1aacSBram Moolenaar endif 978d0df1aacSBram Moolenaar cnt += 1 979d0df1aacSBram Moolenaar if cnt == 2 980d0df1aacSBram Moolenaar continue 981d0df1aacSBram Moolenaar endif 982d0df1aacSBram Moolenaar result ..= cnt .. '_' 983d0df1aacSBram Moolenaar endwhile 984d0df1aacSBram Moolenaar assert_equal('1_3_', result) 985d0df1aacSBram Moolenaarenddef 986d0df1aacSBram Moolenaar 987e8c4abbbSBram Moolenaardef Test_while_loop_fails() 988675f716eSBram Moolenaar CheckDefFailure(['while xxx'], 'E1001:') 989675f716eSBram Moolenaar CheckDefFailure(['endwhile'], 'E588:') 990675f716eSBram Moolenaar CheckDefFailure(['continue'], 'E586:') 991675f716eSBram Moolenaar CheckDefFailure(['if true', 'continue'], 'E586:') 992675f716eSBram Moolenaar CheckDefFailure(['break'], 'E587:') 993675f716eSBram Moolenaar CheckDefFailure(['if true', 'break'], 'E587:') 994675f716eSBram Moolenaar CheckDefFailure(['while 1', 'echo 3'], 'E170:') 995bd5da371SBram Moolenaarenddef 996bd5da371SBram Moolenaar 9979645e2d9SBram Moolenaardef Test_interrupt_loop() 99897acfc78SBram Moolenaar let caught = false 9999645e2d9SBram Moolenaar let x = 0 100097acfc78SBram Moolenaar try 10019645e2d9SBram Moolenaar while 1 10029645e2d9SBram Moolenaar x += 1 10039645e2d9SBram Moolenaar if x == 100 10049645e2d9SBram Moolenaar feedkeys("\<C-C>", 'Lt') 10059645e2d9SBram Moolenaar endif 10069645e2d9SBram Moolenaar endwhile 100797acfc78SBram Moolenaar catch 100897acfc78SBram Moolenaar caught = true 100997acfc78SBram Moolenaar assert_equal(100, x) 101097acfc78SBram Moolenaar endtry 101197acfc78SBram Moolenaar assert_true(caught, 'should have caught an exception') 10129645e2d9SBram Moolenaarenddef 101320431c9dSBram Moolenaar 10144fdae999SBram Moolenaardef Test_automatic_line_continuation() 10154fdae999SBram Moolenaar let mylist = [ 10164fdae999SBram Moolenaar 'one', 10174fdae999SBram Moolenaar 'two', 10184fdae999SBram Moolenaar 'three', 10194fdae999SBram Moolenaar ] " comment 10204fdae999SBram Moolenaar assert_equal(['one', 'two', 'three'], mylist) 10214fdae999SBram Moolenaar 10224fdae999SBram Moolenaar let mydict = { 10234fdae999SBram Moolenaar 'one': 1, 10244fdae999SBram Moolenaar 'two': 2, 10254fdae999SBram Moolenaar 'three': 10264fdae999SBram Moolenaar 3, 10274fdae999SBram Moolenaar } " comment 10284fdae999SBram Moolenaar assert_equal({'one': 1, 'two': 2, 'three': 3}, mydict) 10294fdae999SBram Moolenaar mydict = #{ 10302c330432SBram Moolenaar one: 1, # comment 10312c330432SBram Moolenaar two: # comment 10322c330432SBram Moolenaar 2, # comment 10332c330432SBram Moolenaar three: 3 # comment 10342c330432SBram Moolenaar } 10352c330432SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 10362c330432SBram Moolenaar mydict = #{ 10372c330432SBram Moolenaar one: 1, 10384fdae999SBram Moolenaar two: 10394fdae999SBram Moolenaar 2, 10402c330432SBram Moolenaar three: 3 10414fdae999SBram Moolenaar } 10424fdae999SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 1043e6085c53SBram Moolenaar 1044e6085c53SBram Moolenaar assert_equal( 1045e6085c53SBram Moolenaar ['one', 'two', 'three'], 1046e6085c53SBram Moolenaar split('one two three') 1047e6085c53SBram Moolenaar ) 10484fdae999SBram Moolenaarenddef 10494fdae999SBram Moolenaar 10507a092245SBram Moolenaardef Test_vim9_comment() 10517a092245SBram Moolenaar CheckScriptSuccess([ 10527a092245SBram Moolenaar 'vim9script', 10537a092245SBram Moolenaar '# something', 10547a092245SBram Moolenaar ]) 10557a092245SBram Moolenaar CheckScriptFailure([ 10567a092245SBram Moolenaar 'vim9script', 10577a092245SBram Moolenaar ':# something', 10587a092245SBram Moolenaar ], 'E488:') 10597a092245SBram Moolenaar CheckScriptFailure([ 10607a092245SBram Moolenaar '# something', 10617a092245SBram Moolenaar ], 'E488:') 10627a092245SBram Moolenaar CheckScriptFailure([ 10637a092245SBram Moolenaar ':# something', 10647a092245SBram Moolenaar ], 'E488:') 10657a092245SBram Moolenaar 10664a8d9f2eSBram Moolenaar { # block start 10674a8d9f2eSBram Moolenaar } # block end 10684a8d9f2eSBram Moolenaar CheckDefFailure([ 10694a8d9f2eSBram Moolenaar '{# comment', 10704a8d9f2eSBram Moolenaar ], 'E488:') 10714a8d9f2eSBram Moolenaar CheckDefFailure([ 10724a8d9f2eSBram Moolenaar '{', 10734a8d9f2eSBram Moolenaar '}# comment', 10744a8d9f2eSBram Moolenaar ], 'E488:') 10754a8d9f2eSBram Moolenaar 10764a8d9f2eSBram Moolenaar echo "yes" # comment 10774a8d9f2eSBram Moolenaar CheckDefFailure([ 10784a8d9f2eSBram Moolenaar 'echo "yes"# comment', 10794a8d9f2eSBram Moolenaar ], 'E488:') 10807a092245SBram Moolenaar CheckScriptSuccess([ 10817a092245SBram Moolenaar 'vim9script', 10827a092245SBram Moolenaar 'echo "yes" # something', 10837a092245SBram Moolenaar ]) 10847a092245SBram Moolenaar CheckScriptFailure([ 10857a092245SBram Moolenaar 'vim9script', 10867a092245SBram Moolenaar 'echo "yes"# something', 10877a092245SBram Moolenaar ], 'E121:') 10887a092245SBram Moolenaar CheckScriptFailure([ 10897a092245SBram Moolenaar 'vim9script', 10907a092245SBram Moolenaar 'echo# something', 10917a092245SBram Moolenaar ], 'E121:') 10927a092245SBram Moolenaar CheckScriptFailure([ 10937a092245SBram Moolenaar 'echo "yes" # something', 10947a092245SBram Moolenaar ], 'E121:') 10957a092245SBram Moolenaar 10964a8d9f2eSBram Moolenaar exe "echo" # comment 10974a8d9f2eSBram Moolenaar CheckDefFailure([ 10984a8d9f2eSBram Moolenaar 'exe "echo"# comment', 10994a8d9f2eSBram Moolenaar ], 'E488:') 11004a8d9f2eSBram Moolenaar CheckScriptSuccess([ 11014a8d9f2eSBram Moolenaar 'vim9script', 11024a8d9f2eSBram Moolenaar 'exe "echo" # something', 11034a8d9f2eSBram Moolenaar ]) 11044a8d9f2eSBram Moolenaar CheckScriptFailure([ 11054a8d9f2eSBram Moolenaar 'vim9script', 11064a8d9f2eSBram Moolenaar 'exe "echo"# something', 11074a8d9f2eSBram Moolenaar ], 'E121:') 11084a8d9f2eSBram Moolenaar CheckDefFailure([ 11094a8d9f2eSBram Moolenaar 'exe # comment', 11104a8d9f2eSBram Moolenaar ], 'E1015:') 11114a8d9f2eSBram Moolenaar CheckScriptFailure([ 11124a8d9f2eSBram Moolenaar 'vim9script', 11134a8d9f2eSBram Moolenaar 'exe# something', 11144a8d9f2eSBram Moolenaar ], 'E121:') 11154a8d9f2eSBram Moolenaar CheckScriptFailure([ 11164a8d9f2eSBram Moolenaar 'exe "echo" # something', 11174a8d9f2eSBram Moolenaar ], 'E121:') 11184a8d9f2eSBram Moolenaar 11197a092245SBram Moolenaar CheckDefFailure([ 11207a092245SBram Moolenaar 'try# comment', 11217a092245SBram Moolenaar 'echo "yes"', 11227a092245SBram Moolenaar 'catch', 11237a092245SBram Moolenaar 'endtry', 11247a092245SBram Moolenaar ], 'E488:') 11257a092245SBram Moolenaar CheckDefFailure([ 11267a092245SBram Moolenaar 'try', 11277a092245SBram Moolenaar 'echo "yes"', 11287a092245SBram Moolenaar 'catch# comment', 11297a092245SBram Moolenaar 'endtry', 11307a092245SBram Moolenaar ], 'E488:') 11317a092245SBram Moolenaar CheckDefFailure([ 11327a092245SBram Moolenaar 'try', 11337a092245SBram Moolenaar 'echo "yes"', 11347a092245SBram Moolenaar 'catch', 11357a092245SBram Moolenaar 'endtry# comment', 11367a092245SBram Moolenaar ], 'E488:') 11377a092245SBram Moolenaarenddef 11387a092245SBram Moolenaar 1139a26b9700SBram Moolenaardef Test_vim9_comment_not_compiled() 1140a26b9700SBram Moolenaar au TabEnter *.vim let g:entered = 1 1141a26b9700SBram Moolenaar au TabEnter *.x let g:entered = 2 1142a26b9700SBram Moolenaar 1143a26b9700SBram Moolenaar edit test.vim 1144a26b9700SBram Moolenaar doautocmd TabEnter #comment 1145a26b9700SBram Moolenaar assert_equal(1, g:entered) 1146a26b9700SBram Moolenaar 1147a26b9700SBram Moolenaar doautocmd TabEnter f.x 1148a26b9700SBram Moolenaar assert_equal(2, g:entered) 1149a26b9700SBram Moolenaar 1150a26b9700SBram Moolenaar g:entered = 0 1151a26b9700SBram Moolenaar doautocmd TabEnter f.x #comment 1152a26b9700SBram Moolenaar assert_equal(2, g:entered) 1153a26b9700SBram Moolenaar 1154a26b9700SBram Moolenaar assert_fails('doautocmd Syntax#comment', 'E216:') 1155a26b9700SBram Moolenaar 1156a26b9700SBram Moolenaar au! TabEnter 1157a26b9700SBram Moolenaar unlet g:entered 1158a26b9700SBram Moolenaarenddef 1159a26b9700SBram Moolenaar 1160585fea7bSBram Moolenaar" Keep this last, it messes up highlighting. 1161585fea7bSBram Moolenaardef Test_substitute_cmd() 1162585fea7bSBram Moolenaar new 1163585fea7bSBram Moolenaar setline(1, 'something') 1164585fea7bSBram Moolenaar :substitute(some(other( 1165585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 1166585fea7bSBram Moolenaar bwipe! 1167585fea7bSBram Moolenaar 1168585fea7bSBram Moolenaar " also when the context is Vim9 script 1169585fea7bSBram Moolenaar let lines =<< trim END 1170585fea7bSBram Moolenaar vim9script 1171585fea7bSBram Moolenaar new 1172585fea7bSBram Moolenaar setline(1, 'something') 1173585fea7bSBram Moolenaar :substitute(some(other( 1174585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 1175585fea7bSBram Moolenaar bwipe! 1176585fea7bSBram Moolenaar END 1177585fea7bSBram Moolenaar writefile(lines, 'Xvim9lines') 1178585fea7bSBram Moolenaar source Xvim9lines 1179585fea7bSBram Moolenaar 1180585fea7bSBram Moolenaar delete('Xvim9lines') 1181585fea7bSBram Moolenaarenddef 1182585fea7bSBram Moolenaar 11838a7d6542SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker 1184