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 138d3aac291SBram Moolenaardef Test_assignment_local() 139d3aac291SBram Moolenaar " Test in a separated file in order not to the current buffer/window/tab is 140d3aac291SBram Moolenaar " changed. 141d3aac291SBram Moolenaar let script_lines: list<string> =<< trim END 142d3aac291SBram Moolenaar let b:existing = 'yes' 143d3aac291SBram Moolenaar let w:existing = 'yes' 144d3aac291SBram Moolenaar let t:existing = 'yes' 145d3aac291SBram Moolenaar 146d3aac291SBram Moolenaar def Test_assignment_local_internal() 147d3aac291SBram Moolenaar b:newvar = 'new' 148d3aac291SBram Moolenaar assert_equal('new', b:newvar) 149d3aac291SBram Moolenaar assert_equal('yes', b:existing) 150d3aac291SBram Moolenaar b:existing = 'no' 151d3aac291SBram Moolenaar assert_equal('no', b:existing) 152d3aac291SBram Moolenaar 153d3aac291SBram Moolenaar w:newvar = 'new' 154d3aac291SBram Moolenaar assert_equal('new', w:newvar) 155d3aac291SBram Moolenaar assert_equal('yes', w:existing) 156d3aac291SBram Moolenaar w:existing = 'no' 157d3aac291SBram Moolenaar assert_equal('no', w:existing) 158d3aac291SBram Moolenaar 159d3aac291SBram Moolenaar t:newvar = 'new' 160d3aac291SBram Moolenaar assert_equal('new', t:newvar) 161d3aac291SBram Moolenaar assert_equal('yes', t:existing) 162d3aac291SBram Moolenaar t:existing = 'no' 163d3aac291SBram Moolenaar assert_equal('no', t:existing) 164d3aac291SBram Moolenaar enddef 165d3aac291SBram Moolenaar call Test_assignment_local_internal() 166d3aac291SBram Moolenaar END 167d3aac291SBram Moolenaar call CheckScriptSuccess(script_lines) 168d3aac291SBram Moolenaarenddef 169d3aac291SBram 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 216d72c1bf0SBram Moolenaardef 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:') 236d3aac291SBram Moolenaar call CheckDefFailure(['let w:var = 5'], 'E1079:') 237d3aac291SBram Moolenaar call CheckDefFailure(['let b:var = 5'], 'E1078:') 238d3aac291SBram 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:') 24433fa29cfSBram Moolenaar 2458a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<string> = [123]'], 'expected list<string> but got list<number>') 2468a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<number> = ["xx"]'], 'expected list<number> but got list<string>') 2478a7d6542SBram Moolenaar 2488a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<string> = #{key: 123}'], 'expected dict<string> but got dict<number>') 2498a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<number> = #{key: "xx"}'], 'expected dict<number> but got dict<string>') 2508a7d6542SBram Moolenaar 2518a7d6542SBram Moolenaar call CheckDefFailure(['let var = feedkeys("0")'], 'E1031:') 2528a7d6542SBram Moolenaar call CheckDefFailure(['let var: number = feedkeys("0")'], 'expected number but got void') 25342a480bfSBram Moolenaar 254d77a8525SBram Moolenaar call CheckDefFailure(['let var: dict <number>'], 'E1068:') 25542a480bfSBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 256cab27678SBram Moolenaar 257cab27678SBram Moolenaar call assert_fails('s/^/\=Mess()/n', 'E794:') 258cab27678SBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 259d72c1bf0SBram Moolenaarenddef 260d72c1bf0SBram Moolenaar 261d72c1bf0SBram Moolenaardef Test_unlet() 262d72c1bf0SBram Moolenaar g:somevar = 'yes' 263d72c1bf0SBram Moolenaar assert_true(exists('g:somevar')) 264d72c1bf0SBram Moolenaar unlet g:somevar 265d72c1bf0SBram Moolenaar assert_false(exists('g:somevar')) 266d72c1bf0SBram Moolenaar unlet! g:somevar 267d72c1bf0SBram Moolenaar 268d72c1bf0SBram Moolenaar call CheckScriptFailure([ 269d72c1bf0SBram Moolenaar 'vim9script', 270d72c1bf0SBram Moolenaar 'let svar = 123', 271d72c1bf0SBram Moolenaar 'unlet svar', 272d72c1bf0SBram Moolenaar ], 'E1081:') 273d72c1bf0SBram Moolenaar call CheckScriptFailure([ 274d72c1bf0SBram Moolenaar 'vim9script', 275d72c1bf0SBram Moolenaar 'let svar = 123', 276d72c1bf0SBram Moolenaar 'unlet s:svar', 277d72c1bf0SBram Moolenaar ], 'E1081:') 278d72c1bf0SBram Moolenaar call CheckScriptFailure([ 279d72c1bf0SBram Moolenaar 'vim9script', 280d72c1bf0SBram Moolenaar 'let svar = 123', 281d72c1bf0SBram Moolenaar 'def Func()', 282d72c1bf0SBram Moolenaar ' unlet svar', 283d72c1bf0SBram Moolenaar 'enddef', 284d72c1bf0SBram Moolenaar ], 'E1081:') 285d72c1bf0SBram Moolenaar call CheckScriptFailure([ 286d72c1bf0SBram Moolenaar 'vim9script', 287d72c1bf0SBram Moolenaar 'let svar = 123', 288d72c1bf0SBram Moolenaar 'def Func()', 289d72c1bf0SBram Moolenaar ' unlet s:svar', 290d72c1bf0SBram Moolenaar 'enddef', 291d72c1bf0SBram Moolenaar ], 'E1081:') 292*7bdaea6eSBram Moolenaar 293*7bdaea6eSBram Moolenaar $ENVVAR = 'foobar' 294*7bdaea6eSBram Moolenaar assert_equal('foobar', $ENVVAR) 295*7bdaea6eSBram Moolenaar unlet $ENVVAR 296*7bdaea6eSBram Moolenaar assert_equal('', $ENVVAR) 297d72c1bf0SBram Moolenaarenddef 298599c89c8SBram Moolenaar 299599c89c8SBram Moolenaarfunc Test_wrong_type() 300599c89c8SBram Moolenaar call CheckDefFailure(['let var: list<nothing>'], 'E1010:') 301599c89c8SBram Moolenaar call CheckDefFailure(['let var: list<list<nothing>>'], 'E1010:') 302599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<nothing>'], 'E1010:') 303599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<dict<nothing>>'], 'E1010:') 304599c89c8SBram Moolenaar 305599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 306599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<list<number>'], 'E1009:') 30742a480bfSBram Moolenaar 30842a480bfSBram Moolenaar call CheckDefFailure(['let var: ally'], 'E1010:') 30942a480bfSBram Moolenaar call CheckDefFailure(['let var: bram'], 'E1010:') 31042a480bfSBram Moolenaar call CheckDefFailure(['let var: cathy'], 'E1010:') 31142a480bfSBram Moolenaar call CheckDefFailure(['let var: dom'], 'E1010:') 31242a480bfSBram Moolenaar call CheckDefFailure(['let var: freddy'], 'E1010:') 31342a480bfSBram Moolenaar call CheckDefFailure(['let var: john'], 'E1010:') 31442a480bfSBram Moolenaar call CheckDefFailure(['let var: larry'], 'E1010:') 31542a480bfSBram Moolenaar call CheckDefFailure(['let var: ned'], 'E1010:') 31642a480bfSBram Moolenaar call CheckDefFailure(['let var: pam'], 'E1010:') 31742a480bfSBram Moolenaar call CheckDefFailure(['let var: sam'], 'E1010:') 31842a480bfSBram Moolenaar call CheckDefFailure(['let var: vim'], 'E1010:') 3198a7d6542SBram Moolenaarendfunc 3208a7d6542SBram Moolenaar 3218a7d6542SBram Moolenaarfunc Test_const() 3228a7d6542SBram Moolenaar call CheckDefFailure(['const var = 234', 'var = 99'], 'E1018:') 3238a7d6542SBram Moolenaar call CheckDefFailure(['const one = 234', 'let one = 99'], 'E1017:') 3248a7d6542SBram Moolenaar call CheckDefFailure(['const two'], 'E1021:') 3259be61bbbSBram Moolenaar call CheckDefFailure(['const &option'], 'E996:') 3268a7d6542SBram Moolenaarendfunc 3278a7d6542SBram Moolenaar 3288a7d6542SBram Moolenaardef Test_block() 3298a7d6542SBram Moolenaar let outer = 1 3308a7d6542SBram Moolenaar { 3318a7d6542SBram Moolenaar let inner = 2 3328a7d6542SBram Moolenaar assert_equal(1, outer) 3338a7d6542SBram Moolenaar assert_equal(2, inner) 3348a7d6542SBram Moolenaar } 3358a7d6542SBram Moolenaar assert_equal(1, outer) 3368a7d6542SBram Moolenaarenddef 3378a7d6542SBram Moolenaar 3388a7d6542SBram Moolenaarfunc Test_block_failure() 3398a7d6542SBram Moolenaar call CheckDefFailure(['{', 'let inner = 1', '}', 'echo inner'], 'E1001:') 340585fea7bSBram Moolenaar call CheckDefFailure(['}'], 'E1025:') 341585fea7bSBram Moolenaar call CheckDefFailure(['{', 'echo 1'], 'E1026:') 3428a7d6542SBram Moolenaarendfunc 3438a7d6542SBram Moolenaar 344585fea7bSBram Moolenaardef Test_cmd_modifier() 345585fea7bSBram Moolenaar tab echo '0' 346585fea7bSBram Moolenaar call CheckDefFailure(['5tab echo 3'], 'E16:') 347585fea7bSBram Moolenaarenddef 348585fea7bSBram Moolenaar 3498a7d6542SBram Moolenaardef Test_try_catch() 3508a7d6542SBram Moolenaar let l = [] 3517a092245SBram Moolenaar try # comment 3528a7d6542SBram Moolenaar add(l, '1') 3538a7d6542SBram Moolenaar throw 'wrong' 3548a7d6542SBram Moolenaar add(l, '2') 3557a092245SBram Moolenaar catch # comment 3568a7d6542SBram Moolenaar add(l, v:exception) 3577a092245SBram Moolenaar finally # comment 3588a7d6542SBram Moolenaar add(l, '3') 3597a092245SBram Moolenaar endtry # comment 3608a7d6542SBram Moolenaar assert_equal(['1', 'wrong', '3'], l) 3618a7d6542SBram Moolenaarenddef 3628a7d6542SBram Moolenaar 363257cc5eeSBram Moolenaardef ThrowFromDef() 364257cc5eeSBram Moolenaar throw 'getout' 365257cc5eeSBram Moolenaarenddef 366257cc5eeSBram Moolenaar 367257cc5eeSBram Moolenaarfunc CatchInFunc() 368257cc5eeSBram Moolenaar try 369257cc5eeSBram Moolenaar call ThrowFromDef() 370257cc5eeSBram Moolenaar catch 371257cc5eeSBram Moolenaar let g:thrown_func = v:exception 372257cc5eeSBram Moolenaar endtry 373257cc5eeSBram Moolenaarendfunc 374257cc5eeSBram Moolenaar 375257cc5eeSBram Moolenaardef CatchInDef() 376257cc5eeSBram Moolenaar try 377257cc5eeSBram Moolenaar ThrowFromDef() 378257cc5eeSBram Moolenaar catch 379257cc5eeSBram Moolenaar g:thrown_def = v:exception 380257cc5eeSBram Moolenaar endtry 381257cc5eeSBram Moolenaarenddef 382257cc5eeSBram Moolenaar 383f575adffSBram Moolenaardef ReturnFinally(): string 384f575adffSBram Moolenaar try 385f575adffSBram Moolenaar return 'intry' 386f575adffSBram Moolenaar finally 387f575adffSBram Moolenaar g:in_finally = 'finally' 388f575adffSBram Moolenaar endtry 389f575adffSBram Moolenaar return 'end' 390f575adffSBram Moolenaarenddef 391f575adffSBram Moolenaar 392257cc5eeSBram Moolenaardef Test_try_catch_nested() 393257cc5eeSBram Moolenaar CatchInFunc() 394257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_func) 395257cc5eeSBram Moolenaar 396257cc5eeSBram Moolenaar CatchInDef() 397257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_def) 398f575adffSBram Moolenaar 399f575adffSBram Moolenaar assert_equal('intry', ReturnFinally()) 400f575adffSBram Moolenaar assert_equal('finally', g:in_finally) 401f575adffSBram Moolenaarenddef 402f575adffSBram Moolenaar 403f575adffSBram Moolenaardef Test_try_catch_match() 404f575adffSBram Moolenaar let seq = 'a' 405f575adffSBram Moolenaar try 406f575adffSBram Moolenaar throw 'something' 407f575adffSBram Moolenaar catch /nothing/ 408f575adffSBram Moolenaar seq ..= 'x' 409f575adffSBram Moolenaar catch /some/ 410f575adffSBram Moolenaar seq ..= 'b' 411f575adffSBram Moolenaar catch /asdf/ 412f575adffSBram Moolenaar seq ..= 'x' 413e8c4abbbSBram Moolenaar catch ?a\?sdf? 414e8c4abbbSBram Moolenaar seq ..= 'y' 415f575adffSBram Moolenaar finally 416f575adffSBram Moolenaar seq ..= 'c' 417f575adffSBram Moolenaar endtry 418f575adffSBram Moolenaar assert_equal('abc', seq) 419257cc5eeSBram Moolenaarenddef 420257cc5eeSBram Moolenaar 421e8c4abbbSBram Moolenaardef Test_try_catch_fails() 422e8c4abbbSBram Moolenaar call CheckDefFailure(['catch'], 'E603:') 423e8c4abbbSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'catch','catch'], 'E1033:') 424e8c4abbbSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'catch /pat'], 'E1067:') 425585fea7bSBram Moolenaar call CheckDefFailure(['finally'], 'E606:') 426585fea7bSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'finally', 'echo 1', 'finally'], 'E607:') 427585fea7bSBram Moolenaar call CheckDefFailure(['endtry'], 'E602:') 428585fea7bSBram Moolenaar call CheckDefFailure(['while 1', 'endtry'], 'E170:') 429585fea7bSBram Moolenaar call CheckDefFailure(['for i in range(5)', 'endtry'], 'E170:') 430585fea7bSBram Moolenaar call CheckDefFailure(['if 2', 'endtry'], 'E171:') 431585fea7bSBram Moolenaar call CheckDefFailure(['try', 'echo 1', 'endtry'], 'E1032:') 432585fea7bSBram Moolenaar 433585fea7bSBram Moolenaar call CheckDefFailure(['throw'], 'E471:') 434585fea7bSBram Moolenaar call CheckDefFailure(['throw xxx'], 'E1001:') 435e8c4abbbSBram Moolenaarenddef 436e8c4abbbSBram Moolenaar 4378a7d6542SBram Moolenaarlet s:export_script_lines =<< trim END 4388a7d6542SBram Moolenaar vim9script 4398a7d6542SBram Moolenaar let name: string = 'bob' 4408a7d6542SBram Moolenaar def Concat(arg: string): string 4418a7d6542SBram Moolenaar return name .. arg 4428a7d6542SBram Moolenaar enddef 4438a7d6542SBram Moolenaar let g:result = Concat('bie') 4448a7d6542SBram Moolenaar let g:localname = name 4458a7d6542SBram Moolenaar 4468a7d6542SBram Moolenaar export const CONST = 1234 4478a7d6542SBram Moolenaar export let exported = 9876 4486e587dcbSBram Moolenaar export let exp_name = 'John' 4498a7d6542SBram Moolenaar export def Exported(): string 4508a7d6542SBram Moolenaar return 'Exported' 4518a7d6542SBram Moolenaar enddef 4528a7d6542SBram MoolenaarEND 4538a7d6542SBram Moolenaar 4545269bd2aSBram Moolenaardef Test_vim9_import_export() 4558a7d6542SBram Moolenaar let import_script_lines =<< trim END 4568a7d6542SBram Moolenaar vim9script 4578a7d6542SBram Moolenaar import {exported, Exported} from './Xexport.vim' 4588a7d6542SBram Moolenaar g:imported = exported 4596e587dcbSBram Moolenaar exported += 3 4606e587dcbSBram Moolenaar g:imported_added = exported 4618a7d6542SBram Moolenaar g:imported_func = Exported() 4626e587dcbSBram Moolenaar 4636e587dcbSBram Moolenaar import {exp_name} from './Xexport.vim' 4646e587dcbSBram Moolenaar g:imported_name = exp_name 4656e587dcbSBram Moolenaar exp_name ..= ' Doe' 4666e587dcbSBram Moolenaar g:imported_name_appended = exp_name 4675381c7a1SBram Moolenaar g:imported_later = exported 4688a7d6542SBram Moolenaar END 4698a7d6542SBram Moolenaar 4708a7d6542SBram Moolenaar writefile(import_script_lines, 'Ximport.vim') 4718a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport.vim') 4728a7d6542SBram Moolenaar 4738a7d6542SBram Moolenaar source Ximport.vim 4748a7d6542SBram Moolenaar 4758a7d6542SBram Moolenaar assert_equal('bobbie', g:result) 4768a7d6542SBram Moolenaar assert_equal('bob', g:localname) 4778a7d6542SBram Moolenaar assert_equal(9876, g:imported) 4786e587dcbSBram Moolenaar assert_equal(9879, g:imported_added) 4795381c7a1SBram Moolenaar assert_equal(9879, g:imported_later) 4808a7d6542SBram Moolenaar assert_equal('Exported', g:imported_func) 4816e587dcbSBram Moolenaar assert_equal('John', g:imported_name) 4826e587dcbSBram Moolenaar assert_equal('John Doe', g:imported_name_appended) 4838a7d6542SBram Moolenaar assert_false(exists('g:name')) 4848a7d6542SBram Moolenaar 4858a7d6542SBram Moolenaar unlet g:result 4868a7d6542SBram Moolenaar unlet g:localname 4878a7d6542SBram Moolenaar unlet g:imported 4886e587dcbSBram Moolenaar unlet g:imported_added 4895381c7a1SBram Moolenaar unlet g:imported_later 4908a7d6542SBram Moolenaar unlet g:imported_func 4916e587dcbSBram Moolenaar unlet g:imported_name g:imported_name_appended 4928a7d6542SBram Moolenaar delete('Ximport.vim') 493f2d5c240SBram Moolenaar 4945381c7a1SBram Moolenaar let import_in_def_lines =<< trim END 4955381c7a1SBram Moolenaar vim9script 4965381c7a1SBram Moolenaar def ImportInDef() 4975381c7a1SBram Moolenaar import exported from './Xexport.vim' 4985381c7a1SBram Moolenaar g:imported = exported 4995381c7a1SBram Moolenaar exported += 7 5005381c7a1SBram Moolenaar g:imported_added = exported 5015381c7a1SBram Moolenaar enddef 5025381c7a1SBram Moolenaar ImportInDef() 5035381c7a1SBram Moolenaar END 5045381c7a1SBram Moolenaar writefile(import_in_def_lines, 'Ximport2.vim') 5055381c7a1SBram Moolenaar source Ximport2.vim 5065381c7a1SBram Moolenaar " TODO: this should be 9879 5075381c7a1SBram Moolenaar assert_equal(9876, g:imported) 5085381c7a1SBram Moolenaar assert_equal(9883, g:imported_added) 5095381c7a1SBram Moolenaar unlet g:imported 5105381c7a1SBram Moolenaar unlet g:imported_added 5115381c7a1SBram Moolenaar delete('Ximport2.vim') 5125381c7a1SBram Moolenaar 513f2d5c240SBram Moolenaar let import_star_as_lines =<< trim END 514f2d5c240SBram Moolenaar vim9script 515f2d5c240SBram Moolenaar import * as Export from './Xexport.vim' 516f2d5c240SBram Moolenaar def UseExport() 517f2d5c240SBram Moolenaar g:imported = Export.exported 518f2d5c240SBram Moolenaar enddef 519f2d5c240SBram Moolenaar UseExport() 520f2d5c240SBram Moolenaar END 521f2d5c240SBram Moolenaar writefile(import_star_as_lines, 'Ximport.vim') 522f2d5c240SBram Moolenaar source Ximport.vim 5235381c7a1SBram Moolenaar assert_equal(9883, g:imported) 524f2d5c240SBram Moolenaar 525599c89c8SBram Moolenaar let import_star_as_lines_no_dot =<< trim END 526599c89c8SBram Moolenaar vim9script 527599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 528599c89c8SBram Moolenaar def Func() 529599c89c8SBram Moolenaar let dummy = 1 530599c89c8SBram Moolenaar let imported = Export + dummy 531599c89c8SBram Moolenaar enddef 532599c89c8SBram Moolenaar END 533599c89c8SBram Moolenaar writefile(import_star_as_lines_no_dot, 'Ximport.vim') 534599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1060:') 535599c89c8SBram Moolenaar 536599c89c8SBram Moolenaar let import_star_as_lines_dot_space =<< trim END 537599c89c8SBram Moolenaar vim9script 538599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 539599c89c8SBram Moolenaar def Func() 540599c89c8SBram Moolenaar let imported = Export . exported 541599c89c8SBram Moolenaar enddef 542599c89c8SBram Moolenaar END 543599c89c8SBram Moolenaar writefile(import_star_as_lines_dot_space, 'Ximport.vim') 544599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1074:') 545599c89c8SBram Moolenaar 546599c89c8SBram Moolenaar let import_star_as_lines_missing_name =<< trim END 547599c89c8SBram Moolenaar vim9script 548599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 549599c89c8SBram Moolenaar def Func() 550599c89c8SBram Moolenaar let imported = Export. 551599c89c8SBram Moolenaar enddef 552599c89c8SBram Moolenaar END 553599c89c8SBram Moolenaar writefile(import_star_as_lines_missing_name, 'Ximport.vim') 554599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 555599c89c8SBram Moolenaar 556f2d5c240SBram Moolenaar let import_star_lines =<< trim END 557f2d5c240SBram Moolenaar vim9script 558f2d5c240SBram Moolenaar import * from './Xexport.vim' 559f2d5c240SBram Moolenaar g:imported = exported 560f2d5c240SBram Moolenaar END 561f2d5c240SBram Moolenaar writefile(import_star_lines, 'Ximport.vim') 562f2d5c240SBram Moolenaar assert_fails('source Ximport.vim', 'E1045:') 563f2d5c240SBram Moolenaar 564fa29c8abSBram Moolenaar " try to import something that exists but is not exported 565fa29c8abSBram Moolenaar let import_not_exported_lines =<< trim END 566fa29c8abSBram Moolenaar vim9script 567fa29c8abSBram Moolenaar import name from './Xexport.vim' 568fa29c8abSBram Moolenaar END 569fa29c8abSBram Moolenaar writefile(import_not_exported_lines, 'Ximport.vim') 570fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1049:') 571fa29c8abSBram Moolenaar 5725269bd2aSBram Moolenaar " try to import something that is already defined 5735269bd2aSBram Moolenaar let import_already_defined =<< trim END 5745269bd2aSBram Moolenaar vim9script 5755269bd2aSBram Moolenaar let exported = 'something' 5765269bd2aSBram Moolenaar import exported from './Xexport.vim' 5775269bd2aSBram Moolenaar END 5785269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 5795269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 5805269bd2aSBram Moolenaar 5815269bd2aSBram Moolenaar " try to import something that is already defined 5825269bd2aSBram Moolenaar import_already_defined =<< trim END 5835269bd2aSBram Moolenaar vim9script 5845269bd2aSBram Moolenaar let exported = 'something' 5855269bd2aSBram Moolenaar import * as exported from './Xexport.vim' 5865269bd2aSBram Moolenaar END 5875269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 5885269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 5895269bd2aSBram Moolenaar 5905269bd2aSBram Moolenaar " try to import something that is already defined 5915269bd2aSBram Moolenaar import_already_defined =<< trim END 5925269bd2aSBram Moolenaar vim9script 5935269bd2aSBram Moolenaar let exported = 'something' 5945269bd2aSBram Moolenaar import {exported} from './Xexport.vim' 5955269bd2aSBram Moolenaar END 5965269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 5975269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 5985269bd2aSBram Moolenaar 599fa29c8abSBram Moolenaar " import a very long name, requires making a copy 600fa29c8abSBram Moolenaar let import_long_name_lines =<< trim END 601fa29c8abSBram Moolenaar vim9script 602fa29c8abSBram Moolenaar import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim' 603fa29c8abSBram Moolenaar END 604fa29c8abSBram Moolenaar writefile(import_long_name_lines, 'Ximport.vim') 605fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 606fa29c8abSBram Moolenaar 607fa29c8abSBram Moolenaar let import_no_from_lines =<< trim END 608fa29c8abSBram Moolenaar vim9script 609fa29c8abSBram Moolenaar import name './Xexport.vim' 610fa29c8abSBram Moolenaar END 611fa29c8abSBram Moolenaar writefile(import_no_from_lines, 'Ximport.vim') 612fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1070:') 613fa29c8abSBram Moolenaar 614fa29c8abSBram Moolenaar let import_invalid_string_lines =<< trim END 615fa29c8abSBram Moolenaar vim9script 616fa29c8abSBram Moolenaar import name from Xexport.vim 617fa29c8abSBram Moolenaar END 618fa29c8abSBram Moolenaar writefile(import_invalid_string_lines, 'Ximport.vim') 619fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1071:') 620fa29c8abSBram Moolenaar 621fa29c8abSBram Moolenaar let import_wrong_name_lines =<< trim END 622fa29c8abSBram Moolenaar vim9script 623fa29c8abSBram Moolenaar import name from './XnoExport.vim' 624fa29c8abSBram Moolenaar END 625fa29c8abSBram Moolenaar writefile(import_wrong_name_lines, 'Ximport.vim') 626fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1053:') 627fa29c8abSBram Moolenaar 628fa29c8abSBram Moolenaar let import_missing_comma_lines =<< trim END 629fa29c8abSBram Moolenaar vim9script 630fa29c8abSBram Moolenaar import {exported name} from './Xexport.vim' 631fa29c8abSBram Moolenaar END 6325269bd2aSBram Moolenaar writefile(import_missing_comma_lines, 'Ximport3.vim') 6335269bd2aSBram Moolenaar assert_fails('source Ximport3.vim', 'E1046:') 634fa29c8abSBram Moolenaar 635f2d5c240SBram Moolenaar delete('Ximport.vim') 6365269bd2aSBram Moolenaar delete('Ximport3.vim') 6378a7d6542SBram Moolenaar delete('Xexport.vim') 6388a7d6542SBram Moolenaar 639750802b5SBram Moolenaar " Check that in a Vim9 script 'cpo' is set to the Vim default. 640750802b5SBram Moolenaar set cpo&vi 641750802b5SBram Moolenaar let cpo_before = &cpo 642750802b5SBram Moolenaar let lines =<< trim END 643750802b5SBram Moolenaar vim9script 644750802b5SBram Moolenaar g:cpo_in_vim9script = &cpo 645750802b5SBram Moolenaar END 646750802b5SBram Moolenaar writefile(lines, 'Xvim9_script') 647750802b5SBram Moolenaar source Xvim9_script 648750802b5SBram Moolenaar assert_equal(cpo_before, &cpo) 649750802b5SBram Moolenaar set cpo&vim 650750802b5SBram Moolenaar assert_equal(&cpo, g:cpo_in_vim9script) 651750802b5SBram Moolenaar delete('Xvim9_script') 652750802b5SBram Moolenaarenddef 653750802b5SBram Moolenaar 654750802b5SBram Moolenaardef Test_vim9script_fails() 6558a7d6542SBram Moolenaar CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:') 6568a7d6542SBram Moolenaar CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:') 657750802b5SBram Moolenaar CheckScriptFailure(['export let some = 123'], 'E1042:') 658f2d5c240SBram Moolenaar CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1042:') 659750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export let g:some'], 'E1044:') 660750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:') 661750802b5SBram Moolenaar 662750802b5SBram Moolenaar assert_fails('vim9script', 'E1038') 663a26b9700SBram Moolenaar assert_fails('export something', 'E1043') 6648a7d6542SBram Moolenaarenddef 6658a7d6542SBram Moolenaar 6668a7d6542SBram Moolenaardef Test_vim9script_reload() 6678a7d6542SBram Moolenaar let lines =<< trim END 6688a7d6542SBram Moolenaar vim9script 6698a7d6542SBram Moolenaar const var = '' 6708a7d6542SBram Moolenaar let valone = 1234 6718a7d6542SBram Moolenaar def MyFunc(arg: string) 6728a7d6542SBram Moolenaar valone = 5678 6738a7d6542SBram Moolenaar enddef 6748a7d6542SBram Moolenaar END 6758a7d6542SBram Moolenaar let morelines =<< trim END 6768a7d6542SBram Moolenaar let valtwo = 222 6778a7d6542SBram Moolenaar export def GetValtwo(): number 6788a7d6542SBram Moolenaar return valtwo 6798a7d6542SBram Moolenaar enddef 6808a7d6542SBram Moolenaar END 681675f716eSBram Moolenaar writefile(lines + morelines, 682675f716eSBram Moolenaar 'Xreload.vim') 6838a7d6542SBram Moolenaar source Xreload.vim 6848a7d6542SBram Moolenaar source Xreload.vim 6858a7d6542SBram Moolenaar source Xreload.vim 6868a7d6542SBram Moolenaar 6878a7d6542SBram Moolenaar let testlines =<< trim END 6888a7d6542SBram Moolenaar vim9script 6898a7d6542SBram Moolenaar def TheFunc() 6908a7d6542SBram Moolenaar import GetValtwo from './Xreload.vim' 6918a7d6542SBram Moolenaar assert_equal(222, GetValtwo()) 6928a7d6542SBram Moolenaar enddef 6938a7d6542SBram Moolenaar TheFunc() 6948a7d6542SBram Moolenaar END 6958a7d6542SBram Moolenaar writefile(testlines, 'Ximport.vim') 6968a7d6542SBram Moolenaar source Ximport.vim 6978a7d6542SBram Moolenaar 6988a7d6542SBram Moolenaar " test that when not using "morelines" valtwo is still defined 6998a7d6542SBram Moolenaar " need to source Xreload.vim again, import doesn't reload a script 7008a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 7018a7d6542SBram Moolenaar source Xreload.vim 7028a7d6542SBram Moolenaar source Ximport.vim 7038a7d6542SBram Moolenaar 7048a7d6542SBram Moolenaar " cannot declare a var twice 7058a7d6542SBram Moolenaar lines =<< trim END 7068a7d6542SBram Moolenaar vim9script 7078a7d6542SBram Moolenaar let valone = 1234 7088a7d6542SBram Moolenaar let valone = 5678 7098a7d6542SBram Moolenaar END 7108a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 7118a7d6542SBram Moolenaar assert_fails('source Xreload.vim', 'E1041:') 7128a7d6542SBram Moolenaar 7138a7d6542SBram Moolenaar delete('Xreload.vim') 7148a7d6542SBram Moolenaar delete('Ximport.vim') 7158a7d6542SBram Moolenaarenddef 7168a7d6542SBram Moolenaar 7178a7d6542SBram Moolenaardef Test_import_absolute() 7188a7d6542SBram Moolenaar let import_lines = [ 719e6085c53SBram Moolenaar 'vim9script', 720e6085c53SBram Moolenaar 'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"', 721e6085c53SBram Moolenaar 'def UseExported()', 722e6085c53SBram Moolenaar ' g:imported_abs = exported', 723e6085c53SBram Moolenaar ' exported = 8888', 724e6085c53SBram Moolenaar ' g:imported_after = exported', 725e6085c53SBram Moolenaar 'enddef', 726e6085c53SBram Moolenaar 'UseExported()', 727e6085c53SBram Moolenaar 'g:import_disassembled = execute("disass UseExported")', 728e6085c53SBram Moolenaar ] 7298a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_abs.vim') 7308a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport_abs.vim') 7318a7d6542SBram Moolenaar 7328a7d6542SBram Moolenaar source Ximport_abs.vim 7338a7d6542SBram Moolenaar 7348a7d6542SBram Moolenaar assert_equal(9876, g:imported_abs) 7354e12a5dfSBram Moolenaar assert_equal(8888, g:imported_after) 736675f716eSBram Moolenaar assert_match('<SNR>\d\+_UseExported.*' .. 737675f716eSBram Moolenaar 'g:imported_abs = exported.*' .. 738675f716eSBram Moolenaar '0 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 739675f716eSBram Moolenaar '1 STOREG g:imported_abs.*' .. 740675f716eSBram Moolenaar 'exported = 8888.*' .. 741675f716eSBram Moolenaar '3 STORESCRIPT exported in .*Xexport_abs.vim.*' .. 742675f716eSBram Moolenaar 'g:imported_after = exported.*' .. 743675f716eSBram Moolenaar '4 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 744675f716eSBram Moolenaar '5 STOREG g:imported_after.*', 745e6085c53SBram Moolenaar g:import_disassembled) 7468a7d6542SBram Moolenaar unlet g:imported_abs 7474e12a5dfSBram Moolenaar unlet g:import_disassembled 7488a7d6542SBram Moolenaar 7498a7d6542SBram Moolenaar delete('Ximport_abs.vim') 7508a7d6542SBram Moolenaar delete('Xexport_abs.vim') 7518a7d6542SBram Moolenaarenddef 7528a7d6542SBram Moolenaar 7538a7d6542SBram Moolenaardef Test_import_rtp() 7548a7d6542SBram Moolenaar let import_lines = [ 755e6085c53SBram Moolenaar 'vim9script', 756e6085c53SBram Moolenaar 'import exported from "Xexport_rtp.vim"', 757e6085c53SBram Moolenaar 'g:imported_rtp = exported', 758e6085c53SBram Moolenaar ] 7598a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_rtp.vim') 7608a7d6542SBram Moolenaar mkdir('import') 7618a7d6542SBram Moolenaar writefile(s:export_script_lines, 'import/Xexport_rtp.vim') 7628a7d6542SBram Moolenaar 7638a7d6542SBram Moolenaar let save_rtp = &rtp 7648a7d6542SBram Moolenaar &rtp = getcwd() 7658a7d6542SBram Moolenaar source Ximport_rtp.vim 7668a7d6542SBram Moolenaar &rtp = save_rtp 7678a7d6542SBram Moolenaar 7688a7d6542SBram Moolenaar assert_equal(9876, g:imported_rtp) 7698a7d6542SBram Moolenaar unlet g:imported_rtp 7708a7d6542SBram Moolenaar 7718a7d6542SBram Moolenaar delete('Ximport_rtp.vim') 7728a7d6542SBram Moolenaar delete('import/Xexport_rtp.vim') 7738a7d6542SBram Moolenaar delete('import', 'd') 7748a7d6542SBram Moolenaarenddef 7758a7d6542SBram Moolenaar 7768a7d6542SBram Moolenaardef Test_fixed_size_list() 7778a7d6542SBram Moolenaar " will be allocated as one piece of memory, check that changes work 7788a7d6542SBram Moolenaar let l = [1, 2, 3, 4] 7798a7d6542SBram Moolenaar l->remove(0) 7808a7d6542SBram Moolenaar l->add(5) 7818a7d6542SBram Moolenaar l->insert(99, 1) 7820f18b6d1SBram Moolenaar assert_equal([2, 99, 3, 4, 5], l) 7838a7d6542SBram Moolenaarenddef 7848a7d6542SBram Moolenaar 785158906cfSBram Moolenaardef IfElse(what: number): string 786158906cfSBram Moolenaar let res = '' 787158906cfSBram Moolenaar if what == 1 788158906cfSBram Moolenaar res = "one" 789158906cfSBram Moolenaar elseif what == 2 790158906cfSBram Moolenaar res = "two" 791a259d8d3SBram Moolenaar else 792158906cfSBram Moolenaar res = "three" 793a259d8d3SBram Moolenaar endif 794158906cfSBram Moolenaar return res 795a259d8d3SBram Moolenaarenddef 796a259d8d3SBram Moolenaar 797158906cfSBram Moolenaardef Test_if_elseif_else() 798158906cfSBram Moolenaar assert_equal('one', IfElse(1)) 799158906cfSBram Moolenaar assert_equal('two', IfElse(2)) 800158906cfSBram Moolenaar assert_equal('three', IfElse(3)) 8010f18b6d1SBram Moolenaarenddef 8020f18b6d1SBram Moolenaar 803e8c4abbbSBram Moolenaardef Test_if_elseif_else_fails() 804e8c4abbbSBram Moolenaar call CheckDefFailure(['elseif true'], 'E582:') 805e8c4abbbSBram Moolenaar call CheckDefFailure(['else'], 'E581:') 806e8c4abbbSBram Moolenaar call CheckDefFailure(['endif'], 'E580:') 807e8c4abbbSBram Moolenaar call CheckDefFailure(['if true', 'elseif xxx'], 'E1001:') 808585fea7bSBram Moolenaar call CheckDefFailure(['if true', 'echo 1'], 'E171:') 809e8c4abbbSBram Moolenaarenddef 810e8c4abbbSBram Moolenaar 8116d69bf60SBram Moolenaarlet g:bool_true = v:true 8126d69bf60SBram Moolenaarlet g:bool_false = v:false 8136d69bf60SBram Moolenaar 8146d69bf60SBram Moolenaardef Test_if_const_expr() 8156d69bf60SBram Moolenaar let res = false 8166d69bf60SBram Moolenaar if true ? true : false 8176d69bf60SBram Moolenaar res = true 8186d69bf60SBram Moolenaar endif 8196d69bf60SBram Moolenaar assert_equal(true, res) 8206d69bf60SBram Moolenaar 821585fea7bSBram Moolenaar g:glob = 2 822585fea7bSBram Moolenaar if false 823585fea7bSBram Moolenaar execute('let g:glob = 3') 824585fea7bSBram Moolenaar endif 825585fea7bSBram Moolenaar assert_equal(2, g:glob) 826585fea7bSBram Moolenaar if true 827585fea7bSBram Moolenaar execute('let g:glob = 3') 828585fea7bSBram Moolenaar endif 829585fea7bSBram Moolenaar assert_equal(3, g:glob) 830585fea7bSBram Moolenaar 8316d69bf60SBram Moolenaar res = false 8326d69bf60SBram Moolenaar if g:bool_true ? true : false 8336d69bf60SBram Moolenaar res = true 8346d69bf60SBram Moolenaar endif 8356d69bf60SBram Moolenaar assert_equal(true, res) 8366d69bf60SBram Moolenaar 8376d69bf60SBram Moolenaar res = false 8386d69bf60SBram Moolenaar if true ? g:bool_true : false 8396d69bf60SBram Moolenaar res = true 8406d69bf60SBram Moolenaar endif 8416d69bf60SBram Moolenaar assert_equal(true, res) 8426d69bf60SBram Moolenaar 8436d69bf60SBram Moolenaar res = false 8446d69bf60SBram Moolenaar if true ? true : g:bool_false 8456d69bf60SBram Moolenaar res = true 8466d69bf60SBram Moolenaar endif 8476d69bf60SBram Moolenaar assert_equal(true, res) 8486d69bf60SBram Moolenaar 8496d69bf60SBram Moolenaar res = false 8506d69bf60SBram Moolenaar if true ? false : true 8516d69bf60SBram Moolenaar res = true 8526d69bf60SBram Moolenaar endif 8536d69bf60SBram Moolenaar assert_equal(false, res) 8546d69bf60SBram Moolenaar 8556d69bf60SBram Moolenaar res = false 8566d69bf60SBram Moolenaar if false ? false : true 8576d69bf60SBram Moolenaar res = true 8586d69bf60SBram Moolenaar endif 8596d69bf60SBram Moolenaar assert_equal(true, res) 8606d69bf60SBram Moolenaar 8616d69bf60SBram Moolenaar res = false 8626d69bf60SBram Moolenaar if false ? true : false 8636d69bf60SBram Moolenaar res = true 8646d69bf60SBram Moolenaar endif 8656d69bf60SBram Moolenaar assert_equal(false, res) 8666d69bf60SBram Moolenaar 8676d69bf60SBram Moolenaar res = false 868e8c4abbbSBram Moolenaar if has('xyz') ? true : false 869e8c4abbbSBram Moolenaar res = true 870e8c4abbbSBram Moolenaar endif 871e8c4abbbSBram Moolenaar assert_equal(false, res) 872e8c4abbbSBram Moolenaar 873e8c4abbbSBram Moolenaar res = false 8746d69bf60SBram Moolenaar if true && true 8756d69bf60SBram Moolenaar res = true 8766d69bf60SBram Moolenaar endif 8776d69bf60SBram Moolenaar assert_equal(true, res) 8786d69bf60SBram Moolenaar 8796d69bf60SBram Moolenaar res = false 8806d69bf60SBram Moolenaar if true && false 8816d69bf60SBram Moolenaar res = true 8826d69bf60SBram Moolenaar endif 8836d69bf60SBram Moolenaar assert_equal(false, res) 8846d69bf60SBram Moolenaar 8856d69bf60SBram Moolenaar res = false 8866d69bf60SBram Moolenaar if g:bool_true && false 8876d69bf60SBram Moolenaar res = true 8886d69bf60SBram Moolenaar endif 8896d69bf60SBram Moolenaar assert_equal(false, res) 8906d69bf60SBram Moolenaar 8916d69bf60SBram Moolenaar res = false 8926d69bf60SBram Moolenaar if true && g:bool_false 8936d69bf60SBram Moolenaar res = true 8946d69bf60SBram Moolenaar endif 8956d69bf60SBram Moolenaar assert_equal(false, res) 8966d69bf60SBram Moolenaar 8976d69bf60SBram Moolenaar res = false 8986d69bf60SBram Moolenaar if false && false 8996d69bf60SBram Moolenaar res = true 9006d69bf60SBram Moolenaar endif 9016d69bf60SBram Moolenaar assert_equal(false, res) 9026d69bf60SBram Moolenaar 9036d69bf60SBram Moolenaar res = false 9046d69bf60SBram Moolenaar if true || false 9056d69bf60SBram Moolenaar res = true 9066d69bf60SBram Moolenaar endif 9076d69bf60SBram Moolenaar assert_equal(true, res) 9086d69bf60SBram Moolenaar 9096d69bf60SBram Moolenaar res = false 9106d69bf60SBram Moolenaar if g:bool_true || false 9116d69bf60SBram Moolenaar res = true 9126d69bf60SBram Moolenaar endif 9136d69bf60SBram Moolenaar assert_equal(true, res) 9146d69bf60SBram Moolenaar 9156d69bf60SBram Moolenaar res = false 9166d69bf60SBram Moolenaar if true || g:bool_false 9176d69bf60SBram Moolenaar res = true 9186d69bf60SBram Moolenaar endif 9196d69bf60SBram Moolenaar assert_equal(true, res) 9206d69bf60SBram Moolenaar 9216d69bf60SBram Moolenaar res = false 9226d69bf60SBram Moolenaar if false || false 9236d69bf60SBram Moolenaar res = true 9246d69bf60SBram Moolenaar endif 9256d69bf60SBram Moolenaar assert_equal(false, res) 92680c34ca3SBram Moolenaarenddef 9276d69bf60SBram Moolenaar 92880c34ca3SBram Moolenaardef Test_if_const_expr_fails() 92980c34ca3SBram Moolenaar call CheckDefFailure(['if "aaa" == "bbb'], 'E114:') 93080c34ca3SBram Moolenaar call CheckDefFailure(["if 'aaa' == 'bbb"], 'E115:') 931e8c4abbbSBram Moolenaar call CheckDefFailure(["if has('aaa'"], 'E110:') 932e8c4abbbSBram Moolenaar call CheckDefFailure(["if has('aaa') ? true false"], 'E109:') 9336d69bf60SBram Moolenaarenddef 9346d69bf60SBram Moolenaar 935ad39c094SBram Moolenaardef Test_execute_cmd() 936ad39c094SBram Moolenaar new 937ad39c094SBram Moolenaar setline(1, 'default') 938ad39c094SBram Moolenaar execute 'call setline(1, "execute-string")' 939ad39c094SBram Moolenaar assert_equal('execute-string', getline(1)) 940ad39c094SBram Moolenaar let cmd1 = 'call setline(1,' 941ad39c094SBram Moolenaar let cmd2 = '"execute-var")' 942ad39c094SBram Moolenaar execute cmd1 cmd2 943ad39c094SBram Moolenaar assert_equal('execute-var', getline(1)) 944ad39c094SBram Moolenaar execute cmd1 cmd2 '|call setline(1, "execute-var-string")' 945ad39c094SBram Moolenaar assert_equal('execute-var-string', getline(1)) 946ad39c094SBram Moolenaar let cmd_first = 'call ' 947ad39c094SBram Moolenaar let cmd_last = 'setline(1, "execute-var-var")' 948ad39c094SBram Moolenaar execute cmd_first .. cmd_last 949ad39c094SBram Moolenaar assert_equal('execute-var-var', getline(1)) 950ad39c094SBram Moolenaar bwipe! 951585fea7bSBram Moolenaar 952585fea7bSBram Moolenaar call CheckDefFailure(['execute xxx'], 'E1001:') 953ad39c094SBram Moolenaarenddef 954ad39c094SBram Moolenaar 955ad39c094SBram Moolenaardef Test_echo_cmd() 956585fea7bSBram Moolenaar echo 'some' 957585fea7bSBram Moolenaar echon 'thing' 958ad39c094SBram Moolenaar assert_match('^something$', Screenline(&lines)) 959ad39c094SBram Moolenaar 960ad39c094SBram Moolenaar let str1 = 'some' 961ad39c094SBram Moolenaar let str2 = 'more' 962ad39c094SBram Moolenaar echo str1 str2 963ad39c094SBram Moolenaar assert_match('^some more$', Screenline(&lines)) 964ad39c094SBram Moolenaarenddef 965ad39c094SBram Moolenaar 96641fe0617SBram Moolenaardef Test_for_outside_of_function() 96741fe0617SBram Moolenaar let lines =<< trim END 96841fe0617SBram Moolenaar vim9script 96941fe0617SBram Moolenaar new 97041fe0617SBram Moolenaar for var in range(0, 3) 97141fe0617SBram Moolenaar append(line('$'), var) 97241fe0617SBram Moolenaar endfor 97341fe0617SBram Moolenaar assert_equal(['', '0', '1', '2', '3'], getline(1, '$')) 97441fe0617SBram Moolenaar bwipe! 97541fe0617SBram Moolenaar END 97641fe0617SBram Moolenaar writefile(lines, 'Xvim9for.vim') 97741fe0617SBram Moolenaar source Xvim9for.vim 97841fe0617SBram Moolenaar delete('Xvim9for.vim') 97941fe0617SBram Moolenaarenddef 9808a7d6542SBram Moolenaar 981e8c4abbbSBram Moolenaardef Test_for_loop() 982e8c4abbbSBram Moolenaar let result = '' 983e8c4abbbSBram Moolenaar for cnt in range(7) 984e8c4abbbSBram Moolenaar if cnt == 4 985e8c4abbbSBram Moolenaar break 986e8c4abbbSBram Moolenaar endif 987e8c4abbbSBram Moolenaar if cnt == 2 988e8c4abbbSBram Moolenaar continue 989e8c4abbbSBram Moolenaar endif 990e8c4abbbSBram Moolenaar result ..= cnt .. '_' 991e8c4abbbSBram Moolenaar endfor 992e8c4abbbSBram Moolenaar assert_equal('0_1_3_', result) 993e8c4abbbSBram Moolenaarenddef 994e8c4abbbSBram Moolenaar 995e8c4abbbSBram Moolenaardef Test_for_loop_fails() 996675f716eSBram Moolenaar CheckDefFailure(['for # in range(5)'], 'E690:') 997675f716eSBram Moolenaar CheckDefFailure(['for i In range(5)'], 'E690:') 998675f716eSBram Moolenaar CheckDefFailure(['let x = 5', 'for x in range(5)'], 'E1023:') 9996e949784SBram Moolenaar CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef'], 'E1006:') 1000675f716eSBram Moolenaar CheckDefFailure(['for i in "text"'], 'E1024:') 1001675f716eSBram Moolenaar CheckDefFailure(['for i in xxx'], 'E1001:') 1002675f716eSBram Moolenaar CheckDefFailure(['endfor'], 'E588:') 1003675f716eSBram Moolenaar CheckDefFailure(['for i in range(3)', 'echo 3'], 'E170:') 1004e8c4abbbSBram Moolenaarenddef 1005e8c4abbbSBram Moolenaar 1006d0df1aacSBram Moolenaardef Test_while_loop() 1007d0df1aacSBram Moolenaar let result = '' 1008d0df1aacSBram Moolenaar let cnt = 0 1009d0df1aacSBram Moolenaar while cnt < 555 1010d0df1aacSBram Moolenaar if cnt == 3 1011d0df1aacSBram Moolenaar break 1012d0df1aacSBram Moolenaar endif 1013d0df1aacSBram Moolenaar cnt += 1 1014d0df1aacSBram Moolenaar if cnt == 2 1015d0df1aacSBram Moolenaar continue 1016d0df1aacSBram Moolenaar endif 1017d0df1aacSBram Moolenaar result ..= cnt .. '_' 1018d0df1aacSBram Moolenaar endwhile 1019d0df1aacSBram Moolenaar assert_equal('1_3_', result) 1020d0df1aacSBram Moolenaarenddef 1021d0df1aacSBram Moolenaar 1022e8c4abbbSBram Moolenaardef Test_while_loop_fails() 1023675f716eSBram Moolenaar CheckDefFailure(['while xxx'], 'E1001:') 1024675f716eSBram Moolenaar CheckDefFailure(['endwhile'], 'E588:') 1025675f716eSBram Moolenaar CheckDefFailure(['continue'], 'E586:') 1026675f716eSBram Moolenaar CheckDefFailure(['if true', 'continue'], 'E586:') 1027675f716eSBram Moolenaar CheckDefFailure(['break'], 'E587:') 1028675f716eSBram Moolenaar CheckDefFailure(['if true', 'break'], 'E587:') 1029675f716eSBram Moolenaar CheckDefFailure(['while 1', 'echo 3'], 'E170:') 1030bd5da371SBram Moolenaarenddef 1031bd5da371SBram Moolenaar 10329645e2d9SBram Moolenaardef Test_interrupt_loop() 103397acfc78SBram Moolenaar let caught = false 10349645e2d9SBram Moolenaar let x = 0 103597acfc78SBram Moolenaar try 10369645e2d9SBram Moolenaar while 1 10379645e2d9SBram Moolenaar x += 1 10389645e2d9SBram Moolenaar if x == 100 10399645e2d9SBram Moolenaar feedkeys("\<C-C>", 'Lt') 10409645e2d9SBram Moolenaar endif 10419645e2d9SBram Moolenaar endwhile 104297acfc78SBram Moolenaar catch 104397acfc78SBram Moolenaar caught = true 104497acfc78SBram Moolenaar assert_equal(100, x) 104597acfc78SBram Moolenaar endtry 104697acfc78SBram Moolenaar assert_true(caught, 'should have caught an exception') 10479645e2d9SBram Moolenaarenddef 104820431c9dSBram Moolenaar 10494fdae999SBram Moolenaardef Test_automatic_line_continuation() 10504fdae999SBram Moolenaar let mylist = [ 10514fdae999SBram Moolenaar 'one', 10524fdae999SBram Moolenaar 'two', 10534fdae999SBram Moolenaar 'three', 10544fdae999SBram Moolenaar ] " comment 10554fdae999SBram Moolenaar assert_equal(['one', 'two', 'three'], mylist) 10564fdae999SBram Moolenaar 10574fdae999SBram Moolenaar let mydict = { 10584fdae999SBram Moolenaar 'one': 1, 10594fdae999SBram Moolenaar 'two': 2, 10604fdae999SBram Moolenaar 'three': 10614fdae999SBram Moolenaar 3, 10624fdae999SBram Moolenaar } " comment 10634fdae999SBram Moolenaar assert_equal({'one': 1, 'two': 2, 'three': 3}, mydict) 10644fdae999SBram Moolenaar mydict = #{ 10652c330432SBram Moolenaar one: 1, # comment 10662c330432SBram Moolenaar two: # comment 10672c330432SBram Moolenaar 2, # comment 10682c330432SBram Moolenaar three: 3 # comment 10692c330432SBram Moolenaar } 10702c330432SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 10712c330432SBram Moolenaar mydict = #{ 10722c330432SBram Moolenaar one: 1, 10734fdae999SBram Moolenaar two: 10744fdae999SBram Moolenaar 2, 10752c330432SBram Moolenaar three: 3 10764fdae999SBram Moolenaar } 10774fdae999SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 1078e6085c53SBram Moolenaar 1079e6085c53SBram Moolenaar assert_equal( 1080e6085c53SBram Moolenaar ['one', 'two', 'three'], 1081e6085c53SBram Moolenaar split('one two three') 1082e6085c53SBram Moolenaar ) 10834fdae999SBram Moolenaarenddef 10844fdae999SBram Moolenaar 10857a092245SBram Moolenaardef Test_vim9_comment() 10867a092245SBram Moolenaar CheckScriptSuccess([ 10877a092245SBram Moolenaar 'vim9script', 10887a092245SBram Moolenaar '# something', 10897a092245SBram Moolenaar ]) 10907a092245SBram Moolenaar CheckScriptFailure([ 10917a092245SBram Moolenaar 'vim9script', 10927a092245SBram Moolenaar ':# something', 10937a092245SBram Moolenaar ], 'E488:') 10947a092245SBram Moolenaar CheckScriptFailure([ 10957a092245SBram Moolenaar '# something', 10967a092245SBram Moolenaar ], 'E488:') 10977a092245SBram Moolenaar CheckScriptFailure([ 10987a092245SBram Moolenaar ':# something', 10997a092245SBram Moolenaar ], 'E488:') 11007a092245SBram Moolenaar 11014a8d9f2eSBram Moolenaar { # block start 11024a8d9f2eSBram Moolenaar } # block end 11034a8d9f2eSBram Moolenaar CheckDefFailure([ 11044a8d9f2eSBram Moolenaar '{# comment', 11054a8d9f2eSBram Moolenaar ], 'E488:') 11064a8d9f2eSBram Moolenaar CheckDefFailure([ 11074a8d9f2eSBram Moolenaar '{', 11084a8d9f2eSBram Moolenaar '}# comment', 11094a8d9f2eSBram Moolenaar ], 'E488:') 11104a8d9f2eSBram Moolenaar 11114a8d9f2eSBram Moolenaar echo "yes" # comment 11124a8d9f2eSBram Moolenaar CheckDefFailure([ 11134a8d9f2eSBram Moolenaar 'echo "yes"# comment', 11144a8d9f2eSBram Moolenaar ], 'E488:') 11157a092245SBram Moolenaar CheckScriptSuccess([ 11167a092245SBram Moolenaar 'vim9script', 11177a092245SBram Moolenaar 'echo "yes" # something', 11187a092245SBram Moolenaar ]) 11197a092245SBram Moolenaar CheckScriptFailure([ 11207a092245SBram Moolenaar 'vim9script', 11217a092245SBram Moolenaar 'echo "yes"# something', 11227a092245SBram Moolenaar ], 'E121:') 11237a092245SBram Moolenaar CheckScriptFailure([ 11247a092245SBram Moolenaar 'vim9script', 11257a092245SBram Moolenaar 'echo# something', 11267a092245SBram Moolenaar ], 'E121:') 11277a092245SBram Moolenaar CheckScriptFailure([ 11287a092245SBram Moolenaar 'echo "yes" # something', 11297a092245SBram Moolenaar ], 'E121:') 11307a092245SBram Moolenaar 11314a8d9f2eSBram Moolenaar exe "echo" # comment 11324a8d9f2eSBram Moolenaar CheckDefFailure([ 11334a8d9f2eSBram Moolenaar 'exe "echo"# comment', 11344a8d9f2eSBram Moolenaar ], 'E488:') 11354a8d9f2eSBram Moolenaar CheckScriptSuccess([ 11364a8d9f2eSBram Moolenaar 'vim9script', 11374a8d9f2eSBram Moolenaar 'exe "echo" # something', 11384a8d9f2eSBram Moolenaar ]) 11394a8d9f2eSBram Moolenaar CheckScriptFailure([ 11404a8d9f2eSBram Moolenaar 'vim9script', 11414a8d9f2eSBram Moolenaar 'exe "echo"# something', 11424a8d9f2eSBram Moolenaar ], 'E121:') 11434a8d9f2eSBram Moolenaar CheckDefFailure([ 11444a8d9f2eSBram Moolenaar 'exe # comment', 11454a8d9f2eSBram Moolenaar ], 'E1015:') 11464a8d9f2eSBram Moolenaar CheckScriptFailure([ 11474a8d9f2eSBram Moolenaar 'vim9script', 11484a8d9f2eSBram Moolenaar 'exe# something', 11494a8d9f2eSBram Moolenaar ], 'E121:') 11504a8d9f2eSBram Moolenaar CheckScriptFailure([ 11514a8d9f2eSBram Moolenaar 'exe "echo" # something', 11524a8d9f2eSBram Moolenaar ], 'E121:') 11534a8d9f2eSBram Moolenaar 11547a092245SBram Moolenaar CheckDefFailure([ 11557a092245SBram Moolenaar 'try# comment', 11567a092245SBram Moolenaar 'echo "yes"', 11577a092245SBram Moolenaar 'catch', 11587a092245SBram Moolenaar 'endtry', 11597a092245SBram Moolenaar ], 'E488:') 11607a092245SBram Moolenaar CheckDefFailure([ 11617a092245SBram Moolenaar 'try', 11627a092245SBram Moolenaar 'echo "yes"', 11637a092245SBram Moolenaar 'catch# comment', 11647a092245SBram Moolenaar 'endtry', 11657a092245SBram Moolenaar ], 'E488:') 11667a092245SBram Moolenaar CheckDefFailure([ 11677a092245SBram Moolenaar 'try', 11687a092245SBram Moolenaar 'echo "yes"', 11697a092245SBram Moolenaar 'catch', 11707a092245SBram Moolenaar 'endtry# comment', 11717a092245SBram Moolenaar ], 'E488:') 11727a092245SBram Moolenaarenddef 11737a092245SBram Moolenaar 1174a26b9700SBram Moolenaardef Test_vim9_comment_not_compiled() 1175a26b9700SBram Moolenaar au TabEnter *.vim let g:entered = 1 1176a26b9700SBram Moolenaar au TabEnter *.x let g:entered = 2 1177a26b9700SBram Moolenaar 1178a26b9700SBram Moolenaar edit test.vim 1179a26b9700SBram Moolenaar doautocmd TabEnter #comment 1180a26b9700SBram Moolenaar assert_equal(1, g:entered) 1181a26b9700SBram Moolenaar 1182a26b9700SBram Moolenaar doautocmd TabEnter f.x 1183a26b9700SBram Moolenaar assert_equal(2, g:entered) 1184a26b9700SBram Moolenaar 1185a26b9700SBram Moolenaar g:entered = 0 1186a26b9700SBram Moolenaar doautocmd TabEnter f.x #comment 1187a26b9700SBram Moolenaar assert_equal(2, g:entered) 1188a26b9700SBram Moolenaar 1189a26b9700SBram Moolenaar assert_fails('doautocmd Syntax#comment', 'E216:') 1190a26b9700SBram Moolenaar 1191a26b9700SBram Moolenaar au! TabEnter 1192a26b9700SBram Moolenaar unlet g:entered 1193d72c1bf0SBram Moolenaar 1194d72c1bf0SBram Moolenaar CheckScriptSuccess([ 1195d72c1bf0SBram Moolenaar 'vim9script', 1196d72c1bf0SBram Moolenaar 'let g:var = 123', 1197d72c1bf0SBram Moolenaar 'let w:var = 777', 1198d72c1bf0SBram Moolenaar 'unlet g:var w:var # something', 1199d72c1bf0SBram Moolenaar ]) 1200d72c1bf0SBram Moolenaar 1201d72c1bf0SBram Moolenaar CheckScriptFailure([ 1202d72c1bf0SBram Moolenaar 'vim9script', 1203d72c1bf0SBram Moolenaar 'let g:var = 123', 1204d72c1bf0SBram Moolenaar 'unlet g:var# comment', 1205d72c1bf0SBram Moolenaar ], 'E108:') 1206d72c1bf0SBram Moolenaar 1207d72c1bf0SBram Moolenaar CheckScriptFailure([ 1208d72c1bf0SBram Moolenaar 'let g:var = 123', 1209d72c1bf0SBram Moolenaar 'unlet g:var # something', 1210d72c1bf0SBram Moolenaar ], 'E488:') 1211a26b9700SBram Moolenaarenddef 1212a26b9700SBram Moolenaar 1213585fea7bSBram Moolenaar" Keep this last, it messes up highlighting. 1214585fea7bSBram Moolenaardef Test_substitute_cmd() 1215585fea7bSBram Moolenaar new 1216585fea7bSBram Moolenaar setline(1, 'something') 1217585fea7bSBram Moolenaar :substitute(some(other( 1218585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 1219585fea7bSBram Moolenaar bwipe! 1220585fea7bSBram Moolenaar 1221585fea7bSBram Moolenaar " also when the context is Vim9 script 1222585fea7bSBram Moolenaar let lines =<< trim END 1223585fea7bSBram Moolenaar vim9script 1224585fea7bSBram Moolenaar new 1225585fea7bSBram Moolenaar setline(1, 'something') 1226585fea7bSBram Moolenaar :substitute(some(other( 1227585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 1228585fea7bSBram Moolenaar bwipe! 1229585fea7bSBram Moolenaar END 1230585fea7bSBram Moolenaar writefile(lines, 'Xvim9lines') 1231585fea7bSBram Moolenaar source Xvim9lines 1232585fea7bSBram Moolenaar 1233585fea7bSBram Moolenaar delete('Xvim9lines') 1234585fea7bSBram Moolenaarenddef 1235585fea7bSBram Moolenaar 12368a7d6542SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker 1237