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 781f7d267efSBram Moolenaarfunc Test_import_fails_without_script() 782101f4810SBram Moolenaar CheckRunVimInTerminal 783101f4810SBram Moolenaar 784*9bb3eb3eSBram Moolenaar " call indirectly to avoid compilation error for missing functions 785*9bb3eb3eSBram Moolenaar call Run_Test_import_fails_without_script() 786*9bb3eb3eSBram Moolenaarendfunc 787*9bb3eb3eSBram Moolenaar 788*9bb3eb3eSBram Moolenaardef Run_Test_import_fails_without_script() 789101f4810SBram Moolenaar let export =<< trim END 790101f4810SBram Moolenaar vim9script 791101f4810SBram Moolenaar export def Foo(): number 792101f4810SBram Moolenaar return 0 793101f4810SBram Moolenaar enddef 794101f4810SBram Moolenaar END 795*9bb3eb3eSBram Moolenaar writefile(export, 'Xexport.vim') 796101f4810SBram Moolenaar 797*9bb3eb3eSBram Moolenaar let buf = RunVimInTerminal('-c "import Foo from ''./Xexport.vim''"', #{ 798*9bb3eb3eSBram Moolenaar rows: 6, wait_for_ruler: 0}) 799*9bb3eb3eSBram Moolenaar WaitForAssert({-> assert_match('^E1094:', term_getline(buf, 5))}) 800101f4810SBram Moolenaar 801*9bb3eb3eSBram Moolenaar delete('Xexport.vim') 802*9bb3eb3eSBram Moolenaar StopVimInTerminal(buf) 803*9bb3eb3eSBram Moolenaarenddef 804101f4810SBram Moolenaar 8054c17ad94SBram Moolenaardef Test_vim9script_reload_import() 8068a7d6542SBram Moolenaar let lines =<< trim END 8078a7d6542SBram Moolenaar vim9script 8088a7d6542SBram Moolenaar const var = '' 8098a7d6542SBram Moolenaar let valone = 1234 8108a7d6542SBram Moolenaar def MyFunc(arg: string) 8118a7d6542SBram Moolenaar valone = 5678 8128a7d6542SBram Moolenaar enddef 8138a7d6542SBram Moolenaar END 8148a7d6542SBram Moolenaar let morelines =<< trim END 8158a7d6542SBram Moolenaar let valtwo = 222 8168a7d6542SBram Moolenaar export def GetValtwo(): number 8178a7d6542SBram Moolenaar return valtwo 8188a7d6542SBram Moolenaar enddef 8198a7d6542SBram Moolenaar END 82003afdcf1SBram Moolenaar writefile(lines + morelines, 'Xreload.vim') 8218a7d6542SBram Moolenaar source Xreload.vim 8228a7d6542SBram Moolenaar source Xreload.vim 8238a7d6542SBram Moolenaar source Xreload.vim 8248a7d6542SBram Moolenaar 8258a7d6542SBram Moolenaar let testlines =<< trim END 8268a7d6542SBram Moolenaar vim9script 8278a7d6542SBram Moolenaar def TheFunc() 8288a7d6542SBram Moolenaar import GetValtwo from './Xreload.vim' 8298a7d6542SBram Moolenaar assert_equal(222, GetValtwo()) 8308a7d6542SBram Moolenaar enddef 8318a7d6542SBram Moolenaar TheFunc() 8328a7d6542SBram Moolenaar END 8338a7d6542SBram Moolenaar writefile(testlines, 'Ximport.vim') 8348a7d6542SBram Moolenaar source Ximport.vim 8358a7d6542SBram Moolenaar 83603afdcf1SBram Moolenaar " Test that when not using "morelines" GetValtwo() and valtwo are still 83703afdcf1SBram Moolenaar " defined, because import doesn't reload a script. 8388a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 8398a7d6542SBram Moolenaar source Ximport.vim 8408a7d6542SBram Moolenaar 8418a7d6542SBram Moolenaar " cannot declare a var twice 8428a7d6542SBram Moolenaar lines =<< trim END 8438a7d6542SBram Moolenaar vim9script 8448a7d6542SBram Moolenaar let valone = 1234 8458a7d6542SBram Moolenaar let valone = 5678 8468a7d6542SBram Moolenaar END 8478a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 8488a7d6542SBram Moolenaar assert_fails('source Xreload.vim', 'E1041:') 8498a7d6542SBram Moolenaar 8508a7d6542SBram Moolenaar delete('Xreload.vim') 8518a7d6542SBram Moolenaar delete('Ximport.vim') 8528a7d6542SBram Moolenaarenddef 8538a7d6542SBram Moolenaar 8544c17ad94SBram Moolenaardef Test_vim9script_reload_delfunc() 8554c17ad94SBram Moolenaar let first_lines =<< trim END 8564c17ad94SBram Moolenaar vim9script 8574c17ad94SBram Moolenaar def FuncYes(): string 8584c17ad94SBram Moolenaar return 'yes' 8594c17ad94SBram Moolenaar enddef 8604c17ad94SBram Moolenaar END 86103afdcf1SBram Moolenaar let withno_lines =<< trim END 8624c17ad94SBram Moolenaar def FuncNo(): string 8634c17ad94SBram Moolenaar return 'no' 8644c17ad94SBram Moolenaar enddef 8654c17ad94SBram Moolenaar def g:DoCheck(no_exists: bool) 8664c17ad94SBram Moolenaar assert_equal('yes', FuncYes()) 8674c17ad94SBram Moolenaar assert_equal('no', FuncNo()) 86803afdcf1SBram Moolenaar enddef 86903afdcf1SBram Moolenaar END 87003afdcf1SBram Moolenaar let nono_lines =<< trim END 87103afdcf1SBram Moolenaar def g:DoCheck(no_exists: bool) 87203afdcf1SBram Moolenaar assert_equal('yes', FuncYes()) 8734c17ad94SBram Moolenaar assert_fails('call FuncNo()', 'E117:') 8744c17ad94SBram Moolenaar enddef 8754c17ad94SBram Moolenaar END 8764c17ad94SBram Moolenaar 8774c17ad94SBram Moolenaar # FuncNo() is defined 87803afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 8794c17ad94SBram Moolenaar source Xreloaded.vim 8804c17ad94SBram Moolenaar g:DoCheck(true) 8814c17ad94SBram Moolenaar 8824c17ad94SBram Moolenaar # FuncNo() is not redefined 88303afdcf1SBram Moolenaar writefile(first_lines + nono_lines, 'Xreloaded.vim') 8844c17ad94SBram Moolenaar source Xreloaded.vim 88503afdcf1SBram Moolenaar g:DoCheck() 8864c17ad94SBram Moolenaar 8874c17ad94SBram Moolenaar # FuncNo() is back 88803afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 8894c17ad94SBram Moolenaar source Xreloaded.vim 89003afdcf1SBram Moolenaar g:DoCheck() 8914c17ad94SBram Moolenaar 8924c17ad94SBram Moolenaar delete('Xreloaded.vim') 8934c17ad94SBram Moolenaarenddef 8944c17ad94SBram Moolenaar 89589483d40SBram Moolenaardef Test_vim9script_reload_delvar() 89689483d40SBram Moolenaar # write the script with a script-local variable 89789483d40SBram Moolenaar let lines =<< trim END 89889483d40SBram Moolenaar vim9script 89989483d40SBram Moolenaar let var = 'string' 90089483d40SBram Moolenaar END 90189483d40SBram Moolenaar writefile(lines, 'XreloadVar.vim') 90289483d40SBram Moolenaar source XreloadVar.vim 90389483d40SBram Moolenaar 90489483d40SBram Moolenaar # now write the script using the same variable locally - works 90589483d40SBram Moolenaar lines =<< trim END 90689483d40SBram Moolenaar vim9script 90789483d40SBram Moolenaar def Func() 90889483d40SBram Moolenaar let var = 'string' 90989483d40SBram Moolenaar enddef 91089483d40SBram Moolenaar END 91189483d40SBram Moolenaar writefile(lines, 'XreloadVar.vim') 91289483d40SBram Moolenaar source XreloadVar.vim 91389483d40SBram Moolenaar 91489483d40SBram Moolenaar delete('XreloadVar.vim') 91589483d40SBram Moolenaarenddef 91689483d40SBram Moolenaar 9178a7d6542SBram Moolenaardef Test_import_absolute() 9188a7d6542SBram Moolenaar let import_lines = [ 919e6085c53SBram Moolenaar 'vim9script', 920e6085c53SBram Moolenaar 'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"', 921e6085c53SBram Moolenaar 'def UseExported()', 922e6085c53SBram Moolenaar ' g:imported_abs = exported', 923e6085c53SBram Moolenaar ' exported = 8888', 924e6085c53SBram Moolenaar ' g:imported_after = exported', 925e6085c53SBram Moolenaar 'enddef', 926e6085c53SBram Moolenaar 'UseExported()', 927e6085c53SBram Moolenaar 'g:import_disassembled = execute("disass UseExported")', 928e6085c53SBram Moolenaar ] 9298a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_abs.vim') 9308a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport_abs.vim') 9318a7d6542SBram Moolenaar 9328a7d6542SBram Moolenaar source Ximport_abs.vim 9338a7d6542SBram Moolenaar 9348a7d6542SBram Moolenaar assert_equal(9876, g:imported_abs) 9354e12a5dfSBram Moolenaar assert_equal(8888, g:imported_after) 936675f716eSBram Moolenaar assert_match('<SNR>\d\+_UseExported.*' .. 937675f716eSBram Moolenaar 'g:imported_abs = exported.*' .. 938675f716eSBram Moolenaar '0 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 939675f716eSBram Moolenaar '1 STOREG g:imported_abs.*' .. 940675f716eSBram Moolenaar 'exported = 8888.*' .. 941675f716eSBram Moolenaar '3 STORESCRIPT exported in .*Xexport_abs.vim.*' .. 942675f716eSBram Moolenaar 'g:imported_after = exported.*' .. 943675f716eSBram Moolenaar '4 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 944675f716eSBram Moolenaar '5 STOREG g:imported_after.*', 945e6085c53SBram Moolenaar g:import_disassembled) 9468a7d6542SBram Moolenaar unlet g:imported_abs 9474e12a5dfSBram Moolenaar unlet g:import_disassembled 9488a7d6542SBram Moolenaar 9498a7d6542SBram Moolenaar delete('Ximport_abs.vim') 9508a7d6542SBram Moolenaar delete('Xexport_abs.vim') 9518a7d6542SBram Moolenaarenddef 9528a7d6542SBram Moolenaar 9538a7d6542SBram Moolenaardef Test_import_rtp() 9548a7d6542SBram Moolenaar let import_lines = [ 955e6085c53SBram Moolenaar 'vim9script', 956e6085c53SBram Moolenaar 'import exported from "Xexport_rtp.vim"', 957e6085c53SBram Moolenaar 'g:imported_rtp = exported', 958e6085c53SBram Moolenaar ] 9598a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_rtp.vim') 9608a7d6542SBram Moolenaar mkdir('import') 9618a7d6542SBram Moolenaar writefile(s:export_script_lines, 'import/Xexport_rtp.vim') 9628a7d6542SBram Moolenaar 9638a7d6542SBram Moolenaar let save_rtp = &rtp 9648a7d6542SBram Moolenaar &rtp = getcwd() 9658a7d6542SBram Moolenaar source Ximport_rtp.vim 9668a7d6542SBram Moolenaar &rtp = save_rtp 9678a7d6542SBram Moolenaar 9688a7d6542SBram Moolenaar assert_equal(9876, g:imported_rtp) 9698a7d6542SBram Moolenaar unlet g:imported_rtp 9708a7d6542SBram Moolenaar 9718a7d6542SBram Moolenaar delete('Ximport_rtp.vim') 97289483d40SBram Moolenaar delete('import', 'rf') 9738a7d6542SBram Moolenaarenddef 9748a7d6542SBram Moolenaar 97525e0f586SBram Moolenaardef Test_import_compile_error() 97625e0f586SBram Moolenaar let export_lines = [ 97725e0f586SBram Moolenaar 'vim9script', 97825e0f586SBram Moolenaar 'export def ExpFunc(): string', 97925e0f586SBram Moolenaar ' return notDefined', 98025e0f586SBram Moolenaar 'enddef', 98125e0f586SBram Moolenaar ] 98225e0f586SBram Moolenaar writefile(export_lines, 'Xexported.vim') 98325e0f586SBram Moolenaar 98425e0f586SBram Moolenaar let import_lines = [ 98525e0f586SBram Moolenaar 'vim9script', 98625e0f586SBram Moolenaar 'import ExpFunc from "./Xexported.vim"', 98725e0f586SBram Moolenaar 'def ImpFunc()', 98825e0f586SBram Moolenaar ' echo ExpFunc()', 98925e0f586SBram Moolenaar 'enddef', 99025e0f586SBram Moolenaar 'defcompile', 99125e0f586SBram Moolenaar ] 99225e0f586SBram Moolenaar writefile(import_lines, 'Ximport.vim') 99325e0f586SBram Moolenaar 99425e0f586SBram Moolenaar try 99525e0f586SBram Moolenaar source Ximport.vim 99625e0f586SBram Moolenaar catch /E1001/ 99725e0f586SBram Moolenaar " Error should be fore the Xexported.vim file. 99825e0f586SBram Moolenaar assert_match('E1001: variable not found: notDefined', v:exception) 99925e0f586SBram Moolenaar assert_match('function <SNR>\d\+_ImpFunc\[1\]..<SNR>\d\+_ExpFunc, line 1', v:throwpoint) 100025e0f586SBram Moolenaar endtry 100125e0f586SBram Moolenaar 100225e0f586SBram Moolenaar delete('Xexported.vim') 100325e0f586SBram Moolenaar delete('Ximport.vim') 100425e0f586SBram Moolenaarenddef 100525e0f586SBram Moolenaar 10068a7d6542SBram Moolenaardef Test_fixed_size_list() 10078a7d6542SBram Moolenaar " will be allocated as one piece of memory, check that changes work 10088a7d6542SBram Moolenaar let l = [1, 2, 3, 4] 10098a7d6542SBram Moolenaar l->remove(0) 10108a7d6542SBram Moolenaar l->add(5) 10118a7d6542SBram Moolenaar l->insert(99, 1) 10120f18b6d1SBram Moolenaar assert_equal([2, 99, 3, 4, 5], l) 10138a7d6542SBram Moolenaarenddef 10148a7d6542SBram Moolenaar 1015158906cfSBram Moolenaardef IfElse(what: number): string 1016158906cfSBram Moolenaar let res = '' 1017158906cfSBram Moolenaar if what == 1 1018158906cfSBram Moolenaar res = "one" 1019158906cfSBram Moolenaar elseif what == 2 1020158906cfSBram Moolenaar res = "two" 1021a259d8d3SBram Moolenaar else 1022158906cfSBram Moolenaar res = "three" 1023a259d8d3SBram Moolenaar endif 1024158906cfSBram Moolenaar return res 1025a259d8d3SBram Moolenaarenddef 1026a259d8d3SBram Moolenaar 1027158906cfSBram Moolenaardef Test_if_elseif_else() 1028158906cfSBram Moolenaar assert_equal('one', IfElse(1)) 1029158906cfSBram Moolenaar assert_equal('two', IfElse(2)) 1030158906cfSBram Moolenaar assert_equal('three', IfElse(3)) 10310f18b6d1SBram Moolenaarenddef 10320f18b6d1SBram Moolenaar 1033e8c4abbbSBram Moolenaardef Test_if_elseif_else_fails() 1034e8c4abbbSBram Moolenaar call CheckDefFailure(['elseif true'], 'E582:') 1035e8c4abbbSBram Moolenaar call CheckDefFailure(['else'], 'E581:') 1036e8c4abbbSBram Moolenaar call CheckDefFailure(['endif'], 'E580:') 1037e8c4abbbSBram Moolenaar call CheckDefFailure(['if true', 'elseif xxx'], 'E1001:') 1038585fea7bSBram Moolenaar call CheckDefFailure(['if true', 'echo 1'], 'E171:') 1039e8c4abbbSBram Moolenaarenddef 1040e8c4abbbSBram Moolenaar 10416d69bf60SBram Moolenaarlet g:bool_true = v:true 10426d69bf60SBram Moolenaarlet g:bool_false = v:false 10436d69bf60SBram Moolenaar 10446d69bf60SBram Moolenaardef Test_if_const_expr() 10456d69bf60SBram Moolenaar let res = false 10466d69bf60SBram Moolenaar if true ? true : false 10476d69bf60SBram Moolenaar res = true 10486d69bf60SBram Moolenaar endif 10496d69bf60SBram Moolenaar assert_equal(true, res) 10506d69bf60SBram Moolenaar 1051585fea7bSBram Moolenaar g:glob = 2 1052585fea7bSBram Moolenaar if false 1053585fea7bSBram Moolenaar execute('let g:glob = 3') 1054585fea7bSBram Moolenaar endif 1055585fea7bSBram Moolenaar assert_equal(2, g:glob) 1056585fea7bSBram Moolenaar if true 1057585fea7bSBram Moolenaar execute('let g:glob = 3') 1058585fea7bSBram Moolenaar endif 1059585fea7bSBram Moolenaar assert_equal(3, g:glob) 1060585fea7bSBram Moolenaar 10616d69bf60SBram Moolenaar res = false 10626d69bf60SBram Moolenaar if g:bool_true ? 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 ? g:bool_true : false 10696d69bf60SBram Moolenaar res = true 10706d69bf60SBram Moolenaar endif 10716d69bf60SBram Moolenaar assert_equal(true, res) 10726d69bf60SBram Moolenaar 10736d69bf60SBram Moolenaar res = false 10746d69bf60SBram Moolenaar if true ? true : g:bool_false 10756d69bf60SBram Moolenaar res = true 10766d69bf60SBram Moolenaar endif 10776d69bf60SBram Moolenaar assert_equal(true, res) 10786d69bf60SBram Moolenaar 10796d69bf60SBram Moolenaar res = false 10806d69bf60SBram Moolenaar if true ? false : true 10816d69bf60SBram Moolenaar res = true 10826d69bf60SBram Moolenaar endif 10836d69bf60SBram Moolenaar assert_equal(false, res) 10846d69bf60SBram Moolenaar 10856d69bf60SBram Moolenaar res = false 10866d69bf60SBram Moolenaar if false ? false : true 10876d69bf60SBram Moolenaar res = true 10886d69bf60SBram Moolenaar endif 10896d69bf60SBram Moolenaar assert_equal(true, res) 10906d69bf60SBram Moolenaar 10916d69bf60SBram Moolenaar res = false 10926d69bf60SBram Moolenaar if false ? true : false 10936d69bf60SBram Moolenaar res = true 10946d69bf60SBram Moolenaar endif 10956d69bf60SBram Moolenaar assert_equal(false, res) 10966d69bf60SBram Moolenaar 10976d69bf60SBram Moolenaar res = false 1098e8c4abbbSBram Moolenaar if has('xyz') ? true : false 1099e8c4abbbSBram Moolenaar res = true 1100e8c4abbbSBram Moolenaar endif 1101e8c4abbbSBram Moolenaar assert_equal(false, res) 1102e8c4abbbSBram Moolenaar 1103e8c4abbbSBram Moolenaar res = false 11046d69bf60SBram Moolenaar if true && true 11056d69bf60SBram Moolenaar res = true 11066d69bf60SBram Moolenaar endif 11076d69bf60SBram Moolenaar assert_equal(true, res) 11086d69bf60SBram Moolenaar 11096d69bf60SBram Moolenaar res = false 11106d69bf60SBram Moolenaar if true && false 11116d69bf60SBram Moolenaar res = true 11126d69bf60SBram Moolenaar endif 11136d69bf60SBram Moolenaar assert_equal(false, res) 11146d69bf60SBram Moolenaar 11156d69bf60SBram Moolenaar res = false 11166d69bf60SBram Moolenaar if g:bool_true && false 11176d69bf60SBram Moolenaar res = true 11186d69bf60SBram Moolenaar endif 11196d69bf60SBram Moolenaar assert_equal(false, res) 11206d69bf60SBram Moolenaar 11216d69bf60SBram Moolenaar res = false 11226d69bf60SBram Moolenaar if true && g:bool_false 11236d69bf60SBram Moolenaar res = true 11246d69bf60SBram Moolenaar endif 11256d69bf60SBram Moolenaar assert_equal(false, res) 11266d69bf60SBram Moolenaar 11276d69bf60SBram Moolenaar res = false 11286d69bf60SBram Moolenaar if false && false 11296d69bf60SBram Moolenaar res = true 11306d69bf60SBram Moolenaar endif 11316d69bf60SBram Moolenaar assert_equal(false, res) 11326d69bf60SBram Moolenaar 11336d69bf60SBram Moolenaar res = false 11346d69bf60SBram Moolenaar if true || false 11356d69bf60SBram Moolenaar res = true 11366d69bf60SBram Moolenaar endif 11376d69bf60SBram Moolenaar assert_equal(true, res) 11386d69bf60SBram Moolenaar 11396d69bf60SBram Moolenaar res = false 11406d69bf60SBram Moolenaar if g:bool_true || false 11416d69bf60SBram Moolenaar res = true 11426d69bf60SBram Moolenaar endif 11436d69bf60SBram Moolenaar assert_equal(true, res) 11446d69bf60SBram Moolenaar 11456d69bf60SBram Moolenaar res = false 11466d69bf60SBram Moolenaar if true || g:bool_false 11476d69bf60SBram Moolenaar res = true 11486d69bf60SBram Moolenaar endif 11496d69bf60SBram Moolenaar assert_equal(true, res) 11506d69bf60SBram Moolenaar 11516d69bf60SBram Moolenaar res = false 11526d69bf60SBram Moolenaar if false || false 11536d69bf60SBram Moolenaar res = true 11546d69bf60SBram Moolenaar endif 11556d69bf60SBram Moolenaar assert_equal(false, res) 115680c34ca3SBram Moolenaarenddef 11576d69bf60SBram Moolenaar 115880c34ca3SBram Moolenaardef Test_if_const_expr_fails() 115980c34ca3SBram Moolenaar call CheckDefFailure(['if "aaa" == "bbb'], 'E114:') 116080c34ca3SBram Moolenaar call CheckDefFailure(["if 'aaa' == 'bbb"], 'E115:') 1161e8c4abbbSBram Moolenaar call CheckDefFailure(["if has('aaa'"], 'E110:') 1162e8c4abbbSBram Moolenaar call CheckDefFailure(["if has('aaa') ? true false"], 'E109:') 11636d69bf60SBram Moolenaarenddef 11646d69bf60SBram Moolenaar 1165ad39c094SBram Moolenaardef Test_execute_cmd() 1166ad39c094SBram Moolenaar new 1167ad39c094SBram Moolenaar setline(1, 'default') 1168ad39c094SBram Moolenaar execute 'call setline(1, "execute-string")' 1169ad39c094SBram Moolenaar assert_equal('execute-string', getline(1)) 1170a72cfb80SBram Moolenaar 1171a72cfb80SBram Moolenaar execute "call setline(1, 'execute-string')" 1172a72cfb80SBram Moolenaar assert_equal('execute-string', getline(1)) 1173a72cfb80SBram Moolenaar 1174ad39c094SBram Moolenaar let cmd1 = 'call setline(1,' 1175ad39c094SBram Moolenaar let cmd2 = '"execute-var")' 1176a72cfb80SBram Moolenaar execute cmd1 cmd2 # comment 1177ad39c094SBram Moolenaar assert_equal('execute-var', getline(1)) 1178a72cfb80SBram Moolenaar 1179ad39c094SBram Moolenaar execute cmd1 cmd2 '|call setline(1, "execute-var-string")' 1180ad39c094SBram Moolenaar assert_equal('execute-var-string', getline(1)) 1181a72cfb80SBram Moolenaar 1182ad39c094SBram Moolenaar let cmd_first = 'call ' 1183ad39c094SBram Moolenaar let cmd_last = 'setline(1, "execute-var-var")' 1184ad39c094SBram Moolenaar execute cmd_first .. cmd_last 1185ad39c094SBram Moolenaar assert_equal('execute-var-var', getline(1)) 1186ad39c094SBram Moolenaar bwipe! 1187585fea7bSBram Moolenaar 1188585fea7bSBram Moolenaar call CheckDefFailure(['execute xxx'], 'E1001:') 1189a72cfb80SBram Moolenaar call CheckDefFailure(['execute "cmd"# comment'], 'E488:') 1190ad39c094SBram Moolenaarenddef 1191ad39c094SBram Moolenaar 1192ad39c094SBram Moolenaardef Test_echo_cmd() 1193a72cfb80SBram Moolenaar echo 'some' # comment 1194585fea7bSBram Moolenaar echon 'thing' 1195ad39c094SBram Moolenaar assert_match('^something$', Screenline(&lines)) 1196ad39c094SBram Moolenaar 1197a72cfb80SBram Moolenaar echo "some" # comment 1198a72cfb80SBram Moolenaar echon "thing" 1199a72cfb80SBram Moolenaar assert_match('^something$', Screenline(&lines)) 1200a72cfb80SBram Moolenaar 1201ad39c094SBram Moolenaar let str1 = 'some' 1202ad39c094SBram Moolenaar let str2 = 'more' 1203ad39c094SBram Moolenaar echo str1 str2 1204ad39c094SBram Moolenaar assert_match('^some more$', Screenline(&lines)) 1205a72cfb80SBram Moolenaar 1206a72cfb80SBram Moolenaar call CheckDefFailure(['echo "xxx"# comment'], 'E488:') 1207ad39c094SBram Moolenaarenddef 1208ad39c094SBram Moolenaar 1209f93c7feaSBram Moolenaardef Test_echomsg_cmd() 1210f93c7feaSBram Moolenaar echomsg 'some' 'more' # comment 1211f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 1212f93c7feaSBram Moolenaar echo 'clear' 1213f93c7feaSBram Moolenaar 1messages 1214f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 1215f93c7feaSBram Moolenaar 1216f93c7feaSBram Moolenaar call CheckDefFailure(['echomsg "xxx"# comment'], 'E488:') 1217f93c7feaSBram Moolenaarenddef 1218f93c7feaSBram Moolenaar 1219f93c7feaSBram Moolenaardef Test_echoerr_cmd() 122040ee466cSBram Moolenaar try 122140ee466cSBram Moolenaar echoerr 'something' 'wrong' # comment 122240ee466cSBram Moolenaar catch 122340ee466cSBram Moolenaar assert_match('something wrong', v:exception) 122440ee466cSBram Moolenaar endtry 1225f93c7feaSBram Moolenaarenddef 1226f93c7feaSBram Moolenaar 122741fe0617SBram Moolenaardef Test_for_outside_of_function() 122841fe0617SBram Moolenaar let lines =<< trim END 122941fe0617SBram Moolenaar vim9script 123041fe0617SBram Moolenaar new 123141fe0617SBram Moolenaar for var in range(0, 3) 123241fe0617SBram Moolenaar append(line('$'), var) 123341fe0617SBram Moolenaar endfor 123441fe0617SBram Moolenaar assert_equal(['', '0', '1', '2', '3'], getline(1, '$')) 123541fe0617SBram Moolenaar bwipe! 123641fe0617SBram Moolenaar END 123741fe0617SBram Moolenaar writefile(lines, 'Xvim9for.vim') 123841fe0617SBram Moolenaar source Xvim9for.vim 123941fe0617SBram Moolenaar delete('Xvim9for.vim') 124041fe0617SBram Moolenaarenddef 12418a7d6542SBram Moolenaar 1242e8c4abbbSBram Moolenaardef Test_for_loop() 1243e8c4abbbSBram Moolenaar let result = '' 1244e8c4abbbSBram Moolenaar for cnt in range(7) 1245e8c4abbbSBram Moolenaar if cnt == 4 1246e8c4abbbSBram Moolenaar break 1247e8c4abbbSBram Moolenaar endif 1248e8c4abbbSBram Moolenaar if cnt == 2 1249e8c4abbbSBram Moolenaar continue 1250e8c4abbbSBram Moolenaar endif 1251e8c4abbbSBram Moolenaar result ..= cnt .. '_' 1252e8c4abbbSBram Moolenaar endfor 1253e8c4abbbSBram Moolenaar assert_equal('0_1_3_', result) 1254e8c4abbbSBram Moolenaarenddef 1255e8c4abbbSBram Moolenaar 1256e8c4abbbSBram Moolenaardef Test_for_loop_fails() 1257675f716eSBram Moolenaar CheckDefFailure(['for # in range(5)'], 'E690:') 1258675f716eSBram Moolenaar CheckDefFailure(['for i In range(5)'], 'E690:') 1259675f716eSBram Moolenaar CheckDefFailure(['let x = 5', 'for x in range(5)'], 'E1023:') 1260822ba247SBram Moolenaar CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef', 'defcompile'], 'E1006:') 1261675f716eSBram Moolenaar CheckDefFailure(['for i in "text"'], 'E1024:') 1262675f716eSBram Moolenaar CheckDefFailure(['for i in xxx'], 'E1001:') 1263675f716eSBram Moolenaar CheckDefFailure(['endfor'], 'E588:') 1264675f716eSBram Moolenaar CheckDefFailure(['for i in range(3)', 'echo 3'], 'E170:') 1265e8c4abbbSBram Moolenaarenddef 1266e8c4abbbSBram Moolenaar 1267d0df1aacSBram Moolenaardef Test_while_loop() 1268d0df1aacSBram Moolenaar let result = '' 1269d0df1aacSBram Moolenaar let cnt = 0 1270d0df1aacSBram Moolenaar while cnt < 555 1271d0df1aacSBram Moolenaar if cnt == 3 1272d0df1aacSBram Moolenaar break 1273d0df1aacSBram Moolenaar endif 1274d0df1aacSBram Moolenaar cnt += 1 1275d0df1aacSBram Moolenaar if cnt == 2 1276d0df1aacSBram Moolenaar continue 1277d0df1aacSBram Moolenaar endif 1278d0df1aacSBram Moolenaar result ..= cnt .. '_' 1279d0df1aacSBram Moolenaar endwhile 1280d0df1aacSBram Moolenaar assert_equal('1_3_', result) 1281d0df1aacSBram Moolenaarenddef 1282d0df1aacSBram Moolenaar 1283e8c4abbbSBram Moolenaardef Test_while_loop_fails() 1284675f716eSBram Moolenaar CheckDefFailure(['while xxx'], 'E1001:') 1285675f716eSBram Moolenaar CheckDefFailure(['endwhile'], 'E588:') 1286675f716eSBram Moolenaar CheckDefFailure(['continue'], 'E586:') 1287675f716eSBram Moolenaar CheckDefFailure(['if true', 'continue'], 'E586:') 1288675f716eSBram Moolenaar CheckDefFailure(['break'], 'E587:') 1289675f716eSBram Moolenaar CheckDefFailure(['if true', 'break'], 'E587:') 1290675f716eSBram Moolenaar CheckDefFailure(['while 1', 'echo 3'], 'E170:') 1291bd5da371SBram Moolenaarenddef 1292bd5da371SBram Moolenaar 12939645e2d9SBram Moolenaardef Test_interrupt_loop() 129497acfc78SBram Moolenaar let caught = false 12959645e2d9SBram Moolenaar let x = 0 129697acfc78SBram Moolenaar try 12979645e2d9SBram Moolenaar while 1 12989645e2d9SBram Moolenaar x += 1 12999645e2d9SBram Moolenaar if x == 100 13009645e2d9SBram Moolenaar feedkeys("\<C-C>", 'Lt') 13019645e2d9SBram Moolenaar endif 13029645e2d9SBram Moolenaar endwhile 130397acfc78SBram Moolenaar catch 130497acfc78SBram Moolenaar caught = true 130597acfc78SBram Moolenaar assert_equal(100, x) 130697acfc78SBram Moolenaar endtry 130797acfc78SBram Moolenaar assert_true(caught, 'should have caught an exception') 13089645e2d9SBram Moolenaarenddef 130920431c9dSBram Moolenaar 13104fdae999SBram Moolenaardef Test_automatic_line_continuation() 13114fdae999SBram Moolenaar let mylist = [ 13124fdae999SBram Moolenaar 'one', 13134fdae999SBram Moolenaar 'two', 13144fdae999SBram Moolenaar 'three', 13154fdae999SBram Moolenaar ] " comment 13164fdae999SBram Moolenaar assert_equal(['one', 'two', 'three'], mylist) 13174fdae999SBram Moolenaar 13184fdae999SBram Moolenaar let mydict = { 13194fdae999SBram Moolenaar 'one': 1, 13204fdae999SBram Moolenaar 'two': 2, 13214fdae999SBram Moolenaar 'three': 13224fdae999SBram Moolenaar 3, 13234fdae999SBram Moolenaar } " comment 13244fdae999SBram Moolenaar assert_equal({'one': 1, 'two': 2, 'three': 3}, mydict) 13254fdae999SBram Moolenaar mydict = #{ 13262c330432SBram Moolenaar one: 1, # comment 13272c330432SBram Moolenaar two: # comment 13282c330432SBram Moolenaar 2, # comment 13292c330432SBram Moolenaar three: 3 # comment 13302c330432SBram Moolenaar } 13312c330432SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 13322c330432SBram Moolenaar mydict = #{ 13332c330432SBram Moolenaar one: 1, 13344fdae999SBram Moolenaar two: 13354fdae999SBram Moolenaar 2, 13362c330432SBram Moolenaar three: 3 13374fdae999SBram Moolenaar } 13384fdae999SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 1339e6085c53SBram Moolenaar 1340e6085c53SBram Moolenaar assert_equal( 1341e6085c53SBram Moolenaar ['one', 'two', 'three'], 1342e6085c53SBram Moolenaar split('one two three') 1343e6085c53SBram Moolenaar ) 13444fdae999SBram Moolenaarenddef 13454fdae999SBram Moolenaar 13467a092245SBram Moolenaardef Test_vim9_comment() 13477a092245SBram Moolenaar CheckScriptSuccess([ 13487a092245SBram Moolenaar 'vim9script', 13497a092245SBram Moolenaar '# something', 13507a092245SBram Moolenaar ]) 13517a092245SBram Moolenaar CheckScriptFailure([ 13527a092245SBram Moolenaar 'vim9script', 13537a092245SBram Moolenaar ':# something', 13547a092245SBram Moolenaar ], 'E488:') 13557a092245SBram Moolenaar CheckScriptFailure([ 13567a092245SBram Moolenaar '# something', 13577a092245SBram Moolenaar ], 'E488:') 13587a092245SBram Moolenaar CheckScriptFailure([ 13597a092245SBram Moolenaar ':# something', 13607a092245SBram Moolenaar ], 'E488:') 13617a092245SBram Moolenaar 13624a8d9f2eSBram Moolenaar { # block start 13634a8d9f2eSBram Moolenaar } # block end 13644a8d9f2eSBram Moolenaar CheckDefFailure([ 13654a8d9f2eSBram Moolenaar '{# comment', 13664a8d9f2eSBram Moolenaar ], 'E488:') 13674a8d9f2eSBram Moolenaar CheckDefFailure([ 13684a8d9f2eSBram Moolenaar '{', 13694a8d9f2eSBram Moolenaar '}# comment', 13704a8d9f2eSBram Moolenaar ], 'E488:') 13714a8d9f2eSBram Moolenaar 13724a8d9f2eSBram Moolenaar echo "yes" # comment 13734a8d9f2eSBram Moolenaar CheckDefFailure([ 13744a8d9f2eSBram Moolenaar 'echo "yes"# comment', 13754a8d9f2eSBram Moolenaar ], 'E488:') 13767a092245SBram Moolenaar CheckScriptSuccess([ 13777a092245SBram Moolenaar 'vim9script', 13787a092245SBram Moolenaar 'echo "yes" # something', 13797a092245SBram Moolenaar ]) 13807a092245SBram Moolenaar CheckScriptFailure([ 13817a092245SBram Moolenaar 'vim9script', 13827a092245SBram Moolenaar 'echo "yes"# something', 13837a092245SBram Moolenaar ], 'E121:') 13847a092245SBram Moolenaar CheckScriptFailure([ 13857a092245SBram Moolenaar 'vim9script', 13867a092245SBram Moolenaar 'echo# something', 13877a092245SBram Moolenaar ], 'E121:') 13887a092245SBram Moolenaar CheckScriptFailure([ 13897a092245SBram Moolenaar 'echo "yes" # something', 13907a092245SBram Moolenaar ], 'E121:') 13917a092245SBram Moolenaar 13924a8d9f2eSBram Moolenaar exe "echo" # comment 13934a8d9f2eSBram Moolenaar CheckDefFailure([ 13944a8d9f2eSBram Moolenaar 'exe "echo"# comment', 13954a8d9f2eSBram Moolenaar ], 'E488:') 13964a8d9f2eSBram Moolenaar CheckScriptSuccess([ 13974a8d9f2eSBram Moolenaar 'vim9script', 13984a8d9f2eSBram Moolenaar 'exe "echo" # something', 13994a8d9f2eSBram Moolenaar ]) 14004a8d9f2eSBram Moolenaar CheckScriptFailure([ 14014a8d9f2eSBram Moolenaar 'vim9script', 14024a8d9f2eSBram Moolenaar 'exe "echo"# something', 14034a8d9f2eSBram Moolenaar ], 'E121:') 14044a8d9f2eSBram Moolenaar CheckDefFailure([ 14054a8d9f2eSBram Moolenaar 'exe # comment', 14064a8d9f2eSBram Moolenaar ], 'E1015:') 14074a8d9f2eSBram Moolenaar CheckScriptFailure([ 14084a8d9f2eSBram Moolenaar 'vim9script', 14094a8d9f2eSBram Moolenaar 'exe# something', 14104a8d9f2eSBram Moolenaar ], 'E121:') 14114a8d9f2eSBram Moolenaar CheckScriptFailure([ 14124a8d9f2eSBram Moolenaar 'exe "echo" # something', 14134a8d9f2eSBram Moolenaar ], 'E121:') 14144a8d9f2eSBram Moolenaar 14157a092245SBram Moolenaar CheckDefFailure([ 14167a092245SBram Moolenaar 'try# comment', 14177a092245SBram Moolenaar ' echo "yes"', 14187a092245SBram Moolenaar 'catch', 14197a092245SBram Moolenaar 'endtry', 14207a092245SBram Moolenaar ], 'E488:') 14212c5ed4e3SBram Moolenaar CheckScriptFailure([ 14222c5ed4e3SBram Moolenaar 'vim9script', 14232c5ed4e3SBram Moolenaar 'try# comment', 14242c5ed4e3SBram Moolenaar 'echo "yes"', 14252c5ed4e3SBram Moolenaar ], 'E488:') 14267a092245SBram Moolenaar CheckDefFailure([ 14277a092245SBram Moolenaar 'try', 1428a72cfb80SBram Moolenaar ' throw#comment', 1429a72cfb80SBram Moolenaar 'catch', 1430a72cfb80SBram Moolenaar 'endtry', 1431a72cfb80SBram Moolenaar ], 'E1015:') 1432a72cfb80SBram Moolenaar CheckDefFailure([ 1433a72cfb80SBram Moolenaar 'try', 1434a72cfb80SBram Moolenaar ' throw "yes"#comment', 1435a72cfb80SBram Moolenaar 'catch', 1436a72cfb80SBram Moolenaar 'endtry', 1437a72cfb80SBram Moolenaar ], 'E488:') 1438a72cfb80SBram Moolenaar CheckDefFailure([ 1439a72cfb80SBram Moolenaar 'try', 14407a092245SBram Moolenaar ' echo "yes"', 14417a092245SBram Moolenaar 'catch# comment', 14427a092245SBram Moolenaar 'endtry', 14437a092245SBram Moolenaar ], 'E488:') 14442c5ed4e3SBram Moolenaar CheckScriptFailure([ 14452c5ed4e3SBram Moolenaar 'vim9script', 14462c5ed4e3SBram Moolenaar 'try', 14472c5ed4e3SBram Moolenaar ' echo "yes"', 14482c5ed4e3SBram Moolenaar 'catch# comment', 14492c5ed4e3SBram Moolenaar 'endtry', 14502c5ed4e3SBram Moolenaar ], 'E654:') 14512c5ed4e3SBram Moolenaar CheckDefFailure([ 14522c5ed4e3SBram Moolenaar 'try', 14532c5ed4e3SBram Moolenaar ' echo "yes"', 14542c5ed4e3SBram Moolenaar 'catch /pat/# comment', 14552c5ed4e3SBram Moolenaar 'endtry', 14562c5ed4e3SBram Moolenaar ], 'E488:') 14577a092245SBram Moolenaar CheckDefFailure([ 14587a092245SBram Moolenaar 'try', 14597a092245SBram Moolenaar 'echo "yes"', 14607a092245SBram Moolenaar 'catch', 14617a092245SBram Moolenaar 'endtry# comment', 14627a092245SBram Moolenaar ], 'E488:') 14632c5ed4e3SBram Moolenaar CheckScriptFailure([ 14642c5ed4e3SBram Moolenaar 'vim9script', 14652c5ed4e3SBram Moolenaar 'try', 14662c5ed4e3SBram Moolenaar ' echo "yes"', 14672c5ed4e3SBram Moolenaar 'catch', 14682c5ed4e3SBram Moolenaar 'endtry# comment', 14692c5ed4e3SBram Moolenaar ], 'E600:') 14702c5ed4e3SBram Moolenaar 14712c5ed4e3SBram Moolenaar CheckScriptSuccess([ 14722c5ed4e3SBram Moolenaar 'vim9script', 14732c5ed4e3SBram Moolenaar 'hi # comment', 14742c5ed4e3SBram Moolenaar ]) 14752c5ed4e3SBram Moolenaar CheckScriptFailure([ 14762c5ed4e3SBram Moolenaar 'vim9script', 14772c5ed4e3SBram Moolenaar 'hi# comment', 14782c5ed4e3SBram Moolenaar ], 'E416:') 14791966c248SBram Moolenaar CheckScriptSuccess([ 14801966c248SBram Moolenaar 'vim9script', 14811966c248SBram Moolenaar 'hi Search # comment', 14821966c248SBram Moolenaar ]) 14831966c248SBram Moolenaar CheckScriptFailure([ 14841966c248SBram Moolenaar 'vim9script', 14851966c248SBram Moolenaar 'hi Search# comment', 14861966c248SBram Moolenaar ], 'E416:') 14871966c248SBram Moolenaar CheckScriptSuccess([ 14881966c248SBram Moolenaar 'vim9script', 14891966c248SBram Moolenaar 'hi link This Search # comment', 14901966c248SBram Moolenaar ]) 14911966c248SBram Moolenaar CheckScriptFailure([ 14921966c248SBram Moolenaar 'vim9script', 14931966c248SBram Moolenaar 'hi link This That# comment', 14941966c248SBram Moolenaar ], 'E413:') 14951966c248SBram Moolenaar CheckScriptSuccess([ 14961966c248SBram Moolenaar 'vim9script', 14971966c248SBram Moolenaar 'hi clear This # comment', 14981966c248SBram Moolenaar 'hi clear # comment', 14991966c248SBram Moolenaar ]) 15001966c248SBram Moolenaar " not tested, because it doesn't give an error but a warning: 15011966c248SBram Moolenaar " hi clear This# comment', 15021966c248SBram Moolenaar CheckScriptFailure([ 15031966c248SBram Moolenaar 'vim9script', 15041966c248SBram Moolenaar 'hi clear# comment', 15051966c248SBram Moolenaar ], 'E416:') 15061966c248SBram Moolenaar 15071966c248SBram Moolenaar CheckScriptSuccess([ 15081966c248SBram Moolenaar 'vim9script', 15091966c248SBram Moolenaar 'hi Group term=bold', 15101966c248SBram Moolenaar 'match Group /todo/ # comment', 15111966c248SBram Moolenaar ]) 15121966c248SBram Moolenaar CheckScriptFailure([ 15131966c248SBram Moolenaar 'vim9script', 15141966c248SBram Moolenaar 'hi Group term=bold', 15151966c248SBram Moolenaar 'match Group /todo/# comment', 15161966c248SBram Moolenaar ], 'E488:') 15171966c248SBram Moolenaar CheckScriptSuccess([ 15181966c248SBram Moolenaar 'vim9script', 15191966c248SBram Moolenaar 'match # comment', 15201966c248SBram Moolenaar ]) 15211966c248SBram Moolenaar CheckScriptFailure([ 15221966c248SBram Moolenaar 'vim9script', 15231966c248SBram Moolenaar 'match# comment', 15241966c248SBram Moolenaar ], 'E475:') 15251966c248SBram Moolenaar CheckScriptSuccess([ 15261966c248SBram Moolenaar 'vim9script', 15271966c248SBram Moolenaar 'match none # comment', 15281966c248SBram Moolenaar ]) 15291966c248SBram Moolenaar CheckScriptFailure([ 15301966c248SBram Moolenaar 'vim9script', 15311966c248SBram Moolenaar 'match none# comment', 15321966c248SBram Moolenaar ], 'E475:') 15331966c248SBram Moolenaar 15341966c248SBram Moolenaar CheckScriptSuccess([ 15351966c248SBram Moolenaar 'vim9script', 15361966c248SBram Moolenaar 'menutrans clear # comment', 15371966c248SBram Moolenaar ]) 15381966c248SBram Moolenaar CheckScriptFailure([ 15391966c248SBram Moolenaar 'vim9script', 15401966c248SBram Moolenaar 'menutrans clear# comment text', 15411966c248SBram Moolenaar ], 'E474:') 15421966c248SBram Moolenaar 15431966c248SBram Moolenaar CheckScriptSuccess([ 15441966c248SBram Moolenaar 'vim9script', 15451966c248SBram Moolenaar 'syntax clear # comment', 15461966c248SBram Moolenaar ]) 15471966c248SBram Moolenaar CheckScriptFailure([ 15481966c248SBram Moolenaar 'vim9script', 15491966c248SBram Moolenaar 'syntax clear# comment text', 15501966c248SBram Moolenaar ], 'E28:') 15511966c248SBram Moolenaar CheckScriptSuccess([ 15521966c248SBram Moolenaar 'vim9script', 15531966c248SBram Moolenaar 'syntax keyword Word some', 15541966c248SBram Moolenaar 'syntax clear Word # comment', 15551966c248SBram Moolenaar ]) 15561966c248SBram Moolenaar CheckScriptFailure([ 15571966c248SBram Moolenaar 'vim9script', 15581966c248SBram Moolenaar 'syntax keyword Word some', 15591966c248SBram Moolenaar 'syntax clear Word# comment text', 15601966c248SBram Moolenaar ], 'E28:') 15611966c248SBram Moolenaar 15621966c248SBram Moolenaar CheckScriptSuccess([ 15631966c248SBram Moolenaar 'vim9script', 15641966c248SBram Moolenaar 'syntax list # comment', 15651966c248SBram Moolenaar ]) 15661966c248SBram Moolenaar CheckScriptFailure([ 15671966c248SBram Moolenaar 'vim9script', 15681966c248SBram Moolenaar 'syntax list# comment text', 15691966c248SBram Moolenaar ], 'E28:') 15701966c248SBram Moolenaar 15711966c248SBram Moolenaar CheckScriptSuccess([ 15721966c248SBram Moolenaar 'vim9script', 15731966c248SBram Moolenaar 'syntax match Word /pat/ oneline # comment', 15741966c248SBram Moolenaar ]) 15751966c248SBram Moolenaar CheckScriptFailure([ 15761966c248SBram Moolenaar 'vim9script', 15771966c248SBram Moolenaar 'syntax match Word /pat/ oneline# comment', 15781966c248SBram Moolenaar ], 'E475:') 15791966c248SBram Moolenaar 15801966c248SBram Moolenaar CheckScriptSuccess([ 15811966c248SBram Moolenaar 'vim9script', 15821966c248SBram Moolenaar 'syntax keyword Word word # comm[ent', 15831966c248SBram Moolenaar ]) 15841966c248SBram Moolenaar CheckScriptFailure([ 15851966c248SBram Moolenaar 'vim9script', 15861966c248SBram Moolenaar 'syntax keyword Word word# comm[ent', 15871966c248SBram Moolenaar ], 'E789:') 15881966c248SBram Moolenaar 15891966c248SBram Moolenaar CheckScriptSuccess([ 15901966c248SBram Moolenaar 'vim9script', 15911966c248SBram Moolenaar 'syntax match Word /pat/ # comment', 15921966c248SBram Moolenaar ]) 15931966c248SBram Moolenaar CheckScriptFailure([ 15941966c248SBram Moolenaar 'vim9script', 15951966c248SBram Moolenaar 'syntax match Word /pat/# comment', 15961966c248SBram Moolenaar ], 'E402:') 15971966c248SBram Moolenaar 15981966c248SBram Moolenaar CheckScriptSuccess([ 15991966c248SBram Moolenaar 'vim9script', 16001966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something # comment', 16011966c248SBram Moolenaar ]) 16021966c248SBram Moolenaar CheckScriptFailure([ 16031966c248SBram Moolenaar 'vim9script', 16041966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something# comment', 16051966c248SBram Moolenaar ], 'E475:') 16061966c248SBram Moolenaar CheckScriptFailure([ 16071966c248SBram Moolenaar 'vim9script', 16081966c248SBram Moolenaar 'syntax match Word /pat/ contains= # comment', 16091966c248SBram Moolenaar ], 'E406:') 16101966c248SBram Moolenaar CheckScriptFailure([ 16111966c248SBram Moolenaar 'vim9script', 16121966c248SBram Moolenaar 'syntax match Word /pat/ contains=# comment', 16131966c248SBram Moolenaar ], 'E475:') 16141966c248SBram Moolenaar 16151966c248SBram Moolenaar CheckScriptSuccess([ 16161966c248SBram Moolenaar 'vim9script', 16171966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/ # comment', 16181966c248SBram Moolenaar ]) 16191966c248SBram Moolenaar CheckScriptFailure([ 16201966c248SBram Moolenaar 'vim9script', 16211966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/# comment', 16221966c248SBram Moolenaar ], 'E475:') 16231966c248SBram Moolenaar 16241966c248SBram Moolenaar CheckScriptSuccess([ 16251966c248SBram Moolenaar 'vim9script', 16261966c248SBram Moolenaar 'syntax sync # comment', 16271966c248SBram Moolenaar ]) 16281966c248SBram Moolenaar CheckScriptFailure([ 16291966c248SBram Moolenaar 'vim9script', 16301966c248SBram Moolenaar 'syntax sync# comment', 16311966c248SBram Moolenaar ], 'E404:') 16321966c248SBram Moolenaar CheckScriptSuccess([ 16331966c248SBram Moolenaar 'vim9script', 16341966c248SBram Moolenaar 'syntax sync ccomment # comment', 16351966c248SBram Moolenaar ]) 16361966c248SBram Moolenaar CheckScriptFailure([ 16371966c248SBram Moolenaar 'vim9script', 16381966c248SBram Moolenaar 'syntax sync ccomment# comment', 16391966c248SBram Moolenaar ], 'E404:') 16401966c248SBram Moolenaar 16411966c248SBram Moolenaar CheckScriptSuccess([ 16421966c248SBram Moolenaar 'vim9script', 16431966c248SBram Moolenaar 'syntax cluster Some contains=Word # comment', 16441966c248SBram Moolenaar ]) 16451966c248SBram Moolenaar CheckScriptFailure([ 16461966c248SBram Moolenaar 'vim9script', 16471966c248SBram Moolenaar 'syntax cluster Some contains=Word# comment', 16481966c248SBram Moolenaar ], 'E475:') 1649a72cfb80SBram Moolenaar 1650a72cfb80SBram Moolenaar CheckScriptSuccess([ 1651a72cfb80SBram Moolenaar 'vim9script', 1652a72cfb80SBram Moolenaar 'command Echo echo # comment', 1653a72cfb80SBram Moolenaar 'command Echo # comment', 1654a72cfb80SBram Moolenaar ]) 1655a72cfb80SBram Moolenaar CheckScriptFailure([ 1656a72cfb80SBram Moolenaar 'vim9script', 1657a72cfb80SBram Moolenaar 'command Echo echo# comment', 1658a72cfb80SBram Moolenaar 'Echo', 1659a72cfb80SBram Moolenaar ], 'E121:') 1660a72cfb80SBram Moolenaar CheckScriptFailure([ 1661a72cfb80SBram Moolenaar 'vim9script', 1662a72cfb80SBram Moolenaar 'command Echo# comment', 1663a72cfb80SBram Moolenaar ], 'E182:') 1664a72cfb80SBram Moolenaar CheckScriptFailure([ 1665a72cfb80SBram Moolenaar 'vim9script', 1666a72cfb80SBram Moolenaar 'command Echo echo', 1667a72cfb80SBram Moolenaar 'command Echo# comment', 1668a72cfb80SBram Moolenaar ], 'E182:') 1669a72cfb80SBram Moolenaar 1670a72cfb80SBram Moolenaar CheckScriptSuccess([ 1671a72cfb80SBram Moolenaar 'vim9script', 1672a72cfb80SBram Moolenaar 'function # comment', 1673a72cfb80SBram Moolenaar ]) 1674a72cfb80SBram Moolenaar CheckScriptFailure([ 1675a72cfb80SBram Moolenaar 'vim9script', 1676a72cfb80SBram Moolenaar 'function# comment', 1677a72cfb80SBram Moolenaar ], 'E129:') 1678a72cfb80SBram Moolenaar CheckScriptSuccess([ 1679a72cfb80SBram Moolenaar 'vim9script', 1680a72cfb80SBram Moolenaar 'function CheckScriptSuccess # comment', 1681a72cfb80SBram Moolenaar ]) 1682a72cfb80SBram Moolenaar CheckScriptFailure([ 1683a72cfb80SBram Moolenaar 'vim9script', 1684a72cfb80SBram Moolenaar 'function CheckScriptSuccess# comment', 1685a72cfb80SBram Moolenaar ], 'E488:') 1686a72cfb80SBram Moolenaar 1687a72cfb80SBram Moolenaar CheckScriptSuccess([ 1688a72cfb80SBram Moolenaar 'vim9script', 16894c17ad94SBram Moolenaar 'func g:DeleteMeA()', 1690a72cfb80SBram Moolenaar 'endfunc', 16914c17ad94SBram Moolenaar 'delfunction g:DeleteMeA # comment', 1692a72cfb80SBram Moolenaar ]) 1693a72cfb80SBram Moolenaar CheckScriptFailure([ 1694a72cfb80SBram Moolenaar 'vim9script', 16954c17ad94SBram Moolenaar 'func g:DeleteMeB()', 1696a72cfb80SBram Moolenaar 'endfunc', 16974c17ad94SBram Moolenaar 'delfunction g:DeleteMeB# comment', 1698a72cfb80SBram Moolenaar ], 'E488:') 1699a72cfb80SBram Moolenaar 1700a72cfb80SBram Moolenaar CheckScriptSuccess([ 1701a72cfb80SBram Moolenaar 'vim9script', 1702a72cfb80SBram Moolenaar 'call execute("ls") # comment', 1703a72cfb80SBram Moolenaar ]) 1704a72cfb80SBram Moolenaar CheckScriptFailure([ 1705a72cfb80SBram Moolenaar 'vim9script', 1706a72cfb80SBram Moolenaar 'call execute("ls")# comment', 1707a72cfb80SBram Moolenaar ], 'E488:') 17082c5ed4e3SBram Moolenaarenddef 17092c5ed4e3SBram Moolenaar 17102c5ed4e3SBram Moolenaardef Test_vim9_comment_gui() 17112c5ed4e3SBram Moolenaar CheckCanRunGui 17122c5ed4e3SBram Moolenaar 17132c5ed4e3SBram Moolenaar CheckScriptFailure([ 17142c5ed4e3SBram Moolenaar 'vim9script', 17152c5ed4e3SBram Moolenaar 'gui#comment' 17162c5ed4e3SBram Moolenaar ], 'E499:') 17172c5ed4e3SBram Moolenaar CheckScriptFailure([ 17182c5ed4e3SBram Moolenaar 'vim9script', 17192c5ed4e3SBram Moolenaar 'gui -f#comment' 17202c5ed4e3SBram Moolenaar ], 'E499:') 17217a092245SBram Moolenaarenddef 17227a092245SBram Moolenaar 1723a26b9700SBram Moolenaardef Test_vim9_comment_not_compiled() 1724a26b9700SBram Moolenaar au TabEnter *.vim let g:entered = 1 1725a26b9700SBram Moolenaar au TabEnter *.x let g:entered = 2 1726a26b9700SBram Moolenaar 1727a26b9700SBram Moolenaar edit test.vim 1728a26b9700SBram Moolenaar doautocmd TabEnter #comment 1729a26b9700SBram Moolenaar assert_equal(1, g:entered) 1730a26b9700SBram Moolenaar 1731a26b9700SBram Moolenaar doautocmd TabEnter f.x 1732a26b9700SBram Moolenaar assert_equal(2, g:entered) 1733a26b9700SBram Moolenaar 1734a26b9700SBram Moolenaar g:entered = 0 1735a26b9700SBram Moolenaar doautocmd TabEnter f.x #comment 1736a26b9700SBram Moolenaar assert_equal(2, g:entered) 1737a26b9700SBram Moolenaar 1738a26b9700SBram Moolenaar assert_fails('doautocmd Syntax#comment', 'E216:') 1739a26b9700SBram Moolenaar 1740a26b9700SBram Moolenaar au! TabEnter 1741a26b9700SBram Moolenaar unlet g:entered 1742d72c1bf0SBram Moolenaar 1743d72c1bf0SBram Moolenaar CheckScriptSuccess([ 1744d72c1bf0SBram Moolenaar 'vim9script', 1745d72c1bf0SBram Moolenaar 'let g:var = 123', 1746d72c1bf0SBram Moolenaar 'let w:var = 777', 1747d72c1bf0SBram Moolenaar 'unlet g:var w:var # something', 1748d72c1bf0SBram Moolenaar ]) 1749d72c1bf0SBram Moolenaar 1750d72c1bf0SBram Moolenaar CheckScriptFailure([ 1751d72c1bf0SBram Moolenaar 'vim9script', 1752d72c1bf0SBram Moolenaar 'let g:var = 123', 175332e35117SBram Moolenaar 'unlet g:var# comment1', 1754d72c1bf0SBram Moolenaar ], 'E108:') 1755d72c1bf0SBram Moolenaar 1756d72c1bf0SBram Moolenaar CheckScriptFailure([ 1757d72c1bf0SBram Moolenaar 'let g:var = 123', 1758d72c1bf0SBram Moolenaar 'unlet g:var # something', 1759d72c1bf0SBram Moolenaar ], 'E488:') 1760faac4104SBram Moolenaar 1761faac4104SBram Moolenaar CheckScriptSuccess([ 1762faac4104SBram Moolenaar 'vim9script', 176332e35117SBram Moolenaar 'if 1 # comment2', 1764faac4104SBram Moolenaar ' echo "yes"', 1765faac4104SBram Moolenaar 'elseif 2 #comment', 1766faac4104SBram Moolenaar ' echo "no"', 1767faac4104SBram Moolenaar 'endif', 1768faac4104SBram Moolenaar ]) 1769faac4104SBram Moolenaar 1770faac4104SBram Moolenaar CheckScriptFailure([ 1771faac4104SBram Moolenaar 'vim9script', 177232e35117SBram Moolenaar 'if 1# comment3', 1773faac4104SBram Moolenaar ' echo "yes"', 1774faac4104SBram Moolenaar 'endif', 1775faac4104SBram Moolenaar ], 'E15:') 1776faac4104SBram Moolenaar 1777faac4104SBram Moolenaar CheckScriptFailure([ 1778faac4104SBram Moolenaar 'vim9script', 177932e35117SBram Moolenaar 'if 0 # comment4', 1780faac4104SBram Moolenaar ' echo "yes"', 1781faac4104SBram Moolenaar 'elseif 2#comment', 1782faac4104SBram Moolenaar ' echo "no"', 1783faac4104SBram Moolenaar 'endif', 1784faac4104SBram Moolenaar ], 'E15:') 1785faac4104SBram Moolenaar 1786faac4104SBram Moolenaar CheckScriptSuccess([ 1787faac4104SBram Moolenaar 'vim9script', 178832e35117SBram Moolenaar 'let v = 1 # comment5', 1789faac4104SBram Moolenaar ]) 1790faac4104SBram Moolenaar 1791faac4104SBram Moolenaar CheckScriptFailure([ 1792faac4104SBram Moolenaar 'vim9script', 179332e35117SBram Moolenaar 'let v = 1# comment6', 179432e35117SBram Moolenaar ], 'E15:') 1795faac4104SBram Moolenaar 1796faac4104SBram Moolenaar CheckScriptSuccess([ 1797faac4104SBram Moolenaar 'vim9script', 1798faac4104SBram Moolenaar 'new' 1799faac4104SBram Moolenaar 'call setline(1, ["# define pat", "last"])', 1800faac4104SBram Moolenaar '$', 1801faac4104SBram Moolenaar 'dsearch /pat/ #comment', 1802faac4104SBram Moolenaar 'bwipe!', 1803faac4104SBram Moolenaar ]) 1804faac4104SBram Moolenaar 1805faac4104SBram Moolenaar CheckScriptFailure([ 1806faac4104SBram Moolenaar 'vim9script', 1807faac4104SBram Moolenaar 'new' 1808faac4104SBram Moolenaar 'call setline(1, ["# define pat", "last"])', 1809faac4104SBram Moolenaar '$', 1810faac4104SBram Moolenaar 'dsearch /pat/#comment', 1811faac4104SBram Moolenaar 'bwipe!', 1812faac4104SBram Moolenaar ], 'E488:') 181374fae513SBram Moolenaar 181474fae513SBram Moolenaar CheckScriptFailure([ 181574fae513SBram Moolenaar 'vim9script', 181674fae513SBram Moolenaar 'func! SomeFunc()', 181774fae513SBram Moolenaar ], 'E477:') 1818a26b9700SBram Moolenaarenddef 1819a26b9700SBram Moolenaar 18207e5bd91dSBram Moolenaardef Test_finish() 18217e5bd91dSBram Moolenaar let lines =<< trim END 18227e5bd91dSBram Moolenaar vim9script 18237e5bd91dSBram Moolenaar let g:res = 'one' 18247e5bd91dSBram Moolenaar if v:false | finish | endif 18257e5bd91dSBram Moolenaar let g:res = 'two' 18267e5bd91dSBram Moolenaar finish 18277e5bd91dSBram Moolenaar let g:res = 'three' 18287e5bd91dSBram Moolenaar END 18297e5bd91dSBram Moolenaar writefile(lines, 'Xfinished') 18307e5bd91dSBram Moolenaar source Xfinished 18317e5bd91dSBram Moolenaar assert_equal('two', g:res) 18327e5bd91dSBram Moolenaar 18337e5bd91dSBram Moolenaar unlet g:res 18347e5bd91dSBram Moolenaar delete('Xfinished') 18357e5bd91dSBram Moolenaarenddef 18367e5bd91dSBram Moolenaar 183732e35117SBram Moolenaardef Test_let_func_call() 183832e35117SBram Moolenaar let lines =<< trim END 183932e35117SBram Moolenaar vim9script 184032e35117SBram Moolenaar func GetValue() 184132e35117SBram Moolenaar if exists('g:count') 184232e35117SBram Moolenaar let g:count += 1 184332e35117SBram Moolenaar else 184432e35117SBram Moolenaar let g:count = 1 184532e35117SBram Moolenaar endif 184632e35117SBram Moolenaar return 'this' 184732e35117SBram Moolenaar endfunc 184832e35117SBram Moolenaar let val: string = GetValue() 1849df671b46SBram Moolenaar " env var is always a string 1850df671b46SBram Moolenaar let env = $TERM 185132e35117SBram Moolenaar END 185232e35117SBram Moolenaar writefile(lines, 'Xfinished') 185332e35117SBram Moolenaar source Xfinished 1854a5d0077eSBram Moolenaar " GetValue() is not called during discovery phase 185532e35117SBram Moolenaar assert_equal(1, g:count) 185632e35117SBram Moolenaar 185732e35117SBram Moolenaar unlet g:count 185832e35117SBram Moolenaar delete('Xfinished') 185932e35117SBram Moolenaarenddef 186032e35117SBram Moolenaar 186132e35117SBram Moolenaardef Test_let_missing_type() 186232e35117SBram Moolenaar let lines =<< trim END 186332e35117SBram Moolenaar vim9script 1864df671b46SBram Moolenaar let var = g:unknown 1865227a69deSBram Moolenaar END 1866822ba247SBram Moolenaar CheckScriptFailure(lines, 'E121:') 1867227a69deSBram Moolenaar 1868227a69deSBram Moolenaar lines =<< trim END 1869227a69deSBram Moolenaar vim9script 1870227a69deSBram Moolenaar let nr: number = 123 1871227a69deSBram Moolenaar let var = nr 1872227a69deSBram Moolenaar END 1873822ba247SBram Moolenaar CheckScriptSuccess(lines) 187432e35117SBram Moolenaarenddef 187532e35117SBram Moolenaar 1876c82a5b5dSBram Moolenaardef Test_let_declaration() 1877c82a5b5dSBram Moolenaar let lines =<< trim END 1878c82a5b5dSBram Moolenaar vim9script 1879c82a5b5dSBram Moolenaar let var: string 1880c82a5b5dSBram Moolenaar g:var_uninit = var 1881c82a5b5dSBram Moolenaar var = 'text' 1882c82a5b5dSBram Moolenaar g:var_test = var 1883984dddbeSBram Moolenaar " prefixing s: is optional 1884984dddbeSBram Moolenaar s:var = 'prefixed' 1885984dddbeSBram Moolenaar g:var_prefixed = s:var 1886984dddbeSBram Moolenaar 1887984dddbeSBram Moolenaar let s:other: number 1888984dddbeSBram Moolenaar other = 1234 1889984dddbeSBram Moolenaar g:other_var = other 1890c82a5b5dSBram Moolenaar END 1891c82a5b5dSBram Moolenaar CheckScriptSuccess(lines) 1892c82a5b5dSBram Moolenaar assert_equal('', g:var_uninit) 1893c82a5b5dSBram Moolenaar assert_equal('text', g:var_test) 1894984dddbeSBram Moolenaar assert_equal('prefixed', g:var_prefixed) 1895984dddbeSBram Moolenaar assert_equal(1234, g:other_var) 1896c82a5b5dSBram Moolenaar 1897c82a5b5dSBram Moolenaar unlet g:var_uninit 1898c82a5b5dSBram Moolenaar unlet g:var_test 1899984dddbeSBram Moolenaar unlet g:var_prefixed 1900984dddbeSBram Moolenaar unlet g:other_var 1901c82a5b5dSBram Moolenaarenddef 1902c82a5b5dSBram Moolenaar 190334db91f7SBram Moolenaardef Test_let_type_check() 190434db91f7SBram Moolenaar let lines =<< trim END 190534db91f7SBram Moolenaar vim9script 190634db91f7SBram Moolenaar let var: string 190734db91f7SBram Moolenaar var = 1234 190834db91f7SBram Moolenaar END 190934db91f7SBram Moolenaar CheckScriptFailure(lines, 'E1013:') 1910984dddbeSBram Moolenaar 1911984dddbeSBram Moolenaar lines =<< trim END 1912984dddbeSBram Moolenaar vim9script 1913984dddbeSBram Moolenaar let var:string 1914984dddbeSBram Moolenaar END 1915984dddbeSBram Moolenaar CheckScriptFailure(lines, 'E1069:') 191634db91f7SBram Moolenaarenddef 191734db91f7SBram Moolenaar 1918a5d0077eSBram Moolenaardef Test_forward_declaration() 1919a5d0077eSBram Moolenaar let lines =<< trim END 1920a5d0077eSBram Moolenaar vim9script 1921a5d0077eSBram Moolenaar def GetValue(): string 1922a5d0077eSBram Moolenaar return theVal 1923a5d0077eSBram Moolenaar enddef 1924a5d0077eSBram Moolenaar let theVal = 'something' 1925822ba247SBram Moolenaar g:initVal = GetValue() 1926a5d0077eSBram Moolenaar theVal = 'else' 1927a5d0077eSBram Moolenaar g:laterVal = GetValue() 1928a5d0077eSBram Moolenaar END 1929a5d0077eSBram Moolenaar writefile(lines, 'Xforward') 1930a5d0077eSBram Moolenaar source Xforward 1931a5d0077eSBram Moolenaar assert_equal('something', g:initVal) 1932a5d0077eSBram Moolenaar assert_equal('else', g:laterVal) 1933a5d0077eSBram Moolenaar 1934a5d0077eSBram Moolenaar unlet g:initVal 1935a5d0077eSBram Moolenaar unlet g:laterVal 1936a5d0077eSBram Moolenaar delete('Xforward') 1937a5d0077eSBram Moolenaarenddef 1938a5d0077eSBram Moolenaar 19399721fb4eSBram Moolenaardef Test_source_vim9_from_legacy() 19409721fb4eSBram Moolenaar let legacy_lines =<< trim END 19419721fb4eSBram Moolenaar source Xvim9_script.vim 19429721fb4eSBram Moolenaar 19439721fb4eSBram Moolenaar call assert_false(exists('local')) 19449721fb4eSBram Moolenaar call assert_false(exists('exported')) 19459721fb4eSBram Moolenaar call assert_false(exists('s:exported')) 19469721fb4eSBram Moolenaar call assert_equal('global', global) 19479721fb4eSBram Moolenaar call assert_equal('global', g:global) 19489721fb4eSBram Moolenaar 19499721fb4eSBram Moolenaar " imported variable becomes script-local 19509721fb4eSBram Moolenaar import exported from './Xvim9_script.vim' 19519721fb4eSBram Moolenaar call assert_equal('exported', s:exported) 19529721fb4eSBram Moolenaar call assert_false(exists('exported')) 19539721fb4eSBram Moolenaar 19549721fb4eSBram Moolenaar " imported function becomes script-local 19559721fb4eSBram Moolenaar import GetText from './Xvim9_script.vim' 19569721fb4eSBram Moolenaar call assert_equal('text', s:GetText()) 19579721fb4eSBram Moolenaar call assert_false(exists('*GetText')) 19589721fb4eSBram Moolenaar END 19599721fb4eSBram Moolenaar writefile(legacy_lines, 'Xlegacy_script.vim') 19609721fb4eSBram Moolenaar 19619721fb4eSBram Moolenaar let vim9_lines =<< trim END 19629721fb4eSBram Moolenaar vim9script 19639721fb4eSBram Moolenaar let local = 'local' 19649721fb4eSBram Moolenaar g:global = 'global' 19659721fb4eSBram Moolenaar export let exported = 'exported' 19669721fb4eSBram Moolenaar export def GetText(): string 19679721fb4eSBram Moolenaar return 'text' 19689721fb4eSBram Moolenaar enddef 19699721fb4eSBram Moolenaar END 19709721fb4eSBram Moolenaar writefile(vim9_lines, 'Xvim9_script.vim') 19719721fb4eSBram Moolenaar 19729721fb4eSBram Moolenaar source Xlegacy_script.vim 19739721fb4eSBram Moolenaar 19749721fb4eSBram Moolenaar assert_equal('global', g:global) 19759721fb4eSBram Moolenaar" unlet g:global 19769721fb4eSBram Moolenaar 19779721fb4eSBram Moolenaar delete('Xlegacy_script.vim') 19789721fb4eSBram Moolenaar delete('Xvim9_script.vim') 19799721fb4eSBram Moolenaarenddef 1980a5d0077eSBram Moolenaar 1981585fea7bSBram Moolenaar" Keep this last, it messes up highlighting. 1982585fea7bSBram Moolenaardef Test_substitute_cmd() 1983585fea7bSBram Moolenaar new 1984585fea7bSBram Moolenaar setline(1, 'something') 1985585fea7bSBram Moolenaar :substitute(some(other( 1986585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 1987585fea7bSBram Moolenaar bwipe! 1988585fea7bSBram Moolenaar 1989585fea7bSBram Moolenaar " also when the context is Vim9 script 1990585fea7bSBram Moolenaar let lines =<< trim END 1991585fea7bSBram Moolenaar vim9script 1992585fea7bSBram Moolenaar new 1993585fea7bSBram Moolenaar setline(1, 'something') 1994585fea7bSBram Moolenaar :substitute(some(other( 1995585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 1996585fea7bSBram Moolenaar bwipe! 1997585fea7bSBram Moolenaar END 1998585fea7bSBram Moolenaar writefile(lines, 'Xvim9lines') 1999585fea7bSBram Moolenaar source Xvim9lines 2000585fea7bSBram Moolenaar 2001585fea7bSBram Moolenaar delete('Xvim9lines') 2002585fea7bSBram Moolenaarenddef 2003585fea7bSBram Moolenaar 20048a7d6542SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker 2005