18a7d6542SBram Moolenaar" Test various aspects of the Vim9 script language. 28a7d6542SBram Moolenaar 3673660abSBram Moolenaarsource check.vim 4ad39c094SBram Moolenaarsource view_util.vim 5cfe435d7SBram Moolenaarsource vim9.vim 68a7d6542SBram Moolenaar 78a7d6542SBram Moolenaardef Test_syntax() 88a7d6542SBram Moolenaar let var = 234 98a7d6542SBram Moolenaar let other: list<string> = ['asdf'] 108a7d6542SBram Moolenaarenddef 118a7d6542SBram Moolenaar 126e587dcbSBram Moolenaarlet s:appendToMe = 'xxx' 136e587dcbSBram Moolenaarlet s:addToMe = 111 14401d9ffbSBram Moolenaarlet g:existing = 'yes' 15a8c17704SBram Moolenaarlet g:inc_counter = 1 16a8c17704SBram Moolenaarlet $SOME_ENV_VAR = 'some' 17a6e67e4fSBram Moolenaarlet g:alist = [7] 18a6e67e4fSBram Moolenaarlet g:astring = 'text' 196e587dcbSBram Moolenaar 208a7d6542SBram Moolenaardef Test_assignment() 218a7d6542SBram Moolenaar let bool1: bool = true 228a7d6542SBram Moolenaar assert_equal(v:true, bool1) 238a7d6542SBram Moolenaar let bool2: bool = false 248a7d6542SBram Moolenaar assert_equal(v:false, bool2) 258a7d6542SBram Moolenaar 26f93c7feaSBram Moolenaar call CheckDefFailure(['let x:string'], 'E1069:') 27f93c7feaSBram Moolenaar call CheckDefFailure(['let x:string = "x"'], 'E1069:') 281cc2a94fSBram Moolenaar call CheckDefFailure(['let a:string = "x"'], 'E1069:') 29f93c7feaSBram Moolenaar 309be61bbbSBram Moolenaar let a: number = 6 319be61bbbSBram Moolenaar assert_equal(6, a) 329be61bbbSBram Moolenaar 3342a480bfSBram Moolenaar if has('channel') 3442a480bfSBram Moolenaar let chan1: channel 35fbdd08edSBram Moolenaar let job1: job 36f51cb4e0SBram Moolenaar let job2: job = job_start('willfail') 3742a480bfSBram Moolenaar endif 38fbdd08edSBram Moolenaar if has('float') 39fbdd08edSBram Moolenaar let float1: float = 3.4 40fbdd08edSBram Moolenaar endif 415deeb3f1SBram Moolenaar let Funky1: func 425deeb3f1SBram Moolenaar let Funky2: func = function('len') 434c17ad94SBram Moolenaar let Party2: func = funcref('g:Test_syntax') 4442a480bfSBram Moolenaar 45401d9ffbSBram Moolenaar g:newvar = 'new' 46401d9ffbSBram Moolenaar assert_equal('new', g:newvar) 47401d9ffbSBram Moolenaar 48401d9ffbSBram Moolenaar assert_equal('yes', g:existing) 49401d9ffbSBram Moolenaar g:existing = 'no' 50401d9ffbSBram Moolenaar assert_equal('no', g:existing) 51401d9ffbSBram Moolenaar 52b283a8a6SBram Moolenaar v:char = 'abc' 536e587dcbSBram Moolenaar assert_equal('abc', v:char) 54b283a8a6SBram Moolenaar 55b283a8a6SBram Moolenaar $ENVVAR = 'foobar' 566e587dcbSBram Moolenaar assert_equal('foobar', $ENVVAR) 57b283a8a6SBram Moolenaar $ENVVAR = '' 586e587dcbSBram Moolenaar 59fd1823e0SBram Moolenaar s:appendToMe ..= 'yyy' 60fd1823e0SBram Moolenaar assert_equal('xxxyyy', s:appendToMe) 61fd1823e0SBram Moolenaar s:addToMe += 222 62fd1823e0SBram Moolenaar assert_equal(333, s:addToMe) 630bbf722aSBram Moolenaar s:newVar = 'new' 640bbf722aSBram Moolenaar assert_equal('new', s:newVar) 65a8c17704SBram Moolenaar 66a8c17704SBram Moolenaar set ts=7 67a8c17704SBram Moolenaar &ts += 1 68a8c17704SBram Moolenaar assert_equal(8, &ts) 6980c34ca3SBram Moolenaar &ts -= 3 7080c34ca3SBram Moolenaar assert_equal(5, &ts) 7180c34ca3SBram Moolenaar &ts *= 2 7280c34ca3SBram Moolenaar assert_equal(10, &ts) 7380c34ca3SBram Moolenaar &ts /= 3 7480c34ca3SBram Moolenaar assert_equal(3, &ts) 7580c34ca3SBram Moolenaar set ts=10 7680c34ca3SBram Moolenaar &ts %= 4 7780c34ca3SBram Moolenaar assert_equal(2, &ts) 78a8c17704SBram Moolenaar call CheckDefFailure(['¬ex += 3'], 'E113:') 79a8c17704SBram Moolenaar call CheckDefFailure(['&ts ..= "xxx"'], 'E1019:') 80a6e67e4fSBram Moolenaar call CheckDefFailure(['&ts = [7]'], 'E1013:') 81a6e67e4fSBram Moolenaar call CheckDefExecFailure(['&ts = g:alist'], 'E1029: Expected number but got list') 82a6e67e4fSBram Moolenaar call CheckDefFailure(['&ts = "xx"'], 'E1013:') 83a6e67e4fSBram Moolenaar call CheckDefExecFailure(['&ts = g:astring'], 'E1029: Expected number but got string') 84a8c17704SBram Moolenaar call CheckDefFailure(['&path += 3'], 'E1013:') 85a6e67e4fSBram Moolenaar call CheckDefExecFailure(['&bs = "asdf"'], 'E474:') 86cb711abfSBram Moolenaar # test freeing ISN_STOREOPT 87585fea7bSBram Moolenaar call CheckDefFailure(['&ts = 3', 'let asdf'], 'E1022:') 8880c34ca3SBram Moolenaar &ts = 8 89a8c17704SBram Moolenaar 90a8c17704SBram Moolenaar g:inc_counter += 1 91a8c17704SBram Moolenaar assert_equal(2, g:inc_counter) 92a8c17704SBram Moolenaar 93a8c17704SBram Moolenaar $SOME_ENV_VAR ..= 'more' 94a8c17704SBram Moolenaar assert_equal('somemore', $SOME_ENV_VAR) 95a8c17704SBram Moolenaar call CheckDefFailure(['$SOME_ENV_VAR += "more"'], 'E1013:') 96a8c17704SBram Moolenaar call CheckDefFailure(['$SOME_ENV_VAR += 123'], 'E1013:') 97a8c17704SBram Moolenaar 98a8c17704SBram Moolenaar @a = 'areg' 99a8c17704SBram Moolenaar @a ..= 'add' 100a8c17704SBram Moolenaar assert_equal('aregadd', @a) 101a8c17704SBram Moolenaar call CheckDefFailure(['@a += "more"'], 'E1013:') 102a8c17704SBram Moolenaar call CheckDefFailure(['@a += 123'], 'E1013:') 103e69f6d04SBram Moolenaar 104e69f6d04SBram Moolenaar v:errmsg = 'none' 105e69f6d04SBram Moolenaar v:errmsg ..= 'again' 106e69f6d04SBram Moolenaar assert_equal('noneagain', v:errmsg) 107e69f6d04SBram Moolenaar call CheckDefFailure(['v:errmsg += "more"'], 'E1013:') 108e69f6d04SBram Moolenaar call CheckDefFailure(['v:errmsg += 123'], 'E1013:') 1095deeb3f1SBram Moolenaarenddef 1105deeb3f1SBram Moolenaar 11184370087SBram Moolenaardef Test_assignment_list() 11284370087SBram Moolenaar let list1: list<bool> = [false, true, false] 11384370087SBram Moolenaar let list2: list<number> = [1, 2, 3] 11484370087SBram Moolenaar let list3: list<string> = ['sdf', 'asdf'] 11584370087SBram Moolenaar let list4: list<any> = ['yes', true, 1234] 11684370087SBram Moolenaar let list5: list<blob> = [0z01, 0z02] 11784370087SBram Moolenaar 11884370087SBram Moolenaar let listS: list<string> = [] 11984370087SBram Moolenaar let listN: list<number> = [] 12084370087SBram Moolenaar 12184370087SBram Moolenaar assert_equal([1, 2, 3], list2) 12284370087SBram Moolenaar list2[-1] = 99 12384370087SBram Moolenaar assert_equal([1, 2, 99], list2) 12484370087SBram Moolenaar list2[-2] = 88 12584370087SBram Moolenaar assert_equal([1, 88, 99], list2) 12684370087SBram Moolenaar list2[-3] = 77 12784370087SBram Moolenaar assert_equal([77, 88, 99], list2) 12884370087SBram Moolenaar call CheckDefExecFailure(['let ll = [1, 2, 3]', 'll[-4] = 6'], 'E684:') 12984370087SBram Moolenaar 13084370087SBram Moolenaar # type becomes list<any> 13184370087SBram Moolenaar let somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c'] 13284370087SBram Moolenaarenddef 13384370087SBram Moolenaar 13484370087SBram Moolenaardef Test_assignment_dict() 13584370087SBram Moolenaar let dict1: dict<bool> = #{one: false, two: true} 13684370087SBram Moolenaar let dict2: dict<number> = #{one: 1, two: 2} 13784370087SBram Moolenaar let dict3: dict<string> = #{key: 'value'} 13884370087SBram Moolenaar let dict4: dict<any> = #{one: 1, two: '2'} 13974fae513SBram Moolenaar let dict5: dict<blob> = #{one: 0z01, two: 0z02} 14084370087SBram Moolenaar 14184370087SBram Moolenaar call CheckDefExecFailure(['let dd = {}', 'dd[""] = 6'], 'E713:') 14284370087SBram Moolenaar 14384370087SBram Moolenaar # type becomes dict<any> 14484370087SBram Moolenaar let somedict = rand() > 0 ? #{a: 1, b: 2} : #{a: 'a', b: 'b'} 14584370087SBram Moolenaarenddef 14684370087SBram Moolenaar 147d3aac291SBram Moolenaardef Test_assignment_local() 148d3aac291SBram Moolenaar " Test in a separated file in order not to the current buffer/window/tab is 149d3aac291SBram Moolenaar " changed. 150d3aac291SBram Moolenaar let script_lines: list<string> =<< trim END 151d3aac291SBram Moolenaar let b:existing = 'yes' 152d3aac291SBram Moolenaar let w:existing = 'yes' 153d3aac291SBram Moolenaar let t:existing = 'yes' 154d3aac291SBram Moolenaar 155d3aac291SBram Moolenaar def Test_assignment_local_internal() 156d3aac291SBram Moolenaar b:newvar = 'new' 157d3aac291SBram Moolenaar assert_equal('new', b:newvar) 158d3aac291SBram Moolenaar assert_equal('yes', b:existing) 159d3aac291SBram Moolenaar b:existing = 'no' 160d3aac291SBram Moolenaar assert_equal('no', b:existing) 161396f3138SBram Moolenaar b:existing ..= 'NO' 162396f3138SBram Moolenaar assert_equal('noNO', b:existing) 163d3aac291SBram Moolenaar 164d3aac291SBram Moolenaar w:newvar = 'new' 165d3aac291SBram Moolenaar assert_equal('new', w:newvar) 166d3aac291SBram Moolenaar assert_equal('yes', w:existing) 167d3aac291SBram Moolenaar w:existing = 'no' 168d3aac291SBram Moolenaar assert_equal('no', w:existing) 169396f3138SBram Moolenaar w:existing ..= 'NO' 170396f3138SBram Moolenaar assert_equal('noNO', w:existing) 171d3aac291SBram Moolenaar 172d3aac291SBram Moolenaar t:newvar = 'new' 173d3aac291SBram Moolenaar assert_equal('new', t:newvar) 174d3aac291SBram Moolenaar assert_equal('yes', t:existing) 175d3aac291SBram Moolenaar t:existing = 'no' 176d3aac291SBram Moolenaar assert_equal('no', t:existing) 177396f3138SBram Moolenaar t:existing ..= 'NO' 178396f3138SBram Moolenaar assert_equal('noNO', t:existing) 179d3aac291SBram Moolenaar enddef 180d3aac291SBram Moolenaar call Test_assignment_local_internal() 181d3aac291SBram Moolenaar END 182d3aac291SBram Moolenaar call CheckScriptSuccess(script_lines) 183d3aac291SBram Moolenaarenddef 184d3aac291SBram Moolenaar 1855deeb3f1SBram Moolenaardef Test_assignment_default() 186e69f6d04SBram Moolenaar 187cb711abfSBram Moolenaar # Test default values. 188e69f6d04SBram Moolenaar let thebool: bool 189e69f6d04SBram Moolenaar assert_equal(v:false, thebool) 190e69f6d04SBram Moolenaar 191e69f6d04SBram Moolenaar let thenumber: number 192e69f6d04SBram Moolenaar assert_equal(0, thenumber) 193e69f6d04SBram Moolenaar 194e69f6d04SBram Moolenaar if has('float') 195e69f6d04SBram Moolenaar let thefloat: float 196e69f6d04SBram Moolenaar assert_equal(0.0, thefloat) 197e69f6d04SBram Moolenaar endif 198e69f6d04SBram Moolenaar 199e69f6d04SBram Moolenaar let thestring: string 200e69f6d04SBram Moolenaar assert_equal('', thestring) 201e69f6d04SBram Moolenaar 202e69f6d04SBram Moolenaar let theblob: blob 203e69f6d04SBram Moolenaar assert_equal(0z, theblob) 204e69f6d04SBram Moolenaar 2055deeb3f1SBram Moolenaar let Thefunc: func 2065deeb3f1SBram Moolenaar assert_equal(test_null_function(), Thefunc) 207e69f6d04SBram Moolenaar 208e69f6d04SBram Moolenaar let thelist: list<any> 209e69f6d04SBram Moolenaar assert_equal([], thelist) 210e69f6d04SBram Moolenaar 211e69f6d04SBram Moolenaar let thedict: dict<any> 212e69f6d04SBram Moolenaar assert_equal({}, thedict) 213e69f6d04SBram Moolenaar 2142c869deeSBram Moolenaar if has('channel') 215e69f6d04SBram Moolenaar let thejob: job 216e69f6d04SBram Moolenaar assert_equal(test_null_job(), thejob) 217e69f6d04SBram Moolenaar 218e69f6d04SBram Moolenaar let thechannel: channel 219e69f6d04SBram Moolenaar assert_equal(test_null_channel(), thechannel) 2202c869deeSBram Moolenaar endif 221585fea7bSBram Moolenaar 222585fea7bSBram Moolenaar let nr = 1234 | nr = 5678 223585fea7bSBram Moolenaar assert_equal(5678, nr) 2248a7d6542SBram Moolenaarenddef 2258a7d6542SBram Moolenaar 22647a519a9SBram Moolenaardef Test_assignment_var_list() 22747a519a9SBram Moolenaar let v1: string 22847a519a9SBram Moolenaar let v2: string 229*9af78769SBram Moolenaar let vrem: list<string> 230*9af78769SBram Moolenaar [v1] = ['aaa'] 231*9af78769SBram Moolenaar assert_equal('aaa', v1) 232*9af78769SBram Moolenaar 23347a519a9SBram Moolenaar [v1, v2] = ['one', 'two'] 23447a519a9SBram Moolenaar assert_equal('one', v1) 23547a519a9SBram Moolenaar assert_equal('two', v2) 236*9af78769SBram Moolenaar 237*9af78769SBram Moolenaar [v1, v2; vrem] = ['one', 'two'] 238*9af78769SBram Moolenaar assert_equal('one', v1) 239*9af78769SBram Moolenaar assert_equal('two', v2) 240*9af78769SBram Moolenaar assert_equal([], vrem) 241*9af78769SBram Moolenaar 242*9af78769SBram Moolenaar [v1, v2; vrem] = ['one', 'two', 'three'] 243*9af78769SBram Moolenaar assert_equal('one', v1) 244*9af78769SBram Moolenaar assert_equal('two', v2) 245*9af78769SBram Moolenaar assert_equal(['three'], vrem) 24647a519a9SBram Moolenaarenddef 24747a519a9SBram Moolenaar 248cab27678SBram Moolenaardef Mess(): string 249cab27678SBram Moolenaar v:foldstart = 123 250cab27678SBram Moolenaar return 'xxx' 251cab27678SBram Moolenaarenddef 252cab27678SBram Moolenaar 253d72c1bf0SBram Moolenaardef Test_assignment_failure() 2548a7d6542SBram Moolenaar call CheckDefFailure(['let var=234'], 'E1004:') 2558a7d6542SBram Moolenaar call CheckDefFailure(['let var =234'], 'E1004:') 2568a7d6542SBram Moolenaar call CheckDefFailure(['let var= 234'], 'E1004:') 2578a7d6542SBram Moolenaar 2588a7d6542SBram Moolenaar call CheckDefFailure(['let true = 1'], 'E1034:') 2598a7d6542SBram Moolenaar call CheckDefFailure(['let false = 1'], 'E1034:') 2608a7d6542SBram Moolenaar 261*9af78769SBram Moolenaar call CheckDefFailure(['[a; b; c] = g:list'], 'E452:') 262*9af78769SBram Moolenaar call CheckDefExecFailure(['let a: number', 263*9af78769SBram Moolenaar '[a] = test_null_list()'], 'E1093:') 264*9af78769SBram Moolenaar call CheckDefExecFailure(['let a: number', 265*9af78769SBram Moolenaar '[a] = []'], 'E1093:') 266*9af78769SBram Moolenaar call CheckDefExecFailure(['let x: number', 267*9af78769SBram Moolenaar 'let y: number', 268*9af78769SBram Moolenaar '[x, y] = [1]'], 'E1093:') 269*9af78769SBram Moolenaar call CheckDefExecFailure(['let x: number', 270*9af78769SBram Moolenaar 'let y: number', 271*9af78769SBram Moolenaar 'let z: list<number>', 272*9af78769SBram Moolenaar '[x, y; z] = [1]'], 'E1093:') 2739be61bbbSBram Moolenaar 274e69f6d04SBram Moolenaar call CheckDefFailure(['let somevar'], "E1022:") 2759be61bbbSBram Moolenaar call CheckDefFailure(['let &option'], 'E1052:') 2769be61bbbSBram Moolenaar call CheckDefFailure(['&g:option = 5'], 'E113:') 2779be61bbbSBram Moolenaar 2789be61bbbSBram Moolenaar call CheckDefFailure(['let $VAR = 5'], 'E1065:') 2799be61bbbSBram Moolenaar 2809be61bbbSBram Moolenaar call CheckDefFailure(['let @~ = 5'], 'E354:') 2819be61bbbSBram Moolenaar call CheckDefFailure(['let @a = 5'], 'E1066:') 2829be61bbbSBram Moolenaar 2839be61bbbSBram Moolenaar call CheckDefFailure(['let g:var = 5'], 'E1016:') 284d3aac291SBram Moolenaar call CheckDefFailure(['let w:var = 5'], 'E1079:') 285d3aac291SBram Moolenaar call CheckDefFailure(['let b:var = 5'], 'E1078:') 286d3aac291SBram Moolenaar call CheckDefFailure(['let t:var = 5'], 'E1080:') 2879be61bbbSBram Moolenaar 2889be61bbbSBram Moolenaar call CheckDefFailure(['let anr = 4', 'anr ..= "text"'], 'E1019:') 2899be61bbbSBram Moolenaar call CheckDefFailure(['let xnr += 4'], 'E1020:') 2909be61bbbSBram Moolenaar 291822ba247SBram Moolenaar call CheckScriptFailure(['vim9script', 'def Func()', 'let dummy = s:notfound', 'enddef', 'defcompile'], 'E1050:') 29233fa29cfSBram Moolenaar 2938a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<string> = [123]'], 'expected list<string> but got list<number>') 2948a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<number> = ["xx"]'], 'expected list<number> but got list<string>') 2958a7d6542SBram Moolenaar 2968a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<string> = #{key: 123}'], 'expected dict<string> but got dict<number>') 2978a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<number> = #{key: "xx"}'], 'expected dict<number> but got dict<string>') 2988a7d6542SBram Moolenaar 2998a7d6542SBram Moolenaar call CheckDefFailure(['let var = feedkeys("0")'], 'E1031:') 3008a7d6542SBram Moolenaar call CheckDefFailure(['let var: number = feedkeys("0")'], 'expected number but got void') 30142a480bfSBram Moolenaar 302d77a8525SBram Moolenaar call CheckDefFailure(['let var: dict <number>'], 'E1068:') 30342a480bfSBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 304cab27678SBram Moolenaar 305cab27678SBram Moolenaar call assert_fails('s/^/\=Mess()/n', 'E794:') 306cab27678SBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 307d72c1bf0SBram Moolenaarenddef 308d72c1bf0SBram Moolenaar 309d72c1bf0SBram Moolenaardef Test_unlet() 310d72c1bf0SBram Moolenaar g:somevar = 'yes' 311d72c1bf0SBram Moolenaar assert_true(exists('g:somevar')) 312d72c1bf0SBram Moolenaar unlet g:somevar 313d72c1bf0SBram Moolenaar assert_false(exists('g:somevar')) 314d72c1bf0SBram Moolenaar unlet! g:somevar 315d72c1bf0SBram Moolenaar 316d72c1bf0SBram Moolenaar call CheckScriptFailure([ 317d72c1bf0SBram Moolenaar 'vim9script', 318d72c1bf0SBram Moolenaar 'let svar = 123', 319d72c1bf0SBram Moolenaar 'unlet svar', 320d72c1bf0SBram Moolenaar ], 'E1081:') 321d72c1bf0SBram Moolenaar call CheckScriptFailure([ 322d72c1bf0SBram Moolenaar 'vim9script', 323d72c1bf0SBram Moolenaar 'let svar = 123', 324d72c1bf0SBram Moolenaar 'unlet s:svar', 325d72c1bf0SBram Moolenaar ], 'E1081:') 326d72c1bf0SBram Moolenaar call CheckScriptFailure([ 327d72c1bf0SBram Moolenaar 'vim9script', 328d72c1bf0SBram Moolenaar 'let svar = 123', 329d72c1bf0SBram Moolenaar 'def Func()', 330d72c1bf0SBram Moolenaar ' unlet svar', 331d72c1bf0SBram Moolenaar 'enddef', 332822ba247SBram Moolenaar 'defcompile', 333d72c1bf0SBram Moolenaar ], 'E1081:') 334d72c1bf0SBram Moolenaar call CheckScriptFailure([ 335d72c1bf0SBram Moolenaar 'vim9script', 336d72c1bf0SBram Moolenaar 'let svar = 123', 337d72c1bf0SBram Moolenaar 'def Func()', 338d72c1bf0SBram Moolenaar ' unlet s:svar', 339d72c1bf0SBram Moolenaar 'enddef', 340822ba247SBram Moolenaar 'defcompile', 341d72c1bf0SBram Moolenaar ], 'E1081:') 3427bdaea6eSBram Moolenaar 3437bdaea6eSBram Moolenaar $ENVVAR = 'foobar' 3447bdaea6eSBram Moolenaar assert_equal('foobar', $ENVVAR) 3457bdaea6eSBram Moolenaar unlet $ENVVAR 3467bdaea6eSBram Moolenaar assert_equal('', $ENVVAR) 347d72c1bf0SBram Moolenaarenddef 348599c89c8SBram Moolenaar 3494c17ad94SBram Moolenaardef Test_delfunction() 3504c17ad94SBram Moolenaar " Check function is defined in script namespace 3514c17ad94SBram Moolenaar CheckScriptSuccess([ 3524c17ad94SBram Moolenaar 'vim9script', 3534c17ad94SBram Moolenaar 'func CheckMe()', 3544c17ad94SBram Moolenaar ' return 123', 3554c17ad94SBram Moolenaar 'endfunc', 3564c17ad94SBram Moolenaar 'assert_equal(123, s:CheckMe())', 3574c17ad94SBram Moolenaar ]) 3584c17ad94SBram Moolenaar 3594c17ad94SBram Moolenaar " Check function in script namespace cannot be deleted 3604c17ad94SBram Moolenaar CheckScriptFailure([ 3614c17ad94SBram Moolenaar 'vim9script', 3624c17ad94SBram Moolenaar 'func DeleteMe1()', 3634c17ad94SBram Moolenaar 'endfunc', 3644c17ad94SBram Moolenaar 'delfunction DeleteMe1', 3654c17ad94SBram Moolenaar ], 'E1084:') 3664c17ad94SBram Moolenaar CheckScriptFailure([ 3674c17ad94SBram Moolenaar 'vim9script', 3684c17ad94SBram Moolenaar 'func DeleteMe2()', 3694c17ad94SBram Moolenaar 'endfunc', 3704c17ad94SBram Moolenaar 'def DoThat()', 3714c17ad94SBram Moolenaar ' delfunction DeleteMe2', 3724c17ad94SBram Moolenaar 'enddef', 3734c17ad94SBram Moolenaar 'DoThat()', 3744c17ad94SBram Moolenaar ], 'E1084:') 3754c17ad94SBram Moolenaar CheckScriptFailure([ 3764c17ad94SBram Moolenaar 'vim9script', 3774c17ad94SBram Moolenaar 'def DeleteMe3()', 3784c17ad94SBram Moolenaar 'enddef', 3794c17ad94SBram Moolenaar 'delfunction DeleteMe3', 3804c17ad94SBram Moolenaar ], 'E1084:') 3814c17ad94SBram Moolenaar CheckScriptFailure([ 3824c17ad94SBram Moolenaar 'vim9script', 3834c17ad94SBram Moolenaar 'def DeleteMe4()', 3844c17ad94SBram Moolenaar 'enddef', 3854c17ad94SBram Moolenaar 'def DoThat()', 3864c17ad94SBram Moolenaar ' delfunction DeleteMe4', 3874c17ad94SBram Moolenaar 'enddef', 3884c17ad94SBram Moolenaar 'DoThat()', 3894c17ad94SBram Moolenaar ], 'E1084:') 3904c17ad94SBram Moolenaarenddef 3914c17ad94SBram Moolenaar 392599c89c8SBram Moolenaarfunc Test_wrong_type() 393599c89c8SBram Moolenaar call CheckDefFailure(['let var: list<nothing>'], 'E1010:') 394599c89c8SBram Moolenaar call CheckDefFailure(['let var: list<list<nothing>>'], 'E1010:') 395599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<nothing>'], 'E1010:') 396599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<dict<nothing>>'], 'E1010:') 397599c89c8SBram Moolenaar 398599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 399599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<list<number>'], 'E1009:') 40042a480bfSBram Moolenaar 40142a480bfSBram Moolenaar call CheckDefFailure(['let var: ally'], 'E1010:') 40242a480bfSBram Moolenaar call CheckDefFailure(['let var: bram'], 'E1010:') 40342a480bfSBram Moolenaar call CheckDefFailure(['let var: cathy'], 'E1010:') 40442a480bfSBram Moolenaar call CheckDefFailure(['let var: dom'], 'E1010:') 40542a480bfSBram Moolenaar call CheckDefFailure(['let var: freddy'], 'E1010:') 40642a480bfSBram Moolenaar call CheckDefFailure(['let var: john'], 'E1010:') 40742a480bfSBram Moolenaar call CheckDefFailure(['let var: larry'], 'E1010:') 40842a480bfSBram Moolenaar call CheckDefFailure(['let var: ned'], 'E1010:') 40942a480bfSBram Moolenaar call CheckDefFailure(['let var: pam'], 'E1010:') 41042a480bfSBram Moolenaar call CheckDefFailure(['let var: sam'], 'E1010:') 41142a480bfSBram Moolenaar call CheckDefFailure(['let var: vim'], 'E1010:') 412a0a9f43aSBram Moolenaar 413a0a9f43aSBram Moolenaar call CheckDefFailure(['let Ref: number', 'Ref()'], 'E1085:') 414a0a9f43aSBram Moolenaar call CheckDefFailure(['let Ref: string', 'let res = Ref()'], 'E1085:') 4158a7d6542SBram Moolenaarendfunc 4168a7d6542SBram Moolenaar 4178a7d6542SBram Moolenaarfunc Test_const() 4188a7d6542SBram Moolenaar call CheckDefFailure(['const var = 234', 'var = 99'], 'E1018:') 4198a7d6542SBram Moolenaar call CheckDefFailure(['const one = 234', 'let one = 99'], 'E1017:') 4208a7d6542SBram Moolenaar call CheckDefFailure(['const two'], 'E1021:') 4219be61bbbSBram Moolenaar call CheckDefFailure(['const &option'], 'E996:') 4228a7d6542SBram Moolenaarendfunc 4238a7d6542SBram Moolenaar 4248a7d6542SBram Moolenaardef Test_block() 4258a7d6542SBram Moolenaar let outer = 1 4268a7d6542SBram Moolenaar { 4278a7d6542SBram Moolenaar let inner = 2 4288a7d6542SBram Moolenaar assert_equal(1, outer) 4298a7d6542SBram Moolenaar assert_equal(2, inner) 4308a7d6542SBram Moolenaar } 4318a7d6542SBram Moolenaar assert_equal(1, outer) 4328a7d6542SBram Moolenaarenddef 4338a7d6542SBram Moolenaar 4348a7d6542SBram Moolenaarfunc Test_block_failure() 4358a7d6542SBram Moolenaar call CheckDefFailure(['{', 'let inner = 1', '}', 'echo inner'], 'E1001:') 436585fea7bSBram Moolenaar call CheckDefFailure(['}'], 'E1025:') 437585fea7bSBram Moolenaar call CheckDefFailure(['{', 'echo 1'], 'E1026:') 4388a7d6542SBram Moolenaarendfunc 4398a7d6542SBram Moolenaar 440585fea7bSBram Moolenaardef Test_cmd_modifier() 441585fea7bSBram Moolenaar tab echo '0' 442585fea7bSBram Moolenaar call CheckDefFailure(['5tab echo 3'], 'E16:') 443585fea7bSBram Moolenaarenddef 444585fea7bSBram Moolenaar 4458a7d6542SBram Moolenaardef Test_try_catch() 4468a7d6542SBram Moolenaar let l = [] 4477a092245SBram Moolenaar try # comment 4488a7d6542SBram Moolenaar add(l, '1') 4498a7d6542SBram Moolenaar throw 'wrong' 4508a7d6542SBram Moolenaar add(l, '2') 4517a092245SBram Moolenaar catch # comment 4528a7d6542SBram Moolenaar add(l, v:exception) 4537a092245SBram Moolenaar finally # comment 4548a7d6542SBram Moolenaar add(l, '3') 4557a092245SBram Moolenaar endtry # comment 4568a7d6542SBram Moolenaar assert_equal(['1', 'wrong', '3'], l) 4578a7d6542SBram Moolenaarenddef 4588a7d6542SBram Moolenaar 459257cc5eeSBram Moolenaardef ThrowFromDef() 460a72cfb80SBram Moolenaar throw "getout" # comment 461257cc5eeSBram Moolenaarenddef 462257cc5eeSBram Moolenaar 463257cc5eeSBram Moolenaarfunc CatchInFunc() 464257cc5eeSBram Moolenaar try 465257cc5eeSBram Moolenaar call ThrowFromDef() 466257cc5eeSBram Moolenaar catch 467257cc5eeSBram Moolenaar let g:thrown_func = v:exception 468257cc5eeSBram Moolenaar endtry 469257cc5eeSBram Moolenaarendfunc 470257cc5eeSBram Moolenaar 471257cc5eeSBram Moolenaardef CatchInDef() 472257cc5eeSBram Moolenaar try 473257cc5eeSBram Moolenaar ThrowFromDef() 474257cc5eeSBram Moolenaar catch 475257cc5eeSBram Moolenaar g:thrown_def = v:exception 476257cc5eeSBram Moolenaar endtry 477257cc5eeSBram Moolenaarenddef 478257cc5eeSBram Moolenaar 479f575adffSBram Moolenaardef ReturnFinally(): string 480f575adffSBram Moolenaar try 481f575adffSBram Moolenaar return 'intry' 482f575adffSBram Moolenaar finally 483f575adffSBram Moolenaar g:in_finally = 'finally' 484f575adffSBram Moolenaar endtry 485f575adffSBram Moolenaar return 'end' 486f575adffSBram Moolenaarenddef 487f575adffSBram Moolenaar 488257cc5eeSBram Moolenaardef Test_try_catch_nested() 489257cc5eeSBram Moolenaar CatchInFunc() 490257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_func) 491257cc5eeSBram Moolenaar 492257cc5eeSBram Moolenaar CatchInDef() 493257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_def) 494f575adffSBram Moolenaar 495f575adffSBram Moolenaar assert_equal('intry', ReturnFinally()) 496f575adffSBram Moolenaar assert_equal('finally', g:in_finally) 497f575adffSBram Moolenaarenddef 498f575adffSBram Moolenaar 499f575adffSBram Moolenaardef Test_try_catch_match() 500f575adffSBram Moolenaar let seq = 'a' 501f575adffSBram Moolenaar try 502f575adffSBram Moolenaar throw 'something' 503f575adffSBram Moolenaar catch /nothing/ 504f575adffSBram Moolenaar seq ..= 'x' 505f575adffSBram Moolenaar catch /some/ 506f575adffSBram Moolenaar seq ..= 'b' 507f575adffSBram Moolenaar catch /asdf/ 508f575adffSBram Moolenaar seq ..= 'x' 509e8c4abbbSBram Moolenaar catch ?a\?sdf? 510e8c4abbbSBram Moolenaar seq ..= 'y' 511f575adffSBram Moolenaar finally 512f575adffSBram Moolenaar seq ..= 'c' 513f575adffSBram Moolenaar endtry 514f575adffSBram Moolenaar assert_equal('abc', seq) 515257cc5eeSBram Moolenaarenddef 516257cc5eeSBram Moolenaar 517e8c4abbbSBram Moolenaardef Test_try_catch_fails() 518e8c4abbbSBram Moolenaar call CheckDefFailure(['catch'], 'E603:') 519e8c4abbbSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'catch','catch'], 'E1033:') 520e8c4abbbSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'catch /pat'], 'E1067:') 521585fea7bSBram Moolenaar call CheckDefFailure(['finally'], 'E606:') 522585fea7bSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'finally', 'echo 1', 'finally'], 'E607:') 523585fea7bSBram Moolenaar call CheckDefFailure(['endtry'], 'E602:') 524585fea7bSBram Moolenaar call CheckDefFailure(['while 1', 'endtry'], 'E170:') 525585fea7bSBram Moolenaar call CheckDefFailure(['for i in range(5)', 'endtry'], 'E170:') 526585fea7bSBram Moolenaar call CheckDefFailure(['if 2', 'endtry'], 'E171:') 527585fea7bSBram Moolenaar call CheckDefFailure(['try', 'echo 1', 'endtry'], 'E1032:') 528585fea7bSBram Moolenaar 529a72cfb80SBram Moolenaar call CheckDefFailure(['throw'], 'E1015:') 530585fea7bSBram Moolenaar call CheckDefFailure(['throw xxx'], 'E1001:') 531e8c4abbbSBram Moolenaarenddef 532e8c4abbbSBram Moolenaar 5332a1381c3SBram Moolenaarif has('channel') 53440ee466cSBram Moolenaar let someJob = test_null_job() 53540ee466cSBram Moolenaar 53640ee466cSBram Moolenaar def FuncWithError() 53740ee466cSBram Moolenaar echomsg g:someJob 53840ee466cSBram Moolenaar enddef 53940ee466cSBram Moolenaar 54040ee466cSBram Moolenaar func Test_convert_emsg_to_exception() 54140ee466cSBram Moolenaar try 54240ee466cSBram Moolenaar call FuncWithError() 54340ee466cSBram Moolenaar catch 54440ee466cSBram Moolenaar call assert_match('Vim:E908:', v:exception) 54540ee466cSBram Moolenaar endtry 54640ee466cSBram Moolenaar endfunc 5472a1381c3SBram Moolenaarendif 54840ee466cSBram Moolenaar 5498a7d6542SBram Moolenaarlet s:export_script_lines =<< trim END 5508a7d6542SBram Moolenaar vim9script 5518a7d6542SBram Moolenaar let name: string = 'bob' 5528a7d6542SBram Moolenaar def Concat(arg: string): string 5538a7d6542SBram Moolenaar return name .. arg 5548a7d6542SBram Moolenaar enddef 555227a69deSBram Moolenaar g:result = Concat('bie') 556227a69deSBram Moolenaar g:localname = name 5578a7d6542SBram Moolenaar 5588a7d6542SBram Moolenaar export const CONST = 1234 5598a7d6542SBram Moolenaar export let exported = 9876 5606e587dcbSBram Moolenaar export let exp_name = 'John' 5618a7d6542SBram Moolenaar export def Exported(): string 5628a7d6542SBram Moolenaar return 'Exported' 5638a7d6542SBram Moolenaar enddef 5648a7d6542SBram MoolenaarEND 5658a7d6542SBram Moolenaar 5665269bd2aSBram Moolenaardef Test_vim9_import_export() 5678a7d6542SBram Moolenaar let import_script_lines =<< trim END 5688a7d6542SBram Moolenaar vim9script 5698a7d6542SBram Moolenaar import {exported, Exported} from './Xexport.vim' 5708a7d6542SBram Moolenaar g:imported = exported 5716e587dcbSBram Moolenaar exported += 3 5726e587dcbSBram Moolenaar g:imported_added = exported 5738a7d6542SBram Moolenaar g:imported_func = Exported() 5746e587dcbSBram Moolenaar 5756e587dcbSBram Moolenaar import {exp_name} from './Xexport.vim' 5766e587dcbSBram Moolenaar g:imported_name = exp_name 5776e587dcbSBram Moolenaar exp_name ..= ' Doe' 5786e587dcbSBram Moolenaar g:imported_name_appended = exp_name 5795381c7a1SBram Moolenaar g:imported_later = exported 5808a7d6542SBram Moolenaar END 5818a7d6542SBram Moolenaar 5828a7d6542SBram Moolenaar writefile(import_script_lines, 'Ximport.vim') 5838a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport.vim') 5848a7d6542SBram Moolenaar 5858a7d6542SBram Moolenaar source Ximport.vim 5868a7d6542SBram Moolenaar 5878a7d6542SBram Moolenaar assert_equal('bobbie', g:result) 5888a7d6542SBram Moolenaar assert_equal('bob', g:localname) 5898a7d6542SBram Moolenaar assert_equal(9876, g:imported) 5906e587dcbSBram Moolenaar assert_equal(9879, g:imported_added) 5915381c7a1SBram Moolenaar assert_equal(9879, g:imported_later) 5928a7d6542SBram Moolenaar assert_equal('Exported', g:imported_func) 5936e587dcbSBram Moolenaar assert_equal('John', g:imported_name) 5946e587dcbSBram Moolenaar assert_equal('John Doe', g:imported_name_appended) 5958a7d6542SBram Moolenaar assert_false(exists('g:name')) 5968a7d6542SBram Moolenaar 5978a7d6542SBram Moolenaar unlet g:result 5988a7d6542SBram Moolenaar unlet g:localname 5998a7d6542SBram Moolenaar unlet g:imported 6006e587dcbSBram Moolenaar unlet g:imported_added 6015381c7a1SBram Moolenaar unlet g:imported_later 6028a7d6542SBram Moolenaar unlet g:imported_func 6036e587dcbSBram Moolenaar unlet g:imported_name g:imported_name_appended 6048a7d6542SBram Moolenaar delete('Ximport.vim') 605f2d5c240SBram Moolenaar 6065381c7a1SBram Moolenaar let import_in_def_lines =<< trim END 6075381c7a1SBram Moolenaar vim9script 6085381c7a1SBram Moolenaar def ImportInDef() 6095381c7a1SBram Moolenaar import exported from './Xexport.vim' 6105381c7a1SBram Moolenaar g:imported = exported 6115381c7a1SBram Moolenaar exported += 7 6125381c7a1SBram Moolenaar g:imported_added = exported 6135381c7a1SBram Moolenaar enddef 6145381c7a1SBram Moolenaar ImportInDef() 6155381c7a1SBram Moolenaar END 6165381c7a1SBram Moolenaar writefile(import_in_def_lines, 'Ximport2.vim') 6175381c7a1SBram Moolenaar source Ximport2.vim 6185381c7a1SBram Moolenaar " TODO: this should be 9879 6195381c7a1SBram Moolenaar assert_equal(9876, g:imported) 6205381c7a1SBram Moolenaar assert_equal(9883, g:imported_added) 6215381c7a1SBram Moolenaar unlet g:imported 6225381c7a1SBram Moolenaar unlet g:imported_added 6235381c7a1SBram Moolenaar delete('Ximport2.vim') 6245381c7a1SBram Moolenaar 625f2d5c240SBram Moolenaar let import_star_as_lines =<< trim END 626f2d5c240SBram Moolenaar vim9script 627f2d5c240SBram Moolenaar import * as Export from './Xexport.vim' 628f2d5c240SBram Moolenaar def UseExport() 629f2d5c240SBram Moolenaar g:imported = Export.exported 630f2d5c240SBram Moolenaar enddef 631f2d5c240SBram Moolenaar UseExport() 632f2d5c240SBram Moolenaar END 633f2d5c240SBram Moolenaar writefile(import_star_as_lines, 'Ximport.vim') 634f2d5c240SBram Moolenaar source Ximport.vim 6355381c7a1SBram Moolenaar assert_equal(9883, g:imported) 636f2d5c240SBram Moolenaar 637599c89c8SBram Moolenaar let import_star_as_lines_no_dot =<< trim END 638599c89c8SBram Moolenaar vim9script 639599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 640599c89c8SBram Moolenaar def Func() 641599c89c8SBram Moolenaar let dummy = 1 642599c89c8SBram Moolenaar let imported = Export + dummy 643599c89c8SBram Moolenaar enddef 644822ba247SBram Moolenaar defcompile 645599c89c8SBram Moolenaar END 646599c89c8SBram Moolenaar writefile(import_star_as_lines_no_dot, 'Ximport.vim') 647599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1060:') 648599c89c8SBram Moolenaar 649599c89c8SBram Moolenaar let import_star_as_lines_dot_space =<< trim END 650599c89c8SBram Moolenaar vim9script 651599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 652599c89c8SBram Moolenaar def Func() 653599c89c8SBram Moolenaar let imported = Export . exported 654599c89c8SBram Moolenaar enddef 655822ba247SBram Moolenaar defcompile 656599c89c8SBram Moolenaar END 657599c89c8SBram Moolenaar writefile(import_star_as_lines_dot_space, 'Ximport.vim') 658599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1074:') 659599c89c8SBram Moolenaar 660599c89c8SBram Moolenaar let import_star_as_lines_missing_name =<< trim END 661599c89c8SBram Moolenaar vim9script 662599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 663599c89c8SBram Moolenaar def Func() 664599c89c8SBram Moolenaar let imported = Export. 665599c89c8SBram Moolenaar enddef 666822ba247SBram Moolenaar defcompile 667599c89c8SBram Moolenaar END 668599c89c8SBram Moolenaar writefile(import_star_as_lines_missing_name, 'Ximport.vim') 669599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 670599c89c8SBram Moolenaar 671f2d5c240SBram Moolenaar let import_star_lines =<< trim END 672f2d5c240SBram Moolenaar vim9script 673f2d5c240SBram Moolenaar import * from './Xexport.vim' 674f2d5c240SBram Moolenaar END 675f2d5c240SBram Moolenaar writefile(import_star_lines, 'Ximport.vim') 676f2d5c240SBram Moolenaar assert_fails('source Ximport.vim', 'E1045:') 677f2d5c240SBram Moolenaar 678fa29c8abSBram Moolenaar " try to import something that exists but is not exported 679fa29c8abSBram Moolenaar let import_not_exported_lines =<< trim END 680fa29c8abSBram Moolenaar vim9script 681fa29c8abSBram Moolenaar import name from './Xexport.vim' 682fa29c8abSBram Moolenaar END 683fa29c8abSBram Moolenaar writefile(import_not_exported_lines, 'Ximport.vim') 684fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1049:') 685fa29c8abSBram Moolenaar 6865269bd2aSBram Moolenaar " try to import something that is already defined 6875269bd2aSBram Moolenaar let import_already_defined =<< trim END 6885269bd2aSBram Moolenaar vim9script 6895269bd2aSBram Moolenaar let exported = 'something' 6905269bd2aSBram Moolenaar import exported from './Xexport.vim' 6915269bd2aSBram Moolenaar END 6925269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 6935269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 6945269bd2aSBram Moolenaar 6955269bd2aSBram Moolenaar " try to import something that is already defined 6965269bd2aSBram Moolenaar import_already_defined =<< trim END 6975269bd2aSBram Moolenaar vim9script 6985269bd2aSBram Moolenaar let exported = 'something' 6995269bd2aSBram Moolenaar import * as exported from './Xexport.vim' 7005269bd2aSBram Moolenaar END 7015269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 7025269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 7035269bd2aSBram Moolenaar 7045269bd2aSBram Moolenaar " try to import something that is already defined 7055269bd2aSBram Moolenaar import_already_defined =<< trim END 7065269bd2aSBram Moolenaar vim9script 7075269bd2aSBram Moolenaar let exported = 'something' 7085269bd2aSBram Moolenaar import {exported} from './Xexport.vim' 7095269bd2aSBram Moolenaar END 7105269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 7115269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 7125269bd2aSBram Moolenaar 713fa29c8abSBram Moolenaar " import a very long name, requires making a copy 714fa29c8abSBram Moolenaar let import_long_name_lines =<< trim END 715fa29c8abSBram Moolenaar vim9script 716fa29c8abSBram Moolenaar import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim' 717fa29c8abSBram Moolenaar END 718fa29c8abSBram Moolenaar writefile(import_long_name_lines, 'Ximport.vim') 719fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 720fa29c8abSBram Moolenaar 721fa29c8abSBram Moolenaar let import_no_from_lines =<< trim END 722fa29c8abSBram Moolenaar vim9script 723fa29c8abSBram Moolenaar import name './Xexport.vim' 724fa29c8abSBram Moolenaar END 725fa29c8abSBram Moolenaar writefile(import_no_from_lines, 'Ximport.vim') 726fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1070:') 727fa29c8abSBram Moolenaar 728fa29c8abSBram Moolenaar let import_invalid_string_lines =<< trim END 729fa29c8abSBram Moolenaar vim9script 730fa29c8abSBram Moolenaar import name from Xexport.vim 731fa29c8abSBram Moolenaar END 732fa29c8abSBram Moolenaar writefile(import_invalid_string_lines, 'Ximport.vim') 733fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1071:') 734fa29c8abSBram Moolenaar 735fa29c8abSBram Moolenaar let import_wrong_name_lines =<< trim END 736fa29c8abSBram Moolenaar vim9script 737fa29c8abSBram Moolenaar import name from './XnoExport.vim' 738fa29c8abSBram Moolenaar END 739fa29c8abSBram Moolenaar writefile(import_wrong_name_lines, 'Ximport.vim') 740fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1053:') 741fa29c8abSBram Moolenaar 742fa29c8abSBram Moolenaar let import_missing_comma_lines =<< trim END 743fa29c8abSBram Moolenaar vim9script 744fa29c8abSBram Moolenaar import {exported name} from './Xexport.vim' 745fa29c8abSBram Moolenaar END 7465269bd2aSBram Moolenaar writefile(import_missing_comma_lines, 'Ximport3.vim') 7475269bd2aSBram Moolenaar assert_fails('source Ximport3.vim', 'E1046:') 748fa29c8abSBram Moolenaar 749f2d5c240SBram Moolenaar delete('Ximport.vim') 7505269bd2aSBram Moolenaar delete('Ximport3.vim') 7518a7d6542SBram Moolenaar delete('Xexport.vim') 7528a7d6542SBram Moolenaar 753750802b5SBram Moolenaar " Check that in a Vim9 script 'cpo' is set to the Vim default. 754750802b5SBram Moolenaar set cpo&vi 755750802b5SBram Moolenaar let cpo_before = &cpo 756750802b5SBram Moolenaar let lines =<< trim END 757750802b5SBram Moolenaar vim9script 758750802b5SBram Moolenaar g:cpo_in_vim9script = &cpo 759750802b5SBram Moolenaar END 760750802b5SBram Moolenaar writefile(lines, 'Xvim9_script') 761750802b5SBram Moolenaar source Xvim9_script 762750802b5SBram Moolenaar assert_equal(cpo_before, &cpo) 763750802b5SBram Moolenaar set cpo&vim 764750802b5SBram Moolenaar assert_equal(&cpo, g:cpo_in_vim9script) 765750802b5SBram Moolenaar delete('Xvim9_script') 766750802b5SBram Moolenaarenddef 767750802b5SBram Moolenaar 768750802b5SBram Moolenaardef Test_vim9script_fails() 7698a7d6542SBram Moolenaar CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:') 7708a7d6542SBram Moolenaar CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:') 771750802b5SBram Moolenaar CheckScriptFailure(['export let some = 123'], 'E1042:') 7729721fb4eSBram Moolenaar CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1048:') 773750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export let g:some'], 'E1044:') 774750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:') 775750802b5SBram Moolenaar 776750802b5SBram Moolenaar assert_fails('vim9script', 'E1038') 777a26b9700SBram Moolenaar assert_fails('export something', 'E1043') 7788a7d6542SBram Moolenaarenddef 7798a7d6542SBram Moolenaar 7804c17ad94SBram Moolenaardef Test_vim9script_reload_import() 7818a7d6542SBram Moolenaar let lines =<< trim END 7828a7d6542SBram Moolenaar vim9script 7838a7d6542SBram Moolenaar const var = '' 7848a7d6542SBram Moolenaar let valone = 1234 7858a7d6542SBram Moolenaar def MyFunc(arg: string) 7868a7d6542SBram Moolenaar valone = 5678 7878a7d6542SBram Moolenaar enddef 7888a7d6542SBram Moolenaar END 7898a7d6542SBram Moolenaar let morelines =<< trim END 7908a7d6542SBram Moolenaar let valtwo = 222 7918a7d6542SBram Moolenaar export def GetValtwo(): number 7928a7d6542SBram Moolenaar return valtwo 7938a7d6542SBram Moolenaar enddef 7948a7d6542SBram Moolenaar END 79503afdcf1SBram Moolenaar writefile(lines + morelines, 'Xreload.vim') 7968a7d6542SBram Moolenaar source Xreload.vim 7978a7d6542SBram Moolenaar source Xreload.vim 7988a7d6542SBram Moolenaar source Xreload.vim 7998a7d6542SBram Moolenaar 8008a7d6542SBram Moolenaar let testlines =<< trim END 8018a7d6542SBram Moolenaar vim9script 8028a7d6542SBram Moolenaar def TheFunc() 8038a7d6542SBram Moolenaar import GetValtwo from './Xreload.vim' 8048a7d6542SBram Moolenaar assert_equal(222, GetValtwo()) 8058a7d6542SBram Moolenaar enddef 8068a7d6542SBram Moolenaar TheFunc() 8078a7d6542SBram Moolenaar END 8088a7d6542SBram Moolenaar writefile(testlines, 'Ximport.vim') 8098a7d6542SBram Moolenaar source Ximport.vim 8108a7d6542SBram Moolenaar 81103afdcf1SBram Moolenaar " Test that when not using "morelines" GetValtwo() and valtwo are still 81203afdcf1SBram Moolenaar " defined, because import doesn't reload a script. 8138a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 8148a7d6542SBram Moolenaar source Ximport.vim 8158a7d6542SBram Moolenaar 8168a7d6542SBram Moolenaar " cannot declare a var twice 8178a7d6542SBram Moolenaar lines =<< trim END 8188a7d6542SBram Moolenaar vim9script 8198a7d6542SBram Moolenaar let valone = 1234 8208a7d6542SBram Moolenaar let valone = 5678 8218a7d6542SBram Moolenaar END 8228a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 8238a7d6542SBram Moolenaar assert_fails('source Xreload.vim', 'E1041:') 8248a7d6542SBram Moolenaar 8258a7d6542SBram Moolenaar delete('Xreload.vim') 8268a7d6542SBram Moolenaar delete('Ximport.vim') 8278a7d6542SBram Moolenaarenddef 8288a7d6542SBram Moolenaar 8294c17ad94SBram Moolenaardef Test_vim9script_reload_delfunc() 8304c17ad94SBram Moolenaar let first_lines =<< trim END 8314c17ad94SBram Moolenaar vim9script 8324c17ad94SBram Moolenaar def FuncYes(): string 8334c17ad94SBram Moolenaar return 'yes' 8344c17ad94SBram Moolenaar enddef 8354c17ad94SBram Moolenaar END 83603afdcf1SBram Moolenaar let withno_lines =<< trim END 8374c17ad94SBram Moolenaar def FuncNo(): string 8384c17ad94SBram Moolenaar return 'no' 8394c17ad94SBram Moolenaar enddef 8404c17ad94SBram Moolenaar def g:DoCheck(no_exists: bool) 8414c17ad94SBram Moolenaar assert_equal('yes', FuncYes()) 8424c17ad94SBram Moolenaar assert_equal('no', FuncNo()) 84303afdcf1SBram Moolenaar enddef 84403afdcf1SBram Moolenaar END 84503afdcf1SBram Moolenaar let nono_lines =<< trim END 84603afdcf1SBram Moolenaar def g:DoCheck(no_exists: bool) 84703afdcf1SBram Moolenaar assert_equal('yes', FuncYes()) 8484c17ad94SBram Moolenaar assert_fails('call FuncNo()', 'E117:') 8494c17ad94SBram Moolenaar enddef 8504c17ad94SBram Moolenaar END 8514c17ad94SBram Moolenaar 8524c17ad94SBram Moolenaar # FuncNo() is defined 85303afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 8544c17ad94SBram Moolenaar source Xreloaded.vim 8554c17ad94SBram Moolenaar g:DoCheck(true) 8564c17ad94SBram Moolenaar 8574c17ad94SBram Moolenaar # FuncNo() is not redefined 85803afdcf1SBram Moolenaar writefile(first_lines + nono_lines, 'Xreloaded.vim') 8594c17ad94SBram Moolenaar source Xreloaded.vim 86003afdcf1SBram Moolenaar g:DoCheck() 8614c17ad94SBram Moolenaar 8624c17ad94SBram Moolenaar # FuncNo() is back 86303afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 8644c17ad94SBram Moolenaar source Xreloaded.vim 86503afdcf1SBram Moolenaar g:DoCheck() 8664c17ad94SBram Moolenaar 8674c17ad94SBram Moolenaar delete('Xreloaded.vim') 8684c17ad94SBram Moolenaarenddef 8694c17ad94SBram Moolenaar 87089483d40SBram Moolenaardef Test_vim9script_reload_delvar() 87189483d40SBram Moolenaar # write the script with a script-local variable 87289483d40SBram Moolenaar let lines =<< trim END 87389483d40SBram Moolenaar vim9script 87489483d40SBram Moolenaar let var = 'string' 87589483d40SBram Moolenaar END 87689483d40SBram Moolenaar writefile(lines, 'XreloadVar.vim') 87789483d40SBram Moolenaar source XreloadVar.vim 87889483d40SBram Moolenaar 87989483d40SBram Moolenaar # now write the script using the same variable locally - works 88089483d40SBram Moolenaar lines =<< trim END 88189483d40SBram Moolenaar vim9script 88289483d40SBram Moolenaar def Func() 88389483d40SBram Moolenaar let var = 'string' 88489483d40SBram Moolenaar enddef 88589483d40SBram Moolenaar END 88689483d40SBram Moolenaar writefile(lines, 'XreloadVar.vim') 88789483d40SBram Moolenaar source XreloadVar.vim 88889483d40SBram Moolenaar 88989483d40SBram Moolenaar delete('XreloadVar.vim') 89089483d40SBram Moolenaarenddef 89189483d40SBram Moolenaar 8928a7d6542SBram Moolenaardef Test_import_absolute() 8938a7d6542SBram Moolenaar let import_lines = [ 894e6085c53SBram Moolenaar 'vim9script', 895e6085c53SBram Moolenaar 'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"', 896e6085c53SBram Moolenaar 'def UseExported()', 897e6085c53SBram Moolenaar ' g:imported_abs = exported', 898e6085c53SBram Moolenaar ' exported = 8888', 899e6085c53SBram Moolenaar ' g:imported_after = exported', 900e6085c53SBram Moolenaar 'enddef', 901e6085c53SBram Moolenaar 'UseExported()', 902e6085c53SBram Moolenaar 'g:import_disassembled = execute("disass UseExported")', 903e6085c53SBram Moolenaar ] 9048a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_abs.vim') 9058a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport_abs.vim') 9068a7d6542SBram Moolenaar 9078a7d6542SBram Moolenaar source Ximport_abs.vim 9088a7d6542SBram Moolenaar 9098a7d6542SBram Moolenaar assert_equal(9876, g:imported_abs) 9104e12a5dfSBram Moolenaar assert_equal(8888, g:imported_after) 911675f716eSBram Moolenaar assert_match('<SNR>\d\+_UseExported.*' .. 912675f716eSBram Moolenaar 'g:imported_abs = exported.*' .. 913675f716eSBram Moolenaar '0 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 914675f716eSBram Moolenaar '1 STOREG g:imported_abs.*' .. 915675f716eSBram Moolenaar 'exported = 8888.*' .. 916675f716eSBram Moolenaar '3 STORESCRIPT exported in .*Xexport_abs.vim.*' .. 917675f716eSBram Moolenaar 'g:imported_after = exported.*' .. 918675f716eSBram Moolenaar '4 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 919675f716eSBram Moolenaar '5 STOREG g:imported_after.*', 920e6085c53SBram Moolenaar g:import_disassembled) 9218a7d6542SBram Moolenaar unlet g:imported_abs 9224e12a5dfSBram Moolenaar unlet g:import_disassembled 9238a7d6542SBram Moolenaar 9248a7d6542SBram Moolenaar delete('Ximport_abs.vim') 9258a7d6542SBram Moolenaar delete('Xexport_abs.vim') 9268a7d6542SBram Moolenaarenddef 9278a7d6542SBram Moolenaar 9288a7d6542SBram Moolenaardef Test_import_rtp() 9298a7d6542SBram Moolenaar let import_lines = [ 930e6085c53SBram Moolenaar 'vim9script', 931e6085c53SBram Moolenaar 'import exported from "Xexport_rtp.vim"', 932e6085c53SBram Moolenaar 'g:imported_rtp = exported', 933e6085c53SBram Moolenaar ] 9348a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_rtp.vim') 9358a7d6542SBram Moolenaar mkdir('import') 9368a7d6542SBram Moolenaar writefile(s:export_script_lines, 'import/Xexport_rtp.vim') 9378a7d6542SBram Moolenaar 9388a7d6542SBram Moolenaar let save_rtp = &rtp 9398a7d6542SBram Moolenaar &rtp = getcwd() 9408a7d6542SBram Moolenaar source Ximport_rtp.vim 9418a7d6542SBram Moolenaar &rtp = save_rtp 9428a7d6542SBram Moolenaar 9438a7d6542SBram Moolenaar assert_equal(9876, g:imported_rtp) 9448a7d6542SBram Moolenaar unlet g:imported_rtp 9458a7d6542SBram Moolenaar 9468a7d6542SBram Moolenaar delete('Ximport_rtp.vim') 94789483d40SBram Moolenaar delete('import', 'rf') 9488a7d6542SBram Moolenaarenddef 9498a7d6542SBram Moolenaar 95025e0f586SBram Moolenaardef Test_import_compile_error() 95125e0f586SBram Moolenaar let export_lines = [ 95225e0f586SBram Moolenaar 'vim9script', 95325e0f586SBram Moolenaar 'export def ExpFunc(): string', 95425e0f586SBram Moolenaar ' return notDefined', 95525e0f586SBram Moolenaar 'enddef', 95625e0f586SBram Moolenaar ] 95725e0f586SBram Moolenaar writefile(export_lines, 'Xexported.vim') 95825e0f586SBram Moolenaar 95925e0f586SBram Moolenaar let import_lines = [ 96025e0f586SBram Moolenaar 'vim9script', 96125e0f586SBram Moolenaar 'import ExpFunc from "./Xexported.vim"', 96225e0f586SBram Moolenaar 'def ImpFunc()', 96325e0f586SBram Moolenaar ' echo ExpFunc()', 96425e0f586SBram Moolenaar 'enddef', 96525e0f586SBram Moolenaar 'defcompile', 96625e0f586SBram Moolenaar ] 96725e0f586SBram Moolenaar writefile(import_lines, 'Ximport.vim') 96825e0f586SBram Moolenaar 96925e0f586SBram Moolenaar try 97025e0f586SBram Moolenaar source Ximport.vim 97125e0f586SBram Moolenaar catch /E1001/ 97225e0f586SBram Moolenaar " Error should be fore the Xexported.vim file. 97325e0f586SBram Moolenaar assert_match('E1001: variable not found: notDefined', v:exception) 97425e0f586SBram Moolenaar assert_match('function <SNR>\d\+_ImpFunc\[1\]..<SNR>\d\+_ExpFunc, line 1', v:throwpoint) 97525e0f586SBram Moolenaar endtry 97625e0f586SBram Moolenaar 97725e0f586SBram Moolenaar delete('Xexported.vim') 97825e0f586SBram Moolenaar delete('Ximport.vim') 97925e0f586SBram Moolenaarenddef 98025e0f586SBram Moolenaar 9818a7d6542SBram Moolenaardef Test_fixed_size_list() 9828a7d6542SBram Moolenaar " will be allocated as one piece of memory, check that changes work 9838a7d6542SBram Moolenaar let l = [1, 2, 3, 4] 9848a7d6542SBram Moolenaar l->remove(0) 9858a7d6542SBram Moolenaar l->add(5) 9868a7d6542SBram Moolenaar l->insert(99, 1) 9870f18b6d1SBram Moolenaar assert_equal([2, 99, 3, 4, 5], l) 9888a7d6542SBram Moolenaarenddef 9898a7d6542SBram Moolenaar 990158906cfSBram Moolenaardef IfElse(what: number): string 991158906cfSBram Moolenaar let res = '' 992158906cfSBram Moolenaar if what == 1 993158906cfSBram Moolenaar res = "one" 994158906cfSBram Moolenaar elseif what == 2 995158906cfSBram Moolenaar res = "two" 996a259d8d3SBram Moolenaar else 997158906cfSBram Moolenaar res = "three" 998a259d8d3SBram Moolenaar endif 999158906cfSBram Moolenaar return res 1000a259d8d3SBram Moolenaarenddef 1001a259d8d3SBram Moolenaar 1002158906cfSBram Moolenaardef Test_if_elseif_else() 1003158906cfSBram Moolenaar assert_equal('one', IfElse(1)) 1004158906cfSBram Moolenaar assert_equal('two', IfElse(2)) 1005158906cfSBram Moolenaar assert_equal('three', IfElse(3)) 10060f18b6d1SBram Moolenaarenddef 10070f18b6d1SBram Moolenaar 1008e8c4abbbSBram Moolenaardef Test_if_elseif_else_fails() 1009e8c4abbbSBram Moolenaar call CheckDefFailure(['elseif true'], 'E582:') 1010e8c4abbbSBram Moolenaar call CheckDefFailure(['else'], 'E581:') 1011e8c4abbbSBram Moolenaar call CheckDefFailure(['endif'], 'E580:') 1012e8c4abbbSBram Moolenaar call CheckDefFailure(['if true', 'elseif xxx'], 'E1001:') 1013585fea7bSBram Moolenaar call CheckDefFailure(['if true', 'echo 1'], 'E171:') 1014e8c4abbbSBram Moolenaarenddef 1015e8c4abbbSBram Moolenaar 10166d69bf60SBram Moolenaarlet g:bool_true = v:true 10176d69bf60SBram Moolenaarlet g:bool_false = v:false 10186d69bf60SBram Moolenaar 10196d69bf60SBram Moolenaardef Test_if_const_expr() 10206d69bf60SBram Moolenaar let res = false 10216d69bf60SBram Moolenaar if true ? true : false 10226d69bf60SBram Moolenaar res = true 10236d69bf60SBram Moolenaar endif 10246d69bf60SBram Moolenaar assert_equal(true, res) 10256d69bf60SBram Moolenaar 1026585fea7bSBram Moolenaar g:glob = 2 1027585fea7bSBram Moolenaar if false 1028585fea7bSBram Moolenaar execute('let g:glob = 3') 1029585fea7bSBram Moolenaar endif 1030585fea7bSBram Moolenaar assert_equal(2, g:glob) 1031585fea7bSBram Moolenaar if true 1032585fea7bSBram Moolenaar execute('let g:glob = 3') 1033585fea7bSBram Moolenaar endif 1034585fea7bSBram Moolenaar assert_equal(3, g:glob) 1035585fea7bSBram Moolenaar 10366d69bf60SBram Moolenaar res = false 10376d69bf60SBram Moolenaar if g:bool_true ? true : false 10386d69bf60SBram Moolenaar res = true 10396d69bf60SBram Moolenaar endif 10406d69bf60SBram Moolenaar assert_equal(true, res) 10416d69bf60SBram Moolenaar 10426d69bf60SBram Moolenaar res = false 10436d69bf60SBram Moolenaar if true ? g:bool_true : false 10446d69bf60SBram Moolenaar res = true 10456d69bf60SBram Moolenaar endif 10466d69bf60SBram Moolenaar assert_equal(true, res) 10476d69bf60SBram Moolenaar 10486d69bf60SBram Moolenaar res = false 10496d69bf60SBram Moolenaar if true ? true : g:bool_false 10506d69bf60SBram Moolenaar res = true 10516d69bf60SBram Moolenaar endif 10526d69bf60SBram Moolenaar assert_equal(true, res) 10536d69bf60SBram Moolenaar 10546d69bf60SBram Moolenaar res = false 10556d69bf60SBram Moolenaar if true ? false : true 10566d69bf60SBram Moolenaar res = true 10576d69bf60SBram Moolenaar endif 10586d69bf60SBram Moolenaar assert_equal(false, res) 10596d69bf60SBram Moolenaar 10606d69bf60SBram Moolenaar res = false 10616d69bf60SBram Moolenaar if false ? false : true 10626d69bf60SBram Moolenaar res = true 10636d69bf60SBram Moolenaar endif 10646d69bf60SBram Moolenaar assert_equal(true, res) 10656d69bf60SBram Moolenaar 10666d69bf60SBram Moolenaar res = false 10676d69bf60SBram Moolenaar if false ? true : false 10686d69bf60SBram Moolenaar res = true 10696d69bf60SBram Moolenaar endif 10706d69bf60SBram Moolenaar assert_equal(false, res) 10716d69bf60SBram Moolenaar 10726d69bf60SBram Moolenaar res = false 1073e8c4abbbSBram Moolenaar if has('xyz') ? true : false 1074e8c4abbbSBram Moolenaar res = true 1075e8c4abbbSBram Moolenaar endif 1076e8c4abbbSBram Moolenaar assert_equal(false, res) 1077e8c4abbbSBram Moolenaar 1078e8c4abbbSBram Moolenaar res = false 10796d69bf60SBram Moolenaar if true && true 10806d69bf60SBram Moolenaar res = true 10816d69bf60SBram Moolenaar endif 10826d69bf60SBram Moolenaar assert_equal(true, res) 10836d69bf60SBram Moolenaar 10846d69bf60SBram Moolenaar res = false 10856d69bf60SBram Moolenaar if true && false 10866d69bf60SBram Moolenaar res = true 10876d69bf60SBram Moolenaar endif 10886d69bf60SBram Moolenaar assert_equal(false, res) 10896d69bf60SBram Moolenaar 10906d69bf60SBram Moolenaar res = false 10916d69bf60SBram Moolenaar if g:bool_true && false 10926d69bf60SBram Moolenaar res = true 10936d69bf60SBram Moolenaar endif 10946d69bf60SBram Moolenaar assert_equal(false, res) 10956d69bf60SBram Moolenaar 10966d69bf60SBram Moolenaar res = false 10976d69bf60SBram Moolenaar if true && g:bool_false 10986d69bf60SBram Moolenaar res = true 10996d69bf60SBram Moolenaar endif 11006d69bf60SBram Moolenaar assert_equal(false, res) 11016d69bf60SBram Moolenaar 11026d69bf60SBram Moolenaar res = false 11036d69bf60SBram Moolenaar if false && false 11046d69bf60SBram Moolenaar res = true 11056d69bf60SBram Moolenaar endif 11066d69bf60SBram Moolenaar assert_equal(false, res) 11076d69bf60SBram Moolenaar 11086d69bf60SBram Moolenaar res = false 11096d69bf60SBram Moolenaar if true || false 11106d69bf60SBram Moolenaar res = true 11116d69bf60SBram Moolenaar endif 11126d69bf60SBram Moolenaar assert_equal(true, res) 11136d69bf60SBram Moolenaar 11146d69bf60SBram Moolenaar res = false 11156d69bf60SBram Moolenaar if g:bool_true || false 11166d69bf60SBram Moolenaar res = true 11176d69bf60SBram Moolenaar endif 11186d69bf60SBram Moolenaar assert_equal(true, res) 11196d69bf60SBram Moolenaar 11206d69bf60SBram Moolenaar res = false 11216d69bf60SBram Moolenaar if true || g:bool_false 11226d69bf60SBram Moolenaar res = true 11236d69bf60SBram Moolenaar endif 11246d69bf60SBram Moolenaar assert_equal(true, res) 11256d69bf60SBram Moolenaar 11266d69bf60SBram Moolenaar res = false 11276d69bf60SBram Moolenaar if false || false 11286d69bf60SBram Moolenaar res = true 11296d69bf60SBram Moolenaar endif 11306d69bf60SBram Moolenaar assert_equal(false, res) 113180c34ca3SBram Moolenaarenddef 11326d69bf60SBram Moolenaar 113380c34ca3SBram Moolenaardef Test_if_const_expr_fails() 113480c34ca3SBram Moolenaar call CheckDefFailure(['if "aaa" == "bbb'], 'E114:') 113580c34ca3SBram Moolenaar call CheckDefFailure(["if 'aaa' == 'bbb"], 'E115:') 1136e8c4abbbSBram Moolenaar call CheckDefFailure(["if has('aaa'"], 'E110:') 1137e8c4abbbSBram Moolenaar call CheckDefFailure(["if has('aaa') ? true false"], 'E109:') 11386d69bf60SBram Moolenaarenddef 11396d69bf60SBram Moolenaar 1140ad39c094SBram Moolenaardef Test_execute_cmd() 1141ad39c094SBram Moolenaar new 1142ad39c094SBram Moolenaar setline(1, 'default') 1143ad39c094SBram Moolenaar execute 'call setline(1, "execute-string")' 1144ad39c094SBram Moolenaar assert_equal('execute-string', getline(1)) 1145a72cfb80SBram Moolenaar 1146a72cfb80SBram Moolenaar execute "call setline(1, 'execute-string')" 1147a72cfb80SBram Moolenaar assert_equal('execute-string', getline(1)) 1148a72cfb80SBram Moolenaar 1149ad39c094SBram Moolenaar let cmd1 = 'call setline(1,' 1150ad39c094SBram Moolenaar let cmd2 = '"execute-var")' 1151a72cfb80SBram Moolenaar execute cmd1 cmd2 # comment 1152ad39c094SBram Moolenaar assert_equal('execute-var', getline(1)) 1153a72cfb80SBram Moolenaar 1154ad39c094SBram Moolenaar execute cmd1 cmd2 '|call setline(1, "execute-var-string")' 1155ad39c094SBram Moolenaar assert_equal('execute-var-string', getline(1)) 1156a72cfb80SBram Moolenaar 1157ad39c094SBram Moolenaar let cmd_first = 'call ' 1158ad39c094SBram Moolenaar let cmd_last = 'setline(1, "execute-var-var")' 1159ad39c094SBram Moolenaar execute cmd_first .. cmd_last 1160ad39c094SBram Moolenaar assert_equal('execute-var-var', getline(1)) 1161ad39c094SBram Moolenaar bwipe! 1162585fea7bSBram Moolenaar 1163585fea7bSBram Moolenaar call CheckDefFailure(['execute xxx'], 'E1001:') 1164a72cfb80SBram Moolenaar call CheckDefFailure(['execute "cmd"# comment'], 'E488:') 1165ad39c094SBram Moolenaarenddef 1166ad39c094SBram Moolenaar 1167ad39c094SBram Moolenaardef Test_echo_cmd() 1168a72cfb80SBram Moolenaar echo 'some' # comment 1169585fea7bSBram Moolenaar echon 'thing' 1170ad39c094SBram Moolenaar assert_match('^something$', Screenline(&lines)) 1171ad39c094SBram Moolenaar 1172a72cfb80SBram Moolenaar echo "some" # comment 1173a72cfb80SBram Moolenaar echon "thing" 1174a72cfb80SBram Moolenaar assert_match('^something$', Screenline(&lines)) 1175a72cfb80SBram Moolenaar 1176ad39c094SBram Moolenaar let str1 = 'some' 1177ad39c094SBram Moolenaar let str2 = 'more' 1178ad39c094SBram Moolenaar echo str1 str2 1179ad39c094SBram Moolenaar assert_match('^some more$', Screenline(&lines)) 1180a72cfb80SBram Moolenaar 1181a72cfb80SBram Moolenaar call CheckDefFailure(['echo "xxx"# comment'], 'E488:') 1182ad39c094SBram Moolenaarenddef 1183ad39c094SBram Moolenaar 1184f93c7feaSBram Moolenaardef Test_echomsg_cmd() 1185f93c7feaSBram Moolenaar echomsg 'some' 'more' # comment 1186f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 1187f93c7feaSBram Moolenaar echo 'clear' 1188f93c7feaSBram Moolenaar 1messages 1189f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 1190f93c7feaSBram Moolenaar 1191f93c7feaSBram Moolenaar call CheckDefFailure(['echomsg "xxx"# comment'], 'E488:') 1192f93c7feaSBram Moolenaarenddef 1193f93c7feaSBram Moolenaar 1194f93c7feaSBram Moolenaardef Test_echoerr_cmd() 119540ee466cSBram Moolenaar try 119640ee466cSBram Moolenaar echoerr 'something' 'wrong' # comment 119740ee466cSBram Moolenaar catch 119840ee466cSBram Moolenaar assert_match('something wrong', v:exception) 119940ee466cSBram Moolenaar endtry 1200f93c7feaSBram Moolenaarenddef 1201f93c7feaSBram Moolenaar 120241fe0617SBram Moolenaardef Test_for_outside_of_function() 120341fe0617SBram Moolenaar let lines =<< trim END 120441fe0617SBram Moolenaar vim9script 120541fe0617SBram Moolenaar new 120641fe0617SBram Moolenaar for var in range(0, 3) 120741fe0617SBram Moolenaar append(line('$'), var) 120841fe0617SBram Moolenaar endfor 120941fe0617SBram Moolenaar assert_equal(['', '0', '1', '2', '3'], getline(1, '$')) 121041fe0617SBram Moolenaar bwipe! 121141fe0617SBram Moolenaar END 121241fe0617SBram Moolenaar writefile(lines, 'Xvim9for.vim') 121341fe0617SBram Moolenaar source Xvim9for.vim 121441fe0617SBram Moolenaar delete('Xvim9for.vim') 121541fe0617SBram Moolenaarenddef 12168a7d6542SBram Moolenaar 1217e8c4abbbSBram Moolenaardef Test_for_loop() 1218e8c4abbbSBram Moolenaar let result = '' 1219e8c4abbbSBram Moolenaar for cnt in range(7) 1220e8c4abbbSBram Moolenaar if cnt == 4 1221e8c4abbbSBram Moolenaar break 1222e8c4abbbSBram Moolenaar endif 1223e8c4abbbSBram Moolenaar if cnt == 2 1224e8c4abbbSBram Moolenaar continue 1225e8c4abbbSBram Moolenaar endif 1226e8c4abbbSBram Moolenaar result ..= cnt .. '_' 1227e8c4abbbSBram Moolenaar endfor 1228e8c4abbbSBram Moolenaar assert_equal('0_1_3_', result) 1229e8c4abbbSBram Moolenaarenddef 1230e8c4abbbSBram Moolenaar 1231e8c4abbbSBram Moolenaardef Test_for_loop_fails() 1232675f716eSBram Moolenaar CheckDefFailure(['for # in range(5)'], 'E690:') 1233675f716eSBram Moolenaar CheckDefFailure(['for i In range(5)'], 'E690:') 1234675f716eSBram Moolenaar CheckDefFailure(['let x = 5', 'for x in range(5)'], 'E1023:') 1235822ba247SBram Moolenaar CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef', 'defcompile'], 'E1006:') 1236675f716eSBram Moolenaar CheckDefFailure(['for i in "text"'], 'E1024:') 1237675f716eSBram Moolenaar CheckDefFailure(['for i in xxx'], 'E1001:') 1238675f716eSBram Moolenaar CheckDefFailure(['endfor'], 'E588:') 1239675f716eSBram Moolenaar CheckDefFailure(['for i in range(3)', 'echo 3'], 'E170:') 1240e8c4abbbSBram Moolenaarenddef 1241e8c4abbbSBram Moolenaar 1242d0df1aacSBram Moolenaardef Test_while_loop() 1243d0df1aacSBram Moolenaar let result = '' 1244d0df1aacSBram Moolenaar let cnt = 0 1245d0df1aacSBram Moolenaar while cnt < 555 1246d0df1aacSBram Moolenaar if cnt == 3 1247d0df1aacSBram Moolenaar break 1248d0df1aacSBram Moolenaar endif 1249d0df1aacSBram Moolenaar cnt += 1 1250d0df1aacSBram Moolenaar if cnt == 2 1251d0df1aacSBram Moolenaar continue 1252d0df1aacSBram Moolenaar endif 1253d0df1aacSBram Moolenaar result ..= cnt .. '_' 1254d0df1aacSBram Moolenaar endwhile 1255d0df1aacSBram Moolenaar assert_equal('1_3_', result) 1256d0df1aacSBram Moolenaarenddef 1257d0df1aacSBram Moolenaar 1258e8c4abbbSBram Moolenaardef Test_while_loop_fails() 1259675f716eSBram Moolenaar CheckDefFailure(['while xxx'], 'E1001:') 1260675f716eSBram Moolenaar CheckDefFailure(['endwhile'], 'E588:') 1261675f716eSBram Moolenaar CheckDefFailure(['continue'], 'E586:') 1262675f716eSBram Moolenaar CheckDefFailure(['if true', 'continue'], 'E586:') 1263675f716eSBram Moolenaar CheckDefFailure(['break'], 'E587:') 1264675f716eSBram Moolenaar CheckDefFailure(['if true', 'break'], 'E587:') 1265675f716eSBram Moolenaar CheckDefFailure(['while 1', 'echo 3'], 'E170:') 1266bd5da371SBram Moolenaarenddef 1267bd5da371SBram Moolenaar 12689645e2d9SBram Moolenaardef Test_interrupt_loop() 126997acfc78SBram Moolenaar let caught = false 12709645e2d9SBram Moolenaar let x = 0 127197acfc78SBram Moolenaar try 12729645e2d9SBram Moolenaar while 1 12739645e2d9SBram Moolenaar x += 1 12749645e2d9SBram Moolenaar if x == 100 12759645e2d9SBram Moolenaar feedkeys("\<C-C>", 'Lt') 12769645e2d9SBram Moolenaar endif 12779645e2d9SBram Moolenaar endwhile 127897acfc78SBram Moolenaar catch 127997acfc78SBram Moolenaar caught = true 128097acfc78SBram Moolenaar assert_equal(100, x) 128197acfc78SBram Moolenaar endtry 128297acfc78SBram Moolenaar assert_true(caught, 'should have caught an exception') 12839645e2d9SBram Moolenaarenddef 128420431c9dSBram Moolenaar 12854fdae999SBram Moolenaardef Test_automatic_line_continuation() 12864fdae999SBram Moolenaar let mylist = [ 12874fdae999SBram Moolenaar 'one', 12884fdae999SBram Moolenaar 'two', 12894fdae999SBram Moolenaar 'three', 12904fdae999SBram Moolenaar ] " comment 12914fdae999SBram Moolenaar assert_equal(['one', 'two', 'three'], mylist) 12924fdae999SBram Moolenaar 12934fdae999SBram Moolenaar let mydict = { 12944fdae999SBram Moolenaar 'one': 1, 12954fdae999SBram Moolenaar 'two': 2, 12964fdae999SBram Moolenaar 'three': 12974fdae999SBram Moolenaar 3, 12984fdae999SBram Moolenaar } " comment 12994fdae999SBram Moolenaar assert_equal({'one': 1, 'two': 2, 'three': 3}, mydict) 13004fdae999SBram Moolenaar mydict = #{ 13012c330432SBram Moolenaar one: 1, # comment 13022c330432SBram Moolenaar two: # comment 13032c330432SBram Moolenaar 2, # comment 13042c330432SBram Moolenaar three: 3 # comment 13052c330432SBram Moolenaar } 13062c330432SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 13072c330432SBram Moolenaar mydict = #{ 13082c330432SBram Moolenaar one: 1, 13094fdae999SBram Moolenaar two: 13104fdae999SBram Moolenaar 2, 13112c330432SBram Moolenaar three: 3 13124fdae999SBram Moolenaar } 13134fdae999SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 1314e6085c53SBram Moolenaar 1315e6085c53SBram Moolenaar assert_equal( 1316e6085c53SBram Moolenaar ['one', 'two', 'three'], 1317e6085c53SBram Moolenaar split('one two three') 1318e6085c53SBram Moolenaar ) 13194fdae999SBram Moolenaarenddef 13204fdae999SBram Moolenaar 13217a092245SBram Moolenaardef Test_vim9_comment() 13227a092245SBram Moolenaar CheckScriptSuccess([ 13237a092245SBram Moolenaar 'vim9script', 13247a092245SBram Moolenaar '# something', 13257a092245SBram Moolenaar ]) 13267a092245SBram Moolenaar CheckScriptFailure([ 13277a092245SBram Moolenaar 'vim9script', 13287a092245SBram Moolenaar ':# something', 13297a092245SBram Moolenaar ], 'E488:') 13307a092245SBram Moolenaar CheckScriptFailure([ 13317a092245SBram Moolenaar '# something', 13327a092245SBram Moolenaar ], 'E488:') 13337a092245SBram Moolenaar CheckScriptFailure([ 13347a092245SBram Moolenaar ':# something', 13357a092245SBram Moolenaar ], 'E488:') 13367a092245SBram Moolenaar 13374a8d9f2eSBram Moolenaar { # block start 13384a8d9f2eSBram Moolenaar } # block end 13394a8d9f2eSBram Moolenaar CheckDefFailure([ 13404a8d9f2eSBram Moolenaar '{# comment', 13414a8d9f2eSBram Moolenaar ], 'E488:') 13424a8d9f2eSBram Moolenaar CheckDefFailure([ 13434a8d9f2eSBram Moolenaar '{', 13444a8d9f2eSBram Moolenaar '}# comment', 13454a8d9f2eSBram Moolenaar ], 'E488:') 13464a8d9f2eSBram Moolenaar 13474a8d9f2eSBram Moolenaar echo "yes" # comment 13484a8d9f2eSBram Moolenaar CheckDefFailure([ 13494a8d9f2eSBram Moolenaar 'echo "yes"# comment', 13504a8d9f2eSBram Moolenaar ], 'E488:') 13517a092245SBram Moolenaar CheckScriptSuccess([ 13527a092245SBram Moolenaar 'vim9script', 13537a092245SBram Moolenaar 'echo "yes" # something', 13547a092245SBram Moolenaar ]) 13557a092245SBram Moolenaar CheckScriptFailure([ 13567a092245SBram Moolenaar 'vim9script', 13577a092245SBram Moolenaar 'echo "yes"# something', 13587a092245SBram Moolenaar ], 'E121:') 13597a092245SBram Moolenaar CheckScriptFailure([ 13607a092245SBram Moolenaar 'vim9script', 13617a092245SBram Moolenaar 'echo# something', 13627a092245SBram Moolenaar ], 'E121:') 13637a092245SBram Moolenaar CheckScriptFailure([ 13647a092245SBram Moolenaar 'echo "yes" # something', 13657a092245SBram Moolenaar ], 'E121:') 13667a092245SBram Moolenaar 13674a8d9f2eSBram Moolenaar exe "echo" # comment 13684a8d9f2eSBram Moolenaar CheckDefFailure([ 13694a8d9f2eSBram Moolenaar 'exe "echo"# comment', 13704a8d9f2eSBram Moolenaar ], 'E488:') 13714a8d9f2eSBram Moolenaar CheckScriptSuccess([ 13724a8d9f2eSBram Moolenaar 'vim9script', 13734a8d9f2eSBram Moolenaar 'exe "echo" # something', 13744a8d9f2eSBram Moolenaar ]) 13754a8d9f2eSBram Moolenaar CheckScriptFailure([ 13764a8d9f2eSBram Moolenaar 'vim9script', 13774a8d9f2eSBram Moolenaar 'exe "echo"# something', 13784a8d9f2eSBram Moolenaar ], 'E121:') 13794a8d9f2eSBram Moolenaar CheckDefFailure([ 13804a8d9f2eSBram Moolenaar 'exe # comment', 13814a8d9f2eSBram Moolenaar ], 'E1015:') 13824a8d9f2eSBram Moolenaar CheckScriptFailure([ 13834a8d9f2eSBram Moolenaar 'vim9script', 13844a8d9f2eSBram Moolenaar 'exe# something', 13854a8d9f2eSBram Moolenaar ], 'E121:') 13864a8d9f2eSBram Moolenaar CheckScriptFailure([ 13874a8d9f2eSBram Moolenaar 'exe "echo" # something', 13884a8d9f2eSBram Moolenaar ], 'E121:') 13894a8d9f2eSBram Moolenaar 13907a092245SBram Moolenaar CheckDefFailure([ 13917a092245SBram Moolenaar 'try# comment', 13927a092245SBram Moolenaar ' echo "yes"', 13937a092245SBram Moolenaar 'catch', 13947a092245SBram Moolenaar 'endtry', 13957a092245SBram Moolenaar ], 'E488:') 13962c5ed4e3SBram Moolenaar CheckScriptFailure([ 13972c5ed4e3SBram Moolenaar 'vim9script', 13982c5ed4e3SBram Moolenaar 'try# comment', 13992c5ed4e3SBram Moolenaar 'echo "yes"', 14002c5ed4e3SBram Moolenaar ], 'E488:') 14017a092245SBram Moolenaar CheckDefFailure([ 14027a092245SBram Moolenaar 'try', 1403a72cfb80SBram Moolenaar ' throw#comment', 1404a72cfb80SBram Moolenaar 'catch', 1405a72cfb80SBram Moolenaar 'endtry', 1406a72cfb80SBram Moolenaar ], 'E1015:') 1407a72cfb80SBram Moolenaar CheckDefFailure([ 1408a72cfb80SBram Moolenaar 'try', 1409a72cfb80SBram Moolenaar ' throw "yes"#comment', 1410a72cfb80SBram Moolenaar 'catch', 1411a72cfb80SBram Moolenaar 'endtry', 1412a72cfb80SBram Moolenaar ], 'E488:') 1413a72cfb80SBram Moolenaar CheckDefFailure([ 1414a72cfb80SBram Moolenaar 'try', 14157a092245SBram Moolenaar ' echo "yes"', 14167a092245SBram Moolenaar 'catch# comment', 14177a092245SBram Moolenaar 'endtry', 14187a092245SBram Moolenaar ], 'E488:') 14192c5ed4e3SBram Moolenaar CheckScriptFailure([ 14202c5ed4e3SBram Moolenaar 'vim9script', 14212c5ed4e3SBram Moolenaar 'try', 14222c5ed4e3SBram Moolenaar ' echo "yes"', 14232c5ed4e3SBram Moolenaar 'catch# comment', 14242c5ed4e3SBram Moolenaar 'endtry', 14252c5ed4e3SBram Moolenaar ], 'E654:') 14262c5ed4e3SBram Moolenaar CheckDefFailure([ 14272c5ed4e3SBram Moolenaar 'try', 14282c5ed4e3SBram Moolenaar ' echo "yes"', 14292c5ed4e3SBram Moolenaar 'catch /pat/# comment', 14302c5ed4e3SBram Moolenaar 'endtry', 14312c5ed4e3SBram Moolenaar ], 'E488:') 14327a092245SBram Moolenaar CheckDefFailure([ 14337a092245SBram Moolenaar 'try', 14347a092245SBram Moolenaar 'echo "yes"', 14357a092245SBram Moolenaar 'catch', 14367a092245SBram Moolenaar 'endtry# comment', 14377a092245SBram Moolenaar ], 'E488:') 14382c5ed4e3SBram Moolenaar CheckScriptFailure([ 14392c5ed4e3SBram Moolenaar 'vim9script', 14402c5ed4e3SBram Moolenaar 'try', 14412c5ed4e3SBram Moolenaar ' echo "yes"', 14422c5ed4e3SBram Moolenaar 'catch', 14432c5ed4e3SBram Moolenaar 'endtry# comment', 14442c5ed4e3SBram Moolenaar ], 'E600:') 14452c5ed4e3SBram Moolenaar 14462c5ed4e3SBram Moolenaar CheckScriptSuccess([ 14472c5ed4e3SBram Moolenaar 'vim9script', 14482c5ed4e3SBram Moolenaar 'hi # comment', 14492c5ed4e3SBram Moolenaar ]) 14502c5ed4e3SBram Moolenaar CheckScriptFailure([ 14512c5ed4e3SBram Moolenaar 'vim9script', 14522c5ed4e3SBram Moolenaar 'hi# comment', 14532c5ed4e3SBram Moolenaar ], 'E416:') 14541966c248SBram Moolenaar CheckScriptSuccess([ 14551966c248SBram Moolenaar 'vim9script', 14561966c248SBram Moolenaar 'hi Search # comment', 14571966c248SBram Moolenaar ]) 14581966c248SBram Moolenaar CheckScriptFailure([ 14591966c248SBram Moolenaar 'vim9script', 14601966c248SBram Moolenaar 'hi Search# comment', 14611966c248SBram Moolenaar ], 'E416:') 14621966c248SBram Moolenaar CheckScriptSuccess([ 14631966c248SBram Moolenaar 'vim9script', 14641966c248SBram Moolenaar 'hi link This Search # comment', 14651966c248SBram Moolenaar ]) 14661966c248SBram Moolenaar CheckScriptFailure([ 14671966c248SBram Moolenaar 'vim9script', 14681966c248SBram Moolenaar 'hi link This That# comment', 14691966c248SBram Moolenaar ], 'E413:') 14701966c248SBram Moolenaar CheckScriptSuccess([ 14711966c248SBram Moolenaar 'vim9script', 14721966c248SBram Moolenaar 'hi clear This # comment', 14731966c248SBram Moolenaar 'hi clear # comment', 14741966c248SBram Moolenaar ]) 14751966c248SBram Moolenaar " not tested, because it doesn't give an error but a warning: 14761966c248SBram Moolenaar " hi clear This# comment', 14771966c248SBram Moolenaar CheckScriptFailure([ 14781966c248SBram Moolenaar 'vim9script', 14791966c248SBram Moolenaar 'hi clear# comment', 14801966c248SBram Moolenaar ], 'E416:') 14811966c248SBram Moolenaar 14821966c248SBram Moolenaar CheckScriptSuccess([ 14831966c248SBram Moolenaar 'vim9script', 14841966c248SBram Moolenaar 'hi Group term=bold', 14851966c248SBram Moolenaar 'match Group /todo/ # comment', 14861966c248SBram Moolenaar ]) 14871966c248SBram Moolenaar CheckScriptFailure([ 14881966c248SBram Moolenaar 'vim9script', 14891966c248SBram Moolenaar 'hi Group term=bold', 14901966c248SBram Moolenaar 'match Group /todo/# comment', 14911966c248SBram Moolenaar ], 'E488:') 14921966c248SBram Moolenaar CheckScriptSuccess([ 14931966c248SBram Moolenaar 'vim9script', 14941966c248SBram Moolenaar 'match # comment', 14951966c248SBram Moolenaar ]) 14961966c248SBram Moolenaar CheckScriptFailure([ 14971966c248SBram Moolenaar 'vim9script', 14981966c248SBram Moolenaar 'match# comment', 14991966c248SBram Moolenaar ], 'E475:') 15001966c248SBram Moolenaar CheckScriptSuccess([ 15011966c248SBram Moolenaar 'vim9script', 15021966c248SBram Moolenaar 'match none # comment', 15031966c248SBram Moolenaar ]) 15041966c248SBram Moolenaar CheckScriptFailure([ 15051966c248SBram Moolenaar 'vim9script', 15061966c248SBram Moolenaar 'match none# comment', 15071966c248SBram Moolenaar ], 'E475:') 15081966c248SBram Moolenaar 15091966c248SBram Moolenaar CheckScriptSuccess([ 15101966c248SBram Moolenaar 'vim9script', 15111966c248SBram Moolenaar 'menutrans clear # comment', 15121966c248SBram Moolenaar ]) 15131966c248SBram Moolenaar CheckScriptFailure([ 15141966c248SBram Moolenaar 'vim9script', 15151966c248SBram Moolenaar 'menutrans clear# comment text', 15161966c248SBram Moolenaar ], 'E474:') 15171966c248SBram Moolenaar 15181966c248SBram Moolenaar CheckScriptSuccess([ 15191966c248SBram Moolenaar 'vim9script', 15201966c248SBram Moolenaar 'syntax clear # comment', 15211966c248SBram Moolenaar ]) 15221966c248SBram Moolenaar CheckScriptFailure([ 15231966c248SBram Moolenaar 'vim9script', 15241966c248SBram Moolenaar 'syntax clear# comment text', 15251966c248SBram Moolenaar ], 'E28:') 15261966c248SBram Moolenaar CheckScriptSuccess([ 15271966c248SBram Moolenaar 'vim9script', 15281966c248SBram Moolenaar 'syntax keyword Word some', 15291966c248SBram Moolenaar 'syntax clear Word # comment', 15301966c248SBram Moolenaar ]) 15311966c248SBram Moolenaar CheckScriptFailure([ 15321966c248SBram Moolenaar 'vim9script', 15331966c248SBram Moolenaar 'syntax keyword Word some', 15341966c248SBram Moolenaar 'syntax clear Word# comment text', 15351966c248SBram Moolenaar ], 'E28:') 15361966c248SBram Moolenaar 15371966c248SBram Moolenaar CheckScriptSuccess([ 15381966c248SBram Moolenaar 'vim9script', 15391966c248SBram Moolenaar 'syntax list # comment', 15401966c248SBram Moolenaar ]) 15411966c248SBram Moolenaar CheckScriptFailure([ 15421966c248SBram Moolenaar 'vim9script', 15431966c248SBram Moolenaar 'syntax list# comment text', 15441966c248SBram Moolenaar ], 'E28:') 15451966c248SBram Moolenaar 15461966c248SBram Moolenaar CheckScriptSuccess([ 15471966c248SBram Moolenaar 'vim9script', 15481966c248SBram Moolenaar 'syntax match Word /pat/ oneline # comment', 15491966c248SBram Moolenaar ]) 15501966c248SBram Moolenaar CheckScriptFailure([ 15511966c248SBram Moolenaar 'vim9script', 15521966c248SBram Moolenaar 'syntax match Word /pat/ oneline# comment', 15531966c248SBram Moolenaar ], 'E475:') 15541966c248SBram Moolenaar 15551966c248SBram Moolenaar CheckScriptSuccess([ 15561966c248SBram Moolenaar 'vim9script', 15571966c248SBram Moolenaar 'syntax keyword Word word # comm[ent', 15581966c248SBram Moolenaar ]) 15591966c248SBram Moolenaar CheckScriptFailure([ 15601966c248SBram Moolenaar 'vim9script', 15611966c248SBram Moolenaar 'syntax keyword Word word# comm[ent', 15621966c248SBram Moolenaar ], 'E789:') 15631966c248SBram Moolenaar 15641966c248SBram Moolenaar CheckScriptSuccess([ 15651966c248SBram Moolenaar 'vim9script', 15661966c248SBram Moolenaar 'syntax match Word /pat/ # comment', 15671966c248SBram Moolenaar ]) 15681966c248SBram Moolenaar CheckScriptFailure([ 15691966c248SBram Moolenaar 'vim9script', 15701966c248SBram Moolenaar 'syntax match Word /pat/# comment', 15711966c248SBram Moolenaar ], 'E402:') 15721966c248SBram Moolenaar 15731966c248SBram Moolenaar CheckScriptSuccess([ 15741966c248SBram Moolenaar 'vim9script', 15751966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something # comment', 15761966c248SBram Moolenaar ]) 15771966c248SBram Moolenaar CheckScriptFailure([ 15781966c248SBram Moolenaar 'vim9script', 15791966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something# comment', 15801966c248SBram Moolenaar ], 'E475:') 15811966c248SBram Moolenaar CheckScriptFailure([ 15821966c248SBram Moolenaar 'vim9script', 15831966c248SBram Moolenaar 'syntax match Word /pat/ contains= # comment', 15841966c248SBram Moolenaar ], 'E406:') 15851966c248SBram Moolenaar CheckScriptFailure([ 15861966c248SBram Moolenaar 'vim9script', 15871966c248SBram Moolenaar 'syntax match Word /pat/ contains=# comment', 15881966c248SBram Moolenaar ], 'E475:') 15891966c248SBram Moolenaar 15901966c248SBram Moolenaar CheckScriptSuccess([ 15911966c248SBram Moolenaar 'vim9script', 15921966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/ # comment', 15931966c248SBram Moolenaar ]) 15941966c248SBram Moolenaar CheckScriptFailure([ 15951966c248SBram Moolenaar 'vim9script', 15961966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/# comment', 15971966c248SBram Moolenaar ], 'E475:') 15981966c248SBram Moolenaar 15991966c248SBram Moolenaar CheckScriptSuccess([ 16001966c248SBram Moolenaar 'vim9script', 16011966c248SBram Moolenaar 'syntax sync # comment', 16021966c248SBram Moolenaar ]) 16031966c248SBram Moolenaar CheckScriptFailure([ 16041966c248SBram Moolenaar 'vim9script', 16051966c248SBram Moolenaar 'syntax sync# comment', 16061966c248SBram Moolenaar ], 'E404:') 16071966c248SBram Moolenaar CheckScriptSuccess([ 16081966c248SBram Moolenaar 'vim9script', 16091966c248SBram Moolenaar 'syntax sync ccomment # comment', 16101966c248SBram Moolenaar ]) 16111966c248SBram Moolenaar CheckScriptFailure([ 16121966c248SBram Moolenaar 'vim9script', 16131966c248SBram Moolenaar 'syntax sync ccomment# comment', 16141966c248SBram Moolenaar ], 'E404:') 16151966c248SBram Moolenaar 16161966c248SBram Moolenaar CheckScriptSuccess([ 16171966c248SBram Moolenaar 'vim9script', 16181966c248SBram Moolenaar 'syntax cluster Some contains=Word # comment', 16191966c248SBram Moolenaar ]) 16201966c248SBram Moolenaar CheckScriptFailure([ 16211966c248SBram Moolenaar 'vim9script', 16221966c248SBram Moolenaar 'syntax cluster Some contains=Word# comment', 16231966c248SBram Moolenaar ], 'E475:') 1624a72cfb80SBram Moolenaar 1625a72cfb80SBram Moolenaar CheckScriptSuccess([ 1626a72cfb80SBram Moolenaar 'vim9script', 1627a72cfb80SBram Moolenaar 'command Echo echo # comment', 1628a72cfb80SBram Moolenaar 'command Echo # comment', 1629a72cfb80SBram Moolenaar ]) 1630a72cfb80SBram Moolenaar CheckScriptFailure([ 1631a72cfb80SBram Moolenaar 'vim9script', 1632a72cfb80SBram Moolenaar 'command Echo echo# comment', 1633a72cfb80SBram Moolenaar 'Echo', 1634a72cfb80SBram Moolenaar ], 'E121:') 1635a72cfb80SBram Moolenaar CheckScriptFailure([ 1636a72cfb80SBram Moolenaar 'vim9script', 1637a72cfb80SBram Moolenaar 'command Echo# comment', 1638a72cfb80SBram Moolenaar ], 'E182:') 1639a72cfb80SBram Moolenaar CheckScriptFailure([ 1640a72cfb80SBram Moolenaar 'vim9script', 1641a72cfb80SBram Moolenaar 'command Echo echo', 1642a72cfb80SBram Moolenaar 'command Echo# comment', 1643a72cfb80SBram Moolenaar ], 'E182:') 1644a72cfb80SBram Moolenaar 1645a72cfb80SBram Moolenaar CheckScriptSuccess([ 1646a72cfb80SBram Moolenaar 'vim9script', 1647a72cfb80SBram Moolenaar 'function # comment', 1648a72cfb80SBram Moolenaar ]) 1649a72cfb80SBram Moolenaar CheckScriptFailure([ 1650a72cfb80SBram Moolenaar 'vim9script', 1651a72cfb80SBram Moolenaar 'function# comment', 1652a72cfb80SBram Moolenaar ], 'E129:') 1653a72cfb80SBram Moolenaar CheckScriptSuccess([ 1654a72cfb80SBram Moolenaar 'vim9script', 1655a72cfb80SBram Moolenaar 'function CheckScriptSuccess # comment', 1656a72cfb80SBram Moolenaar ]) 1657a72cfb80SBram Moolenaar CheckScriptFailure([ 1658a72cfb80SBram Moolenaar 'vim9script', 1659a72cfb80SBram Moolenaar 'function CheckScriptSuccess# comment', 1660a72cfb80SBram Moolenaar ], 'E488:') 1661a72cfb80SBram Moolenaar 1662a72cfb80SBram Moolenaar CheckScriptSuccess([ 1663a72cfb80SBram Moolenaar 'vim9script', 16644c17ad94SBram Moolenaar 'func g:DeleteMeA()', 1665a72cfb80SBram Moolenaar 'endfunc', 16664c17ad94SBram Moolenaar 'delfunction g:DeleteMeA # comment', 1667a72cfb80SBram Moolenaar ]) 1668a72cfb80SBram Moolenaar CheckScriptFailure([ 1669a72cfb80SBram Moolenaar 'vim9script', 16704c17ad94SBram Moolenaar 'func g:DeleteMeB()', 1671a72cfb80SBram Moolenaar 'endfunc', 16724c17ad94SBram Moolenaar 'delfunction g:DeleteMeB# comment', 1673a72cfb80SBram Moolenaar ], 'E488:') 1674a72cfb80SBram Moolenaar 1675a72cfb80SBram Moolenaar CheckScriptSuccess([ 1676a72cfb80SBram Moolenaar 'vim9script', 1677a72cfb80SBram Moolenaar 'call execute("ls") # comment', 1678a72cfb80SBram Moolenaar ]) 1679a72cfb80SBram Moolenaar CheckScriptFailure([ 1680a72cfb80SBram Moolenaar 'vim9script', 1681a72cfb80SBram Moolenaar 'call execute("ls")# comment', 1682a72cfb80SBram Moolenaar ], 'E488:') 16832c5ed4e3SBram Moolenaarenddef 16842c5ed4e3SBram Moolenaar 16852c5ed4e3SBram Moolenaardef Test_vim9_comment_gui() 16862c5ed4e3SBram Moolenaar CheckCanRunGui 16872c5ed4e3SBram Moolenaar 16882c5ed4e3SBram Moolenaar CheckScriptFailure([ 16892c5ed4e3SBram Moolenaar 'vim9script', 16902c5ed4e3SBram Moolenaar 'gui#comment' 16912c5ed4e3SBram Moolenaar ], 'E499:') 16922c5ed4e3SBram Moolenaar CheckScriptFailure([ 16932c5ed4e3SBram Moolenaar 'vim9script', 16942c5ed4e3SBram Moolenaar 'gui -f#comment' 16952c5ed4e3SBram Moolenaar ], 'E499:') 16967a092245SBram Moolenaarenddef 16977a092245SBram Moolenaar 1698a26b9700SBram Moolenaardef Test_vim9_comment_not_compiled() 1699a26b9700SBram Moolenaar au TabEnter *.vim let g:entered = 1 1700a26b9700SBram Moolenaar au TabEnter *.x let g:entered = 2 1701a26b9700SBram Moolenaar 1702a26b9700SBram Moolenaar edit test.vim 1703a26b9700SBram Moolenaar doautocmd TabEnter #comment 1704a26b9700SBram Moolenaar assert_equal(1, g:entered) 1705a26b9700SBram Moolenaar 1706a26b9700SBram Moolenaar doautocmd TabEnter f.x 1707a26b9700SBram Moolenaar assert_equal(2, g:entered) 1708a26b9700SBram Moolenaar 1709a26b9700SBram Moolenaar g:entered = 0 1710a26b9700SBram Moolenaar doautocmd TabEnter f.x #comment 1711a26b9700SBram Moolenaar assert_equal(2, g:entered) 1712a26b9700SBram Moolenaar 1713a26b9700SBram Moolenaar assert_fails('doautocmd Syntax#comment', 'E216:') 1714a26b9700SBram Moolenaar 1715a26b9700SBram Moolenaar au! TabEnter 1716a26b9700SBram Moolenaar unlet g:entered 1717d72c1bf0SBram Moolenaar 1718d72c1bf0SBram Moolenaar CheckScriptSuccess([ 1719d72c1bf0SBram Moolenaar 'vim9script', 1720d72c1bf0SBram Moolenaar 'let g:var = 123', 1721d72c1bf0SBram Moolenaar 'let w:var = 777', 1722d72c1bf0SBram Moolenaar 'unlet g:var w:var # something', 1723d72c1bf0SBram Moolenaar ]) 1724d72c1bf0SBram Moolenaar 1725d72c1bf0SBram Moolenaar CheckScriptFailure([ 1726d72c1bf0SBram Moolenaar 'vim9script', 1727d72c1bf0SBram Moolenaar 'let g:var = 123', 172832e35117SBram Moolenaar 'unlet g:var# comment1', 1729d72c1bf0SBram Moolenaar ], 'E108:') 1730d72c1bf0SBram Moolenaar 1731d72c1bf0SBram Moolenaar CheckScriptFailure([ 1732d72c1bf0SBram Moolenaar 'let g:var = 123', 1733d72c1bf0SBram Moolenaar 'unlet g:var # something', 1734d72c1bf0SBram Moolenaar ], 'E488:') 1735faac4104SBram Moolenaar 1736faac4104SBram Moolenaar CheckScriptSuccess([ 1737faac4104SBram Moolenaar 'vim9script', 173832e35117SBram Moolenaar 'if 1 # comment2', 1739faac4104SBram Moolenaar ' echo "yes"', 1740faac4104SBram Moolenaar 'elseif 2 #comment', 1741faac4104SBram Moolenaar ' echo "no"', 1742faac4104SBram Moolenaar 'endif', 1743faac4104SBram Moolenaar ]) 1744faac4104SBram Moolenaar 1745faac4104SBram Moolenaar CheckScriptFailure([ 1746faac4104SBram Moolenaar 'vim9script', 174732e35117SBram Moolenaar 'if 1# comment3', 1748faac4104SBram Moolenaar ' echo "yes"', 1749faac4104SBram Moolenaar 'endif', 1750faac4104SBram Moolenaar ], 'E15:') 1751faac4104SBram Moolenaar 1752faac4104SBram Moolenaar CheckScriptFailure([ 1753faac4104SBram Moolenaar 'vim9script', 175432e35117SBram Moolenaar 'if 0 # comment4', 1755faac4104SBram Moolenaar ' echo "yes"', 1756faac4104SBram Moolenaar 'elseif 2#comment', 1757faac4104SBram Moolenaar ' echo "no"', 1758faac4104SBram Moolenaar 'endif', 1759faac4104SBram Moolenaar ], 'E15:') 1760faac4104SBram Moolenaar 1761faac4104SBram Moolenaar CheckScriptSuccess([ 1762faac4104SBram Moolenaar 'vim9script', 176332e35117SBram Moolenaar 'let v = 1 # comment5', 1764faac4104SBram Moolenaar ]) 1765faac4104SBram Moolenaar 1766faac4104SBram Moolenaar CheckScriptFailure([ 1767faac4104SBram Moolenaar 'vim9script', 176832e35117SBram Moolenaar 'let v = 1# comment6', 176932e35117SBram Moolenaar ], 'E15:') 1770faac4104SBram Moolenaar 1771faac4104SBram Moolenaar CheckScriptSuccess([ 1772faac4104SBram Moolenaar 'vim9script', 1773faac4104SBram Moolenaar 'new' 1774faac4104SBram Moolenaar 'call setline(1, ["# define pat", "last"])', 1775faac4104SBram Moolenaar '$', 1776faac4104SBram Moolenaar 'dsearch /pat/ #comment', 1777faac4104SBram Moolenaar 'bwipe!', 1778faac4104SBram Moolenaar ]) 1779faac4104SBram Moolenaar 1780faac4104SBram Moolenaar CheckScriptFailure([ 1781faac4104SBram Moolenaar 'vim9script', 1782faac4104SBram Moolenaar 'new' 1783faac4104SBram Moolenaar 'call setline(1, ["# define pat", "last"])', 1784faac4104SBram Moolenaar '$', 1785faac4104SBram Moolenaar 'dsearch /pat/#comment', 1786faac4104SBram Moolenaar 'bwipe!', 1787faac4104SBram Moolenaar ], 'E488:') 178874fae513SBram Moolenaar 178974fae513SBram Moolenaar CheckScriptFailure([ 179074fae513SBram Moolenaar 'vim9script', 179174fae513SBram Moolenaar 'func! SomeFunc()', 179274fae513SBram Moolenaar ], 'E477:') 1793a26b9700SBram Moolenaarenddef 1794a26b9700SBram Moolenaar 17957e5bd91dSBram Moolenaardef Test_finish() 17967e5bd91dSBram Moolenaar let lines =<< trim END 17977e5bd91dSBram Moolenaar vim9script 17987e5bd91dSBram Moolenaar let g:res = 'one' 17997e5bd91dSBram Moolenaar if v:false | finish | endif 18007e5bd91dSBram Moolenaar let g:res = 'two' 18017e5bd91dSBram Moolenaar finish 18027e5bd91dSBram Moolenaar let g:res = 'three' 18037e5bd91dSBram Moolenaar END 18047e5bd91dSBram Moolenaar writefile(lines, 'Xfinished') 18057e5bd91dSBram Moolenaar source Xfinished 18067e5bd91dSBram Moolenaar assert_equal('two', g:res) 18077e5bd91dSBram Moolenaar 18087e5bd91dSBram Moolenaar unlet g:res 18097e5bd91dSBram Moolenaar delete('Xfinished') 18107e5bd91dSBram Moolenaarenddef 18117e5bd91dSBram Moolenaar 181232e35117SBram Moolenaardef Test_let_func_call() 181332e35117SBram Moolenaar let lines =<< trim END 181432e35117SBram Moolenaar vim9script 181532e35117SBram Moolenaar func GetValue() 181632e35117SBram Moolenaar if exists('g:count') 181732e35117SBram Moolenaar let g:count += 1 181832e35117SBram Moolenaar else 181932e35117SBram Moolenaar let g:count = 1 182032e35117SBram Moolenaar endif 182132e35117SBram Moolenaar return 'this' 182232e35117SBram Moolenaar endfunc 182332e35117SBram Moolenaar let val: string = GetValue() 1824df671b46SBram Moolenaar " env var is always a string 1825df671b46SBram Moolenaar let env = $TERM 182632e35117SBram Moolenaar END 182732e35117SBram Moolenaar writefile(lines, 'Xfinished') 182832e35117SBram Moolenaar source Xfinished 1829a5d0077eSBram Moolenaar " GetValue() is not called during discovery phase 183032e35117SBram Moolenaar assert_equal(1, g:count) 183132e35117SBram Moolenaar 183232e35117SBram Moolenaar unlet g:count 183332e35117SBram Moolenaar delete('Xfinished') 183432e35117SBram Moolenaarenddef 183532e35117SBram Moolenaar 183632e35117SBram Moolenaardef Test_let_missing_type() 183732e35117SBram Moolenaar let lines =<< trim END 183832e35117SBram Moolenaar vim9script 1839df671b46SBram Moolenaar let var = g:unknown 1840227a69deSBram Moolenaar END 1841822ba247SBram Moolenaar CheckScriptFailure(lines, 'E121:') 1842227a69deSBram Moolenaar 1843227a69deSBram Moolenaar lines =<< trim END 1844227a69deSBram Moolenaar vim9script 1845227a69deSBram Moolenaar let nr: number = 123 1846227a69deSBram Moolenaar let var = nr 1847227a69deSBram Moolenaar END 1848822ba247SBram Moolenaar CheckScriptSuccess(lines) 184932e35117SBram Moolenaarenddef 185032e35117SBram Moolenaar 1851c82a5b5dSBram Moolenaardef Test_let_declaration() 1852c82a5b5dSBram Moolenaar let lines =<< trim END 1853c82a5b5dSBram Moolenaar vim9script 1854c82a5b5dSBram Moolenaar let var: string 1855c82a5b5dSBram Moolenaar g:var_uninit = var 1856c82a5b5dSBram Moolenaar var = 'text' 1857c82a5b5dSBram Moolenaar g:var_test = var 1858984dddbeSBram Moolenaar " prefixing s: is optional 1859984dddbeSBram Moolenaar s:var = 'prefixed' 1860984dddbeSBram Moolenaar g:var_prefixed = s:var 1861984dddbeSBram Moolenaar 1862984dddbeSBram Moolenaar let s:other: number 1863984dddbeSBram Moolenaar other = 1234 1864984dddbeSBram Moolenaar g:other_var = other 1865c82a5b5dSBram Moolenaar END 1866c82a5b5dSBram Moolenaar CheckScriptSuccess(lines) 1867c82a5b5dSBram Moolenaar assert_equal('', g:var_uninit) 1868c82a5b5dSBram Moolenaar assert_equal('text', g:var_test) 1869984dddbeSBram Moolenaar assert_equal('prefixed', g:var_prefixed) 1870984dddbeSBram Moolenaar assert_equal(1234, g:other_var) 1871c82a5b5dSBram Moolenaar 1872c82a5b5dSBram Moolenaar unlet g:var_uninit 1873c82a5b5dSBram Moolenaar unlet g:var_test 1874984dddbeSBram Moolenaar unlet g:var_prefixed 1875984dddbeSBram Moolenaar unlet g:other_var 1876c82a5b5dSBram Moolenaarenddef 1877c82a5b5dSBram Moolenaar 187834db91f7SBram Moolenaardef Test_let_type_check() 187934db91f7SBram Moolenaar let lines =<< trim END 188034db91f7SBram Moolenaar vim9script 188134db91f7SBram Moolenaar let var: string 188234db91f7SBram Moolenaar var = 1234 188334db91f7SBram Moolenaar END 188434db91f7SBram Moolenaar CheckScriptFailure(lines, 'E1013:') 1885984dddbeSBram Moolenaar 1886984dddbeSBram Moolenaar lines =<< trim END 1887984dddbeSBram Moolenaar vim9script 1888984dddbeSBram Moolenaar let var:string 1889984dddbeSBram Moolenaar END 1890984dddbeSBram Moolenaar CheckScriptFailure(lines, 'E1069:') 189134db91f7SBram Moolenaarenddef 189234db91f7SBram Moolenaar 1893a5d0077eSBram Moolenaardef Test_forward_declaration() 1894a5d0077eSBram Moolenaar let lines =<< trim END 1895a5d0077eSBram Moolenaar vim9script 1896a5d0077eSBram Moolenaar def GetValue(): string 1897a5d0077eSBram Moolenaar return theVal 1898a5d0077eSBram Moolenaar enddef 1899a5d0077eSBram Moolenaar let theVal = 'something' 1900822ba247SBram Moolenaar g:initVal = GetValue() 1901a5d0077eSBram Moolenaar theVal = 'else' 1902a5d0077eSBram Moolenaar g:laterVal = GetValue() 1903a5d0077eSBram Moolenaar END 1904a5d0077eSBram Moolenaar writefile(lines, 'Xforward') 1905a5d0077eSBram Moolenaar source Xforward 1906a5d0077eSBram Moolenaar assert_equal('something', g:initVal) 1907a5d0077eSBram Moolenaar assert_equal('else', g:laterVal) 1908a5d0077eSBram Moolenaar 1909a5d0077eSBram Moolenaar unlet g:initVal 1910a5d0077eSBram Moolenaar unlet g:laterVal 1911a5d0077eSBram Moolenaar delete('Xforward') 1912a5d0077eSBram Moolenaarenddef 1913a5d0077eSBram Moolenaar 19149721fb4eSBram Moolenaardef Test_source_vim9_from_legacy() 19159721fb4eSBram Moolenaar let legacy_lines =<< trim END 19169721fb4eSBram Moolenaar source Xvim9_script.vim 19179721fb4eSBram Moolenaar 19189721fb4eSBram Moolenaar call assert_false(exists('local')) 19199721fb4eSBram Moolenaar call assert_false(exists('exported')) 19209721fb4eSBram Moolenaar call assert_false(exists('s:exported')) 19219721fb4eSBram Moolenaar call assert_equal('global', global) 19229721fb4eSBram Moolenaar call assert_equal('global', g:global) 19239721fb4eSBram Moolenaar 19249721fb4eSBram Moolenaar " imported variable becomes script-local 19259721fb4eSBram Moolenaar import exported from './Xvim9_script.vim' 19269721fb4eSBram Moolenaar call assert_equal('exported', s:exported) 19279721fb4eSBram Moolenaar call assert_false(exists('exported')) 19289721fb4eSBram Moolenaar 19299721fb4eSBram Moolenaar " imported function becomes script-local 19309721fb4eSBram Moolenaar import GetText from './Xvim9_script.vim' 19319721fb4eSBram Moolenaar call assert_equal('text', s:GetText()) 19329721fb4eSBram Moolenaar call assert_false(exists('*GetText')) 19339721fb4eSBram Moolenaar END 19349721fb4eSBram Moolenaar writefile(legacy_lines, 'Xlegacy_script.vim') 19359721fb4eSBram Moolenaar 19369721fb4eSBram Moolenaar let vim9_lines =<< trim END 19379721fb4eSBram Moolenaar vim9script 19389721fb4eSBram Moolenaar let local = 'local' 19399721fb4eSBram Moolenaar g:global = 'global' 19409721fb4eSBram Moolenaar export let exported = 'exported' 19419721fb4eSBram Moolenaar export def GetText(): string 19429721fb4eSBram Moolenaar return 'text' 19439721fb4eSBram Moolenaar enddef 19449721fb4eSBram Moolenaar END 19459721fb4eSBram Moolenaar writefile(vim9_lines, 'Xvim9_script.vim') 19469721fb4eSBram Moolenaar 19479721fb4eSBram Moolenaar source Xlegacy_script.vim 19489721fb4eSBram Moolenaar 19499721fb4eSBram Moolenaar assert_equal('global', g:global) 19509721fb4eSBram Moolenaar" unlet g:global 19519721fb4eSBram Moolenaar 19529721fb4eSBram Moolenaar delete('Xlegacy_script.vim') 19539721fb4eSBram Moolenaar delete('Xvim9_script.vim') 19549721fb4eSBram Moolenaarenddef 1955a5d0077eSBram Moolenaar 1956585fea7bSBram Moolenaar" Keep this last, it messes up highlighting. 1957585fea7bSBram Moolenaardef Test_substitute_cmd() 1958585fea7bSBram Moolenaar new 1959585fea7bSBram Moolenaar setline(1, 'something') 1960585fea7bSBram Moolenaar :substitute(some(other( 1961585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 1962585fea7bSBram Moolenaar bwipe! 1963585fea7bSBram Moolenaar 1964585fea7bSBram Moolenaar " also when the context is Vim9 script 1965585fea7bSBram Moolenaar let lines =<< trim END 1966585fea7bSBram Moolenaar vim9script 1967585fea7bSBram Moolenaar new 1968585fea7bSBram Moolenaar setline(1, 'something') 1969585fea7bSBram Moolenaar :substitute(some(other( 1970585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 1971585fea7bSBram Moolenaar bwipe! 1972585fea7bSBram Moolenaar END 1973585fea7bSBram Moolenaar writefile(lines, 'Xvim9lines') 1974585fea7bSBram Moolenaar source Xvim9lines 1975585fea7bSBram Moolenaar 1976585fea7bSBram Moolenaar delete('Xvim9lines') 1977585fea7bSBram Moolenaarenddef 1978585fea7bSBram Moolenaar 19798a7d6542SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker 1980