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 216*d72c1bf0SBram 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:') 259*d72c1bf0SBram Moolenaarenddef 260*d72c1bf0SBram Moolenaar 261*d72c1bf0SBram Moolenaardef Test_unlet() 262*d72c1bf0SBram Moolenaar g:somevar = 'yes' 263*d72c1bf0SBram Moolenaar assert_true(exists('g:somevar')) 264*d72c1bf0SBram Moolenaar unlet g:somevar 265*d72c1bf0SBram Moolenaar assert_false(exists('g:somevar')) 266*d72c1bf0SBram Moolenaar unlet! g:somevar 267*d72c1bf0SBram Moolenaar 268*d72c1bf0SBram Moolenaar call CheckScriptFailure([ 269*d72c1bf0SBram Moolenaar 'vim9script', 270*d72c1bf0SBram Moolenaar 'let svar = 123', 271*d72c1bf0SBram Moolenaar 'unlet svar', 272*d72c1bf0SBram Moolenaar ], 'E1081:') 273*d72c1bf0SBram Moolenaar call CheckScriptFailure([ 274*d72c1bf0SBram Moolenaar 'vim9script', 275*d72c1bf0SBram Moolenaar 'let svar = 123', 276*d72c1bf0SBram Moolenaar 'unlet s:svar', 277*d72c1bf0SBram Moolenaar ], 'E1081:') 278*d72c1bf0SBram Moolenaar call CheckScriptFailure([ 279*d72c1bf0SBram Moolenaar 'vim9script', 280*d72c1bf0SBram Moolenaar 'let svar = 123', 281*d72c1bf0SBram Moolenaar 'def Func()', 282*d72c1bf0SBram Moolenaar ' unlet svar', 283*d72c1bf0SBram Moolenaar 'enddef', 284*d72c1bf0SBram Moolenaar ], 'E1081:') 285*d72c1bf0SBram Moolenaar call CheckScriptFailure([ 286*d72c1bf0SBram Moolenaar 'vim9script', 287*d72c1bf0SBram Moolenaar 'let svar = 123', 288*d72c1bf0SBram Moolenaar 'def Func()', 289*d72c1bf0SBram Moolenaar ' unlet s:svar', 290*d72c1bf0SBram Moolenaar 'enddef', 291*d72c1bf0SBram Moolenaar ], 'E1081:') 292*d72c1bf0SBram Moolenaarenddef 293599c89c8SBram Moolenaar 294599c89c8SBram Moolenaarfunc Test_wrong_type() 295599c89c8SBram Moolenaar call CheckDefFailure(['let var: list<nothing>'], 'E1010:') 296599c89c8SBram Moolenaar call CheckDefFailure(['let var: list<list<nothing>>'], 'E1010:') 297599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<nothing>'], 'E1010:') 298599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<dict<nothing>>'], 'E1010:') 299599c89c8SBram Moolenaar 300599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 301599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<list<number>'], 'E1009:') 30242a480bfSBram Moolenaar 30342a480bfSBram Moolenaar call CheckDefFailure(['let var: ally'], 'E1010:') 30442a480bfSBram Moolenaar call CheckDefFailure(['let var: bram'], 'E1010:') 30542a480bfSBram Moolenaar call CheckDefFailure(['let var: cathy'], 'E1010:') 30642a480bfSBram Moolenaar call CheckDefFailure(['let var: dom'], 'E1010:') 30742a480bfSBram Moolenaar call CheckDefFailure(['let var: freddy'], 'E1010:') 30842a480bfSBram Moolenaar call CheckDefFailure(['let var: john'], 'E1010:') 30942a480bfSBram Moolenaar call CheckDefFailure(['let var: larry'], 'E1010:') 31042a480bfSBram Moolenaar call CheckDefFailure(['let var: ned'], 'E1010:') 31142a480bfSBram Moolenaar call CheckDefFailure(['let var: pam'], 'E1010:') 31242a480bfSBram Moolenaar call CheckDefFailure(['let var: sam'], 'E1010:') 31342a480bfSBram Moolenaar call CheckDefFailure(['let var: vim'], 'E1010:') 3148a7d6542SBram Moolenaarendfunc 3158a7d6542SBram Moolenaar 3168a7d6542SBram Moolenaarfunc Test_const() 3178a7d6542SBram Moolenaar call CheckDefFailure(['const var = 234', 'var = 99'], 'E1018:') 3188a7d6542SBram Moolenaar call CheckDefFailure(['const one = 234', 'let one = 99'], 'E1017:') 3198a7d6542SBram Moolenaar call CheckDefFailure(['const two'], 'E1021:') 3209be61bbbSBram Moolenaar call CheckDefFailure(['const &option'], 'E996:') 3218a7d6542SBram Moolenaarendfunc 3228a7d6542SBram Moolenaar 3238a7d6542SBram Moolenaardef Test_block() 3248a7d6542SBram Moolenaar let outer = 1 3258a7d6542SBram Moolenaar { 3268a7d6542SBram Moolenaar let inner = 2 3278a7d6542SBram Moolenaar assert_equal(1, outer) 3288a7d6542SBram Moolenaar assert_equal(2, inner) 3298a7d6542SBram Moolenaar } 3308a7d6542SBram Moolenaar assert_equal(1, outer) 3318a7d6542SBram Moolenaarenddef 3328a7d6542SBram Moolenaar 3338a7d6542SBram Moolenaarfunc Test_block_failure() 3348a7d6542SBram Moolenaar call CheckDefFailure(['{', 'let inner = 1', '}', 'echo inner'], 'E1001:') 335585fea7bSBram Moolenaar call CheckDefFailure(['}'], 'E1025:') 336585fea7bSBram Moolenaar call CheckDefFailure(['{', 'echo 1'], 'E1026:') 3378a7d6542SBram Moolenaarendfunc 3388a7d6542SBram Moolenaar 339585fea7bSBram Moolenaardef Test_cmd_modifier() 340585fea7bSBram Moolenaar tab echo '0' 341585fea7bSBram Moolenaar call CheckDefFailure(['5tab echo 3'], 'E16:') 342585fea7bSBram Moolenaarenddef 343585fea7bSBram Moolenaar 3448a7d6542SBram Moolenaardef Test_try_catch() 3458a7d6542SBram Moolenaar let l = [] 3467a092245SBram Moolenaar try # comment 3478a7d6542SBram Moolenaar add(l, '1') 3488a7d6542SBram Moolenaar throw 'wrong' 3498a7d6542SBram Moolenaar add(l, '2') 3507a092245SBram Moolenaar catch # comment 3518a7d6542SBram Moolenaar add(l, v:exception) 3527a092245SBram Moolenaar finally # comment 3538a7d6542SBram Moolenaar add(l, '3') 3547a092245SBram Moolenaar endtry # comment 3558a7d6542SBram Moolenaar assert_equal(['1', 'wrong', '3'], l) 3568a7d6542SBram Moolenaarenddef 3578a7d6542SBram Moolenaar 358257cc5eeSBram Moolenaardef ThrowFromDef() 359257cc5eeSBram Moolenaar throw 'getout' 360257cc5eeSBram Moolenaarenddef 361257cc5eeSBram Moolenaar 362257cc5eeSBram Moolenaarfunc CatchInFunc() 363257cc5eeSBram Moolenaar try 364257cc5eeSBram Moolenaar call ThrowFromDef() 365257cc5eeSBram Moolenaar catch 366257cc5eeSBram Moolenaar let g:thrown_func = v:exception 367257cc5eeSBram Moolenaar endtry 368257cc5eeSBram Moolenaarendfunc 369257cc5eeSBram Moolenaar 370257cc5eeSBram Moolenaardef CatchInDef() 371257cc5eeSBram Moolenaar try 372257cc5eeSBram Moolenaar ThrowFromDef() 373257cc5eeSBram Moolenaar catch 374257cc5eeSBram Moolenaar g:thrown_def = v:exception 375257cc5eeSBram Moolenaar endtry 376257cc5eeSBram Moolenaarenddef 377257cc5eeSBram Moolenaar 378f575adffSBram Moolenaardef ReturnFinally(): string 379f575adffSBram Moolenaar try 380f575adffSBram Moolenaar return 'intry' 381f575adffSBram Moolenaar finally 382f575adffSBram Moolenaar g:in_finally = 'finally' 383f575adffSBram Moolenaar endtry 384f575adffSBram Moolenaar return 'end' 385f575adffSBram Moolenaarenddef 386f575adffSBram Moolenaar 387257cc5eeSBram Moolenaardef Test_try_catch_nested() 388257cc5eeSBram Moolenaar CatchInFunc() 389257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_func) 390257cc5eeSBram Moolenaar 391257cc5eeSBram Moolenaar CatchInDef() 392257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_def) 393f575adffSBram Moolenaar 394f575adffSBram Moolenaar assert_equal('intry', ReturnFinally()) 395f575adffSBram Moolenaar assert_equal('finally', g:in_finally) 396f575adffSBram Moolenaarenddef 397f575adffSBram Moolenaar 398f575adffSBram Moolenaardef Test_try_catch_match() 399f575adffSBram Moolenaar let seq = 'a' 400f575adffSBram Moolenaar try 401f575adffSBram Moolenaar throw 'something' 402f575adffSBram Moolenaar catch /nothing/ 403f575adffSBram Moolenaar seq ..= 'x' 404f575adffSBram Moolenaar catch /some/ 405f575adffSBram Moolenaar seq ..= 'b' 406f575adffSBram Moolenaar catch /asdf/ 407f575adffSBram Moolenaar seq ..= 'x' 408e8c4abbbSBram Moolenaar catch ?a\?sdf? 409e8c4abbbSBram Moolenaar seq ..= 'y' 410f575adffSBram Moolenaar finally 411f575adffSBram Moolenaar seq ..= 'c' 412f575adffSBram Moolenaar endtry 413f575adffSBram Moolenaar assert_equal('abc', seq) 414257cc5eeSBram Moolenaarenddef 415257cc5eeSBram Moolenaar 416e8c4abbbSBram Moolenaardef Test_try_catch_fails() 417e8c4abbbSBram Moolenaar call CheckDefFailure(['catch'], 'E603:') 418e8c4abbbSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'catch','catch'], 'E1033:') 419e8c4abbbSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'catch /pat'], 'E1067:') 420585fea7bSBram Moolenaar call CheckDefFailure(['finally'], 'E606:') 421585fea7bSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'finally', 'echo 1', 'finally'], 'E607:') 422585fea7bSBram Moolenaar call CheckDefFailure(['endtry'], 'E602:') 423585fea7bSBram Moolenaar call CheckDefFailure(['while 1', 'endtry'], 'E170:') 424585fea7bSBram Moolenaar call CheckDefFailure(['for i in range(5)', 'endtry'], 'E170:') 425585fea7bSBram Moolenaar call CheckDefFailure(['if 2', 'endtry'], 'E171:') 426585fea7bSBram Moolenaar call CheckDefFailure(['try', 'echo 1', 'endtry'], 'E1032:') 427585fea7bSBram Moolenaar 428585fea7bSBram Moolenaar call CheckDefFailure(['throw'], 'E471:') 429585fea7bSBram Moolenaar call CheckDefFailure(['throw xxx'], 'E1001:') 430e8c4abbbSBram Moolenaarenddef 431e8c4abbbSBram Moolenaar 4328a7d6542SBram Moolenaarlet s:export_script_lines =<< trim END 4338a7d6542SBram Moolenaar vim9script 4348a7d6542SBram Moolenaar let name: string = 'bob' 4358a7d6542SBram Moolenaar def Concat(arg: string): string 4368a7d6542SBram Moolenaar return name .. arg 4378a7d6542SBram Moolenaar enddef 4388a7d6542SBram Moolenaar let g:result = Concat('bie') 4398a7d6542SBram Moolenaar let g:localname = name 4408a7d6542SBram Moolenaar 4418a7d6542SBram Moolenaar export const CONST = 1234 4428a7d6542SBram Moolenaar export let exported = 9876 4436e587dcbSBram Moolenaar export let exp_name = 'John' 4448a7d6542SBram Moolenaar export def Exported(): string 4458a7d6542SBram Moolenaar return 'Exported' 4468a7d6542SBram Moolenaar enddef 4478a7d6542SBram MoolenaarEND 4488a7d6542SBram Moolenaar 4495269bd2aSBram Moolenaardef Test_vim9_import_export() 4508a7d6542SBram Moolenaar let import_script_lines =<< trim END 4518a7d6542SBram Moolenaar vim9script 4528a7d6542SBram Moolenaar import {exported, Exported} from './Xexport.vim' 4538a7d6542SBram Moolenaar g:imported = exported 4546e587dcbSBram Moolenaar exported += 3 4556e587dcbSBram Moolenaar g:imported_added = exported 4568a7d6542SBram Moolenaar g:imported_func = Exported() 4576e587dcbSBram Moolenaar 4586e587dcbSBram Moolenaar import {exp_name} from './Xexport.vim' 4596e587dcbSBram Moolenaar g:imported_name = exp_name 4606e587dcbSBram Moolenaar exp_name ..= ' Doe' 4616e587dcbSBram Moolenaar g:imported_name_appended = exp_name 4625381c7a1SBram Moolenaar g:imported_later = exported 4638a7d6542SBram Moolenaar END 4648a7d6542SBram Moolenaar 4658a7d6542SBram Moolenaar writefile(import_script_lines, 'Ximport.vim') 4668a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport.vim') 4678a7d6542SBram Moolenaar 4688a7d6542SBram Moolenaar source Ximport.vim 4698a7d6542SBram Moolenaar 4708a7d6542SBram Moolenaar assert_equal('bobbie', g:result) 4718a7d6542SBram Moolenaar assert_equal('bob', g:localname) 4728a7d6542SBram Moolenaar assert_equal(9876, g:imported) 4736e587dcbSBram Moolenaar assert_equal(9879, g:imported_added) 4745381c7a1SBram Moolenaar assert_equal(9879, g:imported_later) 4758a7d6542SBram Moolenaar assert_equal('Exported', g:imported_func) 4766e587dcbSBram Moolenaar assert_equal('John', g:imported_name) 4776e587dcbSBram Moolenaar assert_equal('John Doe', g:imported_name_appended) 4788a7d6542SBram Moolenaar assert_false(exists('g:name')) 4798a7d6542SBram Moolenaar 4808a7d6542SBram Moolenaar unlet g:result 4818a7d6542SBram Moolenaar unlet g:localname 4828a7d6542SBram Moolenaar unlet g:imported 4836e587dcbSBram Moolenaar unlet g:imported_added 4845381c7a1SBram Moolenaar unlet g:imported_later 4858a7d6542SBram Moolenaar unlet g:imported_func 4866e587dcbSBram Moolenaar unlet g:imported_name g:imported_name_appended 4878a7d6542SBram Moolenaar delete('Ximport.vim') 488f2d5c240SBram Moolenaar 4895381c7a1SBram Moolenaar let import_in_def_lines =<< trim END 4905381c7a1SBram Moolenaar vim9script 4915381c7a1SBram Moolenaar def ImportInDef() 4925381c7a1SBram Moolenaar import exported from './Xexport.vim' 4935381c7a1SBram Moolenaar g:imported = exported 4945381c7a1SBram Moolenaar exported += 7 4955381c7a1SBram Moolenaar g:imported_added = exported 4965381c7a1SBram Moolenaar enddef 4975381c7a1SBram Moolenaar ImportInDef() 4985381c7a1SBram Moolenaar END 4995381c7a1SBram Moolenaar writefile(import_in_def_lines, 'Ximport2.vim') 5005381c7a1SBram Moolenaar source Ximport2.vim 5015381c7a1SBram Moolenaar " TODO: this should be 9879 5025381c7a1SBram Moolenaar assert_equal(9876, g:imported) 5035381c7a1SBram Moolenaar assert_equal(9883, g:imported_added) 5045381c7a1SBram Moolenaar unlet g:imported 5055381c7a1SBram Moolenaar unlet g:imported_added 5065381c7a1SBram Moolenaar delete('Ximport2.vim') 5075381c7a1SBram Moolenaar 508f2d5c240SBram Moolenaar let import_star_as_lines =<< trim END 509f2d5c240SBram Moolenaar vim9script 510f2d5c240SBram Moolenaar import * as Export from './Xexport.vim' 511f2d5c240SBram Moolenaar def UseExport() 512f2d5c240SBram Moolenaar g:imported = Export.exported 513f2d5c240SBram Moolenaar enddef 514f2d5c240SBram Moolenaar UseExport() 515f2d5c240SBram Moolenaar END 516f2d5c240SBram Moolenaar writefile(import_star_as_lines, 'Ximport.vim') 517f2d5c240SBram Moolenaar source Ximport.vim 5185381c7a1SBram Moolenaar assert_equal(9883, g:imported) 519f2d5c240SBram Moolenaar 520599c89c8SBram Moolenaar let import_star_as_lines_no_dot =<< trim END 521599c89c8SBram Moolenaar vim9script 522599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 523599c89c8SBram Moolenaar def Func() 524599c89c8SBram Moolenaar let dummy = 1 525599c89c8SBram Moolenaar let imported = Export + dummy 526599c89c8SBram Moolenaar enddef 527599c89c8SBram Moolenaar END 528599c89c8SBram Moolenaar writefile(import_star_as_lines_no_dot, 'Ximport.vim') 529599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1060:') 530599c89c8SBram Moolenaar 531599c89c8SBram Moolenaar let import_star_as_lines_dot_space =<< trim END 532599c89c8SBram Moolenaar vim9script 533599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 534599c89c8SBram Moolenaar def Func() 535599c89c8SBram Moolenaar let imported = Export . exported 536599c89c8SBram Moolenaar enddef 537599c89c8SBram Moolenaar END 538599c89c8SBram Moolenaar writefile(import_star_as_lines_dot_space, 'Ximport.vim') 539599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1074:') 540599c89c8SBram Moolenaar 541599c89c8SBram Moolenaar let import_star_as_lines_missing_name =<< trim END 542599c89c8SBram Moolenaar vim9script 543599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 544599c89c8SBram Moolenaar def Func() 545599c89c8SBram Moolenaar let imported = Export. 546599c89c8SBram Moolenaar enddef 547599c89c8SBram Moolenaar END 548599c89c8SBram Moolenaar writefile(import_star_as_lines_missing_name, 'Ximport.vim') 549599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 550599c89c8SBram Moolenaar 551f2d5c240SBram Moolenaar let import_star_lines =<< trim END 552f2d5c240SBram Moolenaar vim9script 553f2d5c240SBram Moolenaar import * from './Xexport.vim' 554f2d5c240SBram Moolenaar g:imported = exported 555f2d5c240SBram Moolenaar END 556f2d5c240SBram Moolenaar writefile(import_star_lines, 'Ximport.vim') 557f2d5c240SBram Moolenaar assert_fails('source Ximport.vim', 'E1045:') 558f2d5c240SBram Moolenaar 559fa29c8abSBram Moolenaar " try to import something that exists but is not exported 560fa29c8abSBram Moolenaar let import_not_exported_lines =<< trim END 561fa29c8abSBram Moolenaar vim9script 562fa29c8abSBram Moolenaar import name from './Xexport.vim' 563fa29c8abSBram Moolenaar END 564fa29c8abSBram Moolenaar writefile(import_not_exported_lines, 'Ximport.vim') 565fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1049:') 566fa29c8abSBram Moolenaar 5675269bd2aSBram Moolenaar " try to import something that is already defined 5685269bd2aSBram Moolenaar let import_already_defined =<< trim END 5695269bd2aSBram Moolenaar vim9script 5705269bd2aSBram Moolenaar let exported = 'something' 5715269bd2aSBram Moolenaar import exported from './Xexport.vim' 5725269bd2aSBram Moolenaar END 5735269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 5745269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 5755269bd2aSBram Moolenaar 5765269bd2aSBram Moolenaar " try to import something that is already defined 5775269bd2aSBram Moolenaar import_already_defined =<< trim END 5785269bd2aSBram Moolenaar vim9script 5795269bd2aSBram Moolenaar let exported = 'something' 5805269bd2aSBram Moolenaar import * as exported from './Xexport.vim' 5815269bd2aSBram Moolenaar END 5825269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 5835269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 5845269bd2aSBram Moolenaar 5855269bd2aSBram Moolenaar " try to import something that is already defined 5865269bd2aSBram Moolenaar import_already_defined =<< trim END 5875269bd2aSBram Moolenaar vim9script 5885269bd2aSBram Moolenaar let exported = 'something' 5895269bd2aSBram Moolenaar import {exported} from './Xexport.vim' 5905269bd2aSBram Moolenaar END 5915269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 5925269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 5935269bd2aSBram Moolenaar 594fa29c8abSBram Moolenaar " import a very long name, requires making a copy 595fa29c8abSBram Moolenaar let import_long_name_lines =<< trim END 596fa29c8abSBram Moolenaar vim9script 597fa29c8abSBram Moolenaar import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim' 598fa29c8abSBram Moolenaar END 599fa29c8abSBram Moolenaar writefile(import_long_name_lines, 'Ximport.vim') 600fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 601fa29c8abSBram Moolenaar 602fa29c8abSBram Moolenaar let import_no_from_lines =<< trim END 603fa29c8abSBram Moolenaar vim9script 604fa29c8abSBram Moolenaar import name './Xexport.vim' 605fa29c8abSBram Moolenaar END 606fa29c8abSBram Moolenaar writefile(import_no_from_lines, 'Ximport.vim') 607fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1070:') 608fa29c8abSBram Moolenaar 609fa29c8abSBram Moolenaar let import_invalid_string_lines =<< trim END 610fa29c8abSBram Moolenaar vim9script 611fa29c8abSBram Moolenaar import name from Xexport.vim 612fa29c8abSBram Moolenaar END 613fa29c8abSBram Moolenaar writefile(import_invalid_string_lines, 'Ximport.vim') 614fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1071:') 615fa29c8abSBram Moolenaar 616fa29c8abSBram Moolenaar let import_wrong_name_lines =<< trim END 617fa29c8abSBram Moolenaar vim9script 618fa29c8abSBram Moolenaar import name from './XnoExport.vim' 619fa29c8abSBram Moolenaar END 620fa29c8abSBram Moolenaar writefile(import_wrong_name_lines, 'Ximport.vim') 621fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1053:') 622fa29c8abSBram Moolenaar 623fa29c8abSBram Moolenaar let import_missing_comma_lines =<< trim END 624fa29c8abSBram Moolenaar vim9script 625fa29c8abSBram Moolenaar import {exported name} from './Xexport.vim' 626fa29c8abSBram Moolenaar END 6275269bd2aSBram Moolenaar writefile(import_missing_comma_lines, 'Ximport3.vim') 6285269bd2aSBram Moolenaar assert_fails('source Ximport3.vim', 'E1046:') 629fa29c8abSBram Moolenaar 630f2d5c240SBram Moolenaar delete('Ximport.vim') 6315269bd2aSBram Moolenaar delete('Ximport3.vim') 6328a7d6542SBram Moolenaar delete('Xexport.vim') 6338a7d6542SBram Moolenaar 634750802b5SBram Moolenaar " Check that in a Vim9 script 'cpo' is set to the Vim default. 635750802b5SBram Moolenaar set cpo&vi 636750802b5SBram Moolenaar let cpo_before = &cpo 637750802b5SBram Moolenaar let lines =<< trim END 638750802b5SBram Moolenaar vim9script 639750802b5SBram Moolenaar g:cpo_in_vim9script = &cpo 640750802b5SBram Moolenaar END 641750802b5SBram Moolenaar writefile(lines, 'Xvim9_script') 642750802b5SBram Moolenaar source Xvim9_script 643750802b5SBram Moolenaar assert_equal(cpo_before, &cpo) 644750802b5SBram Moolenaar set cpo&vim 645750802b5SBram Moolenaar assert_equal(&cpo, g:cpo_in_vim9script) 646750802b5SBram Moolenaar delete('Xvim9_script') 647750802b5SBram Moolenaarenddef 648750802b5SBram Moolenaar 649750802b5SBram Moolenaardef Test_vim9script_fails() 6508a7d6542SBram Moolenaar CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:') 6518a7d6542SBram Moolenaar CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:') 652750802b5SBram Moolenaar CheckScriptFailure(['export let some = 123'], 'E1042:') 653f2d5c240SBram Moolenaar CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1042:') 654750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export let g:some'], 'E1044:') 655750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:') 656750802b5SBram Moolenaar 657750802b5SBram Moolenaar assert_fails('vim9script', 'E1038') 658a26b9700SBram Moolenaar assert_fails('export something', 'E1043') 6598a7d6542SBram Moolenaarenddef 6608a7d6542SBram Moolenaar 6618a7d6542SBram Moolenaardef Test_vim9script_reload() 6628a7d6542SBram Moolenaar let lines =<< trim END 6638a7d6542SBram Moolenaar vim9script 6648a7d6542SBram Moolenaar const var = '' 6658a7d6542SBram Moolenaar let valone = 1234 6668a7d6542SBram Moolenaar def MyFunc(arg: string) 6678a7d6542SBram Moolenaar valone = 5678 6688a7d6542SBram Moolenaar enddef 6698a7d6542SBram Moolenaar END 6708a7d6542SBram Moolenaar let morelines =<< trim END 6718a7d6542SBram Moolenaar let valtwo = 222 6728a7d6542SBram Moolenaar export def GetValtwo(): number 6738a7d6542SBram Moolenaar return valtwo 6748a7d6542SBram Moolenaar enddef 6758a7d6542SBram Moolenaar END 676675f716eSBram Moolenaar writefile(lines + morelines, 677675f716eSBram Moolenaar 'Xreload.vim') 6788a7d6542SBram Moolenaar source Xreload.vim 6798a7d6542SBram Moolenaar source Xreload.vim 6808a7d6542SBram Moolenaar source Xreload.vim 6818a7d6542SBram Moolenaar 6828a7d6542SBram Moolenaar let testlines =<< trim END 6838a7d6542SBram Moolenaar vim9script 6848a7d6542SBram Moolenaar def TheFunc() 6858a7d6542SBram Moolenaar import GetValtwo from './Xreload.vim' 6868a7d6542SBram Moolenaar assert_equal(222, GetValtwo()) 6878a7d6542SBram Moolenaar enddef 6888a7d6542SBram Moolenaar TheFunc() 6898a7d6542SBram Moolenaar END 6908a7d6542SBram Moolenaar writefile(testlines, 'Ximport.vim') 6918a7d6542SBram Moolenaar source Ximport.vim 6928a7d6542SBram Moolenaar 6938a7d6542SBram Moolenaar " test that when not using "morelines" valtwo is still defined 6948a7d6542SBram Moolenaar " need to source Xreload.vim again, import doesn't reload a script 6958a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 6968a7d6542SBram Moolenaar source Xreload.vim 6978a7d6542SBram Moolenaar source Ximport.vim 6988a7d6542SBram Moolenaar 6998a7d6542SBram Moolenaar " cannot declare a var twice 7008a7d6542SBram Moolenaar lines =<< trim END 7018a7d6542SBram Moolenaar vim9script 7028a7d6542SBram Moolenaar let valone = 1234 7038a7d6542SBram Moolenaar let valone = 5678 7048a7d6542SBram Moolenaar END 7058a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 7068a7d6542SBram Moolenaar assert_fails('source Xreload.vim', 'E1041:') 7078a7d6542SBram Moolenaar 7088a7d6542SBram Moolenaar delete('Xreload.vim') 7098a7d6542SBram Moolenaar delete('Ximport.vim') 7108a7d6542SBram Moolenaarenddef 7118a7d6542SBram Moolenaar 7128a7d6542SBram Moolenaardef Test_import_absolute() 7138a7d6542SBram Moolenaar let import_lines = [ 714e6085c53SBram Moolenaar 'vim9script', 715e6085c53SBram Moolenaar 'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"', 716e6085c53SBram Moolenaar 'def UseExported()', 717e6085c53SBram Moolenaar ' g:imported_abs = exported', 718e6085c53SBram Moolenaar ' exported = 8888', 719e6085c53SBram Moolenaar ' g:imported_after = exported', 720e6085c53SBram Moolenaar 'enddef', 721e6085c53SBram Moolenaar 'UseExported()', 722e6085c53SBram Moolenaar 'g:import_disassembled = execute("disass UseExported")', 723e6085c53SBram Moolenaar ] 7248a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_abs.vim') 7258a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport_abs.vim') 7268a7d6542SBram Moolenaar 7278a7d6542SBram Moolenaar source Ximport_abs.vim 7288a7d6542SBram Moolenaar 7298a7d6542SBram Moolenaar assert_equal(9876, g:imported_abs) 7304e12a5dfSBram Moolenaar assert_equal(8888, g:imported_after) 731675f716eSBram Moolenaar assert_match('<SNR>\d\+_UseExported.*' .. 732675f716eSBram Moolenaar 'g:imported_abs = exported.*' .. 733675f716eSBram Moolenaar '0 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 734675f716eSBram Moolenaar '1 STOREG g:imported_abs.*' .. 735675f716eSBram Moolenaar 'exported = 8888.*' .. 736675f716eSBram Moolenaar '3 STORESCRIPT exported in .*Xexport_abs.vim.*' .. 737675f716eSBram Moolenaar 'g:imported_after = exported.*' .. 738675f716eSBram Moolenaar '4 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 739675f716eSBram Moolenaar '5 STOREG g:imported_after.*', 740e6085c53SBram Moolenaar g:import_disassembled) 7418a7d6542SBram Moolenaar unlet g:imported_abs 7424e12a5dfSBram Moolenaar unlet g:import_disassembled 7438a7d6542SBram Moolenaar 7448a7d6542SBram Moolenaar delete('Ximport_abs.vim') 7458a7d6542SBram Moolenaar delete('Xexport_abs.vim') 7468a7d6542SBram Moolenaarenddef 7478a7d6542SBram Moolenaar 7488a7d6542SBram Moolenaardef Test_import_rtp() 7498a7d6542SBram Moolenaar let import_lines = [ 750e6085c53SBram Moolenaar 'vim9script', 751e6085c53SBram Moolenaar 'import exported from "Xexport_rtp.vim"', 752e6085c53SBram Moolenaar 'g:imported_rtp = exported', 753e6085c53SBram Moolenaar ] 7548a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_rtp.vim') 7558a7d6542SBram Moolenaar mkdir('import') 7568a7d6542SBram Moolenaar writefile(s:export_script_lines, 'import/Xexport_rtp.vim') 7578a7d6542SBram Moolenaar 7588a7d6542SBram Moolenaar let save_rtp = &rtp 7598a7d6542SBram Moolenaar &rtp = getcwd() 7608a7d6542SBram Moolenaar source Ximport_rtp.vim 7618a7d6542SBram Moolenaar &rtp = save_rtp 7628a7d6542SBram Moolenaar 7638a7d6542SBram Moolenaar assert_equal(9876, g:imported_rtp) 7648a7d6542SBram Moolenaar unlet g:imported_rtp 7658a7d6542SBram Moolenaar 7668a7d6542SBram Moolenaar delete('Ximport_rtp.vim') 7678a7d6542SBram Moolenaar delete('import/Xexport_rtp.vim') 7688a7d6542SBram Moolenaar delete('import', 'd') 7698a7d6542SBram Moolenaarenddef 7708a7d6542SBram Moolenaar 7718a7d6542SBram Moolenaardef Test_fixed_size_list() 7728a7d6542SBram Moolenaar " will be allocated as one piece of memory, check that changes work 7738a7d6542SBram Moolenaar let l = [1, 2, 3, 4] 7748a7d6542SBram Moolenaar l->remove(0) 7758a7d6542SBram Moolenaar l->add(5) 7768a7d6542SBram Moolenaar l->insert(99, 1) 7770f18b6d1SBram Moolenaar assert_equal([2, 99, 3, 4, 5], l) 7788a7d6542SBram Moolenaarenddef 7798a7d6542SBram Moolenaar 780158906cfSBram Moolenaardef IfElse(what: number): string 781158906cfSBram Moolenaar let res = '' 782158906cfSBram Moolenaar if what == 1 783158906cfSBram Moolenaar res = "one" 784158906cfSBram Moolenaar elseif what == 2 785158906cfSBram Moolenaar res = "two" 786a259d8d3SBram Moolenaar else 787158906cfSBram Moolenaar res = "three" 788a259d8d3SBram Moolenaar endif 789158906cfSBram Moolenaar return res 790a259d8d3SBram Moolenaarenddef 791a259d8d3SBram Moolenaar 792158906cfSBram Moolenaardef Test_if_elseif_else() 793158906cfSBram Moolenaar assert_equal('one', IfElse(1)) 794158906cfSBram Moolenaar assert_equal('two', IfElse(2)) 795158906cfSBram Moolenaar assert_equal('three', IfElse(3)) 7960f18b6d1SBram Moolenaarenddef 7970f18b6d1SBram Moolenaar 798e8c4abbbSBram Moolenaardef Test_if_elseif_else_fails() 799e8c4abbbSBram Moolenaar call CheckDefFailure(['elseif true'], 'E582:') 800e8c4abbbSBram Moolenaar call CheckDefFailure(['else'], 'E581:') 801e8c4abbbSBram Moolenaar call CheckDefFailure(['endif'], 'E580:') 802e8c4abbbSBram Moolenaar call CheckDefFailure(['if true', 'elseif xxx'], 'E1001:') 803585fea7bSBram Moolenaar call CheckDefFailure(['if true', 'echo 1'], 'E171:') 804e8c4abbbSBram Moolenaarenddef 805e8c4abbbSBram Moolenaar 8066d69bf60SBram Moolenaarlet g:bool_true = v:true 8076d69bf60SBram Moolenaarlet g:bool_false = v:false 8086d69bf60SBram Moolenaar 8096d69bf60SBram Moolenaardef Test_if_const_expr() 8106d69bf60SBram Moolenaar let res = false 8116d69bf60SBram Moolenaar if true ? true : false 8126d69bf60SBram Moolenaar res = true 8136d69bf60SBram Moolenaar endif 8146d69bf60SBram Moolenaar assert_equal(true, res) 8156d69bf60SBram Moolenaar 816585fea7bSBram Moolenaar g:glob = 2 817585fea7bSBram Moolenaar if false 818585fea7bSBram Moolenaar execute('let g:glob = 3') 819585fea7bSBram Moolenaar endif 820585fea7bSBram Moolenaar assert_equal(2, g:glob) 821585fea7bSBram Moolenaar if true 822585fea7bSBram Moolenaar execute('let g:glob = 3') 823585fea7bSBram Moolenaar endif 824585fea7bSBram Moolenaar assert_equal(3, g:glob) 825585fea7bSBram Moolenaar 8266d69bf60SBram Moolenaar res = false 8276d69bf60SBram Moolenaar if g:bool_true ? true : false 8286d69bf60SBram Moolenaar res = true 8296d69bf60SBram Moolenaar endif 8306d69bf60SBram Moolenaar assert_equal(true, res) 8316d69bf60SBram Moolenaar 8326d69bf60SBram Moolenaar res = false 8336d69bf60SBram Moolenaar if true ? g:bool_true : false 8346d69bf60SBram Moolenaar res = true 8356d69bf60SBram Moolenaar endif 8366d69bf60SBram Moolenaar assert_equal(true, res) 8376d69bf60SBram Moolenaar 8386d69bf60SBram Moolenaar res = false 8396d69bf60SBram Moolenaar if true ? true : g:bool_false 8406d69bf60SBram Moolenaar res = true 8416d69bf60SBram Moolenaar endif 8426d69bf60SBram Moolenaar assert_equal(true, res) 8436d69bf60SBram Moolenaar 8446d69bf60SBram Moolenaar res = false 8456d69bf60SBram Moolenaar if true ? false : true 8466d69bf60SBram Moolenaar res = true 8476d69bf60SBram Moolenaar endif 8486d69bf60SBram Moolenaar assert_equal(false, res) 8496d69bf60SBram Moolenaar 8506d69bf60SBram Moolenaar res = false 8516d69bf60SBram Moolenaar if false ? false : true 8526d69bf60SBram Moolenaar res = true 8536d69bf60SBram Moolenaar endif 8546d69bf60SBram Moolenaar assert_equal(true, res) 8556d69bf60SBram Moolenaar 8566d69bf60SBram Moolenaar res = false 8576d69bf60SBram Moolenaar if false ? true : false 8586d69bf60SBram Moolenaar res = true 8596d69bf60SBram Moolenaar endif 8606d69bf60SBram Moolenaar assert_equal(false, res) 8616d69bf60SBram Moolenaar 8626d69bf60SBram Moolenaar res = false 863e8c4abbbSBram Moolenaar if has('xyz') ? true : false 864e8c4abbbSBram Moolenaar res = true 865e8c4abbbSBram Moolenaar endif 866e8c4abbbSBram Moolenaar assert_equal(false, res) 867e8c4abbbSBram Moolenaar 868e8c4abbbSBram Moolenaar res = false 8696d69bf60SBram Moolenaar if true && true 8706d69bf60SBram Moolenaar res = true 8716d69bf60SBram Moolenaar endif 8726d69bf60SBram Moolenaar assert_equal(true, res) 8736d69bf60SBram Moolenaar 8746d69bf60SBram Moolenaar res = false 8756d69bf60SBram Moolenaar if true && false 8766d69bf60SBram Moolenaar res = true 8776d69bf60SBram Moolenaar endif 8786d69bf60SBram Moolenaar assert_equal(false, res) 8796d69bf60SBram Moolenaar 8806d69bf60SBram Moolenaar res = false 8816d69bf60SBram Moolenaar if g:bool_true && false 8826d69bf60SBram Moolenaar res = true 8836d69bf60SBram Moolenaar endif 8846d69bf60SBram Moolenaar assert_equal(false, res) 8856d69bf60SBram Moolenaar 8866d69bf60SBram Moolenaar res = false 8876d69bf60SBram Moolenaar if true && g:bool_false 8886d69bf60SBram Moolenaar res = true 8896d69bf60SBram Moolenaar endif 8906d69bf60SBram Moolenaar assert_equal(false, res) 8916d69bf60SBram Moolenaar 8926d69bf60SBram Moolenaar res = false 8936d69bf60SBram Moolenaar if false && false 8946d69bf60SBram Moolenaar res = true 8956d69bf60SBram Moolenaar endif 8966d69bf60SBram Moolenaar assert_equal(false, res) 8976d69bf60SBram Moolenaar 8986d69bf60SBram Moolenaar res = false 8996d69bf60SBram Moolenaar if true || false 9006d69bf60SBram Moolenaar res = true 9016d69bf60SBram Moolenaar endif 9026d69bf60SBram Moolenaar assert_equal(true, res) 9036d69bf60SBram Moolenaar 9046d69bf60SBram Moolenaar res = false 9056d69bf60SBram Moolenaar if g:bool_true || false 9066d69bf60SBram Moolenaar res = true 9076d69bf60SBram Moolenaar endif 9086d69bf60SBram Moolenaar assert_equal(true, res) 9096d69bf60SBram Moolenaar 9106d69bf60SBram Moolenaar res = false 9116d69bf60SBram Moolenaar if true || g:bool_false 9126d69bf60SBram Moolenaar res = true 9136d69bf60SBram Moolenaar endif 9146d69bf60SBram Moolenaar assert_equal(true, res) 9156d69bf60SBram Moolenaar 9166d69bf60SBram Moolenaar res = false 9176d69bf60SBram Moolenaar if false || false 9186d69bf60SBram Moolenaar res = true 9196d69bf60SBram Moolenaar endif 9206d69bf60SBram Moolenaar assert_equal(false, res) 92180c34ca3SBram Moolenaarenddef 9226d69bf60SBram Moolenaar 92380c34ca3SBram Moolenaardef Test_if_const_expr_fails() 92480c34ca3SBram Moolenaar call CheckDefFailure(['if "aaa" == "bbb'], 'E114:') 92580c34ca3SBram Moolenaar call CheckDefFailure(["if 'aaa' == 'bbb"], 'E115:') 926e8c4abbbSBram Moolenaar call CheckDefFailure(["if has('aaa'"], 'E110:') 927e8c4abbbSBram Moolenaar call CheckDefFailure(["if has('aaa') ? true false"], 'E109:') 9286d69bf60SBram Moolenaarenddef 9296d69bf60SBram Moolenaar 930ad39c094SBram Moolenaardef Test_execute_cmd() 931ad39c094SBram Moolenaar new 932ad39c094SBram Moolenaar setline(1, 'default') 933ad39c094SBram Moolenaar execute 'call setline(1, "execute-string")' 934ad39c094SBram Moolenaar assert_equal('execute-string', getline(1)) 935ad39c094SBram Moolenaar let cmd1 = 'call setline(1,' 936ad39c094SBram Moolenaar let cmd2 = '"execute-var")' 937ad39c094SBram Moolenaar execute cmd1 cmd2 938ad39c094SBram Moolenaar assert_equal('execute-var', getline(1)) 939ad39c094SBram Moolenaar execute cmd1 cmd2 '|call setline(1, "execute-var-string")' 940ad39c094SBram Moolenaar assert_equal('execute-var-string', getline(1)) 941ad39c094SBram Moolenaar let cmd_first = 'call ' 942ad39c094SBram Moolenaar let cmd_last = 'setline(1, "execute-var-var")' 943ad39c094SBram Moolenaar execute cmd_first .. cmd_last 944ad39c094SBram Moolenaar assert_equal('execute-var-var', getline(1)) 945ad39c094SBram Moolenaar bwipe! 946585fea7bSBram Moolenaar 947585fea7bSBram Moolenaar call CheckDefFailure(['execute xxx'], 'E1001:') 948ad39c094SBram Moolenaarenddef 949ad39c094SBram Moolenaar 950ad39c094SBram Moolenaardef Test_echo_cmd() 951585fea7bSBram Moolenaar echo 'some' 952585fea7bSBram Moolenaar echon 'thing' 953ad39c094SBram Moolenaar assert_match('^something$', Screenline(&lines)) 954ad39c094SBram Moolenaar 955ad39c094SBram Moolenaar let str1 = 'some' 956ad39c094SBram Moolenaar let str2 = 'more' 957ad39c094SBram Moolenaar echo str1 str2 958ad39c094SBram Moolenaar assert_match('^some more$', Screenline(&lines)) 959ad39c094SBram Moolenaarenddef 960ad39c094SBram Moolenaar 96141fe0617SBram Moolenaardef Test_for_outside_of_function() 96241fe0617SBram Moolenaar let lines =<< trim END 96341fe0617SBram Moolenaar vim9script 96441fe0617SBram Moolenaar new 96541fe0617SBram Moolenaar for var in range(0, 3) 96641fe0617SBram Moolenaar append(line('$'), var) 96741fe0617SBram Moolenaar endfor 96841fe0617SBram Moolenaar assert_equal(['', '0', '1', '2', '3'], getline(1, '$')) 96941fe0617SBram Moolenaar bwipe! 97041fe0617SBram Moolenaar END 97141fe0617SBram Moolenaar writefile(lines, 'Xvim9for.vim') 97241fe0617SBram Moolenaar source Xvim9for.vim 97341fe0617SBram Moolenaar delete('Xvim9for.vim') 97441fe0617SBram Moolenaarenddef 9758a7d6542SBram Moolenaar 976e8c4abbbSBram Moolenaardef Test_for_loop() 977e8c4abbbSBram Moolenaar let result = '' 978e8c4abbbSBram Moolenaar for cnt in range(7) 979e8c4abbbSBram Moolenaar if cnt == 4 980e8c4abbbSBram Moolenaar break 981e8c4abbbSBram Moolenaar endif 982e8c4abbbSBram Moolenaar if cnt == 2 983e8c4abbbSBram Moolenaar continue 984e8c4abbbSBram Moolenaar endif 985e8c4abbbSBram Moolenaar result ..= cnt .. '_' 986e8c4abbbSBram Moolenaar endfor 987e8c4abbbSBram Moolenaar assert_equal('0_1_3_', result) 988e8c4abbbSBram Moolenaarenddef 989e8c4abbbSBram Moolenaar 990e8c4abbbSBram Moolenaardef Test_for_loop_fails() 991675f716eSBram Moolenaar CheckDefFailure(['for # in range(5)'], 'E690:') 992675f716eSBram Moolenaar CheckDefFailure(['for i In range(5)'], 'E690:') 993675f716eSBram Moolenaar CheckDefFailure(['let x = 5', 'for x in range(5)'], 'E1023:') 9946e949784SBram Moolenaar CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef'], 'E1006:') 995675f716eSBram Moolenaar CheckDefFailure(['for i in "text"'], 'E1024:') 996675f716eSBram Moolenaar CheckDefFailure(['for i in xxx'], 'E1001:') 997675f716eSBram Moolenaar CheckDefFailure(['endfor'], 'E588:') 998675f716eSBram Moolenaar CheckDefFailure(['for i in range(3)', 'echo 3'], 'E170:') 999e8c4abbbSBram Moolenaarenddef 1000e8c4abbbSBram Moolenaar 1001d0df1aacSBram Moolenaardef Test_while_loop() 1002d0df1aacSBram Moolenaar let result = '' 1003d0df1aacSBram Moolenaar let cnt = 0 1004d0df1aacSBram Moolenaar while cnt < 555 1005d0df1aacSBram Moolenaar if cnt == 3 1006d0df1aacSBram Moolenaar break 1007d0df1aacSBram Moolenaar endif 1008d0df1aacSBram Moolenaar cnt += 1 1009d0df1aacSBram Moolenaar if cnt == 2 1010d0df1aacSBram Moolenaar continue 1011d0df1aacSBram Moolenaar endif 1012d0df1aacSBram Moolenaar result ..= cnt .. '_' 1013d0df1aacSBram Moolenaar endwhile 1014d0df1aacSBram Moolenaar assert_equal('1_3_', result) 1015d0df1aacSBram Moolenaarenddef 1016d0df1aacSBram Moolenaar 1017e8c4abbbSBram Moolenaardef Test_while_loop_fails() 1018675f716eSBram Moolenaar CheckDefFailure(['while xxx'], 'E1001:') 1019675f716eSBram Moolenaar CheckDefFailure(['endwhile'], 'E588:') 1020675f716eSBram Moolenaar CheckDefFailure(['continue'], 'E586:') 1021675f716eSBram Moolenaar CheckDefFailure(['if true', 'continue'], 'E586:') 1022675f716eSBram Moolenaar CheckDefFailure(['break'], 'E587:') 1023675f716eSBram Moolenaar CheckDefFailure(['if true', 'break'], 'E587:') 1024675f716eSBram Moolenaar CheckDefFailure(['while 1', 'echo 3'], 'E170:') 1025bd5da371SBram Moolenaarenddef 1026bd5da371SBram Moolenaar 10279645e2d9SBram Moolenaardef Test_interrupt_loop() 102897acfc78SBram Moolenaar let caught = false 10299645e2d9SBram Moolenaar let x = 0 103097acfc78SBram Moolenaar try 10319645e2d9SBram Moolenaar while 1 10329645e2d9SBram Moolenaar x += 1 10339645e2d9SBram Moolenaar if x == 100 10349645e2d9SBram Moolenaar feedkeys("\<C-C>", 'Lt') 10359645e2d9SBram Moolenaar endif 10369645e2d9SBram Moolenaar endwhile 103797acfc78SBram Moolenaar catch 103897acfc78SBram Moolenaar caught = true 103997acfc78SBram Moolenaar assert_equal(100, x) 104097acfc78SBram Moolenaar endtry 104197acfc78SBram Moolenaar assert_true(caught, 'should have caught an exception') 10429645e2d9SBram Moolenaarenddef 104320431c9dSBram Moolenaar 10444fdae999SBram Moolenaardef Test_automatic_line_continuation() 10454fdae999SBram Moolenaar let mylist = [ 10464fdae999SBram Moolenaar 'one', 10474fdae999SBram Moolenaar 'two', 10484fdae999SBram Moolenaar 'three', 10494fdae999SBram Moolenaar ] " comment 10504fdae999SBram Moolenaar assert_equal(['one', 'two', 'three'], mylist) 10514fdae999SBram Moolenaar 10524fdae999SBram Moolenaar let mydict = { 10534fdae999SBram Moolenaar 'one': 1, 10544fdae999SBram Moolenaar 'two': 2, 10554fdae999SBram Moolenaar 'three': 10564fdae999SBram Moolenaar 3, 10574fdae999SBram Moolenaar } " comment 10584fdae999SBram Moolenaar assert_equal({'one': 1, 'two': 2, 'three': 3}, mydict) 10594fdae999SBram Moolenaar mydict = #{ 10602c330432SBram Moolenaar one: 1, # comment 10612c330432SBram Moolenaar two: # comment 10622c330432SBram Moolenaar 2, # comment 10632c330432SBram Moolenaar three: 3 # comment 10642c330432SBram Moolenaar } 10652c330432SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 10662c330432SBram Moolenaar mydict = #{ 10672c330432SBram Moolenaar one: 1, 10684fdae999SBram Moolenaar two: 10694fdae999SBram Moolenaar 2, 10702c330432SBram Moolenaar three: 3 10714fdae999SBram Moolenaar } 10724fdae999SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 1073e6085c53SBram Moolenaar 1074e6085c53SBram Moolenaar assert_equal( 1075e6085c53SBram Moolenaar ['one', 'two', 'three'], 1076e6085c53SBram Moolenaar split('one two three') 1077e6085c53SBram Moolenaar ) 10784fdae999SBram Moolenaarenddef 10794fdae999SBram Moolenaar 10807a092245SBram Moolenaardef Test_vim9_comment() 10817a092245SBram Moolenaar CheckScriptSuccess([ 10827a092245SBram Moolenaar 'vim9script', 10837a092245SBram Moolenaar '# something', 10847a092245SBram Moolenaar ]) 10857a092245SBram Moolenaar CheckScriptFailure([ 10867a092245SBram Moolenaar 'vim9script', 10877a092245SBram Moolenaar ':# something', 10887a092245SBram Moolenaar ], 'E488:') 10897a092245SBram Moolenaar CheckScriptFailure([ 10907a092245SBram Moolenaar '# something', 10917a092245SBram Moolenaar ], 'E488:') 10927a092245SBram Moolenaar CheckScriptFailure([ 10937a092245SBram Moolenaar ':# something', 10947a092245SBram Moolenaar ], 'E488:') 10957a092245SBram Moolenaar 10964a8d9f2eSBram Moolenaar { # block start 10974a8d9f2eSBram Moolenaar } # block end 10984a8d9f2eSBram Moolenaar CheckDefFailure([ 10994a8d9f2eSBram Moolenaar '{# comment', 11004a8d9f2eSBram Moolenaar ], 'E488:') 11014a8d9f2eSBram Moolenaar CheckDefFailure([ 11024a8d9f2eSBram Moolenaar '{', 11034a8d9f2eSBram Moolenaar '}# comment', 11044a8d9f2eSBram Moolenaar ], 'E488:') 11054a8d9f2eSBram Moolenaar 11064a8d9f2eSBram Moolenaar echo "yes" # comment 11074a8d9f2eSBram Moolenaar CheckDefFailure([ 11084a8d9f2eSBram Moolenaar 'echo "yes"# comment', 11094a8d9f2eSBram Moolenaar ], 'E488:') 11107a092245SBram Moolenaar CheckScriptSuccess([ 11117a092245SBram Moolenaar 'vim9script', 11127a092245SBram Moolenaar 'echo "yes" # something', 11137a092245SBram Moolenaar ]) 11147a092245SBram Moolenaar CheckScriptFailure([ 11157a092245SBram Moolenaar 'vim9script', 11167a092245SBram Moolenaar 'echo "yes"# something', 11177a092245SBram Moolenaar ], 'E121:') 11187a092245SBram Moolenaar CheckScriptFailure([ 11197a092245SBram Moolenaar 'vim9script', 11207a092245SBram Moolenaar 'echo# something', 11217a092245SBram Moolenaar ], 'E121:') 11227a092245SBram Moolenaar CheckScriptFailure([ 11237a092245SBram Moolenaar 'echo "yes" # something', 11247a092245SBram Moolenaar ], 'E121:') 11257a092245SBram Moolenaar 11264a8d9f2eSBram Moolenaar exe "echo" # comment 11274a8d9f2eSBram Moolenaar CheckDefFailure([ 11284a8d9f2eSBram Moolenaar 'exe "echo"# comment', 11294a8d9f2eSBram Moolenaar ], 'E488:') 11304a8d9f2eSBram Moolenaar CheckScriptSuccess([ 11314a8d9f2eSBram Moolenaar 'vim9script', 11324a8d9f2eSBram Moolenaar 'exe "echo" # something', 11334a8d9f2eSBram Moolenaar ]) 11344a8d9f2eSBram Moolenaar CheckScriptFailure([ 11354a8d9f2eSBram Moolenaar 'vim9script', 11364a8d9f2eSBram Moolenaar 'exe "echo"# something', 11374a8d9f2eSBram Moolenaar ], 'E121:') 11384a8d9f2eSBram Moolenaar CheckDefFailure([ 11394a8d9f2eSBram Moolenaar 'exe # comment', 11404a8d9f2eSBram Moolenaar ], 'E1015:') 11414a8d9f2eSBram Moolenaar CheckScriptFailure([ 11424a8d9f2eSBram Moolenaar 'vim9script', 11434a8d9f2eSBram Moolenaar 'exe# something', 11444a8d9f2eSBram Moolenaar ], 'E121:') 11454a8d9f2eSBram Moolenaar CheckScriptFailure([ 11464a8d9f2eSBram Moolenaar 'exe "echo" # something', 11474a8d9f2eSBram Moolenaar ], 'E121:') 11484a8d9f2eSBram Moolenaar 11497a092245SBram Moolenaar CheckDefFailure([ 11507a092245SBram Moolenaar 'try# comment', 11517a092245SBram Moolenaar 'echo "yes"', 11527a092245SBram Moolenaar 'catch', 11537a092245SBram Moolenaar 'endtry', 11547a092245SBram Moolenaar ], 'E488:') 11557a092245SBram Moolenaar CheckDefFailure([ 11567a092245SBram Moolenaar 'try', 11577a092245SBram Moolenaar 'echo "yes"', 11587a092245SBram Moolenaar 'catch# comment', 11597a092245SBram Moolenaar 'endtry', 11607a092245SBram Moolenaar ], 'E488:') 11617a092245SBram Moolenaar CheckDefFailure([ 11627a092245SBram Moolenaar 'try', 11637a092245SBram Moolenaar 'echo "yes"', 11647a092245SBram Moolenaar 'catch', 11657a092245SBram Moolenaar 'endtry# comment', 11667a092245SBram Moolenaar ], 'E488:') 11677a092245SBram Moolenaarenddef 11687a092245SBram Moolenaar 1169a26b9700SBram Moolenaardef Test_vim9_comment_not_compiled() 1170a26b9700SBram Moolenaar au TabEnter *.vim let g:entered = 1 1171a26b9700SBram Moolenaar au TabEnter *.x let g:entered = 2 1172a26b9700SBram Moolenaar 1173a26b9700SBram Moolenaar edit test.vim 1174a26b9700SBram Moolenaar doautocmd TabEnter #comment 1175a26b9700SBram Moolenaar assert_equal(1, g:entered) 1176a26b9700SBram Moolenaar 1177a26b9700SBram Moolenaar doautocmd TabEnter f.x 1178a26b9700SBram Moolenaar assert_equal(2, g:entered) 1179a26b9700SBram Moolenaar 1180a26b9700SBram Moolenaar g:entered = 0 1181a26b9700SBram Moolenaar doautocmd TabEnter f.x #comment 1182a26b9700SBram Moolenaar assert_equal(2, g:entered) 1183a26b9700SBram Moolenaar 1184a26b9700SBram Moolenaar assert_fails('doautocmd Syntax#comment', 'E216:') 1185a26b9700SBram Moolenaar 1186a26b9700SBram Moolenaar au! TabEnter 1187a26b9700SBram Moolenaar unlet g:entered 1188*d72c1bf0SBram Moolenaar 1189*d72c1bf0SBram Moolenaar CheckScriptSuccess([ 1190*d72c1bf0SBram Moolenaar 'vim9script', 1191*d72c1bf0SBram Moolenaar 'let g:var = 123', 1192*d72c1bf0SBram Moolenaar 'let w:var = 777', 1193*d72c1bf0SBram Moolenaar 'unlet g:var w:var # something', 1194*d72c1bf0SBram Moolenaar ]) 1195*d72c1bf0SBram Moolenaar 1196*d72c1bf0SBram Moolenaar CheckScriptFailure([ 1197*d72c1bf0SBram Moolenaar 'vim9script', 1198*d72c1bf0SBram Moolenaar 'let g:var = 123', 1199*d72c1bf0SBram Moolenaar 'unlet g:var# comment', 1200*d72c1bf0SBram Moolenaar ], 'E108:') 1201*d72c1bf0SBram Moolenaar 1202*d72c1bf0SBram Moolenaar CheckScriptFailure([ 1203*d72c1bf0SBram Moolenaar 'let g:var = 123', 1204*d72c1bf0SBram Moolenaar 'unlet g:var # something', 1205*d72c1bf0SBram Moolenaar ], 'E488:') 1206a26b9700SBram Moolenaarenddef 1207a26b9700SBram Moolenaar 1208585fea7bSBram Moolenaar" Keep this last, it messes up highlighting. 1209585fea7bSBram Moolenaardef Test_substitute_cmd() 1210585fea7bSBram Moolenaar new 1211585fea7bSBram Moolenaar setline(1, 'something') 1212585fea7bSBram Moolenaar :substitute(some(other( 1213585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 1214585fea7bSBram Moolenaar bwipe! 1215585fea7bSBram Moolenaar 1216585fea7bSBram Moolenaar " also when the context is Vim9 script 1217585fea7bSBram Moolenaar let lines =<< trim END 1218585fea7bSBram Moolenaar vim9script 1219585fea7bSBram Moolenaar new 1220585fea7bSBram Moolenaar setline(1, 'something') 1221585fea7bSBram Moolenaar :substitute(some(other( 1222585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 1223585fea7bSBram Moolenaar bwipe! 1224585fea7bSBram Moolenaar END 1225585fea7bSBram Moolenaar writefile(lines, 'Xvim9lines') 1226585fea7bSBram Moolenaar source Xvim9lines 1227585fea7bSBram Moolenaar 1228585fea7bSBram Moolenaar delete('Xvim9lines') 1229585fea7bSBram Moolenaarenddef 1230585fea7bSBram Moolenaar 12318a7d6542SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker 1232