18a7d6542SBram Moolenaar" Test various aspects of the Vim9 script language. 28a7d6542SBram Moolenaar 3673660abSBram Moolenaarsource check.vim 4101f4810SBram Moolenaarsource term_util.vim 5ad39c094SBram Moolenaarsource view_util.vim 6cfe435d7SBram Moolenaarsource vim9.vim 78a7d6542SBram Moolenaar 88a7d6542SBram Moolenaardef Test_syntax() 98a7d6542SBram Moolenaar let var = 234 108a7d6542SBram Moolenaar let other: list<string> = ['asdf'] 118a7d6542SBram Moolenaarenddef 128a7d6542SBram Moolenaar 136e587dcbSBram Moolenaarlet s:appendToMe = 'xxx' 146e587dcbSBram Moolenaarlet s:addToMe = 111 15401d9ffbSBram Moolenaarlet g:existing = 'yes' 16a8c17704SBram Moolenaarlet g:inc_counter = 1 17a8c17704SBram Moolenaarlet $SOME_ENV_VAR = 'some' 18a6e67e4fSBram Moolenaarlet g:alist = [7] 19a6e67e4fSBram Moolenaarlet g:astring = 'text' 206e587dcbSBram Moolenaar 218a7d6542SBram Moolenaardef Test_assignment() 228a7d6542SBram Moolenaar let bool1: bool = true 238a7d6542SBram Moolenaar assert_equal(v:true, bool1) 248a7d6542SBram Moolenaar let bool2: bool = false 258a7d6542SBram Moolenaar assert_equal(v:false, bool2) 268a7d6542SBram Moolenaar 27f93c7feaSBram Moolenaar call CheckDefFailure(['let x:string'], 'E1069:') 28f93c7feaSBram Moolenaar call CheckDefFailure(['let x:string = "x"'], 'E1069:') 291cc2a94fSBram Moolenaar call CheckDefFailure(['let a:string = "x"'], 'E1069:') 30f93c7feaSBram Moolenaar 319be61bbbSBram Moolenaar let a: number = 6 329be61bbbSBram Moolenaar assert_equal(6, a) 339be61bbbSBram Moolenaar 3442a480bfSBram Moolenaar if has('channel') 3542a480bfSBram Moolenaar let chan1: channel 36fbdd08edSBram Moolenaar let job1: job 37f51cb4e0SBram Moolenaar let job2: job = job_start('willfail') 3842a480bfSBram Moolenaar endif 39fbdd08edSBram Moolenaar if has('float') 40fbdd08edSBram Moolenaar let float1: float = 3.4 41fbdd08edSBram Moolenaar endif 425deeb3f1SBram Moolenaar let Funky1: func 435deeb3f1SBram Moolenaar let Funky2: func = function('len') 444c17ad94SBram Moolenaar let Party2: func = funcref('g:Test_syntax') 4542a480bfSBram Moolenaar 46401d9ffbSBram Moolenaar g:newvar = 'new' 47401d9ffbSBram Moolenaar assert_equal('new', g:newvar) 48401d9ffbSBram Moolenaar 49401d9ffbSBram Moolenaar assert_equal('yes', g:existing) 50401d9ffbSBram Moolenaar g:existing = 'no' 51401d9ffbSBram Moolenaar assert_equal('no', g:existing) 52401d9ffbSBram Moolenaar 53b283a8a6SBram Moolenaar v:char = 'abc' 546e587dcbSBram Moolenaar assert_equal('abc', v:char) 55b283a8a6SBram Moolenaar 56b283a8a6SBram Moolenaar $ENVVAR = 'foobar' 576e587dcbSBram Moolenaar assert_equal('foobar', $ENVVAR) 58b283a8a6SBram Moolenaar $ENVVAR = '' 596e587dcbSBram Moolenaar 60fd1823e0SBram Moolenaar s:appendToMe ..= 'yyy' 61fd1823e0SBram Moolenaar assert_equal('xxxyyy', s:appendToMe) 62fd1823e0SBram Moolenaar s:addToMe += 222 63fd1823e0SBram Moolenaar assert_equal(333, s:addToMe) 640bbf722aSBram Moolenaar s:newVar = 'new' 650bbf722aSBram Moolenaar assert_equal('new', s:newVar) 66a8c17704SBram Moolenaar 67a8c17704SBram Moolenaar set ts=7 68a8c17704SBram Moolenaar &ts += 1 69a8c17704SBram Moolenaar assert_equal(8, &ts) 7080c34ca3SBram Moolenaar &ts -= 3 7180c34ca3SBram Moolenaar assert_equal(5, &ts) 7280c34ca3SBram Moolenaar &ts *= 2 7380c34ca3SBram Moolenaar assert_equal(10, &ts) 7480c34ca3SBram Moolenaar &ts /= 3 7580c34ca3SBram Moolenaar assert_equal(3, &ts) 7680c34ca3SBram Moolenaar set ts=10 7780c34ca3SBram Moolenaar &ts %= 4 7880c34ca3SBram Moolenaar assert_equal(2, &ts) 79a8c17704SBram Moolenaar call CheckDefFailure(['¬ex += 3'], 'E113:') 80a8c17704SBram Moolenaar call CheckDefFailure(['&ts ..= "xxx"'], 'E1019:') 81a6e67e4fSBram Moolenaar call CheckDefFailure(['&ts = [7]'], 'E1013:') 82a6e67e4fSBram Moolenaar call CheckDefExecFailure(['&ts = g:alist'], 'E1029: Expected number but got list') 83a6e67e4fSBram Moolenaar call CheckDefFailure(['&ts = "xx"'], 'E1013:') 84a6e67e4fSBram Moolenaar call CheckDefExecFailure(['&ts = g:astring'], 'E1029: Expected number but got string') 85a8c17704SBram Moolenaar call CheckDefFailure(['&path += 3'], 'E1013:') 86a6e67e4fSBram Moolenaar call CheckDefExecFailure(['&bs = "asdf"'], 'E474:') 87cb711abfSBram Moolenaar # test freeing ISN_STOREOPT 88585fea7bSBram Moolenaar call CheckDefFailure(['&ts = 3', 'let asdf'], 'E1022:') 8980c34ca3SBram Moolenaar &ts = 8 90a8c17704SBram Moolenaar 91a8c17704SBram Moolenaar g:inc_counter += 1 92a8c17704SBram Moolenaar assert_equal(2, g:inc_counter) 93a8c17704SBram Moolenaar 94a8c17704SBram Moolenaar $SOME_ENV_VAR ..= 'more' 95a8c17704SBram Moolenaar assert_equal('somemore', $SOME_ENV_VAR) 96a8c17704SBram Moolenaar call CheckDefFailure(['$SOME_ENV_VAR += "more"'], 'E1013:') 97a8c17704SBram Moolenaar call CheckDefFailure(['$SOME_ENV_VAR += 123'], 'E1013:') 98a8c17704SBram Moolenaar 99a8c17704SBram Moolenaar @a = 'areg' 100a8c17704SBram Moolenaar @a ..= 'add' 101a8c17704SBram Moolenaar assert_equal('aregadd', @a) 102a8c17704SBram Moolenaar call CheckDefFailure(['@a += "more"'], 'E1013:') 103a8c17704SBram Moolenaar call CheckDefFailure(['@a += 123'], 'E1013:') 104e69f6d04SBram Moolenaar 105e69f6d04SBram Moolenaar v:errmsg = 'none' 106e69f6d04SBram Moolenaar v:errmsg ..= 'again' 107e69f6d04SBram Moolenaar assert_equal('noneagain', v:errmsg) 108e69f6d04SBram Moolenaar call CheckDefFailure(['v:errmsg += "more"'], 'E1013:') 109e69f6d04SBram Moolenaar call CheckDefFailure(['v:errmsg += 123'], 'E1013:') 1105deeb3f1SBram Moolenaarenddef 1115deeb3f1SBram Moolenaar 11284370087SBram Moolenaardef Test_assignment_list() 11384370087SBram Moolenaar let list1: list<bool> = [false, true, false] 11484370087SBram Moolenaar let list2: list<number> = [1, 2, 3] 11584370087SBram Moolenaar let list3: list<string> = ['sdf', 'asdf'] 11684370087SBram Moolenaar let list4: list<any> = ['yes', true, 1234] 11784370087SBram Moolenaar let list5: list<blob> = [0z01, 0z02] 11884370087SBram Moolenaar 11984370087SBram Moolenaar let listS: list<string> = [] 12084370087SBram Moolenaar let listN: list<number> = [] 12184370087SBram Moolenaar 12284370087SBram Moolenaar assert_equal([1, 2, 3], list2) 12384370087SBram Moolenaar list2[-1] = 99 12484370087SBram Moolenaar assert_equal([1, 2, 99], list2) 12584370087SBram Moolenaar list2[-2] = 88 12684370087SBram Moolenaar assert_equal([1, 88, 99], list2) 12784370087SBram Moolenaar list2[-3] = 77 12884370087SBram Moolenaar assert_equal([77, 88, 99], list2) 12984370087SBram Moolenaar call CheckDefExecFailure(['let ll = [1, 2, 3]', 'll[-4] = 6'], 'E684:') 13084370087SBram Moolenaar 13184370087SBram Moolenaar # type becomes list<any> 13284370087SBram Moolenaar let somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c'] 13384370087SBram Moolenaarenddef 13484370087SBram Moolenaar 13584370087SBram Moolenaardef Test_assignment_dict() 13684370087SBram Moolenaar let dict1: dict<bool> = #{one: false, two: true} 13784370087SBram Moolenaar let dict2: dict<number> = #{one: 1, two: 2} 13884370087SBram Moolenaar let dict3: dict<string> = #{key: 'value'} 13984370087SBram Moolenaar let dict4: dict<any> = #{one: 1, two: '2'} 14074fae513SBram Moolenaar let dict5: dict<blob> = #{one: 0z01, two: 0z02} 14184370087SBram Moolenaar 14284370087SBram Moolenaar call CheckDefExecFailure(['let dd = {}', 'dd[""] = 6'], 'E713:') 14384370087SBram Moolenaar 14484370087SBram Moolenaar # type becomes dict<any> 14584370087SBram Moolenaar let somedict = rand() > 0 ? #{a: 1, b: 2} : #{a: 'a', b: 'b'} 14684370087SBram Moolenaarenddef 14784370087SBram Moolenaar 148d3aac291SBram Moolenaardef Test_assignment_local() 149d3aac291SBram Moolenaar " Test in a separated file in order not to the current buffer/window/tab is 150d3aac291SBram Moolenaar " changed. 151d3aac291SBram Moolenaar let script_lines: list<string> =<< trim END 152d3aac291SBram Moolenaar let b:existing = 'yes' 153d3aac291SBram Moolenaar let w:existing = 'yes' 154d3aac291SBram Moolenaar let t:existing = 'yes' 155d3aac291SBram Moolenaar 156d3aac291SBram Moolenaar def Test_assignment_local_internal() 157d3aac291SBram Moolenaar b:newvar = 'new' 158d3aac291SBram Moolenaar assert_equal('new', b:newvar) 159d3aac291SBram Moolenaar assert_equal('yes', b:existing) 160d3aac291SBram Moolenaar b:existing = 'no' 161d3aac291SBram Moolenaar assert_equal('no', b:existing) 162396f3138SBram Moolenaar b:existing ..= 'NO' 163396f3138SBram Moolenaar assert_equal('noNO', b:existing) 164d3aac291SBram Moolenaar 165d3aac291SBram Moolenaar w:newvar = 'new' 166d3aac291SBram Moolenaar assert_equal('new', w:newvar) 167d3aac291SBram Moolenaar assert_equal('yes', w:existing) 168d3aac291SBram Moolenaar w:existing = 'no' 169d3aac291SBram Moolenaar assert_equal('no', w:existing) 170396f3138SBram Moolenaar w:existing ..= 'NO' 171396f3138SBram Moolenaar assert_equal('noNO', w:existing) 172d3aac291SBram Moolenaar 173d3aac291SBram Moolenaar t:newvar = 'new' 174d3aac291SBram Moolenaar assert_equal('new', t:newvar) 175d3aac291SBram Moolenaar assert_equal('yes', t:existing) 176d3aac291SBram Moolenaar t:existing = 'no' 177d3aac291SBram Moolenaar assert_equal('no', t:existing) 178396f3138SBram Moolenaar t:existing ..= 'NO' 179396f3138SBram Moolenaar assert_equal('noNO', t:existing) 180d3aac291SBram Moolenaar enddef 181d3aac291SBram Moolenaar call Test_assignment_local_internal() 182d3aac291SBram Moolenaar END 183d3aac291SBram Moolenaar call CheckScriptSuccess(script_lines) 184d3aac291SBram Moolenaarenddef 185d3aac291SBram Moolenaar 1865deeb3f1SBram Moolenaardef Test_assignment_default() 187e69f6d04SBram Moolenaar 188cb711abfSBram Moolenaar # Test default values. 189e69f6d04SBram Moolenaar let thebool: bool 190e69f6d04SBram Moolenaar assert_equal(v:false, thebool) 191e69f6d04SBram Moolenaar 192e69f6d04SBram Moolenaar let thenumber: number 193e69f6d04SBram Moolenaar assert_equal(0, thenumber) 194e69f6d04SBram Moolenaar 195e69f6d04SBram Moolenaar if has('float') 196e69f6d04SBram Moolenaar let thefloat: float 197e69f6d04SBram Moolenaar assert_equal(0.0, thefloat) 198e69f6d04SBram Moolenaar endif 199e69f6d04SBram Moolenaar 200e69f6d04SBram Moolenaar let thestring: string 201e69f6d04SBram Moolenaar assert_equal('', thestring) 202e69f6d04SBram Moolenaar 203e69f6d04SBram Moolenaar let theblob: blob 204e69f6d04SBram Moolenaar assert_equal(0z, theblob) 205e69f6d04SBram Moolenaar 2065deeb3f1SBram Moolenaar let Thefunc: func 2075deeb3f1SBram Moolenaar assert_equal(test_null_function(), Thefunc) 208e69f6d04SBram Moolenaar 209e69f6d04SBram Moolenaar let thelist: list<any> 210e69f6d04SBram Moolenaar assert_equal([], thelist) 211e69f6d04SBram Moolenaar 212e69f6d04SBram Moolenaar let thedict: dict<any> 213e69f6d04SBram Moolenaar assert_equal({}, thedict) 214e69f6d04SBram Moolenaar 2152c869deeSBram Moolenaar if has('channel') 216e69f6d04SBram Moolenaar let thejob: job 217e69f6d04SBram Moolenaar assert_equal(test_null_job(), thejob) 218e69f6d04SBram Moolenaar 219e69f6d04SBram Moolenaar let thechannel: channel 220e69f6d04SBram Moolenaar assert_equal(test_null_channel(), thechannel) 2212c869deeSBram Moolenaar endif 222585fea7bSBram Moolenaar 223585fea7bSBram Moolenaar let nr = 1234 | nr = 5678 224585fea7bSBram Moolenaar assert_equal(5678, nr) 2258a7d6542SBram Moolenaarenddef 2268a7d6542SBram Moolenaar 22747a519a9SBram Moolenaardef Test_assignment_var_list() 22847a519a9SBram Moolenaar let v1: string 22947a519a9SBram Moolenaar let v2: string 2309af78769SBram Moolenaar let vrem: list<string> 2319af78769SBram Moolenaar [v1] = ['aaa'] 2329af78769SBram Moolenaar assert_equal('aaa', v1) 2339af78769SBram Moolenaar 23447a519a9SBram Moolenaar [v1, v2] = ['one', 'two'] 23547a519a9SBram Moolenaar assert_equal('one', v1) 23647a519a9SBram Moolenaar assert_equal('two', v2) 2379af78769SBram Moolenaar 2389af78769SBram Moolenaar [v1, v2; vrem] = ['one', 'two'] 2399af78769SBram Moolenaar assert_equal('one', v1) 2409af78769SBram Moolenaar assert_equal('two', v2) 2419af78769SBram Moolenaar assert_equal([], vrem) 2429af78769SBram Moolenaar 2439af78769SBram Moolenaar [v1, v2; vrem] = ['one', 'two', 'three'] 2449af78769SBram Moolenaar assert_equal('one', v1) 2459af78769SBram Moolenaar assert_equal('two', v2) 2469af78769SBram Moolenaar assert_equal(['three'], vrem) 24747a519a9SBram Moolenaarenddef 24847a519a9SBram Moolenaar 249cab27678SBram Moolenaardef Mess(): string 250cab27678SBram Moolenaar v:foldstart = 123 251cab27678SBram Moolenaar return 'xxx' 252cab27678SBram Moolenaarenddef 253cab27678SBram Moolenaar 254d72c1bf0SBram Moolenaardef Test_assignment_failure() 2558a7d6542SBram Moolenaar call CheckDefFailure(['let var=234'], 'E1004:') 2568a7d6542SBram Moolenaar call CheckDefFailure(['let var =234'], 'E1004:') 2578a7d6542SBram Moolenaar call CheckDefFailure(['let var= 234'], 'E1004:') 2588a7d6542SBram Moolenaar 2598a7d6542SBram Moolenaar call CheckDefFailure(['let true = 1'], 'E1034:') 2608a7d6542SBram Moolenaar call CheckDefFailure(['let false = 1'], 'E1034:') 2618a7d6542SBram Moolenaar 2629af78769SBram Moolenaar call CheckDefFailure(['[a; b; c] = g:list'], 'E452:') 2639af78769SBram Moolenaar call CheckDefExecFailure(['let a: number', 2649af78769SBram Moolenaar '[a] = test_null_list()'], 'E1093:') 2659af78769SBram Moolenaar call CheckDefExecFailure(['let a: number', 2669af78769SBram Moolenaar '[a] = []'], 'E1093:') 2679af78769SBram Moolenaar call CheckDefExecFailure(['let x: number', 2689af78769SBram Moolenaar 'let y: number', 2699af78769SBram Moolenaar '[x, y] = [1]'], 'E1093:') 2709af78769SBram Moolenaar call CheckDefExecFailure(['let x: number', 2719af78769SBram Moolenaar 'let y: number', 2729af78769SBram Moolenaar 'let z: list<number>', 2739af78769SBram Moolenaar '[x, y; z] = [1]'], 'E1093:') 2749be61bbbSBram Moolenaar 275e69f6d04SBram Moolenaar call CheckDefFailure(['let somevar'], "E1022:") 2769be61bbbSBram Moolenaar call CheckDefFailure(['let &option'], 'E1052:') 2779be61bbbSBram Moolenaar call CheckDefFailure(['&g:option = 5'], 'E113:') 2789be61bbbSBram Moolenaar 2799be61bbbSBram Moolenaar call CheckDefFailure(['let $VAR = 5'], 'E1065:') 2809be61bbbSBram Moolenaar 2819be61bbbSBram Moolenaar call CheckDefFailure(['let @~ = 5'], 'E354:') 2829be61bbbSBram Moolenaar call CheckDefFailure(['let @a = 5'], 'E1066:') 2839be61bbbSBram Moolenaar 2849be61bbbSBram Moolenaar call CheckDefFailure(['let g:var = 5'], 'E1016:') 285d3aac291SBram Moolenaar call CheckDefFailure(['let w:var = 5'], 'E1079:') 286d3aac291SBram Moolenaar call CheckDefFailure(['let b:var = 5'], 'E1078:') 287d3aac291SBram Moolenaar call CheckDefFailure(['let t:var = 5'], 'E1080:') 2889be61bbbSBram Moolenaar 2899be61bbbSBram Moolenaar call CheckDefFailure(['let anr = 4', 'anr ..= "text"'], 'E1019:') 2909be61bbbSBram Moolenaar call CheckDefFailure(['let xnr += 4'], 'E1020:') 2919be61bbbSBram Moolenaar 292822ba247SBram Moolenaar call CheckScriptFailure(['vim9script', 'def Func()', 'let dummy = s:notfound', 'enddef', 'defcompile'], 'E1050:') 29333fa29cfSBram Moolenaar 2948a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<string> = [123]'], 'expected list<string> but got list<number>') 2958a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<number> = ["xx"]'], 'expected list<number> but got list<string>') 2968a7d6542SBram Moolenaar 2978a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<string> = #{key: 123}'], 'expected dict<string> but got dict<number>') 2988a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<number> = #{key: "xx"}'], 'expected dict<number> but got dict<string>') 2998a7d6542SBram Moolenaar 3008a7d6542SBram Moolenaar call CheckDefFailure(['let var = feedkeys("0")'], 'E1031:') 3018a7d6542SBram Moolenaar call CheckDefFailure(['let var: number = feedkeys("0")'], 'expected number but got void') 30242a480bfSBram Moolenaar 303d77a8525SBram Moolenaar call CheckDefFailure(['let var: dict <number>'], 'E1068:') 30442a480bfSBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 305cab27678SBram Moolenaar 306cab27678SBram Moolenaar call assert_fails('s/^/\=Mess()/n', 'E794:') 307cab27678SBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 308d72c1bf0SBram Moolenaarenddef 309d72c1bf0SBram Moolenaar 310d72c1bf0SBram Moolenaardef Test_unlet() 311d72c1bf0SBram Moolenaar g:somevar = 'yes' 312d72c1bf0SBram Moolenaar assert_true(exists('g:somevar')) 313d72c1bf0SBram Moolenaar unlet g:somevar 314d72c1bf0SBram Moolenaar assert_false(exists('g:somevar')) 315d72c1bf0SBram Moolenaar unlet! g:somevar 316d72c1bf0SBram Moolenaar 317d72c1bf0SBram Moolenaar call CheckScriptFailure([ 318d72c1bf0SBram Moolenaar 'vim9script', 319d72c1bf0SBram Moolenaar 'let svar = 123', 320d72c1bf0SBram Moolenaar 'unlet svar', 321d72c1bf0SBram Moolenaar ], 'E1081:') 322d72c1bf0SBram Moolenaar call CheckScriptFailure([ 323d72c1bf0SBram Moolenaar 'vim9script', 324d72c1bf0SBram Moolenaar 'let svar = 123', 325d72c1bf0SBram Moolenaar 'unlet s:svar', 326d72c1bf0SBram Moolenaar ], 'E1081:') 327d72c1bf0SBram Moolenaar call CheckScriptFailure([ 328d72c1bf0SBram Moolenaar 'vim9script', 329d72c1bf0SBram Moolenaar 'let svar = 123', 330d72c1bf0SBram Moolenaar 'def Func()', 331d72c1bf0SBram Moolenaar ' unlet svar', 332d72c1bf0SBram Moolenaar 'enddef', 333822ba247SBram Moolenaar 'defcompile', 334d72c1bf0SBram Moolenaar ], 'E1081:') 335d72c1bf0SBram Moolenaar call CheckScriptFailure([ 336d72c1bf0SBram Moolenaar 'vim9script', 337d72c1bf0SBram Moolenaar 'let svar = 123', 338d72c1bf0SBram Moolenaar 'def Func()', 339d72c1bf0SBram Moolenaar ' unlet s:svar', 340d72c1bf0SBram Moolenaar 'enddef', 341822ba247SBram Moolenaar 'defcompile', 342d72c1bf0SBram Moolenaar ], 'E1081:') 3437bdaea6eSBram Moolenaar 3447bdaea6eSBram Moolenaar $ENVVAR = 'foobar' 3457bdaea6eSBram Moolenaar assert_equal('foobar', $ENVVAR) 3467bdaea6eSBram Moolenaar unlet $ENVVAR 3477bdaea6eSBram Moolenaar assert_equal('', $ENVVAR) 348d72c1bf0SBram Moolenaarenddef 349599c89c8SBram Moolenaar 3504c17ad94SBram Moolenaardef Test_delfunction() 3514c17ad94SBram Moolenaar " Check function is defined in script namespace 3524c17ad94SBram Moolenaar CheckScriptSuccess([ 3534c17ad94SBram Moolenaar 'vim9script', 3544c17ad94SBram Moolenaar 'func CheckMe()', 3554c17ad94SBram Moolenaar ' return 123', 3564c17ad94SBram Moolenaar 'endfunc', 3574c17ad94SBram Moolenaar 'assert_equal(123, s:CheckMe())', 3584c17ad94SBram Moolenaar ]) 3594c17ad94SBram Moolenaar 3604c17ad94SBram Moolenaar " Check function in script namespace cannot be deleted 3614c17ad94SBram Moolenaar CheckScriptFailure([ 3624c17ad94SBram Moolenaar 'vim9script', 3634c17ad94SBram Moolenaar 'func DeleteMe1()', 3644c17ad94SBram Moolenaar 'endfunc', 3654c17ad94SBram Moolenaar 'delfunction DeleteMe1', 3664c17ad94SBram Moolenaar ], 'E1084:') 3674c17ad94SBram Moolenaar CheckScriptFailure([ 3684c17ad94SBram Moolenaar 'vim9script', 3694c17ad94SBram Moolenaar 'func DeleteMe2()', 3704c17ad94SBram Moolenaar 'endfunc', 3714c17ad94SBram Moolenaar 'def DoThat()', 3724c17ad94SBram Moolenaar ' delfunction DeleteMe2', 3734c17ad94SBram Moolenaar 'enddef', 3744c17ad94SBram Moolenaar 'DoThat()', 3754c17ad94SBram Moolenaar ], 'E1084:') 3764c17ad94SBram Moolenaar CheckScriptFailure([ 3774c17ad94SBram Moolenaar 'vim9script', 3784c17ad94SBram Moolenaar 'def DeleteMe3()', 3794c17ad94SBram Moolenaar 'enddef', 3804c17ad94SBram Moolenaar 'delfunction DeleteMe3', 3814c17ad94SBram Moolenaar ], 'E1084:') 3824c17ad94SBram Moolenaar CheckScriptFailure([ 3834c17ad94SBram Moolenaar 'vim9script', 3844c17ad94SBram Moolenaar 'def DeleteMe4()', 3854c17ad94SBram Moolenaar 'enddef', 3864c17ad94SBram Moolenaar 'def DoThat()', 3874c17ad94SBram Moolenaar ' delfunction DeleteMe4', 3884c17ad94SBram Moolenaar 'enddef', 3894c17ad94SBram Moolenaar 'DoThat()', 3904c17ad94SBram Moolenaar ], 'E1084:') 3914c17ad94SBram Moolenaarenddef 3924c17ad94SBram Moolenaar 393599c89c8SBram Moolenaarfunc Test_wrong_type() 394599c89c8SBram Moolenaar call CheckDefFailure(['let var: list<nothing>'], 'E1010:') 395599c89c8SBram Moolenaar call CheckDefFailure(['let var: list<list<nothing>>'], 'E1010:') 396599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<nothing>'], 'E1010:') 397599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<dict<nothing>>'], 'E1010:') 398599c89c8SBram Moolenaar 399599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 400599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<list<number>'], 'E1009:') 40142a480bfSBram Moolenaar 40242a480bfSBram Moolenaar call CheckDefFailure(['let var: ally'], 'E1010:') 40342a480bfSBram Moolenaar call CheckDefFailure(['let var: bram'], 'E1010:') 40442a480bfSBram Moolenaar call CheckDefFailure(['let var: cathy'], 'E1010:') 40542a480bfSBram Moolenaar call CheckDefFailure(['let var: dom'], 'E1010:') 40642a480bfSBram Moolenaar call CheckDefFailure(['let var: freddy'], 'E1010:') 40742a480bfSBram Moolenaar call CheckDefFailure(['let var: john'], 'E1010:') 40842a480bfSBram Moolenaar call CheckDefFailure(['let var: larry'], 'E1010:') 40942a480bfSBram Moolenaar call CheckDefFailure(['let var: ned'], 'E1010:') 41042a480bfSBram Moolenaar call CheckDefFailure(['let var: pam'], 'E1010:') 41142a480bfSBram Moolenaar call CheckDefFailure(['let var: sam'], 'E1010:') 41242a480bfSBram Moolenaar call CheckDefFailure(['let var: vim'], 'E1010:') 413a0a9f43aSBram Moolenaar 414a0a9f43aSBram Moolenaar call CheckDefFailure(['let Ref: number', 'Ref()'], 'E1085:') 415a0a9f43aSBram Moolenaar call CheckDefFailure(['let Ref: string', 'let res = Ref()'], 'E1085:') 4168a7d6542SBram Moolenaarendfunc 4178a7d6542SBram Moolenaar 4188a7d6542SBram Moolenaarfunc Test_const() 4198a7d6542SBram Moolenaar call CheckDefFailure(['const var = 234', 'var = 99'], 'E1018:') 4208a7d6542SBram Moolenaar call CheckDefFailure(['const one = 234', 'let one = 99'], 'E1017:') 4218a7d6542SBram Moolenaar call CheckDefFailure(['const two'], 'E1021:') 4229be61bbbSBram Moolenaar call CheckDefFailure(['const &option'], 'E996:') 4238a7d6542SBram Moolenaarendfunc 4248a7d6542SBram Moolenaar 4258a7d6542SBram Moolenaardef Test_block() 4268a7d6542SBram Moolenaar let outer = 1 4278a7d6542SBram Moolenaar { 4288a7d6542SBram Moolenaar let inner = 2 4298a7d6542SBram Moolenaar assert_equal(1, outer) 4308a7d6542SBram Moolenaar assert_equal(2, inner) 4318a7d6542SBram Moolenaar } 4328a7d6542SBram Moolenaar assert_equal(1, outer) 4338a7d6542SBram Moolenaarenddef 4348a7d6542SBram Moolenaar 4358a7d6542SBram Moolenaarfunc Test_block_failure() 4368a7d6542SBram Moolenaar call CheckDefFailure(['{', 'let inner = 1', '}', 'echo inner'], 'E1001:') 437585fea7bSBram Moolenaar call CheckDefFailure(['}'], 'E1025:') 438585fea7bSBram Moolenaar call CheckDefFailure(['{', 'echo 1'], 'E1026:') 4398a7d6542SBram Moolenaarendfunc 4408a7d6542SBram Moolenaar 441585fea7bSBram Moolenaardef Test_cmd_modifier() 442585fea7bSBram Moolenaar tab echo '0' 443585fea7bSBram Moolenaar call CheckDefFailure(['5tab echo 3'], 'E16:') 444585fea7bSBram Moolenaarenddef 445585fea7bSBram Moolenaar 4468a7d6542SBram Moolenaardef Test_try_catch() 4478a7d6542SBram Moolenaar let l = [] 4487a092245SBram Moolenaar try # comment 4498a7d6542SBram Moolenaar add(l, '1') 4508a7d6542SBram Moolenaar throw 'wrong' 4518a7d6542SBram Moolenaar add(l, '2') 4527a092245SBram Moolenaar catch # comment 4538a7d6542SBram Moolenaar add(l, v:exception) 4547a092245SBram Moolenaar finally # comment 4558a7d6542SBram Moolenaar add(l, '3') 4567a092245SBram Moolenaar endtry # comment 4578a7d6542SBram Moolenaar assert_equal(['1', 'wrong', '3'], l) 4588a7d6542SBram Moolenaarenddef 4598a7d6542SBram Moolenaar 460257cc5eeSBram Moolenaardef ThrowFromDef() 461a72cfb80SBram Moolenaar throw "getout" # comment 462257cc5eeSBram Moolenaarenddef 463257cc5eeSBram Moolenaar 464257cc5eeSBram Moolenaarfunc CatchInFunc() 465257cc5eeSBram Moolenaar try 466257cc5eeSBram Moolenaar call ThrowFromDef() 467257cc5eeSBram Moolenaar catch 468257cc5eeSBram Moolenaar let g:thrown_func = v:exception 469257cc5eeSBram Moolenaar endtry 470257cc5eeSBram Moolenaarendfunc 471257cc5eeSBram Moolenaar 472257cc5eeSBram Moolenaardef CatchInDef() 473257cc5eeSBram Moolenaar try 474257cc5eeSBram Moolenaar ThrowFromDef() 475257cc5eeSBram Moolenaar catch 476257cc5eeSBram Moolenaar g:thrown_def = v:exception 477257cc5eeSBram Moolenaar endtry 478257cc5eeSBram Moolenaarenddef 479257cc5eeSBram Moolenaar 480f575adffSBram Moolenaardef ReturnFinally(): string 481f575adffSBram Moolenaar try 482f575adffSBram Moolenaar return 'intry' 483f575adffSBram Moolenaar finally 484f575adffSBram Moolenaar g:in_finally = 'finally' 485f575adffSBram Moolenaar endtry 486f575adffSBram Moolenaar return 'end' 487f575adffSBram Moolenaarenddef 488f575adffSBram Moolenaar 489257cc5eeSBram Moolenaardef Test_try_catch_nested() 490257cc5eeSBram Moolenaar CatchInFunc() 491257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_func) 492257cc5eeSBram Moolenaar 493257cc5eeSBram Moolenaar CatchInDef() 494257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_def) 495f575adffSBram Moolenaar 496f575adffSBram Moolenaar assert_equal('intry', ReturnFinally()) 497f575adffSBram Moolenaar assert_equal('finally', g:in_finally) 498f575adffSBram Moolenaarenddef 499f575adffSBram Moolenaar 500f575adffSBram Moolenaardef Test_try_catch_match() 501f575adffSBram Moolenaar let seq = 'a' 502f575adffSBram Moolenaar try 503f575adffSBram Moolenaar throw 'something' 504f575adffSBram Moolenaar catch /nothing/ 505f575adffSBram Moolenaar seq ..= 'x' 506f575adffSBram Moolenaar catch /some/ 507f575adffSBram Moolenaar seq ..= 'b' 508f575adffSBram Moolenaar catch /asdf/ 509f575adffSBram Moolenaar seq ..= 'x' 510e8c4abbbSBram Moolenaar catch ?a\?sdf? 511e8c4abbbSBram Moolenaar seq ..= 'y' 512f575adffSBram Moolenaar finally 513f575adffSBram Moolenaar seq ..= 'c' 514f575adffSBram Moolenaar endtry 515f575adffSBram Moolenaar assert_equal('abc', seq) 516257cc5eeSBram Moolenaarenddef 517257cc5eeSBram Moolenaar 518e8c4abbbSBram Moolenaardef Test_try_catch_fails() 519e8c4abbbSBram Moolenaar call CheckDefFailure(['catch'], 'E603:') 520e8c4abbbSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'catch','catch'], 'E1033:') 521e8c4abbbSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'catch /pat'], 'E1067:') 522585fea7bSBram Moolenaar call CheckDefFailure(['finally'], 'E606:') 523585fea7bSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'finally', 'echo 1', 'finally'], 'E607:') 524585fea7bSBram Moolenaar call CheckDefFailure(['endtry'], 'E602:') 525585fea7bSBram Moolenaar call CheckDefFailure(['while 1', 'endtry'], 'E170:') 526585fea7bSBram Moolenaar call CheckDefFailure(['for i in range(5)', 'endtry'], 'E170:') 527585fea7bSBram Moolenaar call CheckDefFailure(['if 2', 'endtry'], 'E171:') 528585fea7bSBram Moolenaar call CheckDefFailure(['try', 'echo 1', 'endtry'], 'E1032:') 529585fea7bSBram Moolenaar 530a72cfb80SBram Moolenaar call CheckDefFailure(['throw'], 'E1015:') 531585fea7bSBram Moolenaar call CheckDefFailure(['throw xxx'], 'E1001:') 532e8c4abbbSBram Moolenaarenddef 533e8c4abbbSBram Moolenaar 5342a1381c3SBram Moolenaarif has('channel') 53540ee466cSBram Moolenaar let someJob = test_null_job() 53640ee466cSBram Moolenaar 53740ee466cSBram Moolenaar def FuncWithError() 53840ee466cSBram Moolenaar echomsg g:someJob 53940ee466cSBram Moolenaar enddef 54040ee466cSBram Moolenaar 54140ee466cSBram Moolenaar func Test_convert_emsg_to_exception() 54240ee466cSBram Moolenaar try 54340ee466cSBram Moolenaar call FuncWithError() 54440ee466cSBram Moolenaar catch 54540ee466cSBram Moolenaar call assert_match('Vim:E908:', v:exception) 54640ee466cSBram Moolenaar endtry 54740ee466cSBram Moolenaar endfunc 5482a1381c3SBram Moolenaarendif 54940ee466cSBram Moolenaar 5508a7d6542SBram Moolenaarlet s:export_script_lines =<< trim END 5518a7d6542SBram Moolenaar vim9script 5528a7d6542SBram Moolenaar let name: string = 'bob' 5538a7d6542SBram Moolenaar def Concat(arg: string): string 5548a7d6542SBram Moolenaar return name .. arg 5558a7d6542SBram Moolenaar enddef 556227a69deSBram Moolenaar g:result = Concat('bie') 557227a69deSBram Moolenaar g:localname = name 5588a7d6542SBram Moolenaar 5598a7d6542SBram Moolenaar export const CONST = 1234 5608a7d6542SBram Moolenaar export let exported = 9876 5616e587dcbSBram Moolenaar export let exp_name = 'John' 5628a7d6542SBram Moolenaar export def Exported(): string 5638a7d6542SBram Moolenaar return 'Exported' 5648a7d6542SBram Moolenaar enddef 5658a7d6542SBram MoolenaarEND 5668a7d6542SBram Moolenaar 5675269bd2aSBram Moolenaardef Test_vim9_import_export() 5688a7d6542SBram Moolenaar let import_script_lines =<< trim END 5698a7d6542SBram Moolenaar vim9script 5708a7d6542SBram Moolenaar import {exported, Exported} from './Xexport.vim' 5718a7d6542SBram Moolenaar g:imported = exported 5726e587dcbSBram Moolenaar exported += 3 5736e587dcbSBram Moolenaar g:imported_added = exported 5748a7d6542SBram Moolenaar g:imported_func = Exported() 5756e587dcbSBram Moolenaar 5766e587dcbSBram Moolenaar import {exp_name} from './Xexport.vim' 5776e587dcbSBram Moolenaar g:imported_name = exp_name 5786e587dcbSBram Moolenaar exp_name ..= ' Doe' 5796e587dcbSBram Moolenaar g:imported_name_appended = exp_name 5805381c7a1SBram Moolenaar g:imported_later = exported 5818a7d6542SBram Moolenaar END 5828a7d6542SBram Moolenaar 5838a7d6542SBram Moolenaar writefile(import_script_lines, 'Ximport.vim') 5848a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport.vim') 5858a7d6542SBram Moolenaar 5868a7d6542SBram Moolenaar source Ximport.vim 5878a7d6542SBram Moolenaar 5888a7d6542SBram Moolenaar assert_equal('bobbie', g:result) 5898a7d6542SBram Moolenaar assert_equal('bob', g:localname) 5908a7d6542SBram Moolenaar assert_equal(9876, g:imported) 5916e587dcbSBram Moolenaar assert_equal(9879, g:imported_added) 5925381c7a1SBram Moolenaar assert_equal(9879, g:imported_later) 5938a7d6542SBram Moolenaar assert_equal('Exported', g:imported_func) 5946e587dcbSBram Moolenaar assert_equal('John', g:imported_name) 5956e587dcbSBram Moolenaar assert_equal('John Doe', g:imported_name_appended) 5968a7d6542SBram Moolenaar assert_false(exists('g:name')) 5978a7d6542SBram Moolenaar 5988a7d6542SBram Moolenaar unlet g:result 5998a7d6542SBram Moolenaar unlet g:localname 6008a7d6542SBram Moolenaar unlet g:imported 6016e587dcbSBram Moolenaar unlet g:imported_added 6025381c7a1SBram Moolenaar unlet g:imported_later 6038a7d6542SBram Moolenaar unlet g:imported_func 6046e587dcbSBram Moolenaar unlet g:imported_name g:imported_name_appended 6058a7d6542SBram Moolenaar delete('Ximport.vim') 606f2d5c240SBram Moolenaar 6075381c7a1SBram Moolenaar let import_in_def_lines =<< trim END 6085381c7a1SBram Moolenaar vim9script 6095381c7a1SBram Moolenaar def ImportInDef() 6105381c7a1SBram Moolenaar import exported from './Xexport.vim' 6115381c7a1SBram Moolenaar g:imported = exported 6125381c7a1SBram Moolenaar exported += 7 6135381c7a1SBram Moolenaar g:imported_added = exported 6145381c7a1SBram Moolenaar enddef 6155381c7a1SBram Moolenaar ImportInDef() 6165381c7a1SBram Moolenaar END 6175381c7a1SBram Moolenaar writefile(import_in_def_lines, 'Ximport2.vim') 6185381c7a1SBram Moolenaar source Ximport2.vim 6195381c7a1SBram Moolenaar " TODO: this should be 9879 6205381c7a1SBram Moolenaar assert_equal(9876, g:imported) 6215381c7a1SBram Moolenaar assert_equal(9883, g:imported_added) 6225381c7a1SBram Moolenaar unlet g:imported 6235381c7a1SBram Moolenaar unlet g:imported_added 6245381c7a1SBram Moolenaar delete('Ximport2.vim') 6255381c7a1SBram Moolenaar 626f2d5c240SBram Moolenaar let import_star_as_lines =<< trim END 627f2d5c240SBram Moolenaar vim9script 628f2d5c240SBram Moolenaar import * as Export from './Xexport.vim' 629f2d5c240SBram Moolenaar def UseExport() 630f2d5c240SBram Moolenaar g:imported = Export.exported 631f2d5c240SBram Moolenaar enddef 632f2d5c240SBram Moolenaar UseExport() 633f2d5c240SBram Moolenaar END 634f2d5c240SBram Moolenaar writefile(import_star_as_lines, 'Ximport.vim') 635f2d5c240SBram Moolenaar source Ximport.vim 6365381c7a1SBram Moolenaar assert_equal(9883, g:imported) 637f2d5c240SBram Moolenaar 638599c89c8SBram Moolenaar let import_star_as_lines_no_dot =<< trim END 639599c89c8SBram Moolenaar vim9script 640599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 641599c89c8SBram Moolenaar def Func() 642599c89c8SBram Moolenaar let dummy = 1 643599c89c8SBram Moolenaar let imported = Export + dummy 644599c89c8SBram Moolenaar enddef 645822ba247SBram Moolenaar defcompile 646599c89c8SBram Moolenaar END 647599c89c8SBram Moolenaar writefile(import_star_as_lines_no_dot, 'Ximport.vim') 648599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1060:') 649599c89c8SBram Moolenaar 650599c89c8SBram Moolenaar let import_star_as_lines_dot_space =<< trim END 651599c89c8SBram Moolenaar vim9script 652599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 653599c89c8SBram Moolenaar def Func() 654599c89c8SBram Moolenaar let imported = Export . exported 655599c89c8SBram Moolenaar enddef 656822ba247SBram Moolenaar defcompile 657599c89c8SBram Moolenaar END 658599c89c8SBram Moolenaar writefile(import_star_as_lines_dot_space, 'Ximport.vim') 659599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1074:') 660599c89c8SBram Moolenaar 661599c89c8SBram Moolenaar let import_star_as_lines_missing_name =<< trim END 662599c89c8SBram Moolenaar vim9script 663599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 664599c89c8SBram Moolenaar def Func() 665599c89c8SBram Moolenaar let imported = Export. 666599c89c8SBram Moolenaar enddef 667822ba247SBram Moolenaar defcompile 668599c89c8SBram Moolenaar END 669599c89c8SBram Moolenaar writefile(import_star_as_lines_missing_name, 'Ximport.vim') 670599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 671599c89c8SBram Moolenaar 672f2d5c240SBram Moolenaar let import_star_lines =<< trim END 673f2d5c240SBram Moolenaar vim9script 674f2d5c240SBram Moolenaar import * from './Xexport.vim' 675f2d5c240SBram Moolenaar END 676f2d5c240SBram Moolenaar writefile(import_star_lines, 'Ximport.vim') 677f2d5c240SBram Moolenaar assert_fails('source Ximport.vim', 'E1045:') 678f2d5c240SBram Moolenaar 679fa29c8abSBram Moolenaar " try to import something that exists but is not exported 680fa29c8abSBram Moolenaar let import_not_exported_lines =<< trim END 681fa29c8abSBram Moolenaar vim9script 682fa29c8abSBram Moolenaar import name from './Xexport.vim' 683fa29c8abSBram Moolenaar END 684fa29c8abSBram Moolenaar writefile(import_not_exported_lines, 'Ximport.vim') 685fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1049:') 686fa29c8abSBram Moolenaar 6875269bd2aSBram Moolenaar " try to import something that is already defined 6885269bd2aSBram Moolenaar let import_already_defined =<< trim END 6895269bd2aSBram Moolenaar vim9script 6905269bd2aSBram Moolenaar let exported = 'something' 6915269bd2aSBram Moolenaar import exported from './Xexport.vim' 6925269bd2aSBram Moolenaar END 6935269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 6945269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 6955269bd2aSBram Moolenaar 6965269bd2aSBram Moolenaar " try to import something that is already defined 6975269bd2aSBram Moolenaar import_already_defined =<< trim END 6985269bd2aSBram Moolenaar vim9script 6995269bd2aSBram Moolenaar let exported = 'something' 7005269bd2aSBram Moolenaar import * as exported from './Xexport.vim' 7015269bd2aSBram Moolenaar END 7025269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 7035269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 7045269bd2aSBram Moolenaar 7055269bd2aSBram Moolenaar " try to import something that is already defined 7065269bd2aSBram Moolenaar import_already_defined =<< trim END 7075269bd2aSBram Moolenaar vim9script 7085269bd2aSBram Moolenaar let exported = 'something' 7095269bd2aSBram Moolenaar import {exported} from './Xexport.vim' 7105269bd2aSBram Moolenaar END 7115269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 7125269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 7135269bd2aSBram Moolenaar 714fa29c8abSBram Moolenaar " import a very long name, requires making a copy 715fa29c8abSBram Moolenaar let import_long_name_lines =<< trim END 716fa29c8abSBram Moolenaar vim9script 717fa29c8abSBram Moolenaar import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim' 718fa29c8abSBram Moolenaar END 719fa29c8abSBram Moolenaar writefile(import_long_name_lines, 'Ximport.vim') 720fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 721fa29c8abSBram Moolenaar 722fa29c8abSBram Moolenaar let import_no_from_lines =<< trim END 723fa29c8abSBram Moolenaar vim9script 724fa29c8abSBram Moolenaar import name './Xexport.vim' 725fa29c8abSBram Moolenaar END 726fa29c8abSBram Moolenaar writefile(import_no_from_lines, 'Ximport.vim') 727fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1070:') 728fa29c8abSBram Moolenaar 729fa29c8abSBram Moolenaar let import_invalid_string_lines =<< trim END 730fa29c8abSBram Moolenaar vim9script 731fa29c8abSBram Moolenaar import name from Xexport.vim 732fa29c8abSBram Moolenaar END 733fa29c8abSBram Moolenaar writefile(import_invalid_string_lines, 'Ximport.vim') 734fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1071:') 735fa29c8abSBram Moolenaar 736fa29c8abSBram Moolenaar let import_wrong_name_lines =<< trim END 737fa29c8abSBram Moolenaar vim9script 738fa29c8abSBram Moolenaar import name from './XnoExport.vim' 739fa29c8abSBram Moolenaar END 740fa29c8abSBram Moolenaar writefile(import_wrong_name_lines, 'Ximport.vim') 741fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1053:') 742fa29c8abSBram Moolenaar 743fa29c8abSBram Moolenaar let import_missing_comma_lines =<< trim END 744fa29c8abSBram Moolenaar vim9script 745fa29c8abSBram Moolenaar import {exported name} from './Xexport.vim' 746fa29c8abSBram Moolenaar END 7475269bd2aSBram Moolenaar writefile(import_missing_comma_lines, 'Ximport3.vim') 7485269bd2aSBram Moolenaar assert_fails('source Ximport3.vim', 'E1046:') 749fa29c8abSBram Moolenaar 750f2d5c240SBram Moolenaar delete('Ximport.vim') 7515269bd2aSBram Moolenaar delete('Ximport3.vim') 7528a7d6542SBram Moolenaar delete('Xexport.vim') 7538a7d6542SBram Moolenaar 754750802b5SBram Moolenaar " Check that in a Vim9 script 'cpo' is set to the Vim default. 755750802b5SBram Moolenaar set cpo&vi 756750802b5SBram Moolenaar let cpo_before = &cpo 757750802b5SBram Moolenaar let lines =<< trim END 758750802b5SBram Moolenaar vim9script 759750802b5SBram Moolenaar g:cpo_in_vim9script = &cpo 760750802b5SBram Moolenaar END 761750802b5SBram Moolenaar writefile(lines, 'Xvim9_script') 762750802b5SBram Moolenaar source Xvim9_script 763750802b5SBram Moolenaar assert_equal(cpo_before, &cpo) 764750802b5SBram Moolenaar set cpo&vim 765750802b5SBram Moolenaar assert_equal(&cpo, g:cpo_in_vim9script) 766750802b5SBram Moolenaar delete('Xvim9_script') 767750802b5SBram Moolenaarenddef 768750802b5SBram Moolenaar 769750802b5SBram Moolenaardef Test_vim9script_fails() 7708a7d6542SBram Moolenaar CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:') 7718a7d6542SBram Moolenaar CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:') 772750802b5SBram Moolenaar CheckScriptFailure(['export let some = 123'], 'E1042:') 7739721fb4eSBram Moolenaar CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1048:') 774750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export let g:some'], 'E1044:') 775750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:') 776750802b5SBram Moolenaar 777750802b5SBram Moolenaar assert_fails('vim9script', 'E1038') 778a26b9700SBram Moolenaar assert_fails('export something', 'E1043') 7798a7d6542SBram Moolenaarenddef 7808a7d6542SBram Moolenaar 781*f7d267efSBram Moolenaarfunc Test_import_fails_without_script() 782101f4810SBram Moolenaar CheckRunVimInTerminal 783101f4810SBram Moolenaar 784101f4810SBram Moolenaar let export =<< trim END 785101f4810SBram Moolenaar vim9script 786101f4810SBram Moolenaar export def Foo(): number 787101f4810SBram Moolenaar return 0 788101f4810SBram Moolenaar enddef 789101f4810SBram Moolenaar END 790*f7d267efSBram Moolenaar call writefile(export, 'Xexport.vim') 791101f4810SBram Moolenaar 792*f7d267efSBram Moolenaar let buf = RunVimInTerminal('-c "import Foo from ''./Xexport.vim''"', #{rows: 6, wait_for_ruler: 0}) 793*f7d267efSBram Moolenaar call WaitForAssert({-> assert_match('^E1094:', term_getline(buf, 5))}) 794101f4810SBram Moolenaar 795*f7d267efSBram Moolenaar call delete('Xexport.vim') 796*f7d267efSBram Moolenaar call StopVimInTerminal(buf) 797*f7d267efSBram Moolenaarendfunc 798101f4810SBram Moolenaar 7994c17ad94SBram Moolenaardef Test_vim9script_reload_import() 8008a7d6542SBram Moolenaar let lines =<< trim END 8018a7d6542SBram Moolenaar vim9script 8028a7d6542SBram Moolenaar const var = '' 8038a7d6542SBram Moolenaar let valone = 1234 8048a7d6542SBram Moolenaar def MyFunc(arg: string) 8058a7d6542SBram Moolenaar valone = 5678 8068a7d6542SBram Moolenaar enddef 8078a7d6542SBram Moolenaar END 8088a7d6542SBram Moolenaar let morelines =<< trim END 8098a7d6542SBram Moolenaar let valtwo = 222 8108a7d6542SBram Moolenaar export def GetValtwo(): number 8118a7d6542SBram Moolenaar return valtwo 8128a7d6542SBram Moolenaar enddef 8138a7d6542SBram Moolenaar END 81403afdcf1SBram Moolenaar writefile(lines + morelines, 'Xreload.vim') 8158a7d6542SBram Moolenaar source Xreload.vim 8168a7d6542SBram Moolenaar source Xreload.vim 8178a7d6542SBram Moolenaar source Xreload.vim 8188a7d6542SBram Moolenaar 8198a7d6542SBram Moolenaar let testlines =<< trim END 8208a7d6542SBram Moolenaar vim9script 8218a7d6542SBram Moolenaar def TheFunc() 8228a7d6542SBram Moolenaar import GetValtwo from './Xreload.vim' 8238a7d6542SBram Moolenaar assert_equal(222, GetValtwo()) 8248a7d6542SBram Moolenaar enddef 8258a7d6542SBram Moolenaar TheFunc() 8268a7d6542SBram Moolenaar END 8278a7d6542SBram Moolenaar writefile(testlines, 'Ximport.vim') 8288a7d6542SBram Moolenaar source Ximport.vim 8298a7d6542SBram Moolenaar 83003afdcf1SBram Moolenaar " Test that when not using "morelines" GetValtwo() and valtwo are still 83103afdcf1SBram Moolenaar " defined, because import doesn't reload a script. 8328a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 8338a7d6542SBram Moolenaar source Ximport.vim 8348a7d6542SBram Moolenaar 8358a7d6542SBram Moolenaar " cannot declare a var twice 8368a7d6542SBram Moolenaar lines =<< trim END 8378a7d6542SBram Moolenaar vim9script 8388a7d6542SBram Moolenaar let valone = 1234 8398a7d6542SBram Moolenaar let valone = 5678 8408a7d6542SBram Moolenaar END 8418a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 8428a7d6542SBram Moolenaar assert_fails('source Xreload.vim', 'E1041:') 8438a7d6542SBram Moolenaar 8448a7d6542SBram Moolenaar delete('Xreload.vim') 8458a7d6542SBram Moolenaar delete('Ximport.vim') 8468a7d6542SBram Moolenaarenddef 8478a7d6542SBram Moolenaar 8484c17ad94SBram Moolenaardef Test_vim9script_reload_delfunc() 8494c17ad94SBram Moolenaar let first_lines =<< trim END 8504c17ad94SBram Moolenaar vim9script 8514c17ad94SBram Moolenaar def FuncYes(): string 8524c17ad94SBram Moolenaar return 'yes' 8534c17ad94SBram Moolenaar enddef 8544c17ad94SBram Moolenaar END 85503afdcf1SBram Moolenaar let withno_lines =<< trim END 8564c17ad94SBram Moolenaar def FuncNo(): string 8574c17ad94SBram Moolenaar return 'no' 8584c17ad94SBram Moolenaar enddef 8594c17ad94SBram Moolenaar def g:DoCheck(no_exists: bool) 8604c17ad94SBram Moolenaar assert_equal('yes', FuncYes()) 8614c17ad94SBram Moolenaar assert_equal('no', FuncNo()) 86203afdcf1SBram Moolenaar enddef 86303afdcf1SBram Moolenaar END 86403afdcf1SBram Moolenaar let nono_lines =<< trim END 86503afdcf1SBram Moolenaar def g:DoCheck(no_exists: bool) 86603afdcf1SBram Moolenaar assert_equal('yes', FuncYes()) 8674c17ad94SBram Moolenaar assert_fails('call FuncNo()', 'E117:') 8684c17ad94SBram Moolenaar enddef 8694c17ad94SBram Moolenaar END 8704c17ad94SBram Moolenaar 8714c17ad94SBram Moolenaar # FuncNo() is defined 87203afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 8734c17ad94SBram Moolenaar source Xreloaded.vim 8744c17ad94SBram Moolenaar g:DoCheck(true) 8754c17ad94SBram Moolenaar 8764c17ad94SBram Moolenaar # FuncNo() is not redefined 87703afdcf1SBram Moolenaar writefile(first_lines + nono_lines, 'Xreloaded.vim') 8784c17ad94SBram Moolenaar source Xreloaded.vim 87903afdcf1SBram Moolenaar g:DoCheck() 8804c17ad94SBram Moolenaar 8814c17ad94SBram Moolenaar # FuncNo() is back 88203afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 8834c17ad94SBram Moolenaar source Xreloaded.vim 88403afdcf1SBram Moolenaar g:DoCheck() 8854c17ad94SBram Moolenaar 8864c17ad94SBram Moolenaar delete('Xreloaded.vim') 8874c17ad94SBram Moolenaarenddef 8884c17ad94SBram Moolenaar 88989483d40SBram Moolenaardef Test_vim9script_reload_delvar() 89089483d40SBram Moolenaar # write the script with a script-local variable 89189483d40SBram Moolenaar let lines =<< trim END 89289483d40SBram Moolenaar vim9script 89389483d40SBram Moolenaar let var = 'string' 89489483d40SBram Moolenaar END 89589483d40SBram Moolenaar writefile(lines, 'XreloadVar.vim') 89689483d40SBram Moolenaar source XreloadVar.vim 89789483d40SBram Moolenaar 89889483d40SBram Moolenaar # now write the script using the same variable locally - works 89989483d40SBram Moolenaar lines =<< trim END 90089483d40SBram Moolenaar vim9script 90189483d40SBram Moolenaar def Func() 90289483d40SBram Moolenaar let var = 'string' 90389483d40SBram Moolenaar enddef 90489483d40SBram Moolenaar END 90589483d40SBram Moolenaar writefile(lines, 'XreloadVar.vim') 90689483d40SBram Moolenaar source XreloadVar.vim 90789483d40SBram Moolenaar 90889483d40SBram Moolenaar delete('XreloadVar.vim') 90989483d40SBram Moolenaarenddef 91089483d40SBram Moolenaar 9118a7d6542SBram Moolenaardef Test_import_absolute() 9128a7d6542SBram Moolenaar let import_lines = [ 913e6085c53SBram Moolenaar 'vim9script', 914e6085c53SBram Moolenaar 'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"', 915e6085c53SBram Moolenaar 'def UseExported()', 916e6085c53SBram Moolenaar ' g:imported_abs = exported', 917e6085c53SBram Moolenaar ' exported = 8888', 918e6085c53SBram Moolenaar ' g:imported_after = exported', 919e6085c53SBram Moolenaar 'enddef', 920e6085c53SBram Moolenaar 'UseExported()', 921e6085c53SBram Moolenaar 'g:import_disassembled = execute("disass UseExported")', 922e6085c53SBram Moolenaar ] 9238a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_abs.vim') 9248a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport_abs.vim') 9258a7d6542SBram Moolenaar 9268a7d6542SBram Moolenaar source Ximport_abs.vim 9278a7d6542SBram Moolenaar 9288a7d6542SBram Moolenaar assert_equal(9876, g:imported_abs) 9294e12a5dfSBram Moolenaar assert_equal(8888, g:imported_after) 930675f716eSBram Moolenaar assert_match('<SNR>\d\+_UseExported.*' .. 931675f716eSBram Moolenaar 'g:imported_abs = exported.*' .. 932675f716eSBram Moolenaar '0 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 933675f716eSBram Moolenaar '1 STOREG g:imported_abs.*' .. 934675f716eSBram Moolenaar 'exported = 8888.*' .. 935675f716eSBram Moolenaar '3 STORESCRIPT exported in .*Xexport_abs.vim.*' .. 936675f716eSBram Moolenaar 'g:imported_after = exported.*' .. 937675f716eSBram Moolenaar '4 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 938675f716eSBram Moolenaar '5 STOREG g:imported_after.*', 939e6085c53SBram Moolenaar g:import_disassembled) 9408a7d6542SBram Moolenaar unlet g:imported_abs 9414e12a5dfSBram Moolenaar unlet g:import_disassembled 9428a7d6542SBram Moolenaar 9438a7d6542SBram Moolenaar delete('Ximport_abs.vim') 9448a7d6542SBram Moolenaar delete('Xexport_abs.vim') 9458a7d6542SBram Moolenaarenddef 9468a7d6542SBram Moolenaar 9478a7d6542SBram Moolenaardef Test_import_rtp() 9488a7d6542SBram Moolenaar let import_lines = [ 949e6085c53SBram Moolenaar 'vim9script', 950e6085c53SBram Moolenaar 'import exported from "Xexport_rtp.vim"', 951e6085c53SBram Moolenaar 'g:imported_rtp = exported', 952e6085c53SBram Moolenaar ] 9538a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_rtp.vim') 9548a7d6542SBram Moolenaar mkdir('import') 9558a7d6542SBram Moolenaar writefile(s:export_script_lines, 'import/Xexport_rtp.vim') 9568a7d6542SBram Moolenaar 9578a7d6542SBram Moolenaar let save_rtp = &rtp 9588a7d6542SBram Moolenaar &rtp = getcwd() 9598a7d6542SBram Moolenaar source Ximport_rtp.vim 9608a7d6542SBram Moolenaar &rtp = save_rtp 9618a7d6542SBram Moolenaar 9628a7d6542SBram Moolenaar assert_equal(9876, g:imported_rtp) 9638a7d6542SBram Moolenaar unlet g:imported_rtp 9648a7d6542SBram Moolenaar 9658a7d6542SBram Moolenaar delete('Ximport_rtp.vim') 96689483d40SBram Moolenaar delete('import', 'rf') 9678a7d6542SBram Moolenaarenddef 9688a7d6542SBram Moolenaar 96925e0f586SBram Moolenaardef Test_import_compile_error() 97025e0f586SBram Moolenaar let export_lines = [ 97125e0f586SBram Moolenaar 'vim9script', 97225e0f586SBram Moolenaar 'export def ExpFunc(): string', 97325e0f586SBram Moolenaar ' return notDefined', 97425e0f586SBram Moolenaar 'enddef', 97525e0f586SBram Moolenaar ] 97625e0f586SBram Moolenaar writefile(export_lines, 'Xexported.vim') 97725e0f586SBram Moolenaar 97825e0f586SBram Moolenaar let import_lines = [ 97925e0f586SBram Moolenaar 'vim9script', 98025e0f586SBram Moolenaar 'import ExpFunc from "./Xexported.vim"', 98125e0f586SBram Moolenaar 'def ImpFunc()', 98225e0f586SBram Moolenaar ' echo ExpFunc()', 98325e0f586SBram Moolenaar 'enddef', 98425e0f586SBram Moolenaar 'defcompile', 98525e0f586SBram Moolenaar ] 98625e0f586SBram Moolenaar writefile(import_lines, 'Ximport.vim') 98725e0f586SBram Moolenaar 98825e0f586SBram Moolenaar try 98925e0f586SBram Moolenaar source Ximport.vim 99025e0f586SBram Moolenaar catch /E1001/ 99125e0f586SBram Moolenaar " Error should be fore the Xexported.vim file. 99225e0f586SBram Moolenaar assert_match('E1001: variable not found: notDefined', v:exception) 99325e0f586SBram Moolenaar assert_match('function <SNR>\d\+_ImpFunc\[1\]..<SNR>\d\+_ExpFunc, line 1', v:throwpoint) 99425e0f586SBram Moolenaar endtry 99525e0f586SBram Moolenaar 99625e0f586SBram Moolenaar delete('Xexported.vim') 99725e0f586SBram Moolenaar delete('Ximport.vim') 99825e0f586SBram Moolenaarenddef 99925e0f586SBram Moolenaar 10008a7d6542SBram Moolenaardef Test_fixed_size_list() 10018a7d6542SBram Moolenaar " will be allocated as one piece of memory, check that changes work 10028a7d6542SBram Moolenaar let l = [1, 2, 3, 4] 10038a7d6542SBram Moolenaar l->remove(0) 10048a7d6542SBram Moolenaar l->add(5) 10058a7d6542SBram Moolenaar l->insert(99, 1) 10060f18b6d1SBram Moolenaar assert_equal([2, 99, 3, 4, 5], l) 10078a7d6542SBram Moolenaarenddef 10088a7d6542SBram Moolenaar 1009158906cfSBram Moolenaardef IfElse(what: number): string 1010158906cfSBram Moolenaar let res = '' 1011158906cfSBram Moolenaar if what == 1 1012158906cfSBram Moolenaar res = "one" 1013158906cfSBram Moolenaar elseif what == 2 1014158906cfSBram Moolenaar res = "two" 1015a259d8d3SBram Moolenaar else 1016158906cfSBram Moolenaar res = "three" 1017a259d8d3SBram Moolenaar endif 1018158906cfSBram Moolenaar return res 1019a259d8d3SBram Moolenaarenddef 1020a259d8d3SBram Moolenaar 1021158906cfSBram Moolenaardef Test_if_elseif_else() 1022158906cfSBram Moolenaar assert_equal('one', IfElse(1)) 1023158906cfSBram Moolenaar assert_equal('two', IfElse(2)) 1024158906cfSBram Moolenaar assert_equal('three', IfElse(3)) 10250f18b6d1SBram Moolenaarenddef 10260f18b6d1SBram Moolenaar 1027e8c4abbbSBram Moolenaardef Test_if_elseif_else_fails() 1028e8c4abbbSBram Moolenaar call CheckDefFailure(['elseif true'], 'E582:') 1029e8c4abbbSBram Moolenaar call CheckDefFailure(['else'], 'E581:') 1030e8c4abbbSBram Moolenaar call CheckDefFailure(['endif'], 'E580:') 1031e8c4abbbSBram Moolenaar call CheckDefFailure(['if true', 'elseif xxx'], 'E1001:') 1032585fea7bSBram Moolenaar call CheckDefFailure(['if true', 'echo 1'], 'E171:') 1033e8c4abbbSBram Moolenaarenddef 1034e8c4abbbSBram Moolenaar 10356d69bf60SBram Moolenaarlet g:bool_true = v:true 10366d69bf60SBram Moolenaarlet g:bool_false = v:false 10376d69bf60SBram Moolenaar 10386d69bf60SBram Moolenaardef Test_if_const_expr() 10396d69bf60SBram Moolenaar let res = false 10406d69bf60SBram Moolenaar if true ? true : false 10416d69bf60SBram Moolenaar res = true 10426d69bf60SBram Moolenaar endif 10436d69bf60SBram Moolenaar assert_equal(true, res) 10446d69bf60SBram Moolenaar 1045585fea7bSBram Moolenaar g:glob = 2 1046585fea7bSBram Moolenaar if false 1047585fea7bSBram Moolenaar execute('let g:glob = 3') 1048585fea7bSBram Moolenaar endif 1049585fea7bSBram Moolenaar assert_equal(2, g:glob) 1050585fea7bSBram Moolenaar if true 1051585fea7bSBram Moolenaar execute('let g:glob = 3') 1052585fea7bSBram Moolenaar endif 1053585fea7bSBram Moolenaar assert_equal(3, g:glob) 1054585fea7bSBram Moolenaar 10556d69bf60SBram Moolenaar res = false 10566d69bf60SBram Moolenaar if g:bool_true ? true : false 10576d69bf60SBram Moolenaar res = true 10586d69bf60SBram Moolenaar endif 10596d69bf60SBram Moolenaar assert_equal(true, res) 10606d69bf60SBram Moolenaar 10616d69bf60SBram Moolenaar res = false 10626d69bf60SBram Moolenaar if true ? g:bool_true : false 10636d69bf60SBram Moolenaar res = true 10646d69bf60SBram Moolenaar endif 10656d69bf60SBram Moolenaar assert_equal(true, res) 10666d69bf60SBram Moolenaar 10676d69bf60SBram Moolenaar res = false 10686d69bf60SBram Moolenaar if true ? true : g:bool_false 10696d69bf60SBram Moolenaar res = true 10706d69bf60SBram Moolenaar endif 10716d69bf60SBram Moolenaar assert_equal(true, res) 10726d69bf60SBram Moolenaar 10736d69bf60SBram Moolenaar res = false 10746d69bf60SBram Moolenaar if true ? false : true 10756d69bf60SBram Moolenaar res = true 10766d69bf60SBram Moolenaar endif 10776d69bf60SBram Moolenaar assert_equal(false, res) 10786d69bf60SBram Moolenaar 10796d69bf60SBram Moolenaar res = false 10806d69bf60SBram Moolenaar if false ? false : true 10816d69bf60SBram Moolenaar res = true 10826d69bf60SBram Moolenaar endif 10836d69bf60SBram Moolenaar assert_equal(true, res) 10846d69bf60SBram Moolenaar 10856d69bf60SBram Moolenaar res = false 10866d69bf60SBram Moolenaar if false ? true : false 10876d69bf60SBram Moolenaar res = true 10886d69bf60SBram Moolenaar endif 10896d69bf60SBram Moolenaar assert_equal(false, res) 10906d69bf60SBram Moolenaar 10916d69bf60SBram Moolenaar res = false 1092e8c4abbbSBram Moolenaar if has('xyz') ? true : false 1093e8c4abbbSBram Moolenaar res = true 1094e8c4abbbSBram Moolenaar endif 1095e8c4abbbSBram Moolenaar assert_equal(false, res) 1096e8c4abbbSBram Moolenaar 1097e8c4abbbSBram Moolenaar res = false 10986d69bf60SBram Moolenaar if true && true 10996d69bf60SBram Moolenaar res = true 11006d69bf60SBram Moolenaar endif 11016d69bf60SBram Moolenaar assert_equal(true, res) 11026d69bf60SBram Moolenaar 11036d69bf60SBram Moolenaar res = false 11046d69bf60SBram Moolenaar if true && false 11056d69bf60SBram Moolenaar res = true 11066d69bf60SBram Moolenaar endif 11076d69bf60SBram Moolenaar assert_equal(false, res) 11086d69bf60SBram Moolenaar 11096d69bf60SBram Moolenaar res = false 11106d69bf60SBram Moolenaar if g:bool_true && false 11116d69bf60SBram Moolenaar res = true 11126d69bf60SBram Moolenaar endif 11136d69bf60SBram Moolenaar assert_equal(false, res) 11146d69bf60SBram Moolenaar 11156d69bf60SBram Moolenaar res = false 11166d69bf60SBram Moolenaar if true && g:bool_false 11176d69bf60SBram Moolenaar res = true 11186d69bf60SBram Moolenaar endif 11196d69bf60SBram Moolenaar assert_equal(false, res) 11206d69bf60SBram Moolenaar 11216d69bf60SBram Moolenaar res = false 11226d69bf60SBram Moolenaar if false && false 11236d69bf60SBram Moolenaar res = true 11246d69bf60SBram Moolenaar endif 11256d69bf60SBram Moolenaar assert_equal(false, res) 11266d69bf60SBram Moolenaar 11276d69bf60SBram Moolenaar res = false 11286d69bf60SBram Moolenaar if true || false 11296d69bf60SBram Moolenaar res = true 11306d69bf60SBram Moolenaar endif 11316d69bf60SBram Moolenaar assert_equal(true, res) 11326d69bf60SBram Moolenaar 11336d69bf60SBram Moolenaar res = false 11346d69bf60SBram Moolenaar if g:bool_true || false 11356d69bf60SBram Moolenaar res = true 11366d69bf60SBram Moolenaar endif 11376d69bf60SBram Moolenaar assert_equal(true, res) 11386d69bf60SBram Moolenaar 11396d69bf60SBram Moolenaar res = false 11406d69bf60SBram Moolenaar if true || g:bool_false 11416d69bf60SBram Moolenaar res = true 11426d69bf60SBram Moolenaar endif 11436d69bf60SBram Moolenaar assert_equal(true, res) 11446d69bf60SBram Moolenaar 11456d69bf60SBram Moolenaar res = false 11466d69bf60SBram Moolenaar if false || false 11476d69bf60SBram Moolenaar res = true 11486d69bf60SBram Moolenaar endif 11496d69bf60SBram Moolenaar assert_equal(false, res) 115080c34ca3SBram Moolenaarenddef 11516d69bf60SBram Moolenaar 115280c34ca3SBram Moolenaardef Test_if_const_expr_fails() 115380c34ca3SBram Moolenaar call CheckDefFailure(['if "aaa" == "bbb'], 'E114:') 115480c34ca3SBram Moolenaar call CheckDefFailure(["if 'aaa' == 'bbb"], 'E115:') 1155e8c4abbbSBram Moolenaar call CheckDefFailure(["if has('aaa'"], 'E110:') 1156e8c4abbbSBram Moolenaar call CheckDefFailure(["if has('aaa') ? true false"], 'E109:') 11576d69bf60SBram Moolenaarenddef 11586d69bf60SBram Moolenaar 1159ad39c094SBram Moolenaardef Test_execute_cmd() 1160ad39c094SBram Moolenaar new 1161ad39c094SBram Moolenaar setline(1, 'default') 1162ad39c094SBram Moolenaar execute 'call setline(1, "execute-string")' 1163ad39c094SBram Moolenaar assert_equal('execute-string', getline(1)) 1164a72cfb80SBram Moolenaar 1165a72cfb80SBram Moolenaar execute "call setline(1, 'execute-string')" 1166a72cfb80SBram Moolenaar assert_equal('execute-string', getline(1)) 1167a72cfb80SBram Moolenaar 1168ad39c094SBram Moolenaar let cmd1 = 'call setline(1,' 1169ad39c094SBram Moolenaar let cmd2 = '"execute-var")' 1170a72cfb80SBram Moolenaar execute cmd1 cmd2 # comment 1171ad39c094SBram Moolenaar assert_equal('execute-var', getline(1)) 1172a72cfb80SBram Moolenaar 1173ad39c094SBram Moolenaar execute cmd1 cmd2 '|call setline(1, "execute-var-string")' 1174ad39c094SBram Moolenaar assert_equal('execute-var-string', getline(1)) 1175a72cfb80SBram Moolenaar 1176ad39c094SBram Moolenaar let cmd_first = 'call ' 1177ad39c094SBram Moolenaar let cmd_last = 'setline(1, "execute-var-var")' 1178ad39c094SBram Moolenaar execute cmd_first .. cmd_last 1179ad39c094SBram Moolenaar assert_equal('execute-var-var', getline(1)) 1180ad39c094SBram Moolenaar bwipe! 1181585fea7bSBram Moolenaar 1182585fea7bSBram Moolenaar call CheckDefFailure(['execute xxx'], 'E1001:') 1183a72cfb80SBram Moolenaar call CheckDefFailure(['execute "cmd"# comment'], 'E488:') 1184ad39c094SBram Moolenaarenddef 1185ad39c094SBram Moolenaar 1186ad39c094SBram Moolenaardef Test_echo_cmd() 1187a72cfb80SBram Moolenaar echo 'some' # comment 1188585fea7bSBram Moolenaar echon 'thing' 1189ad39c094SBram Moolenaar assert_match('^something$', Screenline(&lines)) 1190ad39c094SBram Moolenaar 1191a72cfb80SBram Moolenaar echo "some" # comment 1192a72cfb80SBram Moolenaar echon "thing" 1193a72cfb80SBram Moolenaar assert_match('^something$', Screenline(&lines)) 1194a72cfb80SBram Moolenaar 1195ad39c094SBram Moolenaar let str1 = 'some' 1196ad39c094SBram Moolenaar let str2 = 'more' 1197ad39c094SBram Moolenaar echo str1 str2 1198ad39c094SBram Moolenaar assert_match('^some more$', Screenline(&lines)) 1199a72cfb80SBram Moolenaar 1200a72cfb80SBram Moolenaar call CheckDefFailure(['echo "xxx"# comment'], 'E488:') 1201ad39c094SBram Moolenaarenddef 1202ad39c094SBram Moolenaar 1203f93c7feaSBram Moolenaardef Test_echomsg_cmd() 1204f93c7feaSBram Moolenaar echomsg 'some' 'more' # comment 1205f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 1206f93c7feaSBram Moolenaar echo 'clear' 1207f93c7feaSBram Moolenaar 1messages 1208f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 1209f93c7feaSBram Moolenaar 1210f93c7feaSBram Moolenaar call CheckDefFailure(['echomsg "xxx"# comment'], 'E488:') 1211f93c7feaSBram Moolenaarenddef 1212f93c7feaSBram Moolenaar 1213f93c7feaSBram Moolenaardef Test_echoerr_cmd() 121440ee466cSBram Moolenaar try 121540ee466cSBram Moolenaar echoerr 'something' 'wrong' # comment 121640ee466cSBram Moolenaar catch 121740ee466cSBram Moolenaar assert_match('something wrong', v:exception) 121840ee466cSBram Moolenaar endtry 1219f93c7feaSBram Moolenaarenddef 1220f93c7feaSBram Moolenaar 122141fe0617SBram Moolenaardef Test_for_outside_of_function() 122241fe0617SBram Moolenaar let lines =<< trim END 122341fe0617SBram Moolenaar vim9script 122441fe0617SBram Moolenaar new 122541fe0617SBram Moolenaar for var in range(0, 3) 122641fe0617SBram Moolenaar append(line('$'), var) 122741fe0617SBram Moolenaar endfor 122841fe0617SBram Moolenaar assert_equal(['', '0', '1', '2', '3'], getline(1, '$')) 122941fe0617SBram Moolenaar bwipe! 123041fe0617SBram Moolenaar END 123141fe0617SBram Moolenaar writefile(lines, 'Xvim9for.vim') 123241fe0617SBram Moolenaar source Xvim9for.vim 123341fe0617SBram Moolenaar delete('Xvim9for.vim') 123441fe0617SBram Moolenaarenddef 12358a7d6542SBram Moolenaar 1236e8c4abbbSBram Moolenaardef Test_for_loop() 1237e8c4abbbSBram Moolenaar let result = '' 1238e8c4abbbSBram Moolenaar for cnt in range(7) 1239e8c4abbbSBram Moolenaar if cnt == 4 1240e8c4abbbSBram Moolenaar break 1241e8c4abbbSBram Moolenaar endif 1242e8c4abbbSBram Moolenaar if cnt == 2 1243e8c4abbbSBram Moolenaar continue 1244e8c4abbbSBram Moolenaar endif 1245e8c4abbbSBram Moolenaar result ..= cnt .. '_' 1246e8c4abbbSBram Moolenaar endfor 1247e8c4abbbSBram Moolenaar assert_equal('0_1_3_', result) 1248e8c4abbbSBram Moolenaarenddef 1249e8c4abbbSBram Moolenaar 1250e8c4abbbSBram Moolenaardef Test_for_loop_fails() 1251675f716eSBram Moolenaar CheckDefFailure(['for # in range(5)'], 'E690:') 1252675f716eSBram Moolenaar CheckDefFailure(['for i In range(5)'], 'E690:') 1253675f716eSBram Moolenaar CheckDefFailure(['let x = 5', 'for x in range(5)'], 'E1023:') 1254822ba247SBram Moolenaar CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef', 'defcompile'], 'E1006:') 1255675f716eSBram Moolenaar CheckDefFailure(['for i in "text"'], 'E1024:') 1256675f716eSBram Moolenaar CheckDefFailure(['for i in xxx'], 'E1001:') 1257675f716eSBram Moolenaar CheckDefFailure(['endfor'], 'E588:') 1258675f716eSBram Moolenaar CheckDefFailure(['for i in range(3)', 'echo 3'], 'E170:') 1259e8c4abbbSBram Moolenaarenddef 1260e8c4abbbSBram Moolenaar 1261d0df1aacSBram Moolenaardef Test_while_loop() 1262d0df1aacSBram Moolenaar let result = '' 1263d0df1aacSBram Moolenaar let cnt = 0 1264d0df1aacSBram Moolenaar while cnt < 555 1265d0df1aacSBram Moolenaar if cnt == 3 1266d0df1aacSBram Moolenaar break 1267d0df1aacSBram Moolenaar endif 1268d0df1aacSBram Moolenaar cnt += 1 1269d0df1aacSBram Moolenaar if cnt == 2 1270d0df1aacSBram Moolenaar continue 1271d0df1aacSBram Moolenaar endif 1272d0df1aacSBram Moolenaar result ..= cnt .. '_' 1273d0df1aacSBram Moolenaar endwhile 1274d0df1aacSBram Moolenaar assert_equal('1_3_', result) 1275d0df1aacSBram Moolenaarenddef 1276d0df1aacSBram Moolenaar 1277e8c4abbbSBram Moolenaardef Test_while_loop_fails() 1278675f716eSBram Moolenaar CheckDefFailure(['while xxx'], 'E1001:') 1279675f716eSBram Moolenaar CheckDefFailure(['endwhile'], 'E588:') 1280675f716eSBram Moolenaar CheckDefFailure(['continue'], 'E586:') 1281675f716eSBram Moolenaar CheckDefFailure(['if true', 'continue'], 'E586:') 1282675f716eSBram Moolenaar CheckDefFailure(['break'], 'E587:') 1283675f716eSBram Moolenaar CheckDefFailure(['if true', 'break'], 'E587:') 1284675f716eSBram Moolenaar CheckDefFailure(['while 1', 'echo 3'], 'E170:') 1285bd5da371SBram Moolenaarenddef 1286bd5da371SBram Moolenaar 12879645e2d9SBram Moolenaardef Test_interrupt_loop() 128897acfc78SBram Moolenaar let caught = false 12899645e2d9SBram Moolenaar let x = 0 129097acfc78SBram Moolenaar try 12919645e2d9SBram Moolenaar while 1 12929645e2d9SBram Moolenaar x += 1 12939645e2d9SBram Moolenaar if x == 100 12949645e2d9SBram Moolenaar feedkeys("\<C-C>", 'Lt') 12959645e2d9SBram Moolenaar endif 12969645e2d9SBram Moolenaar endwhile 129797acfc78SBram Moolenaar catch 129897acfc78SBram Moolenaar caught = true 129997acfc78SBram Moolenaar assert_equal(100, x) 130097acfc78SBram Moolenaar endtry 130197acfc78SBram Moolenaar assert_true(caught, 'should have caught an exception') 13029645e2d9SBram Moolenaarenddef 130320431c9dSBram Moolenaar 13044fdae999SBram Moolenaardef Test_automatic_line_continuation() 13054fdae999SBram Moolenaar let mylist = [ 13064fdae999SBram Moolenaar 'one', 13074fdae999SBram Moolenaar 'two', 13084fdae999SBram Moolenaar 'three', 13094fdae999SBram Moolenaar ] " comment 13104fdae999SBram Moolenaar assert_equal(['one', 'two', 'three'], mylist) 13114fdae999SBram Moolenaar 13124fdae999SBram Moolenaar let mydict = { 13134fdae999SBram Moolenaar 'one': 1, 13144fdae999SBram Moolenaar 'two': 2, 13154fdae999SBram Moolenaar 'three': 13164fdae999SBram Moolenaar 3, 13174fdae999SBram Moolenaar } " comment 13184fdae999SBram Moolenaar assert_equal({'one': 1, 'two': 2, 'three': 3}, mydict) 13194fdae999SBram Moolenaar mydict = #{ 13202c330432SBram Moolenaar one: 1, # comment 13212c330432SBram Moolenaar two: # comment 13222c330432SBram Moolenaar 2, # comment 13232c330432SBram Moolenaar three: 3 # comment 13242c330432SBram Moolenaar } 13252c330432SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 13262c330432SBram Moolenaar mydict = #{ 13272c330432SBram Moolenaar one: 1, 13284fdae999SBram Moolenaar two: 13294fdae999SBram Moolenaar 2, 13302c330432SBram Moolenaar three: 3 13314fdae999SBram Moolenaar } 13324fdae999SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 1333e6085c53SBram Moolenaar 1334e6085c53SBram Moolenaar assert_equal( 1335e6085c53SBram Moolenaar ['one', 'two', 'three'], 1336e6085c53SBram Moolenaar split('one two three') 1337e6085c53SBram Moolenaar ) 13384fdae999SBram Moolenaarenddef 13394fdae999SBram Moolenaar 13407a092245SBram Moolenaardef Test_vim9_comment() 13417a092245SBram Moolenaar CheckScriptSuccess([ 13427a092245SBram Moolenaar 'vim9script', 13437a092245SBram Moolenaar '# something', 13447a092245SBram Moolenaar ]) 13457a092245SBram Moolenaar CheckScriptFailure([ 13467a092245SBram Moolenaar 'vim9script', 13477a092245SBram Moolenaar ':# something', 13487a092245SBram Moolenaar ], 'E488:') 13497a092245SBram Moolenaar CheckScriptFailure([ 13507a092245SBram Moolenaar '# something', 13517a092245SBram Moolenaar ], 'E488:') 13527a092245SBram Moolenaar CheckScriptFailure([ 13537a092245SBram Moolenaar ':# something', 13547a092245SBram Moolenaar ], 'E488:') 13557a092245SBram Moolenaar 13564a8d9f2eSBram Moolenaar { # block start 13574a8d9f2eSBram Moolenaar } # block end 13584a8d9f2eSBram Moolenaar CheckDefFailure([ 13594a8d9f2eSBram Moolenaar '{# comment', 13604a8d9f2eSBram Moolenaar ], 'E488:') 13614a8d9f2eSBram Moolenaar CheckDefFailure([ 13624a8d9f2eSBram Moolenaar '{', 13634a8d9f2eSBram Moolenaar '}# comment', 13644a8d9f2eSBram Moolenaar ], 'E488:') 13654a8d9f2eSBram Moolenaar 13664a8d9f2eSBram Moolenaar echo "yes" # comment 13674a8d9f2eSBram Moolenaar CheckDefFailure([ 13684a8d9f2eSBram Moolenaar 'echo "yes"# comment', 13694a8d9f2eSBram Moolenaar ], 'E488:') 13707a092245SBram Moolenaar CheckScriptSuccess([ 13717a092245SBram Moolenaar 'vim9script', 13727a092245SBram Moolenaar 'echo "yes" # something', 13737a092245SBram Moolenaar ]) 13747a092245SBram Moolenaar CheckScriptFailure([ 13757a092245SBram Moolenaar 'vim9script', 13767a092245SBram Moolenaar 'echo "yes"# something', 13777a092245SBram Moolenaar ], 'E121:') 13787a092245SBram Moolenaar CheckScriptFailure([ 13797a092245SBram Moolenaar 'vim9script', 13807a092245SBram Moolenaar 'echo# something', 13817a092245SBram Moolenaar ], 'E121:') 13827a092245SBram Moolenaar CheckScriptFailure([ 13837a092245SBram Moolenaar 'echo "yes" # something', 13847a092245SBram Moolenaar ], 'E121:') 13857a092245SBram Moolenaar 13864a8d9f2eSBram Moolenaar exe "echo" # comment 13874a8d9f2eSBram Moolenaar CheckDefFailure([ 13884a8d9f2eSBram Moolenaar 'exe "echo"# comment', 13894a8d9f2eSBram Moolenaar ], 'E488:') 13904a8d9f2eSBram Moolenaar CheckScriptSuccess([ 13914a8d9f2eSBram Moolenaar 'vim9script', 13924a8d9f2eSBram Moolenaar 'exe "echo" # something', 13934a8d9f2eSBram Moolenaar ]) 13944a8d9f2eSBram Moolenaar CheckScriptFailure([ 13954a8d9f2eSBram Moolenaar 'vim9script', 13964a8d9f2eSBram Moolenaar 'exe "echo"# something', 13974a8d9f2eSBram Moolenaar ], 'E121:') 13984a8d9f2eSBram Moolenaar CheckDefFailure([ 13994a8d9f2eSBram Moolenaar 'exe # comment', 14004a8d9f2eSBram Moolenaar ], 'E1015:') 14014a8d9f2eSBram Moolenaar CheckScriptFailure([ 14024a8d9f2eSBram Moolenaar 'vim9script', 14034a8d9f2eSBram Moolenaar 'exe# something', 14044a8d9f2eSBram Moolenaar ], 'E121:') 14054a8d9f2eSBram Moolenaar CheckScriptFailure([ 14064a8d9f2eSBram Moolenaar 'exe "echo" # something', 14074a8d9f2eSBram Moolenaar ], 'E121:') 14084a8d9f2eSBram Moolenaar 14097a092245SBram Moolenaar CheckDefFailure([ 14107a092245SBram Moolenaar 'try# comment', 14117a092245SBram Moolenaar ' echo "yes"', 14127a092245SBram Moolenaar 'catch', 14137a092245SBram Moolenaar 'endtry', 14147a092245SBram Moolenaar ], 'E488:') 14152c5ed4e3SBram Moolenaar CheckScriptFailure([ 14162c5ed4e3SBram Moolenaar 'vim9script', 14172c5ed4e3SBram Moolenaar 'try# comment', 14182c5ed4e3SBram Moolenaar 'echo "yes"', 14192c5ed4e3SBram Moolenaar ], 'E488:') 14207a092245SBram Moolenaar CheckDefFailure([ 14217a092245SBram Moolenaar 'try', 1422a72cfb80SBram Moolenaar ' throw#comment', 1423a72cfb80SBram Moolenaar 'catch', 1424a72cfb80SBram Moolenaar 'endtry', 1425a72cfb80SBram Moolenaar ], 'E1015:') 1426a72cfb80SBram Moolenaar CheckDefFailure([ 1427a72cfb80SBram Moolenaar 'try', 1428a72cfb80SBram Moolenaar ' throw "yes"#comment', 1429a72cfb80SBram Moolenaar 'catch', 1430a72cfb80SBram Moolenaar 'endtry', 1431a72cfb80SBram Moolenaar ], 'E488:') 1432a72cfb80SBram Moolenaar CheckDefFailure([ 1433a72cfb80SBram Moolenaar 'try', 14347a092245SBram Moolenaar ' echo "yes"', 14357a092245SBram Moolenaar 'catch# comment', 14367a092245SBram Moolenaar 'endtry', 14377a092245SBram Moolenaar ], 'E488:') 14382c5ed4e3SBram Moolenaar CheckScriptFailure([ 14392c5ed4e3SBram Moolenaar 'vim9script', 14402c5ed4e3SBram Moolenaar 'try', 14412c5ed4e3SBram Moolenaar ' echo "yes"', 14422c5ed4e3SBram Moolenaar 'catch# comment', 14432c5ed4e3SBram Moolenaar 'endtry', 14442c5ed4e3SBram Moolenaar ], 'E654:') 14452c5ed4e3SBram Moolenaar CheckDefFailure([ 14462c5ed4e3SBram Moolenaar 'try', 14472c5ed4e3SBram Moolenaar ' echo "yes"', 14482c5ed4e3SBram Moolenaar 'catch /pat/# comment', 14492c5ed4e3SBram Moolenaar 'endtry', 14502c5ed4e3SBram Moolenaar ], 'E488:') 14517a092245SBram Moolenaar CheckDefFailure([ 14527a092245SBram Moolenaar 'try', 14537a092245SBram Moolenaar 'echo "yes"', 14547a092245SBram Moolenaar 'catch', 14557a092245SBram Moolenaar 'endtry# comment', 14567a092245SBram Moolenaar ], 'E488:') 14572c5ed4e3SBram Moolenaar CheckScriptFailure([ 14582c5ed4e3SBram Moolenaar 'vim9script', 14592c5ed4e3SBram Moolenaar 'try', 14602c5ed4e3SBram Moolenaar ' echo "yes"', 14612c5ed4e3SBram Moolenaar 'catch', 14622c5ed4e3SBram Moolenaar 'endtry# comment', 14632c5ed4e3SBram Moolenaar ], 'E600:') 14642c5ed4e3SBram Moolenaar 14652c5ed4e3SBram Moolenaar CheckScriptSuccess([ 14662c5ed4e3SBram Moolenaar 'vim9script', 14672c5ed4e3SBram Moolenaar 'hi # comment', 14682c5ed4e3SBram Moolenaar ]) 14692c5ed4e3SBram Moolenaar CheckScriptFailure([ 14702c5ed4e3SBram Moolenaar 'vim9script', 14712c5ed4e3SBram Moolenaar 'hi# comment', 14722c5ed4e3SBram Moolenaar ], 'E416:') 14731966c248SBram Moolenaar CheckScriptSuccess([ 14741966c248SBram Moolenaar 'vim9script', 14751966c248SBram Moolenaar 'hi Search # comment', 14761966c248SBram Moolenaar ]) 14771966c248SBram Moolenaar CheckScriptFailure([ 14781966c248SBram Moolenaar 'vim9script', 14791966c248SBram Moolenaar 'hi Search# comment', 14801966c248SBram Moolenaar ], 'E416:') 14811966c248SBram Moolenaar CheckScriptSuccess([ 14821966c248SBram Moolenaar 'vim9script', 14831966c248SBram Moolenaar 'hi link This Search # comment', 14841966c248SBram Moolenaar ]) 14851966c248SBram Moolenaar CheckScriptFailure([ 14861966c248SBram Moolenaar 'vim9script', 14871966c248SBram Moolenaar 'hi link This That# comment', 14881966c248SBram Moolenaar ], 'E413:') 14891966c248SBram Moolenaar CheckScriptSuccess([ 14901966c248SBram Moolenaar 'vim9script', 14911966c248SBram Moolenaar 'hi clear This # comment', 14921966c248SBram Moolenaar 'hi clear # comment', 14931966c248SBram Moolenaar ]) 14941966c248SBram Moolenaar " not tested, because it doesn't give an error but a warning: 14951966c248SBram Moolenaar " hi clear This# comment', 14961966c248SBram Moolenaar CheckScriptFailure([ 14971966c248SBram Moolenaar 'vim9script', 14981966c248SBram Moolenaar 'hi clear# comment', 14991966c248SBram Moolenaar ], 'E416:') 15001966c248SBram Moolenaar 15011966c248SBram Moolenaar CheckScriptSuccess([ 15021966c248SBram Moolenaar 'vim9script', 15031966c248SBram Moolenaar 'hi Group term=bold', 15041966c248SBram Moolenaar 'match Group /todo/ # comment', 15051966c248SBram Moolenaar ]) 15061966c248SBram Moolenaar CheckScriptFailure([ 15071966c248SBram Moolenaar 'vim9script', 15081966c248SBram Moolenaar 'hi Group term=bold', 15091966c248SBram Moolenaar 'match Group /todo/# comment', 15101966c248SBram Moolenaar ], 'E488:') 15111966c248SBram Moolenaar CheckScriptSuccess([ 15121966c248SBram Moolenaar 'vim9script', 15131966c248SBram Moolenaar 'match # comment', 15141966c248SBram Moolenaar ]) 15151966c248SBram Moolenaar CheckScriptFailure([ 15161966c248SBram Moolenaar 'vim9script', 15171966c248SBram Moolenaar 'match# comment', 15181966c248SBram Moolenaar ], 'E475:') 15191966c248SBram Moolenaar CheckScriptSuccess([ 15201966c248SBram Moolenaar 'vim9script', 15211966c248SBram Moolenaar 'match none # comment', 15221966c248SBram Moolenaar ]) 15231966c248SBram Moolenaar CheckScriptFailure([ 15241966c248SBram Moolenaar 'vim9script', 15251966c248SBram Moolenaar 'match none# comment', 15261966c248SBram Moolenaar ], 'E475:') 15271966c248SBram Moolenaar 15281966c248SBram Moolenaar CheckScriptSuccess([ 15291966c248SBram Moolenaar 'vim9script', 15301966c248SBram Moolenaar 'menutrans clear # comment', 15311966c248SBram Moolenaar ]) 15321966c248SBram Moolenaar CheckScriptFailure([ 15331966c248SBram Moolenaar 'vim9script', 15341966c248SBram Moolenaar 'menutrans clear# comment text', 15351966c248SBram Moolenaar ], 'E474:') 15361966c248SBram Moolenaar 15371966c248SBram Moolenaar CheckScriptSuccess([ 15381966c248SBram Moolenaar 'vim9script', 15391966c248SBram Moolenaar 'syntax clear # comment', 15401966c248SBram Moolenaar ]) 15411966c248SBram Moolenaar CheckScriptFailure([ 15421966c248SBram Moolenaar 'vim9script', 15431966c248SBram Moolenaar 'syntax clear# comment text', 15441966c248SBram Moolenaar ], 'E28:') 15451966c248SBram Moolenaar CheckScriptSuccess([ 15461966c248SBram Moolenaar 'vim9script', 15471966c248SBram Moolenaar 'syntax keyword Word some', 15481966c248SBram Moolenaar 'syntax clear Word # comment', 15491966c248SBram Moolenaar ]) 15501966c248SBram Moolenaar CheckScriptFailure([ 15511966c248SBram Moolenaar 'vim9script', 15521966c248SBram Moolenaar 'syntax keyword Word some', 15531966c248SBram Moolenaar 'syntax clear Word# comment text', 15541966c248SBram Moolenaar ], 'E28:') 15551966c248SBram Moolenaar 15561966c248SBram Moolenaar CheckScriptSuccess([ 15571966c248SBram Moolenaar 'vim9script', 15581966c248SBram Moolenaar 'syntax list # comment', 15591966c248SBram Moolenaar ]) 15601966c248SBram Moolenaar CheckScriptFailure([ 15611966c248SBram Moolenaar 'vim9script', 15621966c248SBram Moolenaar 'syntax list# comment text', 15631966c248SBram Moolenaar ], 'E28:') 15641966c248SBram Moolenaar 15651966c248SBram Moolenaar CheckScriptSuccess([ 15661966c248SBram Moolenaar 'vim9script', 15671966c248SBram Moolenaar 'syntax match Word /pat/ oneline # comment', 15681966c248SBram Moolenaar ]) 15691966c248SBram Moolenaar CheckScriptFailure([ 15701966c248SBram Moolenaar 'vim9script', 15711966c248SBram Moolenaar 'syntax match Word /pat/ oneline# comment', 15721966c248SBram Moolenaar ], 'E475:') 15731966c248SBram Moolenaar 15741966c248SBram Moolenaar CheckScriptSuccess([ 15751966c248SBram Moolenaar 'vim9script', 15761966c248SBram Moolenaar 'syntax keyword Word word # comm[ent', 15771966c248SBram Moolenaar ]) 15781966c248SBram Moolenaar CheckScriptFailure([ 15791966c248SBram Moolenaar 'vim9script', 15801966c248SBram Moolenaar 'syntax keyword Word word# comm[ent', 15811966c248SBram Moolenaar ], 'E789:') 15821966c248SBram Moolenaar 15831966c248SBram Moolenaar CheckScriptSuccess([ 15841966c248SBram Moolenaar 'vim9script', 15851966c248SBram Moolenaar 'syntax match Word /pat/ # comment', 15861966c248SBram Moolenaar ]) 15871966c248SBram Moolenaar CheckScriptFailure([ 15881966c248SBram Moolenaar 'vim9script', 15891966c248SBram Moolenaar 'syntax match Word /pat/# comment', 15901966c248SBram Moolenaar ], 'E402:') 15911966c248SBram Moolenaar 15921966c248SBram Moolenaar CheckScriptSuccess([ 15931966c248SBram Moolenaar 'vim9script', 15941966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something # comment', 15951966c248SBram Moolenaar ]) 15961966c248SBram Moolenaar CheckScriptFailure([ 15971966c248SBram Moolenaar 'vim9script', 15981966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something# comment', 15991966c248SBram Moolenaar ], 'E475:') 16001966c248SBram Moolenaar CheckScriptFailure([ 16011966c248SBram Moolenaar 'vim9script', 16021966c248SBram Moolenaar 'syntax match Word /pat/ contains= # comment', 16031966c248SBram Moolenaar ], 'E406:') 16041966c248SBram Moolenaar CheckScriptFailure([ 16051966c248SBram Moolenaar 'vim9script', 16061966c248SBram Moolenaar 'syntax match Word /pat/ contains=# comment', 16071966c248SBram Moolenaar ], 'E475:') 16081966c248SBram Moolenaar 16091966c248SBram Moolenaar CheckScriptSuccess([ 16101966c248SBram Moolenaar 'vim9script', 16111966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/ # comment', 16121966c248SBram Moolenaar ]) 16131966c248SBram Moolenaar CheckScriptFailure([ 16141966c248SBram Moolenaar 'vim9script', 16151966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/# comment', 16161966c248SBram Moolenaar ], 'E475:') 16171966c248SBram Moolenaar 16181966c248SBram Moolenaar CheckScriptSuccess([ 16191966c248SBram Moolenaar 'vim9script', 16201966c248SBram Moolenaar 'syntax sync # comment', 16211966c248SBram Moolenaar ]) 16221966c248SBram Moolenaar CheckScriptFailure([ 16231966c248SBram Moolenaar 'vim9script', 16241966c248SBram Moolenaar 'syntax sync# comment', 16251966c248SBram Moolenaar ], 'E404:') 16261966c248SBram Moolenaar CheckScriptSuccess([ 16271966c248SBram Moolenaar 'vim9script', 16281966c248SBram Moolenaar 'syntax sync ccomment # comment', 16291966c248SBram Moolenaar ]) 16301966c248SBram Moolenaar CheckScriptFailure([ 16311966c248SBram Moolenaar 'vim9script', 16321966c248SBram Moolenaar 'syntax sync ccomment# comment', 16331966c248SBram Moolenaar ], 'E404:') 16341966c248SBram Moolenaar 16351966c248SBram Moolenaar CheckScriptSuccess([ 16361966c248SBram Moolenaar 'vim9script', 16371966c248SBram Moolenaar 'syntax cluster Some contains=Word # comment', 16381966c248SBram Moolenaar ]) 16391966c248SBram Moolenaar CheckScriptFailure([ 16401966c248SBram Moolenaar 'vim9script', 16411966c248SBram Moolenaar 'syntax cluster Some contains=Word# comment', 16421966c248SBram Moolenaar ], 'E475:') 1643a72cfb80SBram Moolenaar 1644a72cfb80SBram Moolenaar CheckScriptSuccess([ 1645a72cfb80SBram Moolenaar 'vim9script', 1646a72cfb80SBram Moolenaar 'command Echo echo # comment', 1647a72cfb80SBram Moolenaar 'command Echo # comment', 1648a72cfb80SBram Moolenaar ]) 1649a72cfb80SBram Moolenaar CheckScriptFailure([ 1650a72cfb80SBram Moolenaar 'vim9script', 1651a72cfb80SBram Moolenaar 'command Echo echo# comment', 1652a72cfb80SBram Moolenaar 'Echo', 1653a72cfb80SBram Moolenaar ], 'E121:') 1654a72cfb80SBram Moolenaar CheckScriptFailure([ 1655a72cfb80SBram Moolenaar 'vim9script', 1656a72cfb80SBram Moolenaar 'command Echo# comment', 1657a72cfb80SBram Moolenaar ], 'E182:') 1658a72cfb80SBram Moolenaar CheckScriptFailure([ 1659a72cfb80SBram Moolenaar 'vim9script', 1660a72cfb80SBram Moolenaar 'command Echo echo', 1661a72cfb80SBram Moolenaar 'command Echo# comment', 1662a72cfb80SBram Moolenaar ], 'E182:') 1663a72cfb80SBram Moolenaar 1664a72cfb80SBram Moolenaar CheckScriptSuccess([ 1665a72cfb80SBram Moolenaar 'vim9script', 1666a72cfb80SBram Moolenaar 'function # comment', 1667a72cfb80SBram Moolenaar ]) 1668a72cfb80SBram Moolenaar CheckScriptFailure([ 1669a72cfb80SBram Moolenaar 'vim9script', 1670a72cfb80SBram Moolenaar 'function# comment', 1671a72cfb80SBram Moolenaar ], 'E129:') 1672a72cfb80SBram Moolenaar CheckScriptSuccess([ 1673a72cfb80SBram Moolenaar 'vim9script', 1674a72cfb80SBram Moolenaar 'function CheckScriptSuccess # comment', 1675a72cfb80SBram Moolenaar ]) 1676a72cfb80SBram Moolenaar CheckScriptFailure([ 1677a72cfb80SBram Moolenaar 'vim9script', 1678a72cfb80SBram Moolenaar 'function CheckScriptSuccess# comment', 1679a72cfb80SBram Moolenaar ], 'E488:') 1680a72cfb80SBram Moolenaar 1681a72cfb80SBram Moolenaar CheckScriptSuccess([ 1682a72cfb80SBram Moolenaar 'vim9script', 16834c17ad94SBram Moolenaar 'func g:DeleteMeA()', 1684a72cfb80SBram Moolenaar 'endfunc', 16854c17ad94SBram Moolenaar 'delfunction g:DeleteMeA # comment', 1686a72cfb80SBram Moolenaar ]) 1687a72cfb80SBram Moolenaar CheckScriptFailure([ 1688a72cfb80SBram Moolenaar 'vim9script', 16894c17ad94SBram Moolenaar 'func g:DeleteMeB()', 1690a72cfb80SBram Moolenaar 'endfunc', 16914c17ad94SBram Moolenaar 'delfunction g:DeleteMeB# comment', 1692a72cfb80SBram Moolenaar ], 'E488:') 1693a72cfb80SBram Moolenaar 1694a72cfb80SBram Moolenaar CheckScriptSuccess([ 1695a72cfb80SBram Moolenaar 'vim9script', 1696a72cfb80SBram Moolenaar 'call execute("ls") # comment', 1697a72cfb80SBram Moolenaar ]) 1698a72cfb80SBram Moolenaar CheckScriptFailure([ 1699a72cfb80SBram Moolenaar 'vim9script', 1700a72cfb80SBram Moolenaar 'call execute("ls")# comment', 1701a72cfb80SBram Moolenaar ], 'E488:') 17022c5ed4e3SBram Moolenaarenddef 17032c5ed4e3SBram Moolenaar 17042c5ed4e3SBram Moolenaardef Test_vim9_comment_gui() 17052c5ed4e3SBram Moolenaar CheckCanRunGui 17062c5ed4e3SBram Moolenaar 17072c5ed4e3SBram Moolenaar CheckScriptFailure([ 17082c5ed4e3SBram Moolenaar 'vim9script', 17092c5ed4e3SBram Moolenaar 'gui#comment' 17102c5ed4e3SBram Moolenaar ], 'E499:') 17112c5ed4e3SBram Moolenaar CheckScriptFailure([ 17122c5ed4e3SBram Moolenaar 'vim9script', 17132c5ed4e3SBram Moolenaar 'gui -f#comment' 17142c5ed4e3SBram Moolenaar ], 'E499:') 17157a092245SBram Moolenaarenddef 17167a092245SBram Moolenaar 1717a26b9700SBram Moolenaardef Test_vim9_comment_not_compiled() 1718a26b9700SBram Moolenaar au TabEnter *.vim let g:entered = 1 1719a26b9700SBram Moolenaar au TabEnter *.x let g:entered = 2 1720a26b9700SBram Moolenaar 1721a26b9700SBram Moolenaar edit test.vim 1722a26b9700SBram Moolenaar doautocmd TabEnter #comment 1723a26b9700SBram Moolenaar assert_equal(1, g:entered) 1724a26b9700SBram Moolenaar 1725a26b9700SBram Moolenaar doautocmd TabEnter f.x 1726a26b9700SBram Moolenaar assert_equal(2, g:entered) 1727a26b9700SBram Moolenaar 1728a26b9700SBram Moolenaar g:entered = 0 1729a26b9700SBram Moolenaar doautocmd TabEnter f.x #comment 1730a26b9700SBram Moolenaar assert_equal(2, g:entered) 1731a26b9700SBram Moolenaar 1732a26b9700SBram Moolenaar assert_fails('doautocmd Syntax#comment', 'E216:') 1733a26b9700SBram Moolenaar 1734a26b9700SBram Moolenaar au! TabEnter 1735a26b9700SBram Moolenaar unlet g:entered 1736d72c1bf0SBram Moolenaar 1737d72c1bf0SBram Moolenaar CheckScriptSuccess([ 1738d72c1bf0SBram Moolenaar 'vim9script', 1739d72c1bf0SBram Moolenaar 'let g:var = 123', 1740d72c1bf0SBram Moolenaar 'let w:var = 777', 1741d72c1bf0SBram Moolenaar 'unlet g:var w:var # something', 1742d72c1bf0SBram Moolenaar ]) 1743d72c1bf0SBram Moolenaar 1744d72c1bf0SBram Moolenaar CheckScriptFailure([ 1745d72c1bf0SBram Moolenaar 'vim9script', 1746d72c1bf0SBram Moolenaar 'let g:var = 123', 174732e35117SBram Moolenaar 'unlet g:var# comment1', 1748d72c1bf0SBram Moolenaar ], 'E108:') 1749d72c1bf0SBram Moolenaar 1750d72c1bf0SBram Moolenaar CheckScriptFailure([ 1751d72c1bf0SBram Moolenaar 'let g:var = 123', 1752d72c1bf0SBram Moolenaar 'unlet g:var # something', 1753d72c1bf0SBram Moolenaar ], 'E488:') 1754faac4104SBram Moolenaar 1755faac4104SBram Moolenaar CheckScriptSuccess([ 1756faac4104SBram Moolenaar 'vim9script', 175732e35117SBram Moolenaar 'if 1 # comment2', 1758faac4104SBram Moolenaar ' echo "yes"', 1759faac4104SBram Moolenaar 'elseif 2 #comment', 1760faac4104SBram Moolenaar ' echo "no"', 1761faac4104SBram Moolenaar 'endif', 1762faac4104SBram Moolenaar ]) 1763faac4104SBram Moolenaar 1764faac4104SBram Moolenaar CheckScriptFailure([ 1765faac4104SBram Moolenaar 'vim9script', 176632e35117SBram Moolenaar 'if 1# comment3', 1767faac4104SBram Moolenaar ' echo "yes"', 1768faac4104SBram Moolenaar 'endif', 1769faac4104SBram Moolenaar ], 'E15:') 1770faac4104SBram Moolenaar 1771faac4104SBram Moolenaar CheckScriptFailure([ 1772faac4104SBram Moolenaar 'vim9script', 177332e35117SBram Moolenaar 'if 0 # comment4', 1774faac4104SBram Moolenaar ' echo "yes"', 1775faac4104SBram Moolenaar 'elseif 2#comment', 1776faac4104SBram Moolenaar ' echo "no"', 1777faac4104SBram Moolenaar 'endif', 1778faac4104SBram Moolenaar ], 'E15:') 1779faac4104SBram Moolenaar 1780faac4104SBram Moolenaar CheckScriptSuccess([ 1781faac4104SBram Moolenaar 'vim9script', 178232e35117SBram Moolenaar 'let v = 1 # comment5', 1783faac4104SBram Moolenaar ]) 1784faac4104SBram Moolenaar 1785faac4104SBram Moolenaar CheckScriptFailure([ 1786faac4104SBram Moolenaar 'vim9script', 178732e35117SBram Moolenaar 'let v = 1# comment6', 178832e35117SBram Moolenaar ], 'E15:') 1789faac4104SBram Moolenaar 1790faac4104SBram Moolenaar CheckScriptSuccess([ 1791faac4104SBram Moolenaar 'vim9script', 1792faac4104SBram Moolenaar 'new' 1793faac4104SBram Moolenaar 'call setline(1, ["# define pat", "last"])', 1794faac4104SBram Moolenaar '$', 1795faac4104SBram Moolenaar 'dsearch /pat/ #comment', 1796faac4104SBram Moolenaar 'bwipe!', 1797faac4104SBram Moolenaar ]) 1798faac4104SBram Moolenaar 1799faac4104SBram Moolenaar CheckScriptFailure([ 1800faac4104SBram Moolenaar 'vim9script', 1801faac4104SBram Moolenaar 'new' 1802faac4104SBram Moolenaar 'call setline(1, ["# define pat", "last"])', 1803faac4104SBram Moolenaar '$', 1804faac4104SBram Moolenaar 'dsearch /pat/#comment', 1805faac4104SBram Moolenaar 'bwipe!', 1806faac4104SBram Moolenaar ], 'E488:') 180774fae513SBram Moolenaar 180874fae513SBram Moolenaar CheckScriptFailure([ 180974fae513SBram Moolenaar 'vim9script', 181074fae513SBram Moolenaar 'func! SomeFunc()', 181174fae513SBram Moolenaar ], 'E477:') 1812a26b9700SBram Moolenaarenddef 1813a26b9700SBram Moolenaar 18147e5bd91dSBram Moolenaardef Test_finish() 18157e5bd91dSBram Moolenaar let lines =<< trim END 18167e5bd91dSBram Moolenaar vim9script 18177e5bd91dSBram Moolenaar let g:res = 'one' 18187e5bd91dSBram Moolenaar if v:false | finish | endif 18197e5bd91dSBram Moolenaar let g:res = 'two' 18207e5bd91dSBram Moolenaar finish 18217e5bd91dSBram Moolenaar let g:res = 'three' 18227e5bd91dSBram Moolenaar END 18237e5bd91dSBram Moolenaar writefile(lines, 'Xfinished') 18247e5bd91dSBram Moolenaar source Xfinished 18257e5bd91dSBram Moolenaar assert_equal('two', g:res) 18267e5bd91dSBram Moolenaar 18277e5bd91dSBram Moolenaar unlet g:res 18287e5bd91dSBram Moolenaar delete('Xfinished') 18297e5bd91dSBram Moolenaarenddef 18307e5bd91dSBram Moolenaar 183132e35117SBram Moolenaardef Test_let_func_call() 183232e35117SBram Moolenaar let lines =<< trim END 183332e35117SBram Moolenaar vim9script 183432e35117SBram Moolenaar func GetValue() 183532e35117SBram Moolenaar if exists('g:count') 183632e35117SBram Moolenaar let g:count += 1 183732e35117SBram Moolenaar else 183832e35117SBram Moolenaar let g:count = 1 183932e35117SBram Moolenaar endif 184032e35117SBram Moolenaar return 'this' 184132e35117SBram Moolenaar endfunc 184232e35117SBram Moolenaar let val: string = GetValue() 1843df671b46SBram Moolenaar " env var is always a string 1844df671b46SBram Moolenaar let env = $TERM 184532e35117SBram Moolenaar END 184632e35117SBram Moolenaar writefile(lines, 'Xfinished') 184732e35117SBram Moolenaar source Xfinished 1848a5d0077eSBram Moolenaar " GetValue() is not called during discovery phase 184932e35117SBram Moolenaar assert_equal(1, g:count) 185032e35117SBram Moolenaar 185132e35117SBram Moolenaar unlet g:count 185232e35117SBram Moolenaar delete('Xfinished') 185332e35117SBram Moolenaarenddef 185432e35117SBram Moolenaar 185532e35117SBram Moolenaardef Test_let_missing_type() 185632e35117SBram Moolenaar let lines =<< trim END 185732e35117SBram Moolenaar vim9script 1858df671b46SBram Moolenaar let var = g:unknown 1859227a69deSBram Moolenaar END 1860822ba247SBram Moolenaar CheckScriptFailure(lines, 'E121:') 1861227a69deSBram Moolenaar 1862227a69deSBram Moolenaar lines =<< trim END 1863227a69deSBram Moolenaar vim9script 1864227a69deSBram Moolenaar let nr: number = 123 1865227a69deSBram Moolenaar let var = nr 1866227a69deSBram Moolenaar END 1867822ba247SBram Moolenaar CheckScriptSuccess(lines) 186832e35117SBram Moolenaarenddef 186932e35117SBram Moolenaar 1870c82a5b5dSBram Moolenaardef Test_let_declaration() 1871c82a5b5dSBram Moolenaar let lines =<< trim END 1872c82a5b5dSBram Moolenaar vim9script 1873c82a5b5dSBram Moolenaar let var: string 1874c82a5b5dSBram Moolenaar g:var_uninit = var 1875c82a5b5dSBram Moolenaar var = 'text' 1876c82a5b5dSBram Moolenaar g:var_test = var 1877984dddbeSBram Moolenaar " prefixing s: is optional 1878984dddbeSBram Moolenaar s:var = 'prefixed' 1879984dddbeSBram Moolenaar g:var_prefixed = s:var 1880984dddbeSBram Moolenaar 1881984dddbeSBram Moolenaar let s:other: number 1882984dddbeSBram Moolenaar other = 1234 1883984dddbeSBram Moolenaar g:other_var = other 1884c82a5b5dSBram Moolenaar END 1885c82a5b5dSBram Moolenaar CheckScriptSuccess(lines) 1886c82a5b5dSBram Moolenaar assert_equal('', g:var_uninit) 1887c82a5b5dSBram Moolenaar assert_equal('text', g:var_test) 1888984dddbeSBram Moolenaar assert_equal('prefixed', g:var_prefixed) 1889984dddbeSBram Moolenaar assert_equal(1234, g:other_var) 1890c82a5b5dSBram Moolenaar 1891c82a5b5dSBram Moolenaar unlet g:var_uninit 1892c82a5b5dSBram Moolenaar unlet g:var_test 1893984dddbeSBram Moolenaar unlet g:var_prefixed 1894984dddbeSBram Moolenaar unlet g:other_var 1895c82a5b5dSBram Moolenaarenddef 1896c82a5b5dSBram Moolenaar 189734db91f7SBram Moolenaardef Test_let_type_check() 189834db91f7SBram Moolenaar let lines =<< trim END 189934db91f7SBram Moolenaar vim9script 190034db91f7SBram Moolenaar let var: string 190134db91f7SBram Moolenaar var = 1234 190234db91f7SBram Moolenaar END 190334db91f7SBram Moolenaar CheckScriptFailure(lines, 'E1013:') 1904984dddbeSBram Moolenaar 1905984dddbeSBram Moolenaar lines =<< trim END 1906984dddbeSBram Moolenaar vim9script 1907984dddbeSBram Moolenaar let var:string 1908984dddbeSBram Moolenaar END 1909984dddbeSBram Moolenaar CheckScriptFailure(lines, 'E1069:') 191034db91f7SBram Moolenaarenddef 191134db91f7SBram Moolenaar 1912a5d0077eSBram Moolenaardef Test_forward_declaration() 1913a5d0077eSBram Moolenaar let lines =<< trim END 1914a5d0077eSBram Moolenaar vim9script 1915a5d0077eSBram Moolenaar def GetValue(): string 1916a5d0077eSBram Moolenaar return theVal 1917a5d0077eSBram Moolenaar enddef 1918a5d0077eSBram Moolenaar let theVal = 'something' 1919822ba247SBram Moolenaar g:initVal = GetValue() 1920a5d0077eSBram Moolenaar theVal = 'else' 1921a5d0077eSBram Moolenaar g:laterVal = GetValue() 1922a5d0077eSBram Moolenaar END 1923a5d0077eSBram Moolenaar writefile(lines, 'Xforward') 1924a5d0077eSBram Moolenaar source Xforward 1925a5d0077eSBram Moolenaar assert_equal('something', g:initVal) 1926a5d0077eSBram Moolenaar assert_equal('else', g:laterVal) 1927a5d0077eSBram Moolenaar 1928a5d0077eSBram Moolenaar unlet g:initVal 1929a5d0077eSBram Moolenaar unlet g:laterVal 1930a5d0077eSBram Moolenaar delete('Xforward') 1931a5d0077eSBram Moolenaarenddef 1932a5d0077eSBram Moolenaar 19339721fb4eSBram Moolenaardef Test_source_vim9_from_legacy() 19349721fb4eSBram Moolenaar let legacy_lines =<< trim END 19359721fb4eSBram Moolenaar source Xvim9_script.vim 19369721fb4eSBram Moolenaar 19379721fb4eSBram Moolenaar call assert_false(exists('local')) 19389721fb4eSBram Moolenaar call assert_false(exists('exported')) 19399721fb4eSBram Moolenaar call assert_false(exists('s:exported')) 19409721fb4eSBram Moolenaar call assert_equal('global', global) 19419721fb4eSBram Moolenaar call assert_equal('global', g:global) 19429721fb4eSBram Moolenaar 19439721fb4eSBram Moolenaar " imported variable becomes script-local 19449721fb4eSBram Moolenaar import exported from './Xvim9_script.vim' 19459721fb4eSBram Moolenaar call assert_equal('exported', s:exported) 19469721fb4eSBram Moolenaar call assert_false(exists('exported')) 19479721fb4eSBram Moolenaar 19489721fb4eSBram Moolenaar " imported function becomes script-local 19499721fb4eSBram Moolenaar import GetText from './Xvim9_script.vim' 19509721fb4eSBram Moolenaar call assert_equal('text', s:GetText()) 19519721fb4eSBram Moolenaar call assert_false(exists('*GetText')) 19529721fb4eSBram Moolenaar END 19539721fb4eSBram Moolenaar writefile(legacy_lines, 'Xlegacy_script.vim') 19549721fb4eSBram Moolenaar 19559721fb4eSBram Moolenaar let vim9_lines =<< trim END 19569721fb4eSBram Moolenaar vim9script 19579721fb4eSBram Moolenaar let local = 'local' 19589721fb4eSBram Moolenaar g:global = 'global' 19599721fb4eSBram Moolenaar export let exported = 'exported' 19609721fb4eSBram Moolenaar export def GetText(): string 19619721fb4eSBram Moolenaar return 'text' 19629721fb4eSBram Moolenaar enddef 19639721fb4eSBram Moolenaar END 19649721fb4eSBram Moolenaar writefile(vim9_lines, 'Xvim9_script.vim') 19659721fb4eSBram Moolenaar 19669721fb4eSBram Moolenaar source Xlegacy_script.vim 19679721fb4eSBram Moolenaar 19689721fb4eSBram Moolenaar assert_equal('global', g:global) 19699721fb4eSBram Moolenaar" unlet g:global 19709721fb4eSBram Moolenaar 19719721fb4eSBram Moolenaar delete('Xlegacy_script.vim') 19729721fb4eSBram Moolenaar delete('Xvim9_script.vim') 19739721fb4eSBram Moolenaarenddef 1974a5d0077eSBram Moolenaar 1975585fea7bSBram Moolenaar" Keep this last, it messes up highlighting. 1976585fea7bSBram Moolenaardef Test_substitute_cmd() 1977585fea7bSBram Moolenaar new 1978585fea7bSBram Moolenaar setline(1, 'something') 1979585fea7bSBram Moolenaar :substitute(some(other( 1980585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 1981585fea7bSBram Moolenaar bwipe! 1982585fea7bSBram Moolenaar 1983585fea7bSBram Moolenaar " also when the context is Vim9 script 1984585fea7bSBram Moolenaar let lines =<< trim END 1985585fea7bSBram Moolenaar vim9script 1986585fea7bSBram Moolenaar new 1987585fea7bSBram Moolenaar setline(1, 'something') 1988585fea7bSBram Moolenaar :substitute(some(other( 1989585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 1990585fea7bSBram Moolenaar bwipe! 1991585fea7bSBram Moolenaar END 1992585fea7bSBram Moolenaar writefile(lines, 'Xvim9lines') 1993585fea7bSBram Moolenaar source Xvim9lines 1994585fea7bSBram Moolenaar 1995585fea7bSBram Moolenaar delete('Xvim9lines') 1996585fea7bSBram Moolenaarenddef 1997585fea7bSBram Moolenaar 19988a7d6542SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker 1999