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 57*f93c7feaSBram Moolenaar call CheckDefFailure(['let x:string'], 'E1069:') 58*f93c7feaSBram Moolenaar call CheckDefFailure(['let x:string = "x"'], 'E1069:') 59*f93c7feaSBram Moolenaar call CheckDefFailure(['let a:string = "x"'], 'E1082:') 60*f93c7feaSBram Moolenaar 619be61bbbSBram Moolenaar let a: number = 6 629be61bbbSBram Moolenaar assert_equal(6, a) 639be61bbbSBram Moolenaar 6442a480bfSBram Moolenaar if has('channel') 6542a480bfSBram Moolenaar let chan1: channel 66fbdd08edSBram Moolenaar let job1: job 67f51cb4e0SBram Moolenaar let job2: job = job_start('willfail') 6842a480bfSBram Moolenaar endif 69fbdd08edSBram Moolenaar if has('float') 70fbdd08edSBram Moolenaar let float1: float = 3.4 71fbdd08edSBram Moolenaar endif 725deeb3f1SBram Moolenaar let Funky1: func 735deeb3f1SBram Moolenaar let Funky2: func = function('len') 745deeb3f1SBram Moolenaar let Party2: func = funcref('Test_syntax') 7542a480bfSBram Moolenaar 76cb711abfSBram Moolenaar # type becomes list<any> 7761a6d4e4SBram Moolenaar let somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c'] 78cb711abfSBram Moolenaar # type becomes dict<any> 795381c7a1SBram Moolenaar let somedict = rand() > 0 ? #{a: 1, b: 2} : #{a: 'a', b: 'b'} 8061a6d4e4SBram Moolenaar 81401d9ffbSBram Moolenaar g:newvar = 'new' 82401d9ffbSBram Moolenaar assert_equal('new', g:newvar) 83401d9ffbSBram Moolenaar 84401d9ffbSBram Moolenaar assert_equal('yes', g:existing) 85401d9ffbSBram Moolenaar g:existing = 'no' 86401d9ffbSBram Moolenaar assert_equal('no', g:existing) 87401d9ffbSBram Moolenaar 88b283a8a6SBram Moolenaar v:char = 'abc' 896e587dcbSBram Moolenaar assert_equal('abc', v:char) 90b283a8a6SBram Moolenaar 91b283a8a6SBram Moolenaar $ENVVAR = 'foobar' 926e587dcbSBram Moolenaar assert_equal('foobar', $ENVVAR) 93b283a8a6SBram Moolenaar $ENVVAR = '' 946e587dcbSBram Moolenaar 95fd1823e0SBram Moolenaar s:appendToMe ..= 'yyy' 96fd1823e0SBram Moolenaar assert_equal('xxxyyy', s:appendToMe) 97fd1823e0SBram Moolenaar s:addToMe += 222 98fd1823e0SBram Moolenaar assert_equal(333, s:addToMe) 990bbf722aSBram Moolenaar s:newVar = 'new' 1000bbf722aSBram Moolenaar assert_equal('new', s:newVar) 101a8c17704SBram Moolenaar 102a8c17704SBram Moolenaar set ts=7 103a8c17704SBram Moolenaar &ts += 1 104a8c17704SBram Moolenaar assert_equal(8, &ts) 10580c34ca3SBram Moolenaar &ts -= 3 10680c34ca3SBram Moolenaar assert_equal(5, &ts) 10780c34ca3SBram Moolenaar &ts *= 2 10880c34ca3SBram Moolenaar assert_equal(10, &ts) 10980c34ca3SBram Moolenaar &ts /= 3 11080c34ca3SBram Moolenaar assert_equal(3, &ts) 11180c34ca3SBram Moolenaar set ts=10 11280c34ca3SBram Moolenaar &ts %= 4 11380c34ca3SBram Moolenaar assert_equal(2, &ts) 114a8c17704SBram Moolenaar call CheckDefFailure(['¬ex += 3'], 'E113:') 115a8c17704SBram Moolenaar call CheckDefFailure(['&ts ..= "xxx"'], 'E1019:') 116a8c17704SBram Moolenaar call CheckDefFailure(['&path += 3'], 'E1013:') 117cb711abfSBram Moolenaar # test freeing ISN_STOREOPT 118585fea7bSBram Moolenaar call CheckDefFailure(['&ts = 3', 'let asdf'], 'E1022:') 11980c34ca3SBram Moolenaar &ts = 8 120a8c17704SBram Moolenaar 121a8c17704SBram Moolenaar g:inc_counter += 1 122a8c17704SBram Moolenaar assert_equal(2, g:inc_counter) 123a8c17704SBram Moolenaar 124a8c17704SBram Moolenaar $SOME_ENV_VAR ..= 'more' 125a8c17704SBram Moolenaar assert_equal('somemore', $SOME_ENV_VAR) 126a8c17704SBram Moolenaar call CheckDefFailure(['$SOME_ENV_VAR += "more"'], 'E1013:') 127a8c17704SBram Moolenaar call CheckDefFailure(['$SOME_ENV_VAR += 123'], 'E1013:') 128a8c17704SBram Moolenaar 129a8c17704SBram Moolenaar @a = 'areg' 130a8c17704SBram Moolenaar @a ..= 'add' 131a8c17704SBram Moolenaar assert_equal('aregadd', @a) 132a8c17704SBram Moolenaar call CheckDefFailure(['@a += "more"'], 'E1013:') 133a8c17704SBram Moolenaar call CheckDefFailure(['@a += 123'], 'E1013:') 134e69f6d04SBram Moolenaar 135e69f6d04SBram Moolenaar v:errmsg = 'none' 136e69f6d04SBram Moolenaar v:errmsg ..= 'again' 137e69f6d04SBram Moolenaar assert_equal('noneagain', v:errmsg) 138e69f6d04SBram Moolenaar call CheckDefFailure(['v:errmsg += "more"'], 'E1013:') 139e69f6d04SBram Moolenaar call CheckDefFailure(['v:errmsg += 123'], 'E1013:') 1405deeb3f1SBram Moolenaarenddef 1415deeb3f1SBram Moolenaar 142d3aac291SBram Moolenaardef Test_assignment_local() 143d3aac291SBram Moolenaar " Test in a separated file in order not to the current buffer/window/tab is 144d3aac291SBram Moolenaar " changed. 145d3aac291SBram Moolenaar let script_lines: list<string> =<< trim END 146d3aac291SBram Moolenaar let b:existing = 'yes' 147d3aac291SBram Moolenaar let w:existing = 'yes' 148d3aac291SBram Moolenaar let t:existing = 'yes' 149d3aac291SBram Moolenaar 150d3aac291SBram Moolenaar def Test_assignment_local_internal() 151d3aac291SBram Moolenaar b:newvar = 'new' 152d3aac291SBram Moolenaar assert_equal('new', b:newvar) 153d3aac291SBram Moolenaar assert_equal('yes', b:existing) 154d3aac291SBram Moolenaar b:existing = 'no' 155d3aac291SBram Moolenaar assert_equal('no', b:existing) 156d3aac291SBram Moolenaar 157d3aac291SBram Moolenaar w:newvar = 'new' 158d3aac291SBram Moolenaar assert_equal('new', w:newvar) 159d3aac291SBram Moolenaar assert_equal('yes', w:existing) 160d3aac291SBram Moolenaar w:existing = 'no' 161d3aac291SBram Moolenaar assert_equal('no', w:existing) 162d3aac291SBram Moolenaar 163d3aac291SBram Moolenaar t:newvar = 'new' 164d3aac291SBram Moolenaar assert_equal('new', t:newvar) 165d3aac291SBram Moolenaar assert_equal('yes', t:existing) 166d3aac291SBram Moolenaar t:existing = 'no' 167d3aac291SBram Moolenaar assert_equal('no', t:existing) 168d3aac291SBram Moolenaar enddef 169d3aac291SBram Moolenaar call Test_assignment_local_internal() 170d3aac291SBram Moolenaar END 171d3aac291SBram Moolenaar call CheckScriptSuccess(script_lines) 172d3aac291SBram Moolenaarenddef 173d3aac291SBram Moolenaar 1745deeb3f1SBram Moolenaardef Test_assignment_default() 175e69f6d04SBram Moolenaar 176cb711abfSBram Moolenaar # Test default values. 177e69f6d04SBram Moolenaar let thebool: bool 178e69f6d04SBram Moolenaar assert_equal(v:false, thebool) 179e69f6d04SBram Moolenaar 180e69f6d04SBram Moolenaar let thenumber: number 181e69f6d04SBram Moolenaar assert_equal(0, thenumber) 182e69f6d04SBram Moolenaar 183e69f6d04SBram Moolenaar if has('float') 184e69f6d04SBram Moolenaar let thefloat: float 185e69f6d04SBram Moolenaar assert_equal(0.0, thefloat) 186e69f6d04SBram Moolenaar endif 187e69f6d04SBram Moolenaar 188e69f6d04SBram Moolenaar let thestring: string 189e69f6d04SBram Moolenaar assert_equal('', thestring) 190e69f6d04SBram Moolenaar 191e69f6d04SBram Moolenaar let theblob: blob 192e69f6d04SBram Moolenaar assert_equal(0z, theblob) 193e69f6d04SBram Moolenaar 1945deeb3f1SBram Moolenaar let Thefunc: func 1955deeb3f1SBram Moolenaar assert_equal(test_null_function(), Thefunc) 196e69f6d04SBram Moolenaar 197e69f6d04SBram Moolenaar let thelist: list<any> 198e69f6d04SBram Moolenaar assert_equal([], thelist) 199e69f6d04SBram Moolenaar 200e69f6d04SBram Moolenaar let thedict: dict<any> 201e69f6d04SBram Moolenaar assert_equal({}, thedict) 202e69f6d04SBram Moolenaar 2032c869deeSBram Moolenaar if has('channel') 204e69f6d04SBram Moolenaar let thejob: job 205e69f6d04SBram Moolenaar assert_equal(test_null_job(), thejob) 206e69f6d04SBram Moolenaar 207e69f6d04SBram Moolenaar let thechannel: channel 208e69f6d04SBram Moolenaar assert_equal(test_null_channel(), thechannel) 2092c869deeSBram Moolenaar endif 210585fea7bSBram Moolenaar 211585fea7bSBram Moolenaar let nr = 1234 | nr = 5678 212585fea7bSBram Moolenaar assert_equal(5678, nr) 2138a7d6542SBram Moolenaarenddef 2148a7d6542SBram Moolenaar 215cab27678SBram Moolenaardef Mess(): string 216cab27678SBram Moolenaar v:foldstart = 123 217cab27678SBram Moolenaar return 'xxx' 218cab27678SBram Moolenaarenddef 219cab27678SBram Moolenaar 220d72c1bf0SBram Moolenaardef Test_assignment_failure() 2218a7d6542SBram Moolenaar call CheckDefFailure(['let var=234'], 'E1004:') 2228a7d6542SBram Moolenaar call CheckDefFailure(['let var =234'], 'E1004:') 2238a7d6542SBram Moolenaar call CheckDefFailure(['let var= 234'], 'E1004:') 2248a7d6542SBram Moolenaar 2258a7d6542SBram Moolenaar call CheckDefFailure(['let true = 1'], 'E1034:') 2268a7d6542SBram Moolenaar call CheckDefFailure(['let false = 1'], 'E1034:') 2278a7d6542SBram Moolenaar 2289be61bbbSBram Moolenaar call CheckDefFailure(['let [a; b; c] = g:list'], 'E452:') 2299be61bbbSBram Moolenaar 230e69f6d04SBram Moolenaar call CheckDefFailure(['let somevar'], "E1022:") 2319be61bbbSBram Moolenaar call CheckDefFailure(['let &option'], 'E1052:') 2329be61bbbSBram Moolenaar call CheckDefFailure(['&g:option = 5'], 'E113:') 2339be61bbbSBram Moolenaar 2349be61bbbSBram Moolenaar call CheckDefFailure(['let $VAR = 5'], 'E1065:') 2359be61bbbSBram Moolenaar 2369be61bbbSBram Moolenaar call CheckDefFailure(['let @~ = 5'], 'E354:') 2379be61bbbSBram Moolenaar call CheckDefFailure(['let @a = 5'], 'E1066:') 2389be61bbbSBram Moolenaar 2399be61bbbSBram Moolenaar call CheckDefFailure(['let g:var = 5'], 'E1016:') 240d3aac291SBram Moolenaar call CheckDefFailure(['let w:var = 5'], 'E1079:') 241d3aac291SBram Moolenaar call CheckDefFailure(['let b:var = 5'], 'E1078:') 242d3aac291SBram Moolenaar call CheckDefFailure(['let t:var = 5'], 'E1080:') 2439be61bbbSBram Moolenaar 2449be61bbbSBram Moolenaar call CheckDefFailure(['let anr = 4', 'anr ..= "text"'], 'E1019:') 2459be61bbbSBram Moolenaar call CheckDefFailure(['let xnr += 4'], 'E1020:') 2469be61bbbSBram Moolenaar 24733fa29cfSBram Moolenaar call CheckScriptFailure(['vim9script', 'def Func()', 'let dummy = s:notfound', 'enddef'], 'E1050:') 24833fa29cfSBram Moolenaar 2498a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<string> = [123]'], 'expected list<string> but got list<number>') 2508a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<number> = ["xx"]'], 'expected list<number> but got list<string>') 2518a7d6542SBram Moolenaar 2528a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<string> = #{key: 123}'], 'expected dict<string> but got dict<number>') 2538a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<number> = #{key: "xx"}'], 'expected dict<number> but got dict<string>') 2548a7d6542SBram Moolenaar 2558a7d6542SBram Moolenaar call CheckDefFailure(['let var = feedkeys("0")'], 'E1031:') 2568a7d6542SBram Moolenaar call CheckDefFailure(['let var: number = feedkeys("0")'], 'expected number but got void') 25742a480bfSBram Moolenaar 258d77a8525SBram Moolenaar call CheckDefFailure(['let var: dict <number>'], 'E1068:') 25942a480bfSBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 260cab27678SBram Moolenaar 261cab27678SBram Moolenaar call assert_fails('s/^/\=Mess()/n', 'E794:') 262cab27678SBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 263d72c1bf0SBram Moolenaarenddef 264d72c1bf0SBram Moolenaar 265d72c1bf0SBram Moolenaardef Test_unlet() 266d72c1bf0SBram Moolenaar g:somevar = 'yes' 267d72c1bf0SBram Moolenaar assert_true(exists('g:somevar')) 268d72c1bf0SBram Moolenaar unlet g:somevar 269d72c1bf0SBram Moolenaar assert_false(exists('g:somevar')) 270d72c1bf0SBram Moolenaar unlet! g:somevar 271d72c1bf0SBram Moolenaar 272d72c1bf0SBram Moolenaar call CheckScriptFailure([ 273d72c1bf0SBram Moolenaar 'vim9script', 274d72c1bf0SBram Moolenaar 'let svar = 123', 275d72c1bf0SBram Moolenaar 'unlet svar', 276d72c1bf0SBram Moolenaar ], 'E1081:') 277d72c1bf0SBram Moolenaar call CheckScriptFailure([ 278d72c1bf0SBram Moolenaar 'vim9script', 279d72c1bf0SBram Moolenaar 'let svar = 123', 280d72c1bf0SBram Moolenaar 'unlet s:svar', 281d72c1bf0SBram Moolenaar ], 'E1081:') 282d72c1bf0SBram Moolenaar call CheckScriptFailure([ 283d72c1bf0SBram Moolenaar 'vim9script', 284d72c1bf0SBram Moolenaar 'let svar = 123', 285d72c1bf0SBram Moolenaar 'def Func()', 286d72c1bf0SBram Moolenaar ' unlet svar', 287d72c1bf0SBram Moolenaar 'enddef', 288d72c1bf0SBram Moolenaar ], 'E1081:') 289d72c1bf0SBram Moolenaar call CheckScriptFailure([ 290d72c1bf0SBram Moolenaar 'vim9script', 291d72c1bf0SBram Moolenaar 'let svar = 123', 292d72c1bf0SBram Moolenaar 'def Func()', 293d72c1bf0SBram Moolenaar ' unlet s:svar', 294d72c1bf0SBram Moolenaar 'enddef', 295d72c1bf0SBram Moolenaar ], 'E1081:') 2967bdaea6eSBram Moolenaar 2977bdaea6eSBram Moolenaar $ENVVAR = 'foobar' 2987bdaea6eSBram Moolenaar assert_equal('foobar', $ENVVAR) 2997bdaea6eSBram Moolenaar unlet $ENVVAR 3007bdaea6eSBram Moolenaar assert_equal('', $ENVVAR) 301d72c1bf0SBram Moolenaarenddef 302599c89c8SBram Moolenaar 303599c89c8SBram Moolenaarfunc Test_wrong_type() 304599c89c8SBram Moolenaar call CheckDefFailure(['let var: list<nothing>'], 'E1010:') 305599c89c8SBram Moolenaar call CheckDefFailure(['let var: list<list<nothing>>'], 'E1010:') 306599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<nothing>'], 'E1010:') 307599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<dict<nothing>>'], 'E1010:') 308599c89c8SBram Moolenaar 309599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 310599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<list<number>'], 'E1009:') 31142a480bfSBram Moolenaar 31242a480bfSBram Moolenaar call CheckDefFailure(['let var: ally'], 'E1010:') 31342a480bfSBram Moolenaar call CheckDefFailure(['let var: bram'], 'E1010:') 31442a480bfSBram Moolenaar call CheckDefFailure(['let var: cathy'], 'E1010:') 31542a480bfSBram Moolenaar call CheckDefFailure(['let var: dom'], 'E1010:') 31642a480bfSBram Moolenaar call CheckDefFailure(['let var: freddy'], 'E1010:') 31742a480bfSBram Moolenaar call CheckDefFailure(['let var: john'], 'E1010:') 31842a480bfSBram Moolenaar call CheckDefFailure(['let var: larry'], 'E1010:') 31942a480bfSBram Moolenaar call CheckDefFailure(['let var: ned'], 'E1010:') 32042a480bfSBram Moolenaar call CheckDefFailure(['let var: pam'], 'E1010:') 32142a480bfSBram Moolenaar call CheckDefFailure(['let var: sam'], 'E1010:') 32242a480bfSBram Moolenaar call CheckDefFailure(['let var: vim'], 'E1010:') 3238a7d6542SBram Moolenaarendfunc 3248a7d6542SBram Moolenaar 3258a7d6542SBram Moolenaarfunc Test_const() 3268a7d6542SBram Moolenaar call CheckDefFailure(['const var = 234', 'var = 99'], 'E1018:') 3278a7d6542SBram Moolenaar call CheckDefFailure(['const one = 234', 'let one = 99'], 'E1017:') 3288a7d6542SBram Moolenaar call CheckDefFailure(['const two'], 'E1021:') 3299be61bbbSBram Moolenaar call CheckDefFailure(['const &option'], 'E996:') 3308a7d6542SBram Moolenaarendfunc 3318a7d6542SBram Moolenaar 3328a7d6542SBram Moolenaardef Test_block() 3338a7d6542SBram Moolenaar let outer = 1 3348a7d6542SBram Moolenaar { 3358a7d6542SBram Moolenaar let inner = 2 3368a7d6542SBram Moolenaar assert_equal(1, outer) 3378a7d6542SBram Moolenaar assert_equal(2, inner) 3388a7d6542SBram Moolenaar } 3398a7d6542SBram Moolenaar assert_equal(1, outer) 3408a7d6542SBram Moolenaarenddef 3418a7d6542SBram Moolenaar 3428a7d6542SBram Moolenaarfunc Test_block_failure() 3438a7d6542SBram Moolenaar call CheckDefFailure(['{', 'let inner = 1', '}', 'echo inner'], 'E1001:') 344585fea7bSBram Moolenaar call CheckDefFailure(['}'], 'E1025:') 345585fea7bSBram Moolenaar call CheckDefFailure(['{', 'echo 1'], 'E1026:') 3468a7d6542SBram Moolenaarendfunc 3478a7d6542SBram Moolenaar 348585fea7bSBram Moolenaardef Test_cmd_modifier() 349585fea7bSBram Moolenaar tab echo '0' 350585fea7bSBram Moolenaar call CheckDefFailure(['5tab echo 3'], 'E16:') 351585fea7bSBram Moolenaarenddef 352585fea7bSBram Moolenaar 3538a7d6542SBram Moolenaardef Test_try_catch() 3548a7d6542SBram Moolenaar let l = [] 3557a092245SBram Moolenaar try # comment 3568a7d6542SBram Moolenaar add(l, '1') 3578a7d6542SBram Moolenaar throw 'wrong' 3588a7d6542SBram Moolenaar add(l, '2') 3597a092245SBram Moolenaar catch # comment 3608a7d6542SBram Moolenaar add(l, v:exception) 3617a092245SBram Moolenaar finally # comment 3628a7d6542SBram Moolenaar add(l, '3') 3637a092245SBram Moolenaar endtry # comment 3648a7d6542SBram Moolenaar assert_equal(['1', 'wrong', '3'], l) 3658a7d6542SBram Moolenaarenddef 3668a7d6542SBram Moolenaar 367257cc5eeSBram Moolenaardef ThrowFromDef() 368a72cfb80SBram Moolenaar throw "getout" # comment 369257cc5eeSBram Moolenaarenddef 370257cc5eeSBram Moolenaar 371257cc5eeSBram Moolenaarfunc CatchInFunc() 372257cc5eeSBram Moolenaar try 373257cc5eeSBram Moolenaar call ThrowFromDef() 374257cc5eeSBram Moolenaar catch 375257cc5eeSBram Moolenaar let g:thrown_func = v:exception 376257cc5eeSBram Moolenaar endtry 377257cc5eeSBram Moolenaarendfunc 378257cc5eeSBram Moolenaar 379257cc5eeSBram Moolenaardef CatchInDef() 380257cc5eeSBram Moolenaar try 381257cc5eeSBram Moolenaar ThrowFromDef() 382257cc5eeSBram Moolenaar catch 383257cc5eeSBram Moolenaar g:thrown_def = v:exception 384257cc5eeSBram Moolenaar endtry 385257cc5eeSBram Moolenaarenddef 386257cc5eeSBram Moolenaar 387f575adffSBram Moolenaardef ReturnFinally(): string 388f575adffSBram Moolenaar try 389f575adffSBram Moolenaar return 'intry' 390f575adffSBram Moolenaar finally 391f575adffSBram Moolenaar g:in_finally = 'finally' 392f575adffSBram Moolenaar endtry 393f575adffSBram Moolenaar return 'end' 394f575adffSBram Moolenaarenddef 395f575adffSBram Moolenaar 396257cc5eeSBram Moolenaardef Test_try_catch_nested() 397257cc5eeSBram Moolenaar CatchInFunc() 398257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_func) 399257cc5eeSBram Moolenaar 400257cc5eeSBram Moolenaar CatchInDef() 401257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_def) 402f575adffSBram Moolenaar 403f575adffSBram Moolenaar assert_equal('intry', ReturnFinally()) 404f575adffSBram Moolenaar assert_equal('finally', g:in_finally) 405f575adffSBram Moolenaarenddef 406f575adffSBram Moolenaar 407f575adffSBram Moolenaardef Test_try_catch_match() 408f575adffSBram Moolenaar let seq = 'a' 409f575adffSBram Moolenaar try 410f575adffSBram Moolenaar throw 'something' 411f575adffSBram Moolenaar catch /nothing/ 412f575adffSBram Moolenaar seq ..= 'x' 413f575adffSBram Moolenaar catch /some/ 414f575adffSBram Moolenaar seq ..= 'b' 415f575adffSBram Moolenaar catch /asdf/ 416f575adffSBram Moolenaar seq ..= 'x' 417e8c4abbbSBram Moolenaar catch ?a\?sdf? 418e8c4abbbSBram Moolenaar seq ..= 'y' 419f575adffSBram Moolenaar finally 420f575adffSBram Moolenaar seq ..= 'c' 421f575adffSBram Moolenaar endtry 422f575adffSBram Moolenaar assert_equal('abc', seq) 423257cc5eeSBram Moolenaarenddef 424257cc5eeSBram Moolenaar 425e8c4abbbSBram Moolenaardef Test_try_catch_fails() 426e8c4abbbSBram Moolenaar call CheckDefFailure(['catch'], 'E603:') 427e8c4abbbSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'catch','catch'], 'E1033:') 428e8c4abbbSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'catch /pat'], 'E1067:') 429585fea7bSBram Moolenaar call CheckDefFailure(['finally'], 'E606:') 430585fea7bSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'finally', 'echo 1', 'finally'], 'E607:') 431585fea7bSBram Moolenaar call CheckDefFailure(['endtry'], 'E602:') 432585fea7bSBram Moolenaar call CheckDefFailure(['while 1', 'endtry'], 'E170:') 433585fea7bSBram Moolenaar call CheckDefFailure(['for i in range(5)', 'endtry'], 'E170:') 434585fea7bSBram Moolenaar call CheckDefFailure(['if 2', 'endtry'], 'E171:') 435585fea7bSBram Moolenaar call CheckDefFailure(['try', 'echo 1', 'endtry'], 'E1032:') 436585fea7bSBram Moolenaar 437a72cfb80SBram Moolenaar call CheckDefFailure(['throw'], 'E1015:') 438585fea7bSBram Moolenaar call CheckDefFailure(['throw xxx'], 'E1001:') 439e8c4abbbSBram Moolenaarenddef 440e8c4abbbSBram Moolenaar 4418a7d6542SBram Moolenaarlet s:export_script_lines =<< trim END 4428a7d6542SBram Moolenaar vim9script 4438a7d6542SBram Moolenaar let name: string = 'bob' 4448a7d6542SBram Moolenaar def Concat(arg: string): string 4458a7d6542SBram Moolenaar return name .. arg 4468a7d6542SBram Moolenaar enddef 4478a7d6542SBram Moolenaar let g:result = Concat('bie') 4488a7d6542SBram Moolenaar let g:localname = name 4498a7d6542SBram Moolenaar 4508a7d6542SBram Moolenaar export const CONST = 1234 4518a7d6542SBram Moolenaar export let exported = 9876 4526e587dcbSBram Moolenaar export let exp_name = 'John' 4538a7d6542SBram Moolenaar export def Exported(): string 4548a7d6542SBram Moolenaar return 'Exported' 4558a7d6542SBram Moolenaar enddef 4568a7d6542SBram MoolenaarEND 4578a7d6542SBram Moolenaar 4585269bd2aSBram Moolenaardef Test_vim9_import_export() 4598a7d6542SBram Moolenaar let import_script_lines =<< trim END 4608a7d6542SBram Moolenaar vim9script 4618a7d6542SBram Moolenaar import {exported, Exported} from './Xexport.vim' 4628a7d6542SBram Moolenaar g:imported = exported 4636e587dcbSBram Moolenaar exported += 3 4646e587dcbSBram Moolenaar g:imported_added = exported 4658a7d6542SBram Moolenaar g:imported_func = Exported() 4666e587dcbSBram Moolenaar 4676e587dcbSBram Moolenaar import {exp_name} from './Xexport.vim' 4686e587dcbSBram Moolenaar g:imported_name = exp_name 4696e587dcbSBram Moolenaar exp_name ..= ' Doe' 4706e587dcbSBram Moolenaar g:imported_name_appended = exp_name 4715381c7a1SBram Moolenaar g:imported_later = exported 4728a7d6542SBram Moolenaar END 4738a7d6542SBram Moolenaar 4748a7d6542SBram Moolenaar writefile(import_script_lines, 'Ximport.vim') 4758a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport.vim') 4768a7d6542SBram Moolenaar 4778a7d6542SBram Moolenaar source Ximport.vim 4788a7d6542SBram Moolenaar 4798a7d6542SBram Moolenaar assert_equal('bobbie', g:result) 4808a7d6542SBram Moolenaar assert_equal('bob', g:localname) 4818a7d6542SBram Moolenaar assert_equal(9876, g:imported) 4826e587dcbSBram Moolenaar assert_equal(9879, g:imported_added) 4835381c7a1SBram Moolenaar assert_equal(9879, g:imported_later) 4848a7d6542SBram Moolenaar assert_equal('Exported', g:imported_func) 4856e587dcbSBram Moolenaar assert_equal('John', g:imported_name) 4866e587dcbSBram Moolenaar assert_equal('John Doe', g:imported_name_appended) 4878a7d6542SBram Moolenaar assert_false(exists('g:name')) 4888a7d6542SBram Moolenaar 4898a7d6542SBram Moolenaar unlet g:result 4908a7d6542SBram Moolenaar unlet g:localname 4918a7d6542SBram Moolenaar unlet g:imported 4926e587dcbSBram Moolenaar unlet g:imported_added 4935381c7a1SBram Moolenaar unlet g:imported_later 4948a7d6542SBram Moolenaar unlet g:imported_func 4956e587dcbSBram Moolenaar unlet g:imported_name g:imported_name_appended 4968a7d6542SBram Moolenaar delete('Ximport.vim') 497f2d5c240SBram Moolenaar 4985381c7a1SBram Moolenaar let import_in_def_lines =<< trim END 4995381c7a1SBram Moolenaar vim9script 5005381c7a1SBram Moolenaar def ImportInDef() 5015381c7a1SBram Moolenaar import exported from './Xexport.vim' 5025381c7a1SBram Moolenaar g:imported = exported 5035381c7a1SBram Moolenaar exported += 7 5045381c7a1SBram Moolenaar g:imported_added = exported 5055381c7a1SBram Moolenaar enddef 5065381c7a1SBram Moolenaar ImportInDef() 5075381c7a1SBram Moolenaar END 5085381c7a1SBram Moolenaar writefile(import_in_def_lines, 'Ximport2.vim') 5095381c7a1SBram Moolenaar source Ximport2.vim 5105381c7a1SBram Moolenaar " TODO: this should be 9879 5115381c7a1SBram Moolenaar assert_equal(9876, g:imported) 5125381c7a1SBram Moolenaar assert_equal(9883, g:imported_added) 5135381c7a1SBram Moolenaar unlet g:imported 5145381c7a1SBram Moolenaar unlet g:imported_added 5155381c7a1SBram Moolenaar delete('Ximport2.vim') 5165381c7a1SBram Moolenaar 517f2d5c240SBram Moolenaar let import_star_as_lines =<< trim END 518f2d5c240SBram Moolenaar vim9script 519f2d5c240SBram Moolenaar import * as Export from './Xexport.vim' 520f2d5c240SBram Moolenaar def UseExport() 521f2d5c240SBram Moolenaar g:imported = Export.exported 522f2d5c240SBram Moolenaar enddef 523f2d5c240SBram Moolenaar UseExport() 524f2d5c240SBram Moolenaar END 525f2d5c240SBram Moolenaar writefile(import_star_as_lines, 'Ximport.vim') 526f2d5c240SBram Moolenaar source Ximport.vim 5275381c7a1SBram Moolenaar assert_equal(9883, g:imported) 528f2d5c240SBram Moolenaar 529599c89c8SBram Moolenaar let import_star_as_lines_no_dot =<< trim END 530599c89c8SBram Moolenaar vim9script 531599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 532599c89c8SBram Moolenaar def Func() 533599c89c8SBram Moolenaar let dummy = 1 534599c89c8SBram Moolenaar let imported = Export + dummy 535599c89c8SBram Moolenaar enddef 536599c89c8SBram Moolenaar END 537599c89c8SBram Moolenaar writefile(import_star_as_lines_no_dot, 'Ximport.vim') 538599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1060:') 539599c89c8SBram Moolenaar 540599c89c8SBram Moolenaar let import_star_as_lines_dot_space =<< trim END 541599c89c8SBram Moolenaar vim9script 542599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 543599c89c8SBram Moolenaar def Func() 544599c89c8SBram Moolenaar let imported = Export . exported 545599c89c8SBram Moolenaar enddef 546599c89c8SBram Moolenaar END 547599c89c8SBram Moolenaar writefile(import_star_as_lines_dot_space, 'Ximport.vim') 548599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1074:') 549599c89c8SBram Moolenaar 550599c89c8SBram Moolenaar let import_star_as_lines_missing_name =<< trim END 551599c89c8SBram Moolenaar vim9script 552599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 553599c89c8SBram Moolenaar def Func() 554599c89c8SBram Moolenaar let imported = Export. 555599c89c8SBram Moolenaar enddef 556599c89c8SBram Moolenaar END 557599c89c8SBram Moolenaar writefile(import_star_as_lines_missing_name, 'Ximport.vim') 558599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 559599c89c8SBram Moolenaar 560f2d5c240SBram Moolenaar let import_star_lines =<< trim END 561f2d5c240SBram Moolenaar vim9script 562f2d5c240SBram Moolenaar import * from './Xexport.vim' 563f2d5c240SBram Moolenaar g:imported = exported 564f2d5c240SBram Moolenaar END 565f2d5c240SBram Moolenaar writefile(import_star_lines, 'Ximport.vim') 566f2d5c240SBram Moolenaar assert_fails('source Ximport.vim', 'E1045:') 567f2d5c240SBram Moolenaar 568fa29c8abSBram Moolenaar " try to import something that exists but is not exported 569fa29c8abSBram Moolenaar let import_not_exported_lines =<< trim END 570fa29c8abSBram Moolenaar vim9script 571fa29c8abSBram Moolenaar import name from './Xexport.vim' 572fa29c8abSBram Moolenaar END 573fa29c8abSBram Moolenaar writefile(import_not_exported_lines, 'Ximport.vim') 574fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1049:') 575fa29c8abSBram Moolenaar 5765269bd2aSBram Moolenaar " try to import something that is already defined 5775269bd2aSBram Moolenaar let import_already_defined =<< trim END 5785269bd2aSBram Moolenaar vim9script 5795269bd2aSBram Moolenaar let exported = 'something' 5805269bd2aSBram Moolenaar import 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 * as 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 5945269bd2aSBram Moolenaar " try to import something that is already defined 5955269bd2aSBram Moolenaar import_already_defined =<< trim END 5965269bd2aSBram Moolenaar vim9script 5975269bd2aSBram Moolenaar let exported = 'something' 5985269bd2aSBram Moolenaar import {exported} from './Xexport.vim' 5995269bd2aSBram Moolenaar END 6005269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 6015269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 6025269bd2aSBram Moolenaar 603fa29c8abSBram Moolenaar " import a very long name, requires making a copy 604fa29c8abSBram Moolenaar let import_long_name_lines =<< trim END 605fa29c8abSBram Moolenaar vim9script 606fa29c8abSBram Moolenaar import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim' 607fa29c8abSBram Moolenaar END 608fa29c8abSBram Moolenaar writefile(import_long_name_lines, 'Ximport.vim') 609fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 610fa29c8abSBram Moolenaar 611fa29c8abSBram Moolenaar let import_no_from_lines =<< trim END 612fa29c8abSBram Moolenaar vim9script 613fa29c8abSBram Moolenaar import name './Xexport.vim' 614fa29c8abSBram Moolenaar END 615fa29c8abSBram Moolenaar writefile(import_no_from_lines, 'Ximport.vim') 616fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1070:') 617fa29c8abSBram Moolenaar 618fa29c8abSBram Moolenaar let import_invalid_string_lines =<< trim END 619fa29c8abSBram Moolenaar vim9script 620fa29c8abSBram Moolenaar import name from Xexport.vim 621fa29c8abSBram Moolenaar END 622fa29c8abSBram Moolenaar writefile(import_invalid_string_lines, 'Ximport.vim') 623fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1071:') 624fa29c8abSBram Moolenaar 625fa29c8abSBram Moolenaar let import_wrong_name_lines =<< trim END 626fa29c8abSBram Moolenaar vim9script 627fa29c8abSBram Moolenaar import name from './XnoExport.vim' 628fa29c8abSBram Moolenaar END 629fa29c8abSBram Moolenaar writefile(import_wrong_name_lines, 'Ximport.vim') 630fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1053:') 631fa29c8abSBram Moolenaar 632fa29c8abSBram Moolenaar let import_missing_comma_lines =<< trim END 633fa29c8abSBram Moolenaar vim9script 634fa29c8abSBram Moolenaar import {exported name} from './Xexport.vim' 635fa29c8abSBram Moolenaar END 6365269bd2aSBram Moolenaar writefile(import_missing_comma_lines, 'Ximport3.vim') 6375269bd2aSBram Moolenaar assert_fails('source Ximport3.vim', 'E1046:') 638fa29c8abSBram Moolenaar 639f2d5c240SBram Moolenaar delete('Ximport.vim') 6405269bd2aSBram Moolenaar delete('Ximport3.vim') 6418a7d6542SBram Moolenaar delete('Xexport.vim') 6428a7d6542SBram Moolenaar 643750802b5SBram Moolenaar " Check that in a Vim9 script 'cpo' is set to the Vim default. 644750802b5SBram Moolenaar set cpo&vi 645750802b5SBram Moolenaar let cpo_before = &cpo 646750802b5SBram Moolenaar let lines =<< trim END 647750802b5SBram Moolenaar vim9script 648750802b5SBram Moolenaar g:cpo_in_vim9script = &cpo 649750802b5SBram Moolenaar END 650750802b5SBram Moolenaar writefile(lines, 'Xvim9_script') 651750802b5SBram Moolenaar source Xvim9_script 652750802b5SBram Moolenaar assert_equal(cpo_before, &cpo) 653750802b5SBram Moolenaar set cpo&vim 654750802b5SBram Moolenaar assert_equal(&cpo, g:cpo_in_vim9script) 655750802b5SBram Moolenaar delete('Xvim9_script') 656750802b5SBram Moolenaarenddef 657750802b5SBram Moolenaar 658750802b5SBram Moolenaardef Test_vim9script_fails() 6598a7d6542SBram Moolenaar CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:') 6608a7d6542SBram Moolenaar CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:') 661750802b5SBram Moolenaar CheckScriptFailure(['export let some = 123'], 'E1042:') 662f2d5c240SBram Moolenaar CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1042:') 663750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export let g:some'], 'E1044:') 664750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:') 665750802b5SBram Moolenaar 666750802b5SBram Moolenaar assert_fails('vim9script', 'E1038') 667a26b9700SBram Moolenaar assert_fails('export something', 'E1043') 6688a7d6542SBram Moolenaarenddef 6698a7d6542SBram Moolenaar 6708a7d6542SBram Moolenaardef Test_vim9script_reload() 6718a7d6542SBram Moolenaar let lines =<< trim END 6728a7d6542SBram Moolenaar vim9script 6738a7d6542SBram Moolenaar const var = '' 6748a7d6542SBram Moolenaar let valone = 1234 6758a7d6542SBram Moolenaar def MyFunc(arg: string) 6768a7d6542SBram Moolenaar valone = 5678 6778a7d6542SBram Moolenaar enddef 6788a7d6542SBram Moolenaar END 6798a7d6542SBram Moolenaar let morelines =<< trim END 6808a7d6542SBram Moolenaar let valtwo = 222 6818a7d6542SBram Moolenaar export def GetValtwo(): number 6828a7d6542SBram Moolenaar return valtwo 6838a7d6542SBram Moolenaar enddef 6848a7d6542SBram Moolenaar END 685675f716eSBram Moolenaar writefile(lines + morelines, 686675f716eSBram Moolenaar 'Xreload.vim') 6878a7d6542SBram Moolenaar source Xreload.vim 6888a7d6542SBram Moolenaar source Xreload.vim 6898a7d6542SBram Moolenaar source Xreload.vim 6908a7d6542SBram Moolenaar 6918a7d6542SBram Moolenaar let testlines =<< trim END 6928a7d6542SBram Moolenaar vim9script 6938a7d6542SBram Moolenaar def TheFunc() 6948a7d6542SBram Moolenaar import GetValtwo from './Xreload.vim' 6958a7d6542SBram Moolenaar assert_equal(222, GetValtwo()) 6968a7d6542SBram Moolenaar enddef 6978a7d6542SBram Moolenaar TheFunc() 6988a7d6542SBram Moolenaar END 6998a7d6542SBram Moolenaar writefile(testlines, 'Ximport.vim') 7008a7d6542SBram Moolenaar source Ximport.vim 7018a7d6542SBram Moolenaar 7028a7d6542SBram Moolenaar " test that when not using "morelines" valtwo is still defined 7038a7d6542SBram Moolenaar " need to source Xreload.vim again, import doesn't reload a script 7048a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 7058a7d6542SBram Moolenaar source Xreload.vim 7068a7d6542SBram Moolenaar source Ximport.vim 7078a7d6542SBram Moolenaar 7088a7d6542SBram Moolenaar " cannot declare a var twice 7098a7d6542SBram Moolenaar lines =<< trim END 7108a7d6542SBram Moolenaar vim9script 7118a7d6542SBram Moolenaar let valone = 1234 7128a7d6542SBram Moolenaar let valone = 5678 7138a7d6542SBram Moolenaar END 7148a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 7158a7d6542SBram Moolenaar assert_fails('source Xreload.vim', 'E1041:') 7168a7d6542SBram Moolenaar 7178a7d6542SBram Moolenaar delete('Xreload.vim') 7188a7d6542SBram Moolenaar delete('Ximport.vim') 7198a7d6542SBram Moolenaarenddef 7208a7d6542SBram Moolenaar 7218a7d6542SBram Moolenaardef Test_import_absolute() 7228a7d6542SBram Moolenaar let import_lines = [ 723e6085c53SBram Moolenaar 'vim9script', 724e6085c53SBram Moolenaar 'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"', 725e6085c53SBram Moolenaar 'def UseExported()', 726e6085c53SBram Moolenaar ' g:imported_abs = exported', 727e6085c53SBram Moolenaar ' exported = 8888', 728e6085c53SBram Moolenaar ' g:imported_after = exported', 729e6085c53SBram Moolenaar 'enddef', 730e6085c53SBram Moolenaar 'UseExported()', 731e6085c53SBram Moolenaar 'g:import_disassembled = execute("disass UseExported")', 732e6085c53SBram Moolenaar ] 7338a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_abs.vim') 7348a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport_abs.vim') 7358a7d6542SBram Moolenaar 7368a7d6542SBram Moolenaar source Ximport_abs.vim 7378a7d6542SBram Moolenaar 7388a7d6542SBram Moolenaar assert_equal(9876, g:imported_abs) 7394e12a5dfSBram Moolenaar assert_equal(8888, g:imported_after) 740675f716eSBram Moolenaar assert_match('<SNR>\d\+_UseExported.*' .. 741675f716eSBram Moolenaar 'g:imported_abs = exported.*' .. 742675f716eSBram Moolenaar '0 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 743675f716eSBram Moolenaar '1 STOREG g:imported_abs.*' .. 744675f716eSBram Moolenaar 'exported = 8888.*' .. 745675f716eSBram Moolenaar '3 STORESCRIPT exported in .*Xexport_abs.vim.*' .. 746675f716eSBram Moolenaar 'g:imported_after = exported.*' .. 747675f716eSBram Moolenaar '4 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 748675f716eSBram Moolenaar '5 STOREG g:imported_after.*', 749e6085c53SBram Moolenaar g:import_disassembled) 7508a7d6542SBram Moolenaar unlet g:imported_abs 7514e12a5dfSBram Moolenaar unlet g:import_disassembled 7528a7d6542SBram Moolenaar 7538a7d6542SBram Moolenaar delete('Ximport_abs.vim') 7548a7d6542SBram Moolenaar delete('Xexport_abs.vim') 7558a7d6542SBram Moolenaarenddef 7568a7d6542SBram Moolenaar 7578a7d6542SBram Moolenaardef Test_import_rtp() 7588a7d6542SBram Moolenaar let import_lines = [ 759e6085c53SBram Moolenaar 'vim9script', 760e6085c53SBram Moolenaar 'import exported from "Xexport_rtp.vim"', 761e6085c53SBram Moolenaar 'g:imported_rtp = exported', 762e6085c53SBram Moolenaar ] 7638a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_rtp.vim') 7648a7d6542SBram Moolenaar mkdir('import') 7658a7d6542SBram Moolenaar writefile(s:export_script_lines, 'import/Xexport_rtp.vim') 7668a7d6542SBram Moolenaar 7678a7d6542SBram Moolenaar let save_rtp = &rtp 7688a7d6542SBram Moolenaar &rtp = getcwd() 7698a7d6542SBram Moolenaar source Ximport_rtp.vim 7708a7d6542SBram Moolenaar &rtp = save_rtp 7718a7d6542SBram Moolenaar 7728a7d6542SBram Moolenaar assert_equal(9876, g:imported_rtp) 7738a7d6542SBram Moolenaar unlet g:imported_rtp 7748a7d6542SBram Moolenaar 7758a7d6542SBram Moolenaar delete('Ximport_rtp.vim') 7768a7d6542SBram Moolenaar delete('import/Xexport_rtp.vim') 7778a7d6542SBram Moolenaar delete('import', 'd') 7788a7d6542SBram Moolenaarenddef 7798a7d6542SBram Moolenaar 7808a7d6542SBram Moolenaardef Test_fixed_size_list() 7818a7d6542SBram Moolenaar " will be allocated as one piece of memory, check that changes work 7828a7d6542SBram Moolenaar let l = [1, 2, 3, 4] 7838a7d6542SBram Moolenaar l->remove(0) 7848a7d6542SBram Moolenaar l->add(5) 7858a7d6542SBram Moolenaar l->insert(99, 1) 7860f18b6d1SBram Moolenaar assert_equal([2, 99, 3, 4, 5], l) 7878a7d6542SBram Moolenaarenddef 7888a7d6542SBram Moolenaar 789158906cfSBram Moolenaardef IfElse(what: number): string 790158906cfSBram Moolenaar let res = '' 791158906cfSBram Moolenaar if what == 1 792158906cfSBram Moolenaar res = "one" 793158906cfSBram Moolenaar elseif what == 2 794158906cfSBram Moolenaar res = "two" 795a259d8d3SBram Moolenaar else 796158906cfSBram Moolenaar res = "three" 797a259d8d3SBram Moolenaar endif 798158906cfSBram Moolenaar return res 799a259d8d3SBram Moolenaarenddef 800a259d8d3SBram Moolenaar 801158906cfSBram Moolenaardef Test_if_elseif_else() 802158906cfSBram Moolenaar assert_equal('one', IfElse(1)) 803158906cfSBram Moolenaar assert_equal('two', IfElse(2)) 804158906cfSBram Moolenaar assert_equal('three', IfElse(3)) 8050f18b6d1SBram Moolenaarenddef 8060f18b6d1SBram Moolenaar 807e8c4abbbSBram Moolenaardef Test_if_elseif_else_fails() 808e8c4abbbSBram Moolenaar call CheckDefFailure(['elseif true'], 'E582:') 809e8c4abbbSBram Moolenaar call CheckDefFailure(['else'], 'E581:') 810e8c4abbbSBram Moolenaar call CheckDefFailure(['endif'], 'E580:') 811e8c4abbbSBram Moolenaar call CheckDefFailure(['if true', 'elseif xxx'], 'E1001:') 812585fea7bSBram Moolenaar call CheckDefFailure(['if true', 'echo 1'], 'E171:') 813e8c4abbbSBram Moolenaarenddef 814e8c4abbbSBram Moolenaar 8156d69bf60SBram Moolenaarlet g:bool_true = v:true 8166d69bf60SBram Moolenaarlet g:bool_false = v:false 8176d69bf60SBram Moolenaar 8186d69bf60SBram Moolenaardef Test_if_const_expr() 8196d69bf60SBram Moolenaar let res = false 8206d69bf60SBram Moolenaar if true ? true : false 8216d69bf60SBram Moolenaar res = true 8226d69bf60SBram Moolenaar endif 8236d69bf60SBram Moolenaar assert_equal(true, res) 8246d69bf60SBram Moolenaar 825585fea7bSBram Moolenaar g:glob = 2 826585fea7bSBram Moolenaar if false 827585fea7bSBram Moolenaar execute('let g:glob = 3') 828585fea7bSBram Moolenaar endif 829585fea7bSBram Moolenaar assert_equal(2, g:glob) 830585fea7bSBram Moolenaar if true 831585fea7bSBram Moolenaar execute('let g:glob = 3') 832585fea7bSBram Moolenaar endif 833585fea7bSBram Moolenaar assert_equal(3, g:glob) 834585fea7bSBram Moolenaar 8356d69bf60SBram Moolenaar res = false 8366d69bf60SBram Moolenaar if g:bool_true ? true : false 8376d69bf60SBram Moolenaar res = true 8386d69bf60SBram Moolenaar endif 8396d69bf60SBram Moolenaar assert_equal(true, res) 8406d69bf60SBram Moolenaar 8416d69bf60SBram Moolenaar res = false 8426d69bf60SBram Moolenaar if true ? g:bool_true : false 8436d69bf60SBram Moolenaar res = true 8446d69bf60SBram Moolenaar endif 8456d69bf60SBram Moolenaar assert_equal(true, res) 8466d69bf60SBram Moolenaar 8476d69bf60SBram Moolenaar res = false 8486d69bf60SBram Moolenaar if true ? true : g:bool_false 8496d69bf60SBram Moolenaar res = true 8506d69bf60SBram Moolenaar endif 8516d69bf60SBram Moolenaar assert_equal(true, res) 8526d69bf60SBram Moolenaar 8536d69bf60SBram Moolenaar res = false 8546d69bf60SBram Moolenaar if true ? false : true 8556d69bf60SBram Moolenaar res = true 8566d69bf60SBram Moolenaar endif 8576d69bf60SBram Moolenaar assert_equal(false, res) 8586d69bf60SBram Moolenaar 8596d69bf60SBram Moolenaar res = false 8606d69bf60SBram Moolenaar if false ? false : true 8616d69bf60SBram Moolenaar res = true 8626d69bf60SBram Moolenaar endif 8636d69bf60SBram Moolenaar assert_equal(true, res) 8646d69bf60SBram Moolenaar 8656d69bf60SBram Moolenaar res = false 8666d69bf60SBram Moolenaar if false ? true : false 8676d69bf60SBram Moolenaar res = true 8686d69bf60SBram Moolenaar endif 8696d69bf60SBram Moolenaar assert_equal(false, res) 8706d69bf60SBram Moolenaar 8716d69bf60SBram Moolenaar res = false 872e8c4abbbSBram Moolenaar if has('xyz') ? true : false 873e8c4abbbSBram Moolenaar res = true 874e8c4abbbSBram Moolenaar endif 875e8c4abbbSBram Moolenaar assert_equal(false, res) 876e8c4abbbSBram Moolenaar 877e8c4abbbSBram Moolenaar res = false 8786d69bf60SBram Moolenaar if true && true 8796d69bf60SBram Moolenaar res = true 8806d69bf60SBram Moolenaar endif 8816d69bf60SBram Moolenaar assert_equal(true, res) 8826d69bf60SBram Moolenaar 8836d69bf60SBram Moolenaar res = false 8846d69bf60SBram Moolenaar if true && false 8856d69bf60SBram Moolenaar res = true 8866d69bf60SBram Moolenaar endif 8876d69bf60SBram Moolenaar assert_equal(false, res) 8886d69bf60SBram Moolenaar 8896d69bf60SBram Moolenaar res = false 8906d69bf60SBram Moolenaar if g:bool_true && false 8916d69bf60SBram Moolenaar res = true 8926d69bf60SBram Moolenaar endif 8936d69bf60SBram Moolenaar assert_equal(false, res) 8946d69bf60SBram Moolenaar 8956d69bf60SBram Moolenaar res = false 8966d69bf60SBram Moolenaar if true && g:bool_false 8976d69bf60SBram Moolenaar res = true 8986d69bf60SBram Moolenaar endif 8996d69bf60SBram Moolenaar assert_equal(false, res) 9006d69bf60SBram Moolenaar 9016d69bf60SBram Moolenaar res = false 9026d69bf60SBram Moolenaar if false && false 9036d69bf60SBram Moolenaar res = true 9046d69bf60SBram Moolenaar endif 9056d69bf60SBram Moolenaar assert_equal(false, res) 9066d69bf60SBram Moolenaar 9076d69bf60SBram Moolenaar res = false 9086d69bf60SBram Moolenaar if true || false 9096d69bf60SBram Moolenaar res = true 9106d69bf60SBram Moolenaar endif 9116d69bf60SBram Moolenaar assert_equal(true, res) 9126d69bf60SBram Moolenaar 9136d69bf60SBram Moolenaar res = false 9146d69bf60SBram Moolenaar if g:bool_true || false 9156d69bf60SBram Moolenaar res = true 9166d69bf60SBram Moolenaar endif 9176d69bf60SBram Moolenaar assert_equal(true, res) 9186d69bf60SBram Moolenaar 9196d69bf60SBram Moolenaar res = false 9206d69bf60SBram Moolenaar if true || g:bool_false 9216d69bf60SBram Moolenaar res = true 9226d69bf60SBram Moolenaar endif 9236d69bf60SBram Moolenaar assert_equal(true, res) 9246d69bf60SBram Moolenaar 9256d69bf60SBram Moolenaar res = false 9266d69bf60SBram Moolenaar if false || false 9276d69bf60SBram Moolenaar res = true 9286d69bf60SBram Moolenaar endif 9296d69bf60SBram Moolenaar assert_equal(false, res) 93080c34ca3SBram Moolenaarenddef 9316d69bf60SBram Moolenaar 93280c34ca3SBram Moolenaardef Test_if_const_expr_fails() 93380c34ca3SBram Moolenaar call CheckDefFailure(['if "aaa" == "bbb'], 'E114:') 93480c34ca3SBram Moolenaar call CheckDefFailure(["if 'aaa' == 'bbb"], 'E115:') 935e8c4abbbSBram Moolenaar call CheckDefFailure(["if has('aaa'"], 'E110:') 936e8c4abbbSBram Moolenaar call CheckDefFailure(["if has('aaa') ? true false"], 'E109:') 9376d69bf60SBram Moolenaarenddef 9386d69bf60SBram Moolenaar 939ad39c094SBram Moolenaardef Test_execute_cmd() 940ad39c094SBram Moolenaar new 941ad39c094SBram Moolenaar setline(1, 'default') 942ad39c094SBram Moolenaar execute 'call setline(1, "execute-string")' 943ad39c094SBram Moolenaar assert_equal('execute-string', getline(1)) 944a72cfb80SBram Moolenaar 945a72cfb80SBram Moolenaar execute "call setline(1, 'execute-string')" 946a72cfb80SBram Moolenaar assert_equal('execute-string', getline(1)) 947a72cfb80SBram Moolenaar 948ad39c094SBram Moolenaar let cmd1 = 'call setline(1,' 949ad39c094SBram Moolenaar let cmd2 = '"execute-var")' 950a72cfb80SBram Moolenaar execute cmd1 cmd2 # comment 951ad39c094SBram Moolenaar assert_equal('execute-var', getline(1)) 952a72cfb80SBram Moolenaar 953ad39c094SBram Moolenaar execute cmd1 cmd2 '|call setline(1, "execute-var-string")' 954ad39c094SBram Moolenaar assert_equal('execute-var-string', getline(1)) 955a72cfb80SBram Moolenaar 956ad39c094SBram Moolenaar let cmd_first = 'call ' 957ad39c094SBram Moolenaar let cmd_last = 'setline(1, "execute-var-var")' 958ad39c094SBram Moolenaar execute cmd_first .. cmd_last 959ad39c094SBram Moolenaar assert_equal('execute-var-var', getline(1)) 960ad39c094SBram Moolenaar bwipe! 961585fea7bSBram Moolenaar 962585fea7bSBram Moolenaar call CheckDefFailure(['execute xxx'], 'E1001:') 963a72cfb80SBram Moolenaar call CheckDefFailure(['execute "cmd"# comment'], 'E488:') 964ad39c094SBram Moolenaarenddef 965ad39c094SBram Moolenaar 966ad39c094SBram Moolenaardef Test_echo_cmd() 967a72cfb80SBram Moolenaar echo 'some' # comment 968585fea7bSBram Moolenaar echon 'thing' 969ad39c094SBram Moolenaar assert_match('^something$', Screenline(&lines)) 970ad39c094SBram Moolenaar 971a72cfb80SBram Moolenaar echo "some" # comment 972a72cfb80SBram Moolenaar echon "thing" 973a72cfb80SBram Moolenaar assert_match('^something$', Screenline(&lines)) 974a72cfb80SBram Moolenaar 975ad39c094SBram Moolenaar let str1 = 'some' 976ad39c094SBram Moolenaar let str2 = 'more' 977ad39c094SBram Moolenaar echo str1 str2 978ad39c094SBram Moolenaar assert_match('^some more$', Screenline(&lines)) 979a72cfb80SBram Moolenaar 980a72cfb80SBram Moolenaar call CheckDefFailure(['echo "xxx"# comment'], 'E488:') 981ad39c094SBram Moolenaarenddef 982ad39c094SBram Moolenaar 983*f93c7feaSBram Moolenaardef Test_echomsg_cmd() 984*f93c7feaSBram Moolenaar echomsg 'some' 'more' # comment 985*f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 986*f93c7feaSBram Moolenaar echo 'clear' 987*f93c7feaSBram Moolenaar 1messages 988*f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 989*f93c7feaSBram Moolenaar 990*f93c7feaSBram Moolenaar call CheckDefFailure(['echomsg "xxx"# comment'], 'E488:') 991*f93c7feaSBram Moolenaarenddef 992*f93c7feaSBram Moolenaar 993*f93c7feaSBram Moolenaardef Test_echoerr_cmd() 994*f93c7feaSBram Moolenaar # TODO: write this test 995*f93c7feaSBram Moolenaarenddef 996*f93c7feaSBram Moolenaar 99741fe0617SBram Moolenaardef Test_for_outside_of_function() 99841fe0617SBram Moolenaar let lines =<< trim END 99941fe0617SBram Moolenaar vim9script 100041fe0617SBram Moolenaar new 100141fe0617SBram Moolenaar for var in range(0, 3) 100241fe0617SBram Moolenaar append(line('$'), var) 100341fe0617SBram Moolenaar endfor 100441fe0617SBram Moolenaar assert_equal(['', '0', '1', '2', '3'], getline(1, '$')) 100541fe0617SBram Moolenaar bwipe! 100641fe0617SBram Moolenaar END 100741fe0617SBram Moolenaar writefile(lines, 'Xvim9for.vim') 100841fe0617SBram Moolenaar source Xvim9for.vim 100941fe0617SBram Moolenaar delete('Xvim9for.vim') 101041fe0617SBram Moolenaarenddef 10118a7d6542SBram Moolenaar 1012e8c4abbbSBram Moolenaardef Test_for_loop() 1013e8c4abbbSBram Moolenaar let result = '' 1014e8c4abbbSBram Moolenaar for cnt in range(7) 1015e8c4abbbSBram Moolenaar if cnt == 4 1016e8c4abbbSBram Moolenaar break 1017e8c4abbbSBram Moolenaar endif 1018e8c4abbbSBram Moolenaar if cnt == 2 1019e8c4abbbSBram Moolenaar continue 1020e8c4abbbSBram Moolenaar endif 1021e8c4abbbSBram Moolenaar result ..= cnt .. '_' 1022e8c4abbbSBram Moolenaar endfor 1023e8c4abbbSBram Moolenaar assert_equal('0_1_3_', result) 1024e8c4abbbSBram Moolenaarenddef 1025e8c4abbbSBram Moolenaar 1026e8c4abbbSBram Moolenaardef Test_for_loop_fails() 1027675f716eSBram Moolenaar CheckDefFailure(['for # in range(5)'], 'E690:') 1028675f716eSBram Moolenaar CheckDefFailure(['for i In range(5)'], 'E690:') 1029675f716eSBram Moolenaar CheckDefFailure(['let x = 5', 'for x in range(5)'], 'E1023:') 10306e949784SBram Moolenaar CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef'], 'E1006:') 1031675f716eSBram Moolenaar CheckDefFailure(['for i in "text"'], 'E1024:') 1032675f716eSBram Moolenaar CheckDefFailure(['for i in xxx'], 'E1001:') 1033675f716eSBram Moolenaar CheckDefFailure(['endfor'], 'E588:') 1034675f716eSBram Moolenaar CheckDefFailure(['for i in range(3)', 'echo 3'], 'E170:') 1035e8c4abbbSBram Moolenaarenddef 1036e8c4abbbSBram Moolenaar 1037d0df1aacSBram Moolenaardef Test_while_loop() 1038d0df1aacSBram Moolenaar let result = '' 1039d0df1aacSBram Moolenaar let cnt = 0 1040d0df1aacSBram Moolenaar while cnt < 555 1041d0df1aacSBram Moolenaar if cnt == 3 1042d0df1aacSBram Moolenaar break 1043d0df1aacSBram Moolenaar endif 1044d0df1aacSBram Moolenaar cnt += 1 1045d0df1aacSBram Moolenaar if cnt == 2 1046d0df1aacSBram Moolenaar continue 1047d0df1aacSBram Moolenaar endif 1048d0df1aacSBram Moolenaar result ..= cnt .. '_' 1049d0df1aacSBram Moolenaar endwhile 1050d0df1aacSBram Moolenaar assert_equal('1_3_', result) 1051d0df1aacSBram Moolenaarenddef 1052d0df1aacSBram Moolenaar 1053e8c4abbbSBram Moolenaardef Test_while_loop_fails() 1054675f716eSBram Moolenaar CheckDefFailure(['while xxx'], 'E1001:') 1055675f716eSBram Moolenaar CheckDefFailure(['endwhile'], 'E588:') 1056675f716eSBram Moolenaar CheckDefFailure(['continue'], 'E586:') 1057675f716eSBram Moolenaar CheckDefFailure(['if true', 'continue'], 'E586:') 1058675f716eSBram Moolenaar CheckDefFailure(['break'], 'E587:') 1059675f716eSBram Moolenaar CheckDefFailure(['if true', 'break'], 'E587:') 1060675f716eSBram Moolenaar CheckDefFailure(['while 1', 'echo 3'], 'E170:') 1061bd5da371SBram Moolenaarenddef 1062bd5da371SBram Moolenaar 10639645e2d9SBram Moolenaardef Test_interrupt_loop() 106497acfc78SBram Moolenaar let caught = false 10659645e2d9SBram Moolenaar let x = 0 106697acfc78SBram Moolenaar try 10679645e2d9SBram Moolenaar while 1 10689645e2d9SBram Moolenaar x += 1 10699645e2d9SBram Moolenaar if x == 100 10709645e2d9SBram Moolenaar feedkeys("\<C-C>", 'Lt') 10719645e2d9SBram Moolenaar endif 10729645e2d9SBram Moolenaar endwhile 107397acfc78SBram Moolenaar catch 107497acfc78SBram Moolenaar caught = true 107597acfc78SBram Moolenaar assert_equal(100, x) 107697acfc78SBram Moolenaar endtry 107797acfc78SBram Moolenaar assert_true(caught, 'should have caught an exception') 10789645e2d9SBram Moolenaarenddef 107920431c9dSBram Moolenaar 10804fdae999SBram Moolenaardef Test_automatic_line_continuation() 10814fdae999SBram Moolenaar let mylist = [ 10824fdae999SBram Moolenaar 'one', 10834fdae999SBram Moolenaar 'two', 10844fdae999SBram Moolenaar 'three', 10854fdae999SBram Moolenaar ] " comment 10864fdae999SBram Moolenaar assert_equal(['one', 'two', 'three'], mylist) 10874fdae999SBram Moolenaar 10884fdae999SBram Moolenaar let mydict = { 10894fdae999SBram Moolenaar 'one': 1, 10904fdae999SBram Moolenaar 'two': 2, 10914fdae999SBram Moolenaar 'three': 10924fdae999SBram Moolenaar 3, 10934fdae999SBram Moolenaar } " comment 10944fdae999SBram Moolenaar assert_equal({'one': 1, 'two': 2, 'three': 3}, mydict) 10954fdae999SBram Moolenaar mydict = #{ 10962c330432SBram Moolenaar one: 1, # comment 10972c330432SBram Moolenaar two: # comment 10982c330432SBram Moolenaar 2, # comment 10992c330432SBram Moolenaar three: 3 # comment 11002c330432SBram Moolenaar } 11012c330432SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 11022c330432SBram Moolenaar mydict = #{ 11032c330432SBram Moolenaar one: 1, 11044fdae999SBram Moolenaar two: 11054fdae999SBram Moolenaar 2, 11062c330432SBram Moolenaar three: 3 11074fdae999SBram Moolenaar } 11084fdae999SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 1109e6085c53SBram Moolenaar 1110e6085c53SBram Moolenaar assert_equal( 1111e6085c53SBram Moolenaar ['one', 'two', 'three'], 1112e6085c53SBram Moolenaar split('one two three') 1113e6085c53SBram Moolenaar ) 11144fdae999SBram Moolenaarenddef 11154fdae999SBram Moolenaar 11167a092245SBram Moolenaardef Test_vim9_comment() 11177a092245SBram Moolenaar CheckScriptSuccess([ 11187a092245SBram Moolenaar 'vim9script', 11197a092245SBram Moolenaar '# something', 11207a092245SBram Moolenaar ]) 11217a092245SBram Moolenaar CheckScriptFailure([ 11227a092245SBram Moolenaar 'vim9script', 11237a092245SBram Moolenaar ':# something', 11247a092245SBram Moolenaar ], 'E488:') 11257a092245SBram Moolenaar CheckScriptFailure([ 11267a092245SBram Moolenaar '# something', 11277a092245SBram Moolenaar ], 'E488:') 11287a092245SBram Moolenaar CheckScriptFailure([ 11297a092245SBram Moolenaar ':# something', 11307a092245SBram Moolenaar ], 'E488:') 11317a092245SBram Moolenaar 11324a8d9f2eSBram Moolenaar { # block start 11334a8d9f2eSBram Moolenaar } # block end 11344a8d9f2eSBram Moolenaar CheckDefFailure([ 11354a8d9f2eSBram Moolenaar '{# comment', 11364a8d9f2eSBram Moolenaar ], 'E488:') 11374a8d9f2eSBram Moolenaar CheckDefFailure([ 11384a8d9f2eSBram Moolenaar '{', 11394a8d9f2eSBram Moolenaar '}# comment', 11404a8d9f2eSBram Moolenaar ], 'E488:') 11414a8d9f2eSBram Moolenaar 11424a8d9f2eSBram Moolenaar echo "yes" # comment 11434a8d9f2eSBram Moolenaar CheckDefFailure([ 11444a8d9f2eSBram Moolenaar 'echo "yes"# comment', 11454a8d9f2eSBram Moolenaar ], 'E488:') 11467a092245SBram Moolenaar CheckScriptSuccess([ 11477a092245SBram Moolenaar 'vim9script', 11487a092245SBram Moolenaar 'echo "yes" # something', 11497a092245SBram Moolenaar ]) 11507a092245SBram Moolenaar CheckScriptFailure([ 11517a092245SBram Moolenaar 'vim9script', 11527a092245SBram Moolenaar 'echo "yes"# something', 11537a092245SBram Moolenaar ], 'E121:') 11547a092245SBram Moolenaar CheckScriptFailure([ 11557a092245SBram Moolenaar 'vim9script', 11567a092245SBram Moolenaar 'echo# something', 11577a092245SBram Moolenaar ], 'E121:') 11587a092245SBram Moolenaar CheckScriptFailure([ 11597a092245SBram Moolenaar 'echo "yes" # something', 11607a092245SBram Moolenaar ], 'E121:') 11617a092245SBram Moolenaar 11624a8d9f2eSBram Moolenaar exe "echo" # comment 11634a8d9f2eSBram Moolenaar CheckDefFailure([ 11644a8d9f2eSBram Moolenaar 'exe "echo"# comment', 11654a8d9f2eSBram Moolenaar ], 'E488:') 11664a8d9f2eSBram Moolenaar CheckScriptSuccess([ 11674a8d9f2eSBram Moolenaar 'vim9script', 11684a8d9f2eSBram Moolenaar 'exe "echo" # something', 11694a8d9f2eSBram Moolenaar ]) 11704a8d9f2eSBram Moolenaar CheckScriptFailure([ 11714a8d9f2eSBram Moolenaar 'vim9script', 11724a8d9f2eSBram Moolenaar 'exe "echo"# something', 11734a8d9f2eSBram Moolenaar ], 'E121:') 11744a8d9f2eSBram Moolenaar CheckDefFailure([ 11754a8d9f2eSBram Moolenaar 'exe # comment', 11764a8d9f2eSBram Moolenaar ], 'E1015:') 11774a8d9f2eSBram Moolenaar CheckScriptFailure([ 11784a8d9f2eSBram Moolenaar 'vim9script', 11794a8d9f2eSBram Moolenaar 'exe# something', 11804a8d9f2eSBram Moolenaar ], 'E121:') 11814a8d9f2eSBram Moolenaar CheckScriptFailure([ 11824a8d9f2eSBram Moolenaar 'exe "echo" # something', 11834a8d9f2eSBram Moolenaar ], 'E121:') 11844a8d9f2eSBram Moolenaar 11857a092245SBram Moolenaar CheckDefFailure([ 11867a092245SBram Moolenaar 'try# comment', 11877a092245SBram Moolenaar ' echo "yes"', 11887a092245SBram Moolenaar 'catch', 11897a092245SBram Moolenaar 'endtry', 11907a092245SBram Moolenaar ], 'E488:') 11912c5ed4e3SBram Moolenaar CheckScriptFailure([ 11922c5ed4e3SBram Moolenaar 'vim9script', 11932c5ed4e3SBram Moolenaar 'try# comment', 11942c5ed4e3SBram Moolenaar 'echo "yes"', 11952c5ed4e3SBram Moolenaar ], 'E488:') 11967a092245SBram Moolenaar CheckDefFailure([ 11977a092245SBram Moolenaar 'try', 1198a72cfb80SBram Moolenaar ' throw#comment', 1199a72cfb80SBram Moolenaar 'catch', 1200a72cfb80SBram Moolenaar 'endtry', 1201a72cfb80SBram Moolenaar ], 'E1015:') 1202a72cfb80SBram Moolenaar CheckDefFailure([ 1203a72cfb80SBram Moolenaar 'try', 1204a72cfb80SBram Moolenaar ' throw "yes"#comment', 1205a72cfb80SBram Moolenaar 'catch', 1206a72cfb80SBram Moolenaar 'endtry', 1207a72cfb80SBram Moolenaar ], 'E488:') 1208a72cfb80SBram Moolenaar CheckDefFailure([ 1209a72cfb80SBram Moolenaar 'try', 12107a092245SBram Moolenaar ' echo "yes"', 12117a092245SBram Moolenaar 'catch# comment', 12127a092245SBram Moolenaar 'endtry', 12137a092245SBram Moolenaar ], 'E488:') 12142c5ed4e3SBram Moolenaar CheckScriptFailure([ 12152c5ed4e3SBram Moolenaar 'vim9script', 12162c5ed4e3SBram Moolenaar 'try', 12172c5ed4e3SBram Moolenaar ' echo "yes"', 12182c5ed4e3SBram Moolenaar 'catch# comment', 12192c5ed4e3SBram Moolenaar 'endtry', 12202c5ed4e3SBram Moolenaar ], 'E654:') 12212c5ed4e3SBram Moolenaar CheckDefFailure([ 12222c5ed4e3SBram Moolenaar 'try', 12232c5ed4e3SBram Moolenaar ' echo "yes"', 12242c5ed4e3SBram Moolenaar 'catch /pat/# comment', 12252c5ed4e3SBram Moolenaar 'endtry', 12262c5ed4e3SBram Moolenaar ], 'E488:') 12272c5ed4e3SBram Moolenaar CheckScriptFailure([ 12282c5ed4e3SBram Moolenaar 'vim9script', 12292c5ed4e3SBram Moolenaar 'try', 12302c5ed4e3SBram Moolenaar ' throw "pat"', 12312c5ed4e3SBram Moolenaar 'catch /pat/# comment', 12322c5ed4e3SBram Moolenaar 'endtry', 12332c5ed4e3SBram Moolenaar ], 'E605:') 12347a092245SBram Moolenaar CheckDefFailure([ 12357a092245SBram Moolenaar 'try', 12367a092245SBram Moolenaar 'echo "yes"', 12377a092245SBram Moolenaar 'catch', 12387a092245SBram Moolenaar 'endtry# comment', 12397a092245SBram Moolenaar ], 'E488:') 12402c5ed4e3SBram Moolenaar CheckScriptFailure([ 12412c5ed4e3SBram Moolenaar 'vim9script', 12422c5ed4e3SBram Moolenaar 'try', 12432c5ed4e3SBram Moolenaar ' echo "yes"', 12442c5ed4e3SBram Moolenaar 'catch', 12452c5ed4e3SBram Moolenaar 'endtry# comment', 12462c5ed4e3SBram Moolenaar ], 'E600:') 12472c5ed4e3SBram Moolenaar 12482c5ed4e3SBram Moolenaar CheckScriptSuccess([ 12492c5ed4e3SBram Moolenaar 'vim9script', 12502c5ed4e3SBram Moolenaar 'hi # comment', 12512c5ed4e3SBram Moolenaar ]) 12522c5ed4e3SBram Moolenaar CheckScriptFailure([ 12532c5ed4e3SBram Moolenaar 'vim9script', 12542c5ed4e3SBram Moolenaar 'hi# comment', 12552c5ed4e3SBram Moolenaar ], 'E416:') 12561966c248SBram Moolenaar CheckScriptSuccess([ 12571966c248SBram Moolenaar 'vim9script', 12581966c248SBram Moolenaar 'hi Search # comment', 12591966c248SBram Moolenaar ]) 12601966c248SBram Moolenaar CheckScriptFailure([ 12611966c248SBram Moolenaar 'vim9script', 12621966c248SBram Moolenaar 'hi Search# comment', 12631966c248SBram Moolenaar ], 'E416:') 12641966c248SBram Moolenaar CheckScriptSuccess([ 12651966c248SBram Moolenaar 'vim9script', 12661966c248SBram Moolenaar 'hi link This Search # comment', 12671966c248SBram Moolenaar ]) 12681966c248SBram Moolenaar CheckScriptFailure([ 12691966c248SBram Moolenaar 'vim9script', 12701966c248SBram Moolenaar 'hi link This That# comment', 12711966c248SBram Moolenaar ], 'E413:') 12721966c248SBram Moolenaar CheckScriptSuccess([ 12731966c248SBram Moolenaar 'vim9script', 12741966c248SBram Moolenaar 'hi clear This # comment', 12751966c248SBram Moolenaar 'hi clear # comment', 12761966c248SBram Moolenaar ]) 12771966c248SBram Moolenaar " not tested, because it doesn't give an error but a warning: 12781966c248SBram Moolenaar " hi clear This# comment', 12791966c248SBram Moolenaar CheckScriptFailure([ 12801966c248SBram Moolenaar 'vim9script', 12811966c248SBram Moolenaar 'hi clear# comment', 12821966c248SBram Moolenaar ], 'E416:') 12831966c248SBram Moolenaar 12841966c248SBram Moolenaar CheckScriptSuccess([ 12851966c248SBram Moolenaar 'vim9script', 12861966c248SBram Moolenaar 'hi Group term=bold', 12871966c248SBram Moolenaar 'match Group /todo/ # comment', 12881966c248SBram Moolenaar ]) 12891966c248SBram Moolenaar CheckScriptFailure([ 12901966c248SBram Moolenaar 'vim9script', 12911966c248SBram Moolenaar 'hi Group term=bold', 12921966c248SBram Moolenaar 'match Group /todo/# comment', 12931966c248SBram Moolenaar ], 'E488:') 12941966c248SBram Moolenaar CheckScriptSuccess([ 12951966c248SBram Moolenaar 'vim9script', 12961966c248SBram Moolenaar 'match # comment', 12971966c248SBram Moolenaar ]) 12981966c248SBram Moolenaar CheckScriptFailure([ 12991966c248SBram Moolenaar 'vim9script', 13001966c248SBram Moolenaar 'match# comment', 13011966c248SBram Moolenaar ], 'E475:') 13021966c248SBram Moolenaar CheckScriptSuccess([ 13031966c248SBram Moolenaar 'vim9script', 13041966c248SBram Moolenaar 'match none # comment', 13051966c248SBram Moolenaar ]) 13061966c248SBram Moolenaar CheckScriptFailure([ 13071966c248SBram Moolenaar 'vim9script', 13081966c248SBram Moolenaar 'match none# comment', 13091966c248SBram Moolenaar ], 'E475:') 13101966c248SBram Moolenaar 13111966c248SBram Moolenaar CheckScriptSuccess([ 13121966c248SBram Moolenaar 'vim9script', 13131966c248SBram Moolenaar 'menutrans clear # comment', 13141966c248SBram Moolenaar ]) 13151966c248SBram Moolenaar CheckScriptFailure([ 13161966c248SBram Moolenaar 'vim9script', 13171966c248SBram Moolenaar 'menutrans clear# comment text', 13181966c248SBram Moolenaar ], 'E474:') 13191966c248SBram Moolenaar 13201966c248SBram Moolenaar CheckScriptSuccess([ 13211966c248SBram Moolenaar 'vim9script', 13221966c248SBram Moolenaar 'syntax clear # comment', 13231966c248SBram Moolenaar ]) 13241966c248SBram Moolenaar CheckScriptFailure([ 13251966c248SBram Moolenaar 'vim9script', 13261966c248SBram Moolenaar 'syntax clear# comment text', 13271966c248SBram Moolenaar ], 'E28:') 13281966c248SBram Moolenaar CheckScriptSuccess([ 13291966c248SBram Moolenaar 'vim9script', 13301966c248SBram Moolenaar 'syntax keyword Word some', 13311966c248SBram Moolenaar 'syntax clear Word # comment', 13321966c248SBram Moolenaar ]) 13331966c248SBram Moolenaar CheckScriptFailure([ 13341966c248SBram Moolenaar 'vim9script', 13351966c248SBram Moolenaar 'syntax keyword Word some', 13361966c248SBram Moolenaar 'syntax clear Word# comment text', 13371966c248SBram Moolenaar ], 'E28:') 13381966c248SBram Moolenaar 13391966c248SBram Moolenaar CheckScriptSuccess([ 13401966c248SBram Moolenaar 'vim9script', 13411966c248SBram Moolenaar 'syntax list # comment', 13421966c248SBram Moolenaar ]) 13431966c248SBram Moolenaar CheckScriptFailure([ 13441966c248SBram Moolenaar 'vim9script', 13451966c248SBram Moolenaar 'syntax list# comment text', 13461966c248SBram Moolenaar ], 'E28:') 13471966c248SBram Moolenaar 13481966c248SBram Moolenaar CheckScriptSuccess([ 13491966c248SBram Moolenaar 'vim9script', 13501966c248SBram Moolenaar 'syntax match Word /pat/ oneline # comment', 13511966c248SBram Moolenaar ]) 13521966c248SBram Moolenaar CheckScriptFailure([ 13531966c248SBram Moolenaar 'vim9script', 13541966c248SBram Moolenaar 'syntax match Word /pat/ oneline# comment', 13551966c248SBram Moolenaar ], 'E475:') 13561966c248SBram Moolenaar 13571966c248SBram Moolenaar CheckScriptSuccess([ 13581966c248SBram Moolenaar 'vim9script', 13591966c248SBram Moolenaar 'syntax keyword Word word # comm[ent', 13601966c248SBram Moolenaar ]) 13611966c248SBram Moolenaar CheckScriptFailure([ 13621966c248SBram Moolenaar 'vim9script', 13631966c248SBram Moolenaar 'syntax keyword Word word# comm[ent', 13641966c248SBram Moolenaar ], 'E789:') 13651966c248SBram Moolenaar 13661966c248SBram Moolenaar CheckScriptSuccess([ 13671966c248SBram Moolenaar 'vim9script', 13681966c248SBram Moolenaar 'syntax match Word /pat/ # comment', 13691966c248SBram Moolenaar ]) 13701966c248SBram Moolenaar CheckScriptFailure([ 13711966c248SBram Moolenaar 'vim9script', 13721966c248SBram Moolenaar 'syntax match Word /pat/# comment', 13731966c248SBram Moolenaar ], 'E402:') 13741966c248SBram Moolenaar 13751966c248SBram Moolenaar CheckScriptSuccess([ 13761966c248SBram Moolenaar 'vim9script', 13771966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something # comment', 13781966c248SBram Moolenaar ]) 13791966c248SBram Moolenaar CheckScriptFailure([ 13801966c248SBram Moolenaar 'vim9script', 13811966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something# comment', 13821966c248SBram Moolenaar ], 'E475:') 13831966c248SBram Moolenaar CheckScriptFailure([ 13841966c248SBram Moolenaar 'vim9script', 13851966c248SBram Moolenaar 'syntax match Word /pat/ contains= # comment', 13861966c248SBram Moolenaar ], 'E406:') 13871966c248SBram Moolenaar CheckScriptFailure([ 13881966c248SBram Moolenaar 'vim9script', 13891966c248SBram Moolenaar 'syntax match Word /pat/ contains=# comment', 13901966c248SBram Moolenaar ], 'E475:') 13911966c248SBram Moolenaar 13921966c248SBram Moolenaar CheckScriptSuccess([ 13931966c248SBram Moolenaar 'vim9script', 13941966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/ # comment', 13951966c248SBram Moolenaar ]) 13961966c248SBram Moolenaar CheckScriptFailure([ 13971966c248SBram Moolenaar 'vim9script', 13981966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/# comment', 13991966c248SBram Moolenaar ], 'E475:') 14001966c248SBram Moolenaar 14011966c248SBram Moolenaar CheckScriptSuccess([ 14021966c248SBram Moolenaar 'vim9script', 14031966c248SBram Moolenaar 'syntax sync # comment', 14041966c248SBram Moolenaar ]) 14051966c248SBram Moolenaar CheckScriptFailure([ 14061966c248SBram Moolenaar 'vim9script', 14071966c248SBram Moolenaar 'syntax sync# comment', 14081966c248SBram Moolenaar ], 'E404:') 14091966c248SBram Moolenaar CheckScriptSuccess([ 14101966c248SBram Moolenaar 'vim9script', 14111966c248SBram Moolenaar 'syntax sync ccomment # comment', 14121966c248SBram Moolenaar ]) 14131966c248SBram Moolenaar CheckScriptFailure([ 14141966c248SBram Moolenaar 'vim9script', 14151966c248SBram Moolenaar 'syntax sync ccomment# comment', 14161966c248SBram Moolenaar ], 'E404:') 14171966c248SBram Moolenaar 14181966c248SBram Moolenaar CheckScriptSuccess([ 14191966c248SBram Moolenaar 'vim9script', 14201966c248SBram Moolenaar 'syntax cluster Some contains=Word # comment', 14211966c248SBram Moolenaar ]) 14221966c248SBram Moolenaar CheckScriptFailure([ 14231966c248SBram Moolenaar 'vim9script', 14241966c248SBram Moolenaar 'syntax cluster Some contains=Word# comment', 14251966c248SBram Moolenaar ], 'E475:') 1426a72cfb80SBram Moolenaar 1427a72cfb80SBram Moolenaar CheckScriptSuccess([ 1428a72cfb80SBram Moolenaar 'vim9script', 1429a72cfb80SBram Moolenaar 'command Echo echo # comment', 1430a72cfb80SBram Moolenaar 'command Echo # comment', 1431a72cfb80SBram Moolenaar ]) 1432a72cfb80SBram Moolenaar CheckScriptFailure([ 1433a72cfb80SBram Moolenaar 'vim9script', 1434a72cfb80SBram Moolenaar 'command Echo echo# comment', 1435a72cfb80SBram Moolenaar 'Echo', 1436a72cfb80SBram Moolenaar ], 'E121:') 1437a72cfb80SBram Moolenaar CheckScriptFailure([ 1438a72cfb80SBram Moolenaar 'vim9script', 1439a72cfb80SBram Moolenaar 'command Echo# comment', 1440a72cfb80SBram Moolenaar ], 'E182:') 1441a72cfb80SBram Moolenaar CheckScriptFailure([ 1442a72cfb80SBram Moolenaar 'vim9script', 1443a72cfb80SBram Moolenaar 'command Echo echo', 1444a72cfb80SBram Moolenaar 'command Echo# comment', 1445a72cfb80SBram Moolenaar ], 'E182:') 1446a72cfb80SBram Moolenaar 1447a72cfb80SBram Moolenaar CheckScriptSuccess([ 1448a72cfb80SBram Moolenaar 'vim9script', 1449a72cfb80SBram Moolenaar 'function # comment', 1450a72cfb80SBram Moolenaar ]) 1451a72cfb80SBram Moolenaar CheckScriptFailure([ 1452a72cfb80SBram Moolenaar 'vim9script', 1453a72cfb80SBram Moolenaar 'function# comment', 1454a72cfb80SBram Moolenaar ], 'E129:') 1455a72cfb80SBram Moolenaar CheckScriptSuccess([ 1456a72cfb80SBram Moolenaar 'vim9script', 1457a72cfb80SBram Moolenaar 'function CheckScriptSuccess # comment', 1458a72cfb80SBram Moolenaar ]) 1459a72cfb80SBram Moolenaar CheckScriptFailure([ 1460a72cfb80SBram Moolenaar 'vim9script', 1461a72cfb80SBram Moolenaar 'function CheckScriptSuccess# comment', 1462a72cfb80SBram Moolenaar ], 'E488:') 1463a72cfb80SBram Moolenaar 1464a72cfb80SBram Moolenaar CheckScriptSuccess([ 1465a72cfb80SBram Moolenaar 'vim9script', 1466a72cfb80SBram Moolenaar 'func DeleteMe()', 1467a72cfb80SBram Moolenaar 'endfunc', 1468a72cfb80SBram Moolenaar 'delfunction DeleteMe # comment', 1469a72cfb80SBram Moolenaar ]) 1470a72cfb80SBram Moolenaar CheckScriptFailure([ 1471a72cfb80SBram Moolenaar 'vim9script', 1472a72cfb80SBram Moolenaar 'func DeleteMe()', 1473a72cfb80SBram Moolenaar 'endfunc', 1474a72cfb80SBram Moolenaar 'delfunction DeleteMe# comment', 1475a72cfb80SBram Moolenaar ], 'E488:') 1476a72cfb80SBram Moolenaar 1477a72cfb80SBram Moolenaar CheckScriptSuccess([ 1478a72cfb80SBram Moolenaar 'vim9script', 1479a72cfb80SBram Moolenaar 'call execute("ls") # comment', 1480a72cfb80SBram Moolenaar ]) 1481a72cfb80SBram Moolenaar CheckScriptFailure([ 1482a72cfb80SBram Moolenaar 'vim9script', 1483a72cfb80SBram Moolenaar 'call execute("ls")# comment', 1484a72cfb80SBram Moolenaar ], 'E488:') 14852c5ed4e3SBram Moolenaarenddef 14862c5ed4e3SBram Moolenaar 14872c5ed4e3SBram Moolenaardef Test_vim9_comment_gui() 14882c5ed4e3SBram Moolenaar CheckCanRunGui 14892c5ed4e3SBram Moolenaar 14902c5ed4e3SBram Moolenaar CheckScriptFailure([ 14912c5ed4e3SBram Moolenaar 'vim9script', 14922c5ed4e3SBram Moolenaar 'gui#comment' 14932c5ed4e3SBram Moolenaar ], 'E499:') 14942c5ed4e3SBram Moolenaar CheckScriptFailure([ 14952c5ed4e3SBram Moolenaar 'vim9script', 14962c5ed4e3SBram Moolenaar 'gui -f#comment' 14972c5ed4e3SBram Moolenaar ], 'E499:') 14987a092245SBram Moolenaarenddef 14997a092245SBram Moolenaar 1500a26b9700SBram Moolenaardef Test_vim9_comment_not_compiled() 1501a26b9700SBram Moolenaar au TabEnter *.vim let g:entered = 1 1502a26b9700SBram Moolenaar au TabEnter *.x let g:entered = 2 1503a26b9700SBram Moolenaar 1504a26b9700SBram Moolenaar edit test.vim 1505a26b9700SBram Moolenaar doautocmd TabEnter #comment 1506a26b9700SBram Moolenaar assert_equal(1, g:entered) 1507a26b9700SBram Moolenaar 1508a26b9700SBram Moolenaar doautocmd TabEnter f.x 1509a26b9700SBram Moolenaar assert_equal(2, g:entered) 1510a26b9700SBram Moolenaar 1511a26b9700SBram Moolenaar g:entered = 0 1512a26b9700SBram Moolenaar doautocmd TabEnter f.x #comment 1513a26b9700SBram Moolenaar assert_equal(2, g:entered) 1514a26b9700SBram Moolenaar 1515a26b9700SBram Moolenaar assert_fails('doautocmd Syntax#comment', 'E216:') 1516a26b9700SBram Moolenaar 1517a26b9700SBram Moolenaar au! TabEnter 1518a26b9700SBram Moolenaar unlet g:entered 1519d72c1bf0SBram Moolenaar 1520d72c1bf0SBram Moolenaar CheckScriptSuccess([ 1521d72c1bf0SBram Moolenaar 'vim9script', 1522d72c1bf0SBram Moolenaar 'let g:var = 123', 1523d72c1bf0SBram Moolenaar 'let w:var = 777', 1524d72c1bf0SBram Moolenaar 'unlet g:var w:var # something', 1525d72c1bf0SBram Moolenaar ]) 1526d72c1bf0SBram Moolenaar 1527d72c1bf0SBram Moolenaar CheckScriptFailure([ 1528d72c1bf0SBram Moolenaar 'vim9script', 1529d72c1bf0SBram Moolenaar 'let g:var = 123', 1530d72c1bf0SBram Moolenaar 'unlet g:var# comment', 1531d72c1bf0SBram Moolenaar ], 'E108:') 1532d72c1bf0SBram Moolenaar 1533d72c1bf0SBram Moolenaar CheckScriptFailure([ 1534d72c1bf0SBram Moolenaar 'let g:var = 123', 1535d72c1bf0SBram Moolenaar 'unlet g:var # something', 1536d72c1bf0SBram Moolenaar ], 'E488:') 1537faac4104SBram Moolenaar 1538faac4104SBram Moolenaar CheckScriptSuccess([ 1539faac4104SBram Moolenaar 'vim9script', 1540faac4104SBram Moolenaar 'if 1 # comment', 1541faac4104SBram Moolenaar ' echo "yes"', 1542faac4104SBram Moolenaar 'elseif 2 #comment', 1543faac4104SBram Moolenaar ' echo "no"', 1544faac4104SBram Moolenaar 'endif', 1545faac4104SBram Moolenaar ]) 1546faac4104SBram Moolenaar 1547faac4104SBram Moolenaar CheckScriptFailure([ 1548faac4104SBram Moolenaar 'vim9script', 1549faac4104SBram Moolenaar 'if 1# comment', 1550faac4104SBram Moolenaar ' echo "yes"', 1551faac4104SBram Moolenaar 'endif', 1552faac4104SBram Moolenaar ], 'E15:') 1553faac4104SBram Moolenaar 1554faac4104SBram Moolenaar CheckScriptFailure([ 1555faac4104SBram Moolenaar 'vim9script', 1556faac4104SBram Moolenaar 'if 0 # comment', 1557faac4104SBram Moolenaar ' echo "yes"', 1558faac4104SBram Moolenaar 'elseif 2#comment', 1559faac4104SBram Moolenaar ' echo "no"', 1560faac4104SBram Moolenaar 'endif', 1561faac4104SBram Moolenaar ], 'E15:') 1562faac4104SBram Moolenaar 1563faac4104SBram Moolenaar CheckScriptSuccess([ 1564faac4104SBram Moolenaar 'vim9script', 1565faac4104SBram Moolenaar 'let # comment', 1566faac4104SBram Moolenaar ]) 1567faac4104SBram Moolenaar 1568faac4104SBram Moolenaar CheckScriptFailure([ 1569faac4104SBram Moolenaar 'vim9script', 1570faac4104SBram Moolenaar 'let# comment', 1571faac4104SBram Moolenaar ], 'E121:') 1572faac4104SBram Moolenaar 1573faac4104SBram Moolenaar CheckScriptSuccess([ 1574faac4104SBram Moolenaar 'vim9script', 1575faac4104SBram Moolenaar 'let v:version # comment', 1576faac4104SBram Moolenaar ]) 1577faac4104SBram Moolenaar 1578faac4104SBram Moolenaar CheckScriptFailure([ 1579faac4104SBram Moolenaar 'vim9script', 1580faac4104SBram Moolenaar 'let v:version# comment', 1581faac4104SBram Moolenaar ], 'E121:') 1582faac4104SBram Moolenaar 1583faac4104SBram Moolenaar CheckScriptSuccess([ 1584faac4104SBram Moolenaar 'vim9script', 1585faac4104SBram Moolenaar 'new' 1586faac4104SBram Moolenaar 'call setline(1, ["# define pat", "last"])', 1587faac4104SBram Moolenaar '$', 1588faac4104SBram Moolenaar 'dsearch /pat/ #comment', 1589faac4104SBram Moolenaar 'bwipe!', 1590faac4104SBram Moolenaar ]) 1591faac4104SBram Moolenaar 1592faac4104SBram Moolenaar CheckScriptFailure([ 1593faac4104SBram Moolenaar 'vim9script', 1594faac4104SBram Moolenaar 'new' 1595faac4104SBram Moolenaar 'call setline(1, ["# define pat", "last"])', 1596faac4104SBram Moolenaar '$', 1597faac4104SBram Moolenaar 'dsearch /pat/#comment', 1598faac4104SBram Moolenaar 'bwipe!', 1599faac4104SBram Moolenaar ], 'E488:') 1600a26b9700SBram Moolenaarenddef 1601a26b9700SBram Moolenaar 1602585fea7bSBram Moolenaar" Keep this last, it messes up highlighting. 1603585fea7bSBram Moolenaardef Test_substitute_cmd() 1604585fea7bSBram Moolenaar new 1605585fea7bSBram Moolenaar setline(1, 'something') 1606585fea7bSBram Moolenaar :substitute(some(other( 1607585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 1608585fea7bSBram Moolenaar bwipe! 1609585fea7bSBram Moolenaar 1610585fea7bSBram Moolenaar " also when the context is Vim9 script 1611585fea7bSBram Moolenaar let lines =<< trim END 1612585fea7bSBram Moolenaar vim9script 1613585fea7bSBram Moolenaar new 1614585fea7bSBram Moolenaar setline(1, 'something') 1615585fea7bSBram Moolenaar :substitute(some(other( 1616585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 1617585fea7bSBram Moolenaar bwipe! 1618585fea7bSBram Moolenaar END 1619585fea7bSBram Moolenaar writefile(lines, 'Xvim9lines') 1620585fea7bSBram Moolenaar source Xvim9lines 1621585fea7bSBram Moolenaar 1622585fea7bSBram Moolenaar delete('Xvim9lines') 1623585fea7bSBram Moolenaarenddef 1624585fea7bSBram Moolenaar 16258a7d6542SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker 1626