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' 20f0b9f43cSBram Moolenaarlet g:anumber = 123 216e587dcbSBram Moolenaar 228a7d6542SBram Moolenaardef Test_assignment() 238a7d6542SBram Moolenaar let bool1: bool = true 248a7d6542SBram Moolenaar assert_equal(v:true, bool1) 258a7d6542SBram Moolenaar let bool2: bool = false 268a7d6542SBram Moolenaar assert_equal(v:false, bool2) 278a7d6542SBram Moolenaar 28f93c7feaSBram Moolenaar call CheckDefFailure(['let x:string'], 'E1069:') 29f93c7feaSBram Moolenaar call CheckDefFailure(['let x:string = "x"'], 'E1069:') 301cc2a94fSBram Moolenaar call CheckDefFailure(['let a:string = "x"'], 'E1069:') 3198b4f145SBram Moolenaar call CheckDefFailure(['let lambda = {-> "lambda"}'], 'E704:') 32f93c7feaSBram Moolenaar 334cdb13ceSBram Moolenaar let nr: number = 1234 34451c2e35SBram Moolenaar call CheckDefFailure(['let nr: number = "asdf"'], 'E1012:') 354cdb13ceSBram Moolenaar 36b209750bSBram Moolenaar let a: number = 6 #comment 379be61bbbSBram Moolenaar assert_equal(6, a) 389be61bbbSBram Moolenaar 3942a480bfSBram Moolenaar if has('channel') 4042a480bfSBram Moolenaar let chan1: channel 41fbdd08edSBram Moolenaar let job1: job 42f51cb4e0SBram Moolenaar let job2: job = job_start('willfail') 4342a480bfSBram Moolenaar endif 44fbdd08edSBram Moolenaar if has('float') 45fbdd08edSBram Moolenaar let float1: float = 3.4 46fbdd08edSBram Moolenaar endif 475deeb3f1SBram Moolenaar let Funky1: func 485deeb3f1SBram Moolenaar let Funky2: func = function('len') 494c17ad94SBram Moolenaar let Party2: func = funcref('g:Test_syntax') 5042a480bfSBram Moolenaar 51b209750bSBram Moolenaar g:newvar = 'new' #comment 52401d9ffbSBram Moolenaar assert_equal('new', g:newvar) 53401d9ffbSBram Moolenaar 54401d9ffbSBram Moolenaar assert_equal('yes', g:existing) 55401d9ffbSBram Moolenaar g:existing = 'no' 56401d9ffbSBram Moolenaar assert_equal('no', g:existing) 57401d9ffbSBram Moolenaar 58b283a8a6SBram Moolenaar v:char = 'abc' 596e587dcbSBram Moolenaar assert_equal('abc', v:char) 60b283a8a6SBram Moolenaar 61b283a8a6SBram Moolenaar $ENVVAR = 'foobar' 626e587dcbSBram Moolenaar assert_equal('foobar', $ENVVAR) 63b283a8a6SBram Moolenaar $ENVVAR = '' 646e587dcbSBram Moolenaar 65b5ed2660SBram Moolenaar let lines =<< trim END 66b5ed2660SBram Moolenaar vim9script 67b5ed2660SBram Moolenaar $ENVVAR = 'barfoo' 68b5ed2660SBram Moolenaar assert_equal('barfoo', $ENVVAR) 69b5ed2660SBram Moolenaar $ENVVAR = '' 70b5ed2660SBram Moolenaar END 71b5ed2660SBram Moolenaar call CheckScriptSuccess(lines) 72b5ed2660SBram Moolenaar 73fd1823e0SBram Moolenaar s:appendToMe ..= 'yyy' 74fd1823e0SBram Moolenaar assert_equal('xxxyyy', s:appendToMe) 75fd1823e0SBram Moolenaar s:addToMe += 222 76fd1823e0SBram Moolenaar assert_equal(333, s:addToMe) 770bbf722aSBram Moolenaar s:newVar = 'new' 780bbf722aSBram Moolenaar assert_equal('new', s:newVar) 79a8c17704SBram Moolenaar 80a8c17704SBram Moolenaar set ts=7 81a8c17704SBram Moolenaar &ts += 1 82a8c17704SBram Moolenaar assert_equal(8, &ts) 8380c34ca3SBram Moolenaar &ts -= 3 8480c34ca3SBram Moolenaar assert_equal(5, &ts) 8580c34ca3SBram Moolenaar &ts *= 2 8680c34ca3SBram Moolenaar assert_equal(10, &ts) 8780c34ca3SBram Moolenaar &ts /= 3 8880c34ca3SBram Moolenaar assert_equal(3, &ts) 8980c34ca3SBram Moolenaar set ts=10 9080c34ca3SBram Moolenaar &ts %= 4 9180c34ca3SBram Moolenaar assert_equal(2, &ts) 92b5ed2660SBram Moolenaar 93b5ed2660SBram Moolenaar lines =<< trim END 94b5ed2660SBram Moolenaar vim9script 95b5ed2660SBram Moolenaar &ts = 6 96b5ed2660SBram Moolenaar &ts += 3 97b5ed2660SBram Moolenaar assert_equal(9, &ts) 98b5ed2660SBram Moolenaar END 99*0aae4809SBram Moolenaar CheckScriptSuccess(lines) 100b5ed2660SBram Moolenaar 101*0aae4809SBram Moolenaar CheckDefFailure(['¬ex += 3'], 'E113:') 102*0aae4809SBram Moolenaar CheckDefFailure(['&ts ..= "xxx"'], 'E1019:') 103*0aae4809SBram Moolenaar CheckDefFailure(['&ts = [7]'], 'E1012:') 104*0aae4809SBram Moolenaar CheckDefExecFailure(['&ts = g:alist'], 'E1029: Expected number but got list') 105*0aae4809SBram Moolenaar CheckDefFailure(['&ts = "xx"'], 'E1012:') 106*0aae4809SBram Moolenaar CheckDefExecFailure(['&ts = g:astring'], 'E1029: Expected number but got string') 107*0aae4809SBram Moolenaar CheckDefFailure(['&path += 3'], 'E1012:') 108*0aae4809SBram Moolenaar CheckDefExecFailure(['&bs = "asdf"'], 'E474:') 109cb711abfSBram Moolenaar # test freeing ISN_STOREOPT 110*0aae4809SBram Moolenaar CheckDefFailure(['&ts = 3', 'let asdf'], 'E1022:') 11180c34ca3SBram Moolenaar &ts = 8 112a8c17704SBram Moolenaar 113*0aae4809SBram Moolenaar lines =<< trim END 114*0aae4809SBram Moolenaar let save_TI = &t_TI 115*0aae4809SBram Moolenaar &t_TI = '' 116*0aae4809SBram Moolenaar assert_equal('', &t_TI) 117*0aae4809SBram Moolenaar &t_TI = 'xxx' 118*0aae4809SBram Moolenaar assert_equal('xxx', &t_TI) 119*0aae4809SBram Moolenaar &t_TI = save_TI 120*0aae4809SBram Moolenaar END 121*0aae4809SBram Moolenaar CheckDefSuccess(lines) 122*0aae4809SBram Moolenaar CheckScriptSuccess(['vim9script'] + lines) 123*0aae4809SBram Moolenaar 124*0aae4809SBram Moolenaar CheckDefFailure(['&t_TI = 123'], 'E1012:') 125*0aae4809SBram Moolenaar CheckScriptFailure(['vim9script', '&t_TI = 123'], 'E928:') 126*0aae4809SBram Moolenaar 127*0aae4809SBram Moolenaar CheckDefFailure(['let s:var = 123'], 'E1101:') 128*0aae4809SBram Moolenaar CheckDefFailure(['let s:var: number'], 'E1101:') 12933afa244SBram Moolenaar 130f9b2b496SBram Moolenaar lines =<< trim END 131f9b2b496SBram Moolenaar vim9script 132f9b2b496SBram Moolenaar def SomeFunc() 133f9b2b496SBram Moolenaar s:var = 123 134f9b2b496SBram Moolenaar enddef 135f9b2b496SBram Moolenaar defcompile 136f9b2b496SBram Moolenaar END 137f9b2b496SBram Moolenaar call CheckScriptFailure(lines, 'E1089:') 138f9b2b496SBram Moolenaar 139a8c17704SBram Moolenaar g:inc_counter += 1 140a8c17704SBram Moolenaar assert_equal(2, g:inc_counter) 141a8c17704SBram Moolenaar 142a8c17704SBram Moolenaar $SOME_ENV_VAR ..= 'more' 143a8c17704SBram Moolenaar assert_equal('somemore', $SOME_ENV_VAR) 144dd29f1b0SBram Moolenaar call CheckDefFailure(['$SOME_ENV_VAR += "more"'], 'E1051:') 145451c2e35SBram Moolenaar call CheckDefFailure(['$SOME_ENV_VAR += 123'], 'E1012:') 146a8c17704SBram Moolenaar 147a8c17704SBram Moolenaar @a = 'areg' 148a8c17704SBram Moolenaar @a ..= 'add' 149a8c17704SBram Moolenaar assert_equal('aregadd', @a) 150dd29f1b0SBram Moolenaar call CheckDefFailure(['@a += "more"'], 'E1051:') 151451c2e35SBram Moolenaar call CheckDefFailure(['@a += 123'], 'E1012:') 152e69f6d04SBram Moolenaar 153b5ed2660SBram Moolenaar lines =<< trim END 154b5ed2660SBram Moolenaar vim9script 155b5ed2660SBram Moolenaar @c = 'areg' 156b5ed2660SBram Moolenaar @c ..= 'add' 157b5ed2660SBram Moolenaar assert_equal('aregadd', @c) 158b5ed2660SBram Moolenaar END 159b5ed2660SBram Moolenaar call CheckScriptSuccess(lines) 160b5ed2660SBram Moolenaar 161e69f6d04SBram Moolenaar v:errmsg = 'none' 162e69f6d04SBram Moolenaar v:errmsg ..= 'again' 163e69f6d04SBram Moolenaar assert_equal('noneagain', v:errmsg) 164dd29f1b0SBram Moolenaar call CheckDefFailure(['v:errmsg += "more"'], 'E1051:') 165451c2e35SBram Moolenaar call CheckDefFailure(['v:errmsg += 123'], 'E1012:') 16633afa244SBram Moolenaar 16733afa244SBram Moolenaar # single letter variables 16833afa244SBram Moolenaar a = 123 16933afa244SBram Moolenaar assert_equal(123, a) 17033afa244SBram Moolenaar let b: number 17133afa244SBram Moolenaar b = 123 17233afa244SBram Moolenaar assert_equal(123, b) 17333afa244SBram Moolenaar let g: number 17433afa244SBram Moolenaar g = 123 17533afa244SBram Moolenaar assert_equal(123, g) 17633afa244SBram Moolenaar let s: number 17733afa244SBram Moolenaar s = 123 17833afa244SBram Moolenaar assert_equal(123, s) 17933afa244SBram Moolenaar let t: number 18033afa244SBram Moolenaar t = 123 18133afa244SBram Moolenaar assert_equal(123, t) 18233afa244SBram Moolenaar let v: number 18333afa244SBram Moolenaar v = 123 18433afa244SBram Moolenaar assert_equal(123, v) 18533afa244SBram Moolenaar let w: number 18633afa244SBram Moolenaar w = 123 18733afa244SBram Moolenaar assert_equal(123, w) 1885deeb3f1SBram Moolenaarenddef 1895deeb3f1SBram Moolenaar 1903b74b6b4SBram Moolenaardef Test_vim9_single_char_vars() 1913b74b6b4SBram Moolenaar let lines =<< trim END 1923b74b6b4SBram Moolenaar vim9script 1933b74b6b4SBram Moolenaar 194f5be8cdbSBram Moolenaar # single character variable declarations work 1953b74b6b4SBram Moolenaar let a: string 1963b74b6b4SBram Moolenaar let b: number 1973b74b6b4SBram Moolenaar let l: list<any> 1983b74b6b4SBram Moolenaar let s: string 1993b74b6b4SBram Moolenaar let t: number 2003b74b6b4SBram Moolenaar let v: number 2013b74b6b4SBram Moolenaar let w: number 2023b74b6b4SBram Moolenaar 203f5be8cdbSBram Moolenaar # script-local variables can be used without s: prefix 2043b74b6b4SBram Moolenaar a = 'script-a' 2053b74b6b4SBram Moolenaar b = 111 2063b74b6b4SBram Moolenaar l = [1, 2, 3] 2073b74b6b4SBram Moolenaar s = 'script-s' 2083b74b6b4SBram Moolenaar t = 222 2093b74b6b4SBram Moolenaar v = 333 2103b74b6b4SBram Moolenaar w = 444 2113b74b6b4SBram Moolenaar 2123b74b6b4SBram Moolenaar assert_equal('script-a', a) 2133b74b6b4SBram Moolenaar assert_equal(111, b) 2143b74b6b4SBram Moolenaar assert_equal([1, 2, 3], l) 2153b74b6b4SBram Moolenaar assert_equal('script-s', s) 2163b74b6b4SBram Moolenaar assert_equal(222, t) 2173b74b6b4SBram Moolenaar assert_equal(333, v) 2183b74b6b4SBram Moolenaar assert_equal(444, w) 2193b74b6b4SBram Moolenaar END 2203b74b6b4SBram Moolenaar writefile(lines, 'Xsinglechar') 2213b74b6b4SBram Moolenaar source Xsinglechar 2223b74b6b4SBram Moolenaar delete('Xsinglechar') 2233b74b6b4SBram Moolenaarenddef 2243b74b6b4SBram Moolenaar 22584370087SBram Moolenaardef Test_assignment_list() 22684370087SBram Moolenaar let list1: list<bool> = [false, true, false] 22784370087SBram Moolenaar let list2: list<number> = [1, 2, 3] 22884370087SBram Moolenaar let list3: list<string> = ['sdf', 'asdf'] 22984370087SBram Moolenaar let list4: list<any> = ['yes', true, 1234] 23084370087SBram Moolenaar let list5: list<blob> = [0z01, 0z02] 23184370087SBram Moolenaar 23284370087SBram Moolenaar let listS: list<string> = [] 23384370087SBram Moolenaar let listN: list<number> = [] 23484370087SBram Moolenaar 23584370087SBram Moolenaar assert_equal([1, 2, 3], list2) 23684370087SBram Moolenaar list2[-1] = 99 23784370087SBram Moolenaar assert_equal([1, 2, 99], list2) 23884370087SBram Moolenaar list2[-2] = 88 23984370087SBram Moolenaar assert_equal([1, 88, 99], list2) 24084370087SBram Moolenaar list2[-3] = 77 24184370087SBram Moolenaar assert_equal([77, 88, 99], list2) 242dd29f1b0SBram Moolenaar list2 += [100] 243dd29f1b0SBram Moolenaar assert_equal([77, 88, 99, 100], list2) 244dd29f1b0SBram Moolenaar 245dd29f1b0SBram Moolenaar list3 += ['end'] 246dd29f1b0SBram Moolenaar assert_equal(['sdf', 'asdf', 'end'], list3) 247dd29f1b0SBram Moolenaar 248dd29f1b0SBram Moolenaar 24984370087SBram Moolenaar call CheckDefExecFailure(['let ll = [1, 2, 3]', 'll[-4] = 6'], 'E684:') 250c5b1c20bSBram Moolenaar call CheckDefExecFailure(['let [v1, v2] = [1, 2]'], 'E1092:') 25184370087SBram Moolenaar 25284370087SBram Moolenaar # type becomes list<any> 25384370087SBram Moolenaar let somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c'] 25484370087SBram Moolenaarenddef 25584370087SBram Moolenaar 256b31be3f9SBram Moolenaardef Test_assignment_list_vim9script() 257b31be3f9SBram Moolenaar let lines =<< trim END 258b31be3f9SBram Moolenaar vim9script 259b31be3f9SBram Moolenaar let v1: number 260b31be3f9SBram Moolenaar let v2: number 261b31be3f9SBram Moolenaar let v3: number 262b31be3f9SBram Moolenaar [v1, v2, v3] = [1, 2, 3] 263b31be3f9SBram Moolenaar assert_equal([1, 2, 3], [v1, v2, v3]) 264b31be3f9SBram Moolenaar END 265b31be3f9SBram Moolenaar call CheckScriptSuccess(lines) 266b31be3f9SBram Moolenaarenddef 267b31be3f9SBram Moolenaar 26884370087SBram Moolenaardef Test_assignment_dict() 26984370087SBram Moolenaar let dict1: dict<bool> = #{one: false, two: true} 27084370087SBram Moolenaar let dict2: dict<number> = #{one: 1, two: 2} 27184370087SBram Moolenaar let dict3: dict<string> = #{key: 'value'} 27284370087SBram Moolenaar let dict4: dict<any> = #{one: 1, two: '2'} 27374fae513SBram Moolenaar let dict5: dict<blob> = #{one: 0z01, two: 0z02} 27484370087SBram Moolenaar 275f5be8cdbSBram Moolenaar # overwrite 276c785b9a7SBram Moolenaar dict3['key'] = 'another' 277c785b9a7SBram Moolenaar 27858626872SBram Moolenaar # empty key can be used 27958626872SBram Moolenaar let dd = {} 28058626872SBram Moolenaar dd[""] = 6 28158626872SBram Moolenaar assert_equal({'': 6}, dd) 28284370087SBram Moolenaar 28384370087SBram Moolenaar # type becomes dict<any> 28484370087SBram Moolenaar let somedict = rand() > 0 ? #{a: 1, b: 2} : #{a: 'a', b: 'b'} 2858e4c8c85SBram Moolenaar 2868e4c8c85SBram Moolenaar # assignment to script-local dict 2878e4c8c85SBram Moolenaar let lines =<< trim END 2888e4c8c85SBram Moolenaar vim9script 2898e4c8c85SBram Moolenaar let test: dict<any> = {} 2908e4c8c85SBram Moolenaar def FillDict(): dict<any> 2918e4c8c85SBram Moolenaar test['a'] = 43 2928e4c8c85SBram Moolenaar return test 2938e4c8c85SBram Moolenaar enddef 2948e4c8c85SBram Moolenaar assert_equal(#{a: 43}, FillDict()) 2958e4c8c85SBram Moolenaar END 2968e4c8c85SBram Moolenaar call CheckScriptSuccess(lines) 2978e4c8c85SBram Moolenaar 2988e4c8c85SBram Moolenaar lines =<< trim END 2998e4c8c85SBram Moolenaar vim9script 3008e4c8c85SBram Moolenaar let test: dict<any> 3018e4c8c85SBram Moolenaar def FillDict(): dict<any> 3028e4c8c85SBram Moolenaar test['a'] = 43 3038e4c8c85SBram Moolenaar return test 3048e4c8c85SBram Moolenaar enddef 3058e4c8c85SBram Moolenaar FillDict() 3068e4c8c85SBram Moolenaar END 3078e4c8c85SBram Moolenaar call CheckScriptFailure(lines, 'E1103:') 3082caa1594SBram Moolenaar 3092caa1594SBram Moolenaar # assignment to global dict 3102caa1594SBram Moolenaar lines =<< trim END 3112caa1594SBram Moolenaar vim9script 3122caa1594SBram Moolenaar g:test = {} 3132caa1594SBram Moolenaar def FillDict(): dict<any> 3142caa1594SBram Moolenaar g:test['a'] = 43 3152caa1594SBram Moolenaar return g:test 3162caa1594SBram Moolenaar enddef 3172caa1594SBram Moolenaar assert_equal(#{a: 43}, FillDict()) 3182caa1594SBram Moolenaar END 3192caa1594SBram Moolenaar call CheckScriptSuccess(lines) 3202caa1594SBram Moolenaar 3212caa1594SBram Moolenaar # assignment to buffer dict 3222caa1594SBram Moolenaar lines =<< trim END 3232caa1594SBram Moolenaar vim9script 3242caa1594SBram Moolenaar b:test = {} 3252caa1594SBram Moolenaar def FillDict(): dict<any> 3262caa1594SBram Moolenaar b:test['a'] = 43 3272caa1594SBram Moolenaar return b:test 3282caa1594SBram Moolenaar enddef 3292caa1594SBram Moolenaar assert_equal(#{a: 43}, FillDict()) 3302caa1594SBram Moolenaar END 3312caa1594SBram Moolenaar call CheckScriptSuccess(lines) 33284370087SBram Moolenaarenddef 33384370087SBram Moolenaar 334d3aac291SBram Moolenaardef Test_assignment_local() 335f5be8cdbSBram Moolenaar # Test in a separated file in order not to the current buffer/window/tab is 336f5be8cdbSBram Moolenaar # changed. 337d3aac291SBram Moolenaar let script_lines: list<string> =<< trim END 338d3aac291SBram Moolenaar let b:existing = 'yes' 339d3aac291SBram Moolenaar let w:existing = 'yes' 340d3aac291SBram Moolenaar let t:existing = 'yes' 341d3aac291SBram Moolenaar 342d3aac291SBram Moolenaar def Test_assignment_local_internal() 343d3aac291SBram Moolenaar b:newvar = 'new' 344d3aac291SBram Moolenaar assert_equal('new', b:newvar) 345d3aac291SBram Moolenaar assert_equal('yes', b:existing) 346d3aac291SBram Moolenaar b:existing = 'no' 347d3aac291SBram Moolenaar assert_equal('no', b:existing) 348396f3138SBram Moolenaar b:existing ..= 'NO' 349396f3138SBram Moolenaar assert_equal('noNO', b:existing) 350d3aac291SBram Moolenaar 351d3aac291SBram Moolenaar w:newvar = 'new' 352d3aac291SBram Moolenaar assert_equal('new', w:newvar) 353d3aac291SBram Moolenaar assert_equal('yes', w:existing) 354d3aac291SBram Moolenaar w:existing = 'no' 355d3aac291SBram Moolenaar assert_equal('no', w:existing) 356396f3138SBram Moolenaar w:existing ..= 'NO' 357396f3138SBram Moolenaar assert_equal('noNO', w:existing) 358d3aac291SBram Moolenaar 359d3aac291SBram Moolenaar t:newvar = 'new' 360d3aac291SBram Moolenaar assert_equal('new', t:newvar) 361d3aac291SBram Moolenaar assert_equal('yes', t:existing) 362d3aac291SBram Moolenaar t:existing = 'no' 363d3aac291SBram Moolenaar assert_equal('no', t:existing) 364396f3138SBram Moolenaar t:existing ..= 'NO' 365396f3138SBram Moolenaar assert_equal('noNO', t:existing) 366d3aac291SBram Moolenaar enddef 367d3aac291SBram Moolenaar call Test_assignment_local_internal() 368d3aac291SBram Moolenaar END 369d3aac291SBram Moolenaar call CheckScriptSuccess(script_lines) 370d3aac291SBram Moolenaarenddef 371d3aac291SBram Moolenaar 3725deeb3f1SBram Moolenaardef Test_assignment_default() 373e69f6d04SBram Moolenaar 374cb711abfSBram Moolenaar # Test default values. 375e69f6d04SBram Moolenaar let thebool: bool 376e69f6d04SBram Moolenaar assert_equal(v:false, thebool) 377e69f6d04SBram Moolenaar 378e69f6d04SBram Moolenaar let thenumber: number 379e69f6d04SBram Moolenaar assert_equal(0, thenumber) 380e69f6d04SBram Moolenaar 381e69f6d04SBram Moolenaar if has('float') 382e69f6d04SBram Moolenaar let thefloat: float 383e69f6d04SBram Moolenaar assert_equal(0.0, thefloat) 384e69f6d04SBram Moolenaar endif 385e69f6d04SBram Moolenaar 386e69f6d04SBram Moolenaar let thestring: string 387e69f6d04SBram Moolenaar assert_equal('', thestring) 388e69f6d04SBram Moolenaar 389e69f6d04SBram Moolenaar let theblob: blob 390e69f6d04SBram Moolenaar assert_equal(0z, theblob) 391e69f6d04SBram Moolenaar 3925deeb3f1SBram Moolenaar let Thefunc: func 3935deeb3f1SBram Moolenaar assert_equal(test_null_function(), Thefunc) 394e69f6d04SBram Moolenaar 395e69f6d04SBram Moolenaar let thelist: list<any> 396e69f6d04SBram Moolenaar assert_equal([], thelist) 397e69f6d04SBram Moolenaar 398e69f6d04SBram Moolenaar let thedict: dict<any> 399e69f6d04SBram Moolenaar assert_equal({}, thedict) 400e69f6d04SBram Moolenaar 4012c869deeSBram Moolenaar if has('channel') 402e69f6d04SBram Moolenaar let thejob: job 403e69f6d04SBram Moolenaar assert_equal(test_null_job(), thejob) 404e69f6d04SBram Moolenaar 405e69f6d04SBram Moolenaar let thechannel: channel 406e69f6d04SBram Moolenaar assert_equal(test_null_channel(), thechannel) 407c785b9a7SBram Moolenaar 408c785b9a7SBram Moolenaar if has('unix') && executable('cat') 409f5be8cdbSBram Moolenaar # check with non-null job and channel, types must match 410c785b9a7SBram Moolenaar thejob = job_start("cat ", #{}) 411c785b9a7SBram Moolenaar thechannel = job_getchannel(thejob) 412c785b9a7SBram Moolenaar job_stop(thejob, 'kill') 413c785b9a7SBram Moolenaar endif 4142c869deeSBram Moolenaar endif 415585fea7bSBram Moolenaar 416585fea7bSBram Moolenaar let nr = 1234 | nr = 5678 417585fea7bSBram Moolenaar assert_equal(5678, nr) 4188a7d6542SBram Moolenaarenddef 4198a7d6542SBram Moolenaar 42047a519a9SBram Moolenaardef Test_assignment_var_list() 42147a519a9SBram Moolenaar let v1: string 42247a519a9SBram Moolenaar let v2: string 4239af78769SBram Moolenaar let vrem: list<string> 4249af78769SBram Moolenaar [v1] = ['aaa'] 4259af78769SBram Moolenaar assert_equal('aaa', v1) 4269af78769SBram Moolenaar 42747a519a9SBram Moolenaar [v1, v2] = ['one', 'two'] 42847a519a9SBram Moolenaar assert_equal('one', v1) 42947a519a9SBram Moolenaar assert_equal('two', v2) 4309af78769SBram Moolenaar 4319af78769SBram Moolenaar [v1, v2; vrem] = ['one', 'two'] 4329af78769SBram Moolenaar assert_equal('one', v1) 4339af78769SBram Moolenaar assert_equal('two', v2) 4349af78769SBram Moolenaar assert_equal([], vrem) 4359af78769SBram Moolenaar 4369af78769SBram Moolenaar [v1, v2; vrem] = ['one', 'two', 'three'] 4379af78769SBram Moolenaar assert_equal('one', v1) 4389af78769SBram Moolenaar assert_equal('two', v2) 4399af78769SBram Moolenaar assert_equal(['three'], vrem) 4401c199f9cSBram Moolenaar 4411c199f9cSBram Moolenaar [&ts, &sw] = [3, 4] 4421c199f9cSBram Moolenaar assert_equal(3, &ts) 4431c199f9cSBram Moolenaar assert_equal(4, &sw) 4441c199f9cSBram Moolenaar set ts=8 sw=4 44547a519a9SBram Moolenaarenddef 44647a519a9SBram Moolenaar 447c7e44a7eSBram Moolenaardef Test_assignment_vim9script() 448c7e44a7eSBram Moolenaar let lines =<< trim END 449c7e44a7eSBram Moolenaar vim9script 450c7e44a7eSBram Moolenaar def Func(): list<number> 451c7e44a7eSBram Moolenaar return [1, 2] 452c7e44a7eSBram Moolenaar enddef 453c7e44a7eSBram Moolenaar let var1: number 454c7e44a7eSBram Moolenaar let var2: number 455c7e44a7eSBram Moolenaar [var1, var2] = 456c7e44a7eSBram Moolenaar Func() 457c7e44a7eSBram Moolenaar assert_equal(1, var1) 458c7e44a7eSBram Moolenaar assert_equal(2, var2) 459c7e44a7eSBram Moolenaar let ll = 460c7e44a7eSBram Moolenaar Func() 461c7e44a7eSBram Moolenaar assert_equal([1, 2], ll) 46283144546SBram Moolenaar 46383144546SBram Moolenaar @/ = 'text' 46483144546SBram Moolenaar assert_equal('text', @/) 46583144546SBram Moolenaar @0 = 'zero' 46683144546SBram Moolenaar assert_equal('zero', @0) 46783144546SBram Moolenaar @1 = 'one' 46883144546SBram Moolenaar assert_equal('one', @1) 46983144546SBram Moolenaar @9 = 'nine' 47083144546SBram Moolenaar assert_equal('nine', @9) 47183144546SBram Moolenaar @- = 'minus' 47283144546SBram Moolenaar assert_equal('minus', @-) 47383144546SBram Moolenaar if has('clipboard_working') 47483144546SBram Moolenaar @* = 'star' 47583144546SBram Moolenaar assert_equal('star', @*) 47683144546SBram Moolenaar @+ = 'plus' 47783144546SBram Moolenaar assert_equal('plus', @+) 47883144546SBram Moolenaar endif 47995dd9f25SBram Moolenaar 48095dd9f25SBram Moolenaar let a: number = 123 48195dd9f25SBram Moolenaar assert_equal(123, a) 48295dd9f25SBram Moolenaar let s: string = 'yes' 48395dd9f25SBram Moolenaar assert_equal('yes', s) 48495dd9f25SBram Moolenaar let b: number = 42 48595dd9f25SBram Moolenaar assert_equal(42, b) 48695dd9f25SBram Moolenaar let w: number = 43 48795dd9f25SBram Moolenaar assert_equal(43, w) 48895dd9f25SBram Moolenaar let t: number = 44 48995dd9f25SBram Moolenaar assert_equal(44, t) 490c7e44a7eSBram Moolenaar END 491c7e44a7eSBram Moolenaar CheckScriptSuccess(lines) 492c7e44a7eSBram Moolenaarenddef 493c7e44a7eSBram Moolenaar 494cab27678SBram Moolenaardef Mess(): string 495cab27678SBram Moolenaar v:foldstart = 123 496cab27678SBram Moolenaar return 'xxx' 497cab27678SBram Moolenaarenddef 498cab27678SBram Moolenaar 499d72c1bf0SBram Moolenaardef Test_assignment_failure() 5008a7d6542SBram Moolenaar call CheckDefFailure(['let var=234'], 'E1004:') 5018a7d6542SBram Moolenaar call CheckDefFailure(['let var =234'], 'E1004:') 5028a7d6542SBram Moolenaar call CheckDefFailure(['let var= 234'], 'E1004:') 5038a7d6542SBram Moolenaar 50463be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var=234'], 'E1004:') 50563be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var=234'], "before and after '='") 50663be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var =234'], 'E1004:') 50763be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var= 234'], 'E1004:') 50863be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var = 234', 'var+=234'], 'E1004:') 50963be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var = 234', 'var+=234'], "before and after '+='") 51063be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var = "x"', 'var..="y"'], 'E1004:') 51163be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var = "x"', 'var..="y"'], "before and after '..='") 51263be3d4bSBram Moolenaar 5138a7d6542SBram Moolenaar call CheckDefFailure(['let true = 1'], 'E1034:') 5148a7d6542SBram Moolenaar call CheckDefFailure(['let false = 1'], 'E1034:') 5158a7d6542SBram Moolenaar 5169b7bf9e9SBram Moolenaar call CheckDefFailure(['[a; b; c] = g:list'], 'E452:') 5179af78769SBram Moolenaar call CheckDefExecFailure(['let a: number', 5189af78769SBram Moolenaar '[a] = test_null_list()'], 'E1093:') 5199af78769SBram Moolenaar call CheckDefExecFailure(['let a: number', 5209af78769SBram Moolenaar '[a] = []'], 'E1093:') 5219af78769SBram Moolenaar call CheckDefExecFailure(['let x: number', 5229af78769SBram Moolenaar 'let y: number', 5239af78769SBram Moolenaar '[x, y] = [1]'], 'E1093:') 5249af78769SBram Moolenaar call CheckDefExecFailure(['let x: number', 5259af78769SBram Moolenaar 'let y: number', 5269af78769SBram Moolenaar 'let z: list<number>', 5279af78769SBram Moolenaar '[x, y; z] = [1]'], 'E1093:') 5289be61bbbSBram Moolenaar 529e69f6d04SBram Moolenaar call CheckDefFailure(['let somevar'], "E1022:") 530c2ee44ccSBram Moolenaar call CheckDefFailure(['let &tabstop = 4'], 'E1052:') 5319be61bbbSBram Moolenaar call CheckDefFailure(['&g:option = 5'], 'E113:') 532c2ee44ccSBram Moolenaar call CheckScriptFailure(['vim9script', 'let &tabstop = 4'], 'E1052:') 5339be61bbbSBram Moolenaar 534e55b1c09SBram Moolenaar call CheckDefFailure(['let $VAR = 5'], 'E1016: Cannot declare an environment variable:') 535c2ee44ccSBram Moolenaar call CheckScriptFailure(['vim9script', 'let $ENV = "xxx"'], 'E1016:') 5369be61bbbSBram Moolenaar 537434d72cbSBram Moolenaar if has('dnd') 53865821727SBram Moolenaar call CheckDefFailure(['let @~ = 5'], 'E1066:') 539434d72cbSBram Moolenaar else 540434d72cbSBram Moolenaar call CheckDefFailure(['let @~ = 5'], 'E354:') 541434d72cbSBram Moolenaar call CheckDefFailure(['@~ = 5'], 'E354:') 542434d72cbSBram Moolenaar endif 5439be61bbbSBram Moolenaar call CheckDefFailure(['let @a = 5'], 'E1066:') 54465821727SBram Moolenaar call CheckDefFailure(['let @/ = "x"'], 'E1066:') 545c2ee44ccSBram Moolenaar call CheckScriptFailure(['vim9script', 'let @a = "abc"'], 'E1066:') 5469be61bbbSBram Moolenaar 547e55b1c09SBram Moolenaar call CheckDefFailure(['let g:var = 5'], 'E1016: Cannot declare a global variable:') 548e55b1c09SBram Moolenaar call CheckDefFailure(['let w:var = 5'], 'E1016: Cannot declare a window variable:') 549e55b1c09SBram Moolenaar call CheckDefFailure(['let b:var = 5'], 'E1016: Cannot declare a buffer variable:') 550e55b1c09SBram Moolenaar call CheckDefFailure(['let t:var = 5'], 'E1016: Cannot declare a tab variable:') 5519be61bbbSBram Moolenaar 5529be61bbbSBram Moolenaar call CheckDefFailure(['let anr = 4', 'anr ..= "text"'], 'E1019:') 5539be61bbbSBram Moolenaar call CheckDefFailure(['let xnr += 4'], 'E1020:') 5549be61bbbSBram Moolenaar 555451c2e35SBram Moolenaar call CheckScriptFailure(['vim9script', 'def Func()', 'let dummy = s:notfound', 'enddef', 'defcompile'], 'E1108:') 55633fa29cfSBram Moolenaar 5578a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<string> = [123]'], 'expected list<string> but got list<number>') 5588a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<number> = ["xx"]'], 'expected list<number> but got list<string>') 5598a7d6542SBram Moolenaar 5608a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<string> = #{key: 123}'], 'expected dict<string> but got dict<number>') 5618a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<number> = #{key: "xx"}'], 'expected dict<number> but got dict<string>') 5628a7d6542SBram Moolenaar 5638a7d6542SBram Moolenaar call CheckDefFailure(['let var = feedkeys("0")'], 'E1031:') 5648a7d6542SBram Moolenaar call CheckDefFailure(['let var: number = feedkeys("0")'], 'expected number but got void') 56542a480bfSBram Moolenaar 566d77a8525SBram Moolenaar call CheckDefFailure(['let var: dict <number>'], 'E1068:') 56742a480bfSBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 568cab27678SBram Moolenaar 569cab27678SBram Moolenaar call assert_fails('s/^/\=Mess()/n', 'E794:') 570cab27678SBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 57143e969d3SBram Moolenaar 57243e969d3SBram Moolenaar call CheckDefFailure(['w:foo: number = 10'], 57343e969d3SBram Moolenaar 'E488: Trailing characters: : number = 1') 57443e969d3SBram Moolenaar call CheckDefFailure(['t:foo: bool = true'], 57543e969d3SBram Moolenaar 'E488: Trailing characters: : bool = true') 57643e969d3SBram Moolenaar call CheckDefFailure(['b:foo: string = "x"'], 57743e969d3SBram Moolenaar 'E488: Trailing characters: : string = "x"') 57843e969d3SBram Moolenaar call CheckDefFailure(['g:foo: number = 123'], 57943e969d3SBram Moolenaar 'E488: Trailing characters: : number = 123') 580d72c1bf0SBram Moolenaarenddef 581d72c1bf0SBram Moolenaar 582d72c1bf0SBram Moolenaardef Test_unlet() 583d72c1bf0SBram Moolenaar g:somevar = 'yes' 584d72c1bf0SBram Moolenaar assert_true(exists('g:somevar')) 585d72c1bf0SBram Moolenaar unlet g:somevar 586d72c1bf0SBram Moolenaar assert_false(exists('g:somevar')) 587d72c1bf0SBram Moolenaar unlet! g:somevar 588d72c1bf0SBram Moolenaar 589d72c1bf0SBram Moolenaar call CheckScriptFailure([ 590d72c1bf0SBram Moolenaar 'vim9script', 591d72c1bf0SBram Moolenaar 'let svar = 123', 592d72c1bf0SBram Moolenaar 'unlet svar', 593d72c1bf0SBram Moolenaar ], 'E1081:') 594d72c1bf0SBram Moolenaar call CheckScriptFailure([ 595d72c1bf0SBram Moolenaar 'vim9script', 596d72c1bf0SBram Moolenaar 'let svar = 123', 597d72c1bf0SBram Moolenaar 'unlet s:svar', 598d72c1bf0SBram Moolenaar ], 'E1081:') 599d72c1bf0SBram Moolenaar call CheckScriptFailure([ 600d72c1bf0SBram Moolenaar 'vim9script', 601d72c1bf0SBram Moolenaar 'let svar = 123', 602d72c1bf0SBram Moolenaar 'def Func()', 603d72c1bf0SBram Moolenaar ' unlet svar', 604d72c1bf0SBram Moolenaar 'enddef', 605822ba247SBram Moolenaar 'defcompile', 606d72c1bf0SBram Moolenaar ], 'E1081:') 607d72c1bf0SBram Moolenaar call CheckScriptFailure([ 608d72c1bf0SBram Moolenaar 'vim9script', 609d72c1bf0SBram Moolenaar 'let svar = 123', 610d72c1bf0SBram Moolenaar 'def Func()', 611d72c1bf0SBram Moolenaar ' unlet s:svar', 612d72c1bf0SBram Moolenaar 'enddef', 613822ba247SBram Moolenaar 'defcompile', 614d72c1bf0SBram Moolenaar ], 'E1081:') 6157bdaea6eSBram Moolenaar 6167bdaea6eSBram Moolenaar $ENVVAR = 'foobar' 6177bdaea6eSBram Moolenaar assert_equal('foobar', $ENVVAR) 6187bdaea6eSBram Moolenaar unlet $ENVVAR 6197bdaea6eSBram Moolenaar assert_equal('', $ENVVAR) 620d72c1bf0SBram Moolenaarenddef 621599c89c8SBram Moolenaar 6224c17ad94SBram Moolenaardef Test_delfunction() 623f5be8cdbSBram Moolenaar # Check function is defined in script namespace 6244c17ad94SBram Moolenaar CheckScriptSuccess([ 6254c17ad94SBram Moolenaar 'vim9script', 6264c17ad94SBram Moolenaar 'func CheckMe()', 6274c17ad94SBram Moolenaar ' return 123', 6284c17ad94SBram Moolenaar 'endfunc', 6294c17ad94SBram Moolenaar 'assert_equal(123, s:CheckMe())', 6304c17ad94SBram Moolenaar ]) 6314c17ad94SBram Moolenaar 632f5be8cdbSBram Moolenaar # Check function in script namespace cannot be deleted 6334c17ad94SBram Moolenaar CheckScriptFailure([ 6344c17ad94SBram Moolenaar 'vim9script', 6354c17ad94SBram Moolenaar 'func DeleteMe1()', 6364c17ad94SBram Moolenaar 'endfunc', 6374c17ad94SBram Moolenaar 'delfunction DeleteMe1', 6384c17ad94SBram Moolenaar ], 'E1084:') 6394c17ad94SBram Moolenaar CheckScriptFailure([ 6404c17ad94SBram Moolenaar 'vim9script', 6414c17ad94SBram Moolenaar 'func DeleteMe2()', 6424c17ad94SBram Moolenaar 'endfunc', 6434c17ad94SBram Moolenaar 'def DoThat()', 6444c17ad94SBram Moolenaar ' delfunction DeleteMe2', 6454c17ad94SBram Moolenaar 'enddef', 6464c17ad94SBram Moolenaar 'DoThat()', 6474c17ad94SBram Moolenaar ], 'E1084:') 6484c17ad94SBram Moolenaar CheckScriptFailure([ 6494c17ad94SBram Moolenaar 'vim9script', 6504c17ad94SBram Moolenaar 'def DeleteMe3()', 6514c17ad94SBram Moolenaar 'enddef', 6524c17ad94SBram Moolenaar 'delfunction DeleteMe3', 6534c17ad94SBram Moolenaar ], 'E1084:') 6544c17ad94SBram Moolenaar CheckScriptFailure([ 6554c17ad94SBram Moolenaar 'vim9script', 6564c17ad94SBram Moolenaar 'def DeleteMe4()', 6574c17ad94SBram Moolenaar 'enddef', 6584c17ad94SBram Moolenaar 'def DoThat()', 6594c17ad94SBram Moolenaar ' delfunction DeleteMe4', 6604c17ad94SBram Moolenaar 'enddef', 6614c17ad94SBram Moolenaar 'DoThat()', 6624c17ad94SBram Moolenaar ], 'E1084:') 663925e9fd6SBram Moolenaar 664925e9fd6SBram Moolenaar # Check that global :def function can be replaced and deleted 665925e9fd6SBram Moolenaar let lines =<< trim END 666925e9fd6SBram Moolenaar vim9script 667925e9fd6SBram Moolenaar def g:Global(): string 668925e9fd6SBram Moolenaar return "yes" 669925e9fd6SBram Moolenaar enddef 670925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 671925e9fd6SBram Moolenaar def! g:Global(): string 672925e9fd6SBram Moolenaar return "no" 673925e9fd6SBram Moolenaar enddef 674925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 675925e9fd6SBram Moolenaar delfunc g:Global 676925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 677925e9fd6SBram Moolenaar END 678925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 679925e9fd6SBram Moolenaar 680925e9fd6SBram Moolenaar # Check that global function can be replaced by a :def function and deleted 681925e9fd6SBram Moolenaar lines =<< trim END 682925e9fd6SBram Moolenaar vim9script 683925e9fd6SBram Moolenaar func g:Global() 684925e9fd6SBram Moolenaar return "yes" 685925e9fd6SBram Moolenaar endfunc 686925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 687925e9fd6SBram Moolenaar def! g:Global(): string 688925e9fd6SBram Moolenaar return "no" 689925e9fd6SBram Moolenaar enddef 690925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 691925e9fd6SBram Moolenaar delfunc g:Global 692925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 693925e9fd6SBram Moolenaar END 694925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 695925e9fd6SBram Moolenaar 696925e9fd6SBram Moolenaar # Check that global :def function can be replaced by a function and deleted 697925e9fd6SBram Moolenaar lines =<< trim END 698925e9fd6SBram Moolenaar vim9script 699925e9fd6SBram Moolenaar def g:Global(): string 700925e9fd6SBram Moolenaar return "yes" 701925e9fd6SBram Moolenaar enddef 702925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 703925e9fd6SBram Moolenaar func! g:Global() 704925e9fd6SBram Moolenaar return "no" 705925e9fd6SBram Moolenaar endfunc 706925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 707925e9fd6SBram Moolenaar delfunc g:Global 708925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 709925e9fd6SBram Moolenaar END 710925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 7114c17ad94SBram Moolenaarenddef 7124c17ad94SBram Moolenaar 713599c89c8SBram Moolenaarfunc Test_wrong_type() 714599c89c8SBram Moolenaar call CheckDefFailure(['let var: list<nothing>'], 'E1010:') 715599c89c8SBram Moolenaar call CheckDefFailure(['let var: list<list<nothing>>'], 'E1010:') 716599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<nothing>'], 'E1010:') 717599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<dict<nothing>>'], 'E1010:') 718599c89c8SBram Moolenaar 719599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 720599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<list<number>'], 'E1009:') 72142a480bfSBram Moolenaar 72242a480bfSBram Moolenaar call CheckDefFailure(['let var: ally'], 'E1010:') 72342a480bfSBram Moolenaar call CheckDefFailure(['let var: bram'], 'E1010:') 72442a480bfSBram Moolenaar call CheckDefFailure(['let var: cathy'], 'E1010:') 72542a480bfSBram Moolenaar call CheckDefFailure(['let var: dom'], 'E1010:') 72642a480bfSBram Moolenaar call CheckDefFailure(['let var: freddy'], 'E1010:') 72742a480bfSBram Moolenaar call CheckDefFailure(['let var: john'], 'E1010:') 72842a480bfSBram Moolenaar call CheckDefFailure(['let var: larry'], 'E1010:') 72942a480bfSBram Moolenaar call CheckDefFailure(['let var: ned'], 'E1010:') 73042a480bfSBram Moolenaar call CheckDefFailure(['let var: pam'], 'E1010:') 73142a480bfSBram Moolenaar call CheckDefFailure(['let var: sam'], 'E1010:') 73242a480bfSBram Moolenaar call CheckDefFailure(['let var: vim'], 'E1010:') 733a0a9f43aSBram Moolenaar 734a0a9f43aSBram Moolenaar call CheckDefFailure(['let Ref: number', 'Ref()'], 'E1085:') 735a0a9f43aSBram Moolenaar call CheckDefFailure(['let Ref: string', 'let res = Ref()'], 'E1085:') 7368a7d6542SBram Moolenaarendfunc 7378a7d6542SBram Moolenaar 7388a7d6542SBram Moolenaarfunc Test_const() 7398a7d6542SBram Moolenaar call CheckDefFailure(['const var = 234', 'var = 99'], 'E1018:') 7408a7d6542SBram Moolenaar call CheckDefFailure(['const one = 234', 'let one = 99'], 'E1017:') 7418a7d6542SBram Moolenaar call CheckDefFailure(['const two'], 'E1021:') 7429be61bbbSBram Moolenaar call CheckDefFailure(['const &option'], 'E996:') 7438a7d6542SBram Moolenaarendfunc 7448a7d6542SBram Moolenaar 745df069eecSBram Moolenaardef Test_range_no_colon() 746df069eecSBram Moolenaar call CheckDefFailure(['%s/a/b/'], 'E1050:') 747df069eecSBram Moolenaar call CheckDefFailure(['+ s/a/b/'], 'E1050:') 748df069eecSBram Moolenaar call CheckDefFailure(['- s/a/b/'], 'E1050:') 749df069eecSBram Moolenaar call CheckDefFailure(['. s/a/b/'], 'E1050:') 750df069eecSBram Moolenaarenddef 751df069eecSBram Moolenaar 752df069eecSBram Moolenaar 7538a7d6542SBram Moolenaardef Test_block() 7548a7d6542SBram Moolenaar let outer = 1 7558a7d6542SBram Moolenaar { 7568a7d6542SBram Moolenaar let inner = 2 7578a7d6542SBram Moolenaar assert_equal(1, outer) 7588a7d6542SBram Moolenaar assert_equal(2, inner) 7598a7d6542SBram Moolenaar } 7608a7d6542SBram Moolenaar assert_equal(1, outer) 7618a7d6542SBram Moolenaarenddef 7628a7d6542SBram Moolenaar 7638a7d6542SBram Moolenaarfunc Test_block_failure() 7648a7d6542SBram Moolenaar call CheckDefFailure(['{', 'let inner = 1', '}', 'echo inner'], 'E1001:') 765585fea7bSBram Moolenaar call CheckDefFailure(['}'], 'E1025:') 766585fea7bSBram Moolenaar call CheckDefFailure(['{', 'echo 1'], 'E1026:') 7678a7d6542SBram Moolenaarendfunc 7688a7d6542SBram Moolenaar 769d032f34aSBram Moolenaarfunc g:NoSuchFunc() 770d032f34aSBram Moolenaar echo 'none' 771d032f34aSBram Moolenaarendfunc 772d032f34aSBram Moolenaar 7738a7d6542SBram Moolenaardef Test_try_catch() 7748a7d6542SBram Moolenaar let l = [] 7757a092245SBram Moolenaar try # comment 7768a7d6542SBram Moolenaar add(l, '1') 7778a7d6542SBram Moolenaar throw 'wrong' 7788a7d6542SBram Moolenaar add(l, '2') 7797a092245SBram Moolenaar catch # comment 7808a7d6542SBram Moolenaar add(l, v:exception) 7817a092245SBram Moolenaar finally # comment 7828a7d6542SBram Moolenaar add(l, '3') 7837a092245SBram Moolenaar endtry # comment 7848a7d6542SBram Moolenaar assert_equal(['1', 'wrong', '3'], l) 78568d130c6SBram Moolenaar 786e859312eSBram Moolenaar l = [] 787e859312eSBram Moolenaar try 788e859312eSBram Moolenaar try 789e859312eSBram Moolenaar add(l, '1') 790e859312eSBram Moolenaar throw 'wrong' 791e859312eSBram Moolenaar add(l, '2') 792e859312eSBram Moolenaar catch /right/ 793e859312eSBram Moolenaar add(l, v:exception) 794e859312eSBram Moolenaar endtry 795e859312eSBram Moolenaar catch /wrong/ 796e859312eSBram Moolenaar add(l, 'caught') 797e859312eSBram Moolenaar finally 798e859312eSBram Moolenaar add(l, 'finally') 799e859312eSBram Moolenaar endtry 800e859312eSBram Moolenaar assert_equal(['1', 'caught', 'finally'], l) 801e859312eSBram Moolenaar 80268d130c6SBram Moolenaar let n: number 80368d130c6SBram Moolenaar try 80468d130c6SBram Moolenaar n = l[3] 80568d130c6SBram Moolenaar catch /E684:/ 80668d130c6SBram Moolenaar n = 99 80768d130c6SBram Moolenaar endtry 80868d130c6SBram Moolenaar assert_equal(99, n) 80968d130c6SBram Moolenaar 81068d130c6SBram Moolenaar try 811cc673e74SBram Moolenaar # string slice returns a string, not a number 81268d130c6SBram Moolenaar n = g:astring[3] 81356acb094SBram Moolenaar catch /E1029:/ 81468d130c6SBram Moolenaar n = 77 81568d130c6SBram Moolenaar endtry 81668d130c6SBram Moolenaar assert_equal(77, n) 81768d130c6SBram Moolenaar 81868d130c6SBram Moolenaar try 81968d130c6SBram Moolenaar n = l[g:astring] 82056acb094SBram Moolenaar catch /E1029:/ 82156acb094SBram Moolenaar n = 88 82268d130c6SBram Moolenaar endtry 82356acb094SBram Moolenaar assert_equal(88, n) 82468d130c6SBram Moolenaar 82568d130c6SBram Moolenaar try 82668d130c6SBram Moolenaar n = s:does_not_exist 82768d130c6SBram Moolenaar catch /E121:/ 828f0b9f43cSBram Moolenaar n = 111 829f0b9f43cSBram Moolenaar endtry 830f0b9f43cSBram Moolenaar assert_equal(111, n) 831f0b9f43cSBram Moolenaar 832f0b9f43cSBram Moolenaar try 833f0b9f43cSBram Moolenaar n = g:does_not_exist 834f0b9f43cSBram Moolenaar catch /E121:/ 83568d130c6SBram Moolenaar n = 121 83668d130c6SBram Moolenaar endtry 83768d130c6SBram Moolenaar assert_equal(121, n) 83868d130c6SBram Moolenaar 83968d130c6SBram Moolenaar let d = #{one: 1} 84068d130c6SBram Moolenaar try 84168d130c6SBram Moolenaar n = d[g:astring] 84268d130c6SBram Moolenaar catch /E716:/ 84368d130c6SBram Moolenaar n = 222 84468d130c6SBram Moolenaar endtry 84568d130c6SBram Moolenaar assert_equal(222, n) 846f0b9f43cSBram Moolenaar 847f0b9f43cSBram Moolenaar try 848f0b9f43cSBram Moolenaar n = -g:astring 849f0b9f43cSBram Moolenaar catch /E39:/ 850f0b9f43cSBram Moolenaar n = 233 851f0b9f43cSBram Moolenaar endtry 852f0b9f43cSBram Moolenaar assert_equal(233, n) 853f0b9f43cSBram Moolenaar 854f0b9f43cSBram Moolenaar try 855f0b9f43cSBram Moolenaar n = +g:astring 856f0b9f43cSBram Moolenaar catch /E1030:/ 857f0b9f43cSBram Moolenaar n = 244 858f0b9f43cSBram Moolenaar endtry 859f0b9f43cSBram Moolenaar assert_equal(244, n) 860f0b9f43cSBram Moolenaar 861f0b9f43cSBram Moolenaar try 862f0b9f43cSBram Moolenaar n = +g:alist 863f0b9f43cSBram Moolenaar catch /E745:/ 864f0b9f43cSBram Moolenaar n = 255 865f0b9f43cSBram Moolenaar endtry 866f0b9f43cSBram Moolenaar assert_equal(255, n) 867f0b9f43cSBram Moolenaar 868f0b9f43cSBram Moolenaar let nd: dict<any> 869f0b9f43cSBram Moolenaar try 870f0b9f43cSBram Moolenaar nd = {g:anumber: 1} 871f0b9f43cSBram Moolenaar catch /E1029:/ 872f0b9f43cSBram Moolenaar n = 266 873f0b9f43cSBram Moolenaar endtry 874f0b9f43cSBram Moolenaar assert_equal(266, n) 875f0b9f43cSBram Moolenaar 876f0b9f43cSBram Moolenaar try 877f0b9f43cSBram Moolenaar [n] = [1, 2, 3] 878f0b9f43cSBram Moolenaar catch /E1093:/ 879f0b9f43cSBram Moolenaar n = 277 880f0b9f43cSBram Moolenaar endtry 881f0b9f43cSBram Moolenaar assert_equal(277, n) 882f0b9f43cSBram Moolenaar 883e859312eSBram Moolenaar try 884e859312eSBram Moolenaar &ts = g:astring 885e859312eSBram Moolenaar catch /E1029:/ 886e859312eSBram Moolenaar n = 288 887e859312eSBram Moolenaar endtry 888e859312eSBram Moolenaar assert_equal(288, n) 889e859312eSBram Moolenaar 890e859312eSBram Moolenaar try 891e859312eSBram Moolenaar &backspace = 'asdf' 892e859312eSBram Moolenaar catch /E474:/ 893e859312eSBram Moolenaar n = 299 894e859312eSBram Moolenaar endtry 895e859312eSBram Moolenaar assert_equal(299, n) 896e859312eSBram Moolenaar 897e859312eSBram Moolenaar l = [1] 898e859312eSBram Moolenaar try 899e859312eSBram Moolenaar l[3] = 3 900e859312eSBram Moolenaar catch /E684:/ 901e859312eSBram Moolenaar n = 300 902e859312eSBram Moolenaar endtry 903e859312eSBram Moolenaar assert_equal(300, n) 904e859312eSBram Moolenaar 905e859312eSBram Moolenaar try 906e859312eSBram Moolenaar unlet g:does_not_exist 907e859312eSBram Moolenaar catch /E108:/ 908e859312eSBram Moolenaar n = 322 909e859312eSBram Moolenaar endtry 910e859312eSBram Moolenaar assert_equal(322, n) 911e859312eSBram Moolenaar 912e859312eSBram Moolenaar try 913e859312eSBram Moolenaar d = {'text': 1, g:astring: 2} 914e859312eSBram Moolenaar catch /E721:/ 915e859312eSBram Moolenaar n = 333 916e859312eSBram Moolenaar endtry 917e859312eSBram Moolenaar assert_equal(333, n) 918e859312eSBram Moolenaar 919e859312eSBram Moolenaar try 920e859312eSBram Moolenaar l = DeletedFunc() 921e859312eSBram Moolenaar catch /E933:/ 922e859312eSBram Moolenaar n = 344 923e859312eSBram Moolenaar endtry 924e859312eSBram Moolenaar assert_equal(344, n) 925d032f34aSBram Moolenaar 926d032f34aSBram Moolenaar try 927d032f34aSBram Moolenaar echo len(v:true) 928d032f34aSBram Moolenaar catch /E701:/ 929d032f34aSBram Moolenaar n = 355 930d032f34aSBram Moolenaar endtry 931d032f34aSBram Moolenaar assert_equal(355, n) 932d032f34aSBram Moolenaar 933d032f34aSBram Moolenaar let P = function('g:NoSuchFunc') 934d032f34aSBram Moolenaar delfunc g:NoSuchFunc 935d032f34aSBram Moolenaar try 936d032f34aSBram Moolenaar echo P() 937d032f34aSBram Moolenaar catch /E117:/ 938d032f34aSBram Moolenaar n = 366 939d032f34aSBram Moolenaar endtry 940d032f34aSBram Moolenaar assert_equal(366, n) 941d032f34aSBram Moolenaar 942d032f34aSBram Moolenaar try 943d032f34aSBram Moolenaar echo g:NoSuchFunc() 944d032f34aSBram Moolenaar catch /E117:/ 945d032f34aSBram Moolenaar n = 377 946d032f34aSBram Moolenaar endtry 947d032f34aSBram Moolenaar assert_equal(377, n) 948d032f34aSBram Moolenaar 949d032f34aSBram Moolenaar try 950d032f34aSBram Moolenaar echo g:alist + 4 951d032f34aSBram Moolenaar catch /E745:/ 952d032f34aSBram Moolenaar n = 388 953d032f34aSBram Moolenaar endtry 954d032f34aSBram Moolenaar assert_equal(388, n) 955d032f34aSBram Moolenaar 956d032f34aSBram Moolenaar try 957d032f34aSBram Moolenaar echo 4 + g:alist 958d032f34aSBram Moolenaar catch /E745:/ 959d032f34aSBram Moolenaar n = 399 960d032f34aSBram Moolenaar endtry 961d032f34aSBram Moolenaar assert_equal(399, n) 962d032f34aSBram Moolenaar 963d032f34aSBram Moolenaar try 964d032f34aSBram Moolenaar echo g:alist.member 965d032f34aSBram Moolenaar catch /E715:/ 966d032f34aSBram Moolenaar n = 400 967d032f34aSBram Moolenaar endtry 968d032f34aSBram Moolenaar assert_equal(400, n) 969d032f34aSBram Moolenaar 970d032f34aSBram Moolenaar try 971d032f34aSBram Moolenaar echo d.member 972d032f34aSBram Moolenaar catch /E716:/ 973d032f34aSBram Moolenaar n = 411 974d032f34aSBram Moolenaar endtry 975d032f34aSBram Moolenaar assert_equal(411, n) 9768a7d6542SBram Moolenaarenddef 9778a7d6542SBram Moolenaar 978e859312eSBram Moolenaardef DeletedFunc(): list<any> 979e859312eSBram Moolenaar return ['delete me'] 980e859312eSBram Moolenaarenddef 981e859312eSBram Moolenaardefcompile 982e859312eSBram Moolenaardelfunc DeletedFunc 983e859312eSBram Moolenaar 984257cc5eeSBram Moolenaardef ThrowFromDef() 985a72cfb80SBram Moolenaar throw "getout" # comment 986257cc5eeSBram Moolenaarenddef 987257cc5eeSBram Moolenaar 988257cc5eeSBram Moolenaarfunc CatchInFunc() 989257cc5eeSBram Moolenaar try 990257cc5eeSBram Moolenaar call ThrowFromDef() 991257cc5eeSBram Moolenaar catch 992257cc5eeSBram Moolenaar let g:thrown_func = v:exception 993257cc5eeSBram Moolenaar endtry 994257cc5eeSBram Moolenaarendfunc 995257cc5eeSBram Moolenaar 996257cc5eeSBram Moolenaardef CatchInDef() 997257cc5eeSBram Moolenaar try 998257cc5eeSBram Moolenaar ThrowFromDef() 999257cc5eeSBram Moolenaar catch 1000257cc5eeSBram Moolenaar g:thrown_def = v:exception 1001257cc5eeSBram Moolenaar endtry 1002257cc5eeSBram Moolenaarenddef 1003257cc5eeSBram Moolenaar 1004f575adffSBram Moolenaardef ReturnFinally(): string 1005f575adffSBram Moolenaar try 1006f575adffSBram Moolenaar return 'intry' 1007f575adffSBram Moolenaar finally 1008f575adffSBram Moolenaar g:in_finally = 'finally' 1009f575adffSBram Moolenaar endtry 1010f575adffSBram Moolenaar return 'end' 1011f575adffSBram Moolenaarenddef 1012f575adffSBram Moolenaar 1013257cc5eeSBram Moolenaardef Test_try_catch_nested() 1014257cc5eeSBram Moolenaar CatchInFunc() 1015257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_func) 1016257cc5eeSBram Moolenaar 1017257cc5eeSBram Moolenaar CatchInDef() 1018257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_def) 1019f575adffSBram Moolenaar 1020f575adffSBram Moolenaar assert_equal('intry', ReturnFinally()) 1021f575adffSBram Moolenaar assert_equal('finally', g:in_finally) 1022f575adffSBram Moolenaarenddef 1023f575adffSBram Moolenaar 1024f575adffSBram Moolenaardef Test_try_catch_match() 1025f575adffSBram Moolenaar let seq = 'a' 1026f575adffSBram Moolenaar try 1027f575adffSBram Moolenaar throw 'something' 1028f575adffSBram Moolenaar catch /nothing/ 1029f575adffSBram Moolenaar seq ..= 'x' 1030f575adffSBram Moolenaar catch /some/ 1031f575adffSBram Moolenaar seq ..= 'b' 1032f575adffSBram Moolenaar catch /asdf/ 1033f575adffSBram Moolenaar seq ..= 'x' 1034e8c4abbbSBram Moolenaar catch ?a\?sdf? 1035e8c4abbbSBram Moolenaar seq ..= 'y' 1036f575adffSBram Moolenaar finally 1037f575adffSBram Moolenaar seq ..= 'c' 1038f575adffSBram Moolenaar endtry 1039f575adffSBram Moolenaar assert_equal('abc', seq) 1040257cc5eeSBram Moolenaarenddef 1041257cc5eeSBram Moolenaar 1042e8c4abbbSBram Moolenaardef Test_try_catch_fails() 1043e8c4abbbSBram Moolenaar call CheckDefFailure(['catch'], 'E603:') 1044e8c4abbbSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'catch', 'catch'], 'E1033:') 1045e8c4abbbSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'catch /pat'], 'E1067:') 1046585fea7bSBram Moolenaar call CheckDefFailure(['finally'], 'E606:') 1047585fea7bSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'finally', 'echo 1', 'finally'], 'E607:') 1048585fea7bSBram Moolenaar call CheckDefFailure(['endtry'], 'E602:') 1049585fea7bSBram Moolenaar call CheckDefFailure(['while 1', 'endtry'], 'E170:') 1050585fea7bSBram Moolenaar call CheckDefFailure(['for i in range(5)', 'endtry'], 'E170:') 1051585fea7bSBram Moolenaar call CheckDefFailure(['if 2', 'endtry'], 'E171:') 1052585fea7bSBram Moolenaar call CheckDefFailure(['try', 'echo 1', 'endtry'], 'E1032:') 1053585fea7bSBram Moolenaar 1054a72cfb80SBram Moolenaar call CheckDefFailure(['throw'], 'E1015:') 1055585fea7bSBram Moolenaar call CheckDefFailure(['throw xxx'], 'E1001:') 1056e8c4abbbSBram Moolenaarenddef 1057e8c4abbbSBram Moolenaar 1058006ad48bSBram Moolenaardef Test_throw_vimscript() 1059f5be8cdbSBram Moolenaar # only checks line continuation 1060006ad48bSBram Moolenaar let lines =<< trim END 1061006ad48bSBram Moolenaar vim9script 1062006ad48bSBram Moolenaar try 1063006ad48bSBram Moolenaar throw 'one' 1064006ad48bSBram Moolenaar .. 'two' 1065006ad48bSBram Moolenaar catch 1066006ad48bSBram Moolenaar assert_equal('onetwo', v:exception) 1067006ad48bSBram Moolenaar endtry 1068006ad48bSBram Moolenaar END 1069006ad48bSBram Moolenaar CheckScriptSuccess(lines) 1070006ad48bSBram Moolenaarenddef 1071006ad48bSBram Moolenaar 1072ed677f55SBram Moolenaardef Test_error_in_nested_function() 1073ed677f55SBram Moolenaar # an error in a nested :function aborts executin in the calling :def function 1074ed677f55SBram Moolenaar let lines =<< trim END 1075ed677f55SBram Moolenaar vim9script 1076ed677f55SBram Moolenaar def Func() 1077ed677f55SBram Moolenaar Error() 1078ed677f55SBram Moolenaar g:test_var = 1 1079ed677f55SBram Moolenaar enddef 1080ed677f55SBram Moolenaar func Error() abort 1081ed677f55SBram Moolenaar eval [][0] 1082ed677f55SBram Moolenaar endfunc 1083ed677f55SBram Moolenaar Func() 1084ed677f55SBram Moolenaar END 1085ed677f55SBram Moolenaar g:test_var = 0 1086ed677f55SBram Moolenaar CheckScriptFailure(lines, 'E684:') 1087ed677f55SBram Moolenaar assert_equal(0, g:test_var) 1088ed677f55SBram Moolenaarenddef 1089ed677f55SBram Moolenaar 109037c83711SBram Moolenaardef Test_cexpr_vimscript() 1091f5be8cdbSBram Moolenaar # only checks line continuation 109237c83711SBram Moolenaar set errorformat=File\ %f\ line\ %l 109337c83711SBram Moolenaar let lines =<< trim END 109437c83711SBram Moolenaar vim9script 109537c83711SBram Moolenaar cexpr 'File' 109637c83711SBram Moolenaar .. ' someFile' .. 109737c83711SBram Moolenaar ' line 19' 109837c83711SBram Moolenaar assert_equal(19, getqflist()[0].lnum) 109937c83711SBram Moolenaar END 110037c83711SBram Moolenaar CheckScriptSuccess(lines) 110137c83711SBram Moolenaar set errorformat& 110237c83711SBram Moolenaarenddef 110337c83711SBram Moolenaar 1104c9edd6b5SBram Moolenaardef Test_statusline_syntax() 1105c9edd6b5SBram Moolenaar # legacy syntax is used for 'statusline' 1106c9edd6b5SBram Moolenaar let lines =<< trim END 1107c9edd6b5SBram Moolenaar vim9script 1108c9edd6b5SBram Moolenaar func g:Status() 1109c9edd6b5SBram Moolenaar return '%{"x" is# "x"}' 1110c9edd6b5SBram Moolenaar endfunc 1111c9edd6b5SBram Moolenaar set laststatus=2 statusline=%!Status() 1112c9edd6b5SBram Moolenaar redrawstatus 1113c9edd6b5SBram Moolenaar set laststatus statusline= 1114c9edd6b5SBram Moolenaar END 1115c9edd6b5SBram Moolenaar CheckScriptSuccess(lines) 1116c9edd6b5SBram Moolenaarenddef 1117c9edd6b5SBram Moolenaar 1118b209750bSBram Moolenaardef Test_list_vimscript() 1119b209750bSBram Moolenaar # checks line continuation and comments 1120b209750bSBram Moolenaar let lines =<< trim END 1121b209750bSBram Moolenaar vim9script 1122b209750bSBram Moolenaar let mylist = [ 1123b209750bSBram Moolenaar 'one', 1124b209750bSBram Moolenaar # comment 1125b209750bSBram Moolenaar 'two', # empty line follows 1126b209750bSBram Moolenaar 1127b209750bSBram Moolenaar 'three', 1128b209750bSBram Moolenaar ] 1129b209750bSBram Moolenaar assert_equal(['one', 'two', 'three'], mylist) 1130b209750bSBram Moolenaar END 1131b209750bSBram Moolenaar CheckScriptSuccess(lines) 1132b209750bSBram Moolenaarenddef 1133b209750bSBram Moolenaar 11342a1381c3SBram Moolenaarif has('channel') 113540ee466cSBram Moolenaar let someJob = test_null_job() 113640ee466cSBram Moolenaar 113740ee466cSBram Moolenaar def FuncWithError() 113840ee466cSBram Moolenaar echomsg g:someJob 113940ee466cSBram Moolenaar enddef 114040ee466cSBram Moolenaar 114140ee466cSBram Moolenaar func Test_convert_emsg_to_exception() 114240ee466cSBram Moolenaar try 114340ee466cSBram Moolenaar call FuncWithError() 114440ee466cSBram Moolenaar catch 114540ee466cSBram Moolenaar call assert_match('Vim:E908:', v:exception) 114640ee466cSBram Moolenaar endtry 114740ee466cSBram Moolenaar endfunc 11482a1381c3SBram Moolenaarendif 114940ee466cSBram Moolenaar 11508a7d6542SBram Moolenaarlet s:export_script_lines =<< trim END 11518a7d6542SBram Moolenaar vim9script 11528a7d6542SBram Moolenaar let name: string = 'bob' 11538a7d6542SBram Moolenaar def Concat(arg: string): string 11548a7d6542SBram Moolenaar return name .. arg 11558a7d6542SBram Moolenaar enddef 1156227a69deSBram Moolenaar g:result = Concat('bie') 1157227a69deSBram Moolenaar g:localname = name 11588a7d6542SBram Moolenaar 11598a7d6542SBram Moolenaar export const CONST = 1234 11608a7d6542SBram Moolenaar export let exported = 9876 11616e587dcbSBram Moolenaar export let exp_name = 'John' 11628a7d6542SBram Moolenaar export def Exported(): string 11638a7d6542SBram Moolenaar return 'Exported' 11648a7d6542SBram Moolenaar enddef 11658a7d6542SBram MoolenaarEND 11668a7d6542SBram Moolenaar 1167b3ca9824SBram Moolenaardef Undo_export_script_lines() 1168b3ca9824SBram Moolenaar unlet g:result 1169b3ca9824SBram Moolenaar unlet g:localname 1170b3ca9824SBram Moolenaarenddef 1171b3ca9824SBram Moolenaar 11725269bd2aSBram Moolenaardef Test_vim9_import_export() 11738a7d6542SBram Moolenaar let import_script_lines =<< trim END 11748a7d6542SBram Moolenaar vim9script 11758a7d6542SBram Moolenaar import {exported, Exported} from './Xexport.vim' 11768a7d6542SBram Moolenaar g:imported = exported 11776e587dcbSBram Moolenaar exported += 3 11786e587dcbSBram Moolenaar g:imported_added = exported 11798a7d6542SBram Moolenaar g:imported_func = Exported() 11806e587dcbSBram Moolenaar 118140f4f7a4SBram Moolenaar def GetExported(): string 118240f4f7a4SBram Moolenaar let local_dict = #{ref: Exported} 118340f4f7a4SBram Moolenaar return local_dict.ref() 118440f4f7a4SBram Moolenaar enddef 118540f4f7a4SBram Moolenaar g:funcref_result = GetExported() 118640f4f7a4SBram Moolenaar 11876e587dcbSBram Moolenaar import {exp_name} from './Xexport.vim' 11886e587dcbSBram Moolenaar g:imported_name = exp_name 11896e587dcbSBram Moolenaar exp_name ..= ' Doe' 11906e587dcbSBram Moolenaar g:imported_name_appended = exp_name 11915381c7a1SBram Moolenaar g:imported_later = exported 11928a7d6542SBram Moolenaar END 11938a7d6542SBram Moolenaar 11948a7d6542SBram Moolenaar writefile(import_script_lines, 'Ximport.vim') 11958a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport.vim') 11968a7d6542SBram Moolenaar 11978a7d6542SBram Moolenaar source Ximport.vim 11988a7d6542SBram Moolenaar 11998a7d6542SBram Moolenaar assert_equal('bobbie', g:result) 12008a7d6542SBram Moolenaar assert_equal('bob', g:localname) 12018a7d6542SBram Moolenaar assert_equal(9876, g:imported) 12026e587dcbSBram Moolenaar assert_equal(9879, g:imported_added) 12035381c7a1SBram Moolenaar assert_equal(9879, g:imported_later) 12048a7d6542SBram Moolenaar assert_equal('Exported', g:imported_func) 120540f4f7a4SBram Moolenaar assert_equal('Exported', g:funcref_result) 12066e587dcbSBram Moolenaar assert_equal('John', g:imported_name) 12076e587dcbSBram Moolenaar assert_equal('John Doe', g:imported_name_appended) 12088a7d6542SBram Moolenaar assert_false(exists('g:name')) 12098a7d6542SBram Moolenaar 1210b3ca9824SBram Moolenaar Undo_export_script_lines() 12118a7d6542SBram Moolenaar unlet g:imported 12126e587dcbSBram Moolenaar unlet g:imported_added 12135381c7a1SBram Moolenaar unlet g:imported_later 12148a7d6542SBram Moolenaar unlet g:imported_func 12156e587dcbSBram Moolenaar unlet g:imported_name g:imported_name_appended 12168a7d6542SBram Moolenaar delete('Ximport.vim') 1217f2d5c240SBram Moolenaar 12181c991144SBram Moolenaar # similar, with line breaks 12191c991144SBram Moolenaar let import_line_break_script_lines =<< trim END 12201c991144SBram Moolenaar vim9script 12211c991144SBram Moolenaar import { 12221c991144SBram Moolenaar exported, 12231c991144SBram Moolenaar Exported, 12241c991144SBram Moolenaar } 12251c991144SBram Moolenaar from 12261c991144SBram Moolenaar './Xexport.vim' 12271c991144SBram Moolenaar g:imported = exported 12281c991144SBram Moolenaar exported += 5 12291c991144SBram Moolenaar g:imported_added = exported 12301c991144SBram Moolenaar g:imported_func = Exported() 12311c991144SBram Moolenaar END 12321c991144SBram Moolenaar writefile(import_line_break_script_lines, 'Ximport_lbr.vim') 12331c991144SBram Moolenaar source Ximport_lbr.vim 12341c991144SBram Moolenaar 12351c991144SBram Moolenaar assert_equal(9876, g:imported) 12361c991144SBram Moolenaar assert_equal(9881, g:imported_added) 12371c991144SBram Moolenaar assert_equal('Exported', g:imported_func) 12381c991144SBram Moolenaar 12391c991144SBram Moolenaar # exported script not sourced again 12401c991144SBram Moolenaar assert_false(exists('g:result')) 12411c991144SBram Moolenaar unlet g:imported 12421c991144SBram Moolenaar unlet g:imported_added 12431c991144SBram Moolenaar unlet g:imported_func 12441c991144SBram Moolenaar delete('Ximport_lbr.vim') 12451c991144SBram Moolenaar 12461c991144SBram Moolenaar # import inside :def function 12475381c7a1SBram Moolenaar let import_in_def_lines =<< trim END 12485381c7a1SBram Moolenaar vim9script 12495381c7a1SBram Moolenaar def ImportInDef() 12505381c7a1SBram Moolenaar import exported from './Xexport.vim' 12515381c7a1SBram Moolenaar g:imported = exported 12525381c7a1SBram Moolenaar exported += 7 12535381c7a1SBram Moolenaar g:imported_added = exported 12545381c7a1SBram Moolenaar enddef 12555381c7a1SBram Moolenaar ImportInDef() 12565381c7a1SBram Moolenaar END 12575381c7a1SBram Moolenaar writefile(import_in_def_lines, 'Ximport2.vim') 12585381c7a1SBram Moolenaar source Ximport2.vim 1259f5be8cdbSBram Moolenaar # TODO: this should be 9879 12605381c7a1SBram Moolenaar assert_equal(9876, g:imported) 12615381c7a1SBram Moolenaar assert_equal(9883, g:imported_added) 12625381c7a1SBram Moolenaar unlet g:imported 12635381c7a1SBram Moolenaar unlet g:imported_added 12645381c7a1SBram Moolenaar delete('Ximport2.vim') 12655381c7a1SBram Moolenaar 1266f2d5c240SBram Moolenaar let import_star_as_lines =<< trim END 1267f2d5c240SBram Moolenaar vim9script 1268f2d5c240SBram Moolenaar import * as Export from './Xexport.vim' 1269f2d5c240SBram Moolenaar def UseExport() 1270f2d5c240SBram Moolenaar g:imported = Export.exported 1271f2d5c240SBram Moolenaar enddef 1272f2d5c240SBram Moolenaar UseExport() 1273f2d5c240SBram Moolenaar END 1274f2d5c240SBram Moolenaar writefile(import_star_as_lines, 'Ximport.vim') 1275f2d5c240SBram Moolenaar source Ximport.vim 12765381c7a1SBram Moolenaar assert_equal(9883, g:imported) 1277f2d5c240SBram Moolenaar 1278599c89c8SBram Moolenaar let import_star_as_lines_no_dot =<< trim END 1279599c89c8SBram Moolenaar vim9script 1280599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 1281599c89c8SBram Moolenaar def Func() 1282599c89c8SBram Moolenaar let dummy = 1 1283599c89c8SBram Moolenaar let imported = Export + dummy 1284599c89c8SBram Moolenaar enddef 1285822ba247SBram Moolenaar defcompile 1286599c89c8SBram Moolenaar END 1287599c89c8SBram Moolenaar writefile(import_star_as_lines_no_dot, 'Ximport.vim') 1288599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1060:') 1289599c89c8SBram Moolenaar 1290599c89c8SBram Moolenaar let import_star_as_lines_dot_space =<< trim END 1291599c89c8SBram Moolenaar vim9script 1292599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 1293599c89c8SBram Moolenaar def Func() 1294599c89c8SBram Moolenaar let imported = Export . exported 1295599c89c8SBram Moolenaar enddef 1296822ba247SBram Moolenaar defcompile 1297599c89c8SBram Moolenaar END 1298599c89c8SBram Moolenaar writefile(import_star_as_lines_dot_space, 'Ximport.vim') 1299599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1074:') 1300599c89c8SBram Moolenaar 1301599c89c8SBram Moolenaar let import_star_as_lines_missing_name =<< trim END 1302599c89c8SBram Moolenaar vim9script 1303599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 1304599c89c8SBram Moolenaar def Func() 1305599c89c8SBram Moolenaar let imported = Export. 1306599c89c8SBram Moolenaar enddef 1307822ba247SBram Moolenaar defcompile 1308599c89c8SBram Moolenaar END 1309599c89c8SBram Moolenaar writefile(import_star_as_lines_missing_name, 'Ximport.vim') 1310599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 1311599c89c8SBram Moolenaar 13121c991144SBram Moolenaar let import_star_as_lbr_lines =<< trim END 13131c991144SBram Moolenaar vim9script 13141c991144SBram Moolenaar import * 13151c991144SBram Moolenaar as Export 13161c991144SBram Moolenaar from 13171c991144SBram Moolenaar './Xexport.vim' 13181c991144SBram Moolenaar def UseExport() 13191c991144SBram Moolenaar g:imported = Export.exported 13201c991144SBram Moolenaar enddef 13211c991144SBram Moolenaar UseExport() 13221c991144SBram Moolenaar END 13231c991144SBram Moolenaar writefile(import_star_as_lbr_lines, 'Ximport.vim') 13241c991144SBram Moolenaar source Ximport.vim 13251c991144SBram Moolenaar assert_equal(9883, g:imported) 13261c991144SBram Moolenaar 1327f2d5c240SBram Moolenaar let import_star_lines =<< trim END 1328f2d5c240SBram Moolenaar vim9script 1329f2d5c240SBram Moolenaar import * from './Xexport.vim' 1330f2d5c240SBram Moolenaar END 1331f2d5c240SBram Moolenaar writefile(import_star_lines, 'Ximport.vim') 1332f2d5c240SBram Moolenaar assert_fails('source Ximport.vim', 'E1045:') 1333f2d5c240SBram Moolenaar 1334f5be8cdbSBram Moolenaar # try to import something that exists but is not exported 1335fa29c8abSBram Moolenaar let import_not_exported_lines =<< trim END 1336fa29c8abSBram Moolenaar vim9script 1337fa29c8abSBram Moolenaar import name from './Xexport.vim' 1338fa29c8abSBram Moolenaar END 1339fa29c8abSBram Moolenaar writefile(import_not_exported_lines, 'Ximport.vim') 1340fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1049:') 1341fa29c8abSBram Moolenaar 1342f5be8cdbSBram Moolenaar # try to import something that is already defined 13435269bd2aSBram Moolenaar let import_already_defined =<< trim END 13445269bd2aSBram Moolenaar vim9script 13455269bd2aSBram Moolenaar let exported = 'something' 13465269bd2aSBram Moolenaar import exported from './Xexport.vim' 13475269bd2aSBram Moolenaar END 13485269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 13495269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 13505269bd2aSBram Moolenaar 1351f5be8cdbSBram Moolenaar # try to import something that is already defined 13525269bd2aSBram Moolenaar import_already_defined =<< trim END 13535269bd2aSBram Moolenaar vim9script 13545269bd2aSBram Moolenaar let exported = 'something' 13555269bd2aSBram Moolenaar import * as exported from './Xexport.vim' 13565269bd2aSBram Moolenaar END 13575269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 13585269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 13595269bd2aSBram Moolenaar 1360f5be8cdbSBram Moolenaar # try to import something that is already defined 13615269bd2aSBram Moolenaar import_already_defined =<< trim END 13625269bd2aSBram Moolenaar vim9script 13635269bd2aSBram Moolenaar let exported = 'something' 13645269bd2aSBram Moolenaar import {exported} from './Xexport.vim' 13655269bd2aSBram Moolenaar END 13665269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 13675269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 13685269bd2aSBram Moolenaar 1369f5be8cdbSBram Moolenaar # import a very long name, requires making a copy 1370fa29c8abSBram Moolenaar let import_long_name_lines =<< trim END 1371fa29c8abSBram Moolenaar vim9script 1372fa29c8abSBram Moolenaar import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim' 1373fa29c8abSBram Moolenaar END 1374fa29c8abSBram Moolenaar writefile(import_long_name_lines, 'Ximport.vim') 1375fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 1376fa29c8abSBram Moolenaar 1377fa29c8abSBram Moolenaar let import_no_from_lines =<< trim END 1378fa29c8abSBram Moolenaar vim9script 1379fa29c8abSBram Moolenaar import name './Xexport.vim' 1380fa29c8abSBram Moolenaar END 1381fa29c8abSBram Moolenaar writefile(import_no_from_lines, 'Ximport.vim') 1382fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1070:') 1383fa29c8abSBram Moolenaar 1384fa29c8abSBram Moolenaar let import_invalid_string_lines =<< trim END 1385fa29c8abSBram Moolenaar vim9script 1386fa29c8abSBram Moolenaar import name from Xexport.vim 1387fa29c8abSBram Moolenaar END 1388fa29c8abSBram Moolenaar writefile(import_invalid_string_lines, 'Ximport.vim') 1389fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1071:') 1390fa29c8abSBram Moolenaar 1391fa29c8abSBram Moolenaar let import_wrong_name_lines =<< trim END 1392fa29c8abSBram Moolenaar vim9script 1393fa29c8abSBram Moolenaar import name from './XnoExport.vim' 1394fa29c8abSBram Moolenaar END 1395fa29c8abSBram Moolenaar writefile(import_wrong_name_lines, 'Ximport.vim') 1396fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1053:') 1397fa29c8abSBram Moolenaar 1398fa29c8abSBram Moolenaar let import_missing_comma_lines =<< trim END 1399fa29c8abSBram Moolenaar vim9script 1400fa29c8abSBram Moolenaar import {exported name} from './Xexport.vim' 1401fa29c8abSBram Moolenaar END 14025269bd2aSBram Moolenaar writefile(import_missing_comma_lines, 'Ximport3.vim') 14035269bd2aSBram Moolenaar assert_fails('source Ximport3.vim', 'E1046:') 1404fa29c8abSBram Moolenaar 1405f2d5c240SBram Moolenaar delete('Ximport.vim') 14065269bd2aSBram Moolenaar delete('Ximport3.vim') 14078a7d6542SBram Moolenaar delete('Xexport.vim') 14088a7d6542SBram Moolenaar 1409f5be8cdbSBram Moolenaar # Check that in a Vim9 script 'cpo' is set to the Vim default. 1410750802b5SBram Moolenaar set cpo&vi 1411750802b5SBram Moolenaar let cpo_before = &cpo 1412750802b5SBram Moolenaar let lines =<< trim END 1413750802b5SBram Moolenaar vim9script 1414750802b5SBram Moolenaar g:cpo_in_vim9script = &cpo 1415750802b5SBram Moolenaar END 1416750802b5SBram Moolenaar writefile(lines, 'Xvim9_script') 1417750802b5SBram Moolenaar source Xvim9_script 1418750802b5SBram Moolenaar assert_equal(cpo_before, &cpo) 1419750802b5SBram Moolenaar set cpo&vim 1420750802b5SBram Moolenaar assert_equal(&cpo, g:cpo_in_vim9script) 1421750802b5SBram Moolenaar delete('Xvim9_script') 1422750802b5SBram Moolenaarenddef 1423750802b5SBram Moolenaar 1424803af686SBram Moolenaarfunc g:Trigger() 1425803af686SBram Moolenaar source Ximport.vim 1426803af686SBram Moolenaar return "echo 'yes'\<CR>" 1427803af686SBram Moolenaarendfunc 1428803af686SBram Moolenaar 1429803af686SBram Moolenaardef Test_import_export_expr_map() 1430803af686SBram Moolenaar # check that :import and :export work when buffer is locked 1431803af686SBram Moolenaar let export_lines =<< trim END 1432803af686SBram Moolenaar vim9script 1433803af686SBram Moolenaar export def That(): string 1434803af686SBram Moolenaar return 'yes' 1435803af686SBram Moolenaar enddef 1436803af686SBram Moolenaar END 1437803af686SBram Moolenaar writefile(export_lines, 'Xexport_that.vim') 1438803af686SBram Moolenaar 1439803af686SBram Moolenaar let import_lines =<< trim END 1440803af686SBram Moolenaar vim9script 1441803af686SBram Moolenaar import That from './Xexport_that.vim' 1442803af686SBram Moolenaar assert_equal('yes', That()) 1443803af686SBram Moolenaar END 1444803af686SBram Moolenaar writefile(import_lines, 'Ximport.vim') 1445803af686SBram Moolenaar 1446803af686SBram Moolenaar nnoremap <expr> trigger g:Trigger() 1447803af686SBram Moolenaar feedkeys('trigger', "xt") 1448803af686SBram Moolenaar 1449730b2483SBram Moolenaar delete('Xexport_that.vim') 1450803af686SBram Moolenaar delete('Ximport.vim') 1451803af686SBram Moolenaar nunmap trigger 1452803af686SBram Moolenaarenddef 1453803af686SBram Moolenaar 14548e1986e3SBram Moolenaardef Test_import_in_filetype() 14558e1986e3SBram Moolenaar # check that :import works when the buffer is locked 14568e1986e3SBram Moolenaar mkdir('ftplugin', 'p') 14578e1986e3SBram Moolenaar let export_lines =<< trim END 14588e1986e3SBram Moolenaar vim9script 14598e1986e3SBram Moolenaar export let That = 'yes' 14608e1986e3SBram Moolenaar END 1461730b2483SBram Moolenaar writefile(export_lines, 'ftplugin/Xexport_ft.vim') 14628e1986e3SBram Moolenaar 14638e1986e3SBram Moolenaar let import_lines =<< trim END 14648e1986e3SBram Moolenaar vim9script 1465730b2483SBram Moolenaar import That from './Xexport_ft.vim' 14668e1986e3SBram Moolenaar assert_equal('yes', That) 14678e1986e3SBram Moolenaar g:did_load_mytpe = 1 14688e1986e3SBram Moolenaar END 14698e1986e3SBram Moolenaar writefile(import_lines, 'ftplugin/qf.vim') 14708e1986e3SBram Moolenaar 14718e1986e3SBram Moolenaar let save_rtp = &rtp 14728e1986e3SBram Moolenaar &rtp = getcwd() .. ',' .. &rtp 14738e1986e3SBram Moolenaar 14748e1986e3SBram Moolenaar filetype plugin on 14758e1986e3SBram Moolenaar copen 14768e1986e3SBram Moolenaar assert_equal(1, g:did_load_mytpe) 14778e1986e3SBram Moolenaar 14788e1986e3SBram Moolenaar quit! 1479730b2483SBram Moolenaar delete('Xexport_ft.vim') 14808e1986e3SBram Moolenaar delete('ftplugin', 'rf') 14818e1986e3SBram Moolenaar &rtp = save_rtp 14828e1986e3SBram Moolenaarenddef 14838e1986e3SBram Moolenaar 1484efa94447SBram Moolenaardef Test_use_import_in_mapping() 1485efa94447SBram Moolenaar let lines =<< trim END 1486efa94447SBram Moolenaar vim9script 1487efa94447SBram Moolenaar export def Funcx() 1488efa94447SBram Moolenaar g:result = 42 1489efa94447SBram Moolenaar enddef 1490efa94447SBram Moolenaar END 1491efa94447SBram Moolenaar writefile(lines, 'XsomeExport.vim') 1492efa94447SBram Moolenaar lines =<< trim END 1493efa94447SBram Moolenaar vim9script 1494efa94447SBram Moolenaar import Funcx from './XsomeExport.vim' 1495b3ca9824SBram Moolenaar nnoremap <F3> :call <sid>Funcx()<cr> 1496efa94447SBram Moolenaar END 1497efa94447SBram Moolenaar writefile(lines, 'Xmapscript.vim') 1498efa94447SBram Moolenaar 1499efa94447SBram Moolenaar source Xmapscript.vim 1500b3ca9824SBram Moolenaar feedkeys("\<F3>", "xt") 1501efa94447SBram Moolenaar assert_equal(42, g:result) 1502efa94447SBram Moolenaar 1503efa94447SBram Moolenaar unlet g:result 1504efa94447SBram Moolenaar delete('XsomeExport.vim') 1505efa94447SBram Moolenaar delete('Xmapscript.vim') 1506b3ca9824SBram Moolenaar nunmap <F3> 1507efa94447SBram Moolenaarenddef 1508efa94447SBram Moolenaar 1509750802b5SBram Moolenaardef Test_vim9script_fails() 15108a7d6542SBram Moolenaar CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:') 15118a7d6542SBram Moolenaar CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:') 1512750802b5SBram Moolenaar CheckScriptFailure(['export let some = 123'], 'E1042:') 15139721fb4eSBram Moolenaar CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1048:') 15149b7bf9e9SBram Moolenaar CheckScriptFailure(['vim9script', 'export let g:some'], 'E1022:') 1515750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:') 1516750802b5SBram Moolenaar 1517451c2e35SBram Moolenaar CheckScriptFailure(['vim9script', 'let str: string', 'str = 1234'], 'E1012:') 1518c785b9a7SBram Moolenaar CheckScriptFailure(['vim9script', 'const str = "asdf"', 'str = "xxx"'], 'E46:') 1519c785b9a7SBram Moolenaar 1520750802b5SBram Moolenaar assert_fails('vim9script', 'E1038') 1521a26b9700SBram Moolenaar assert_fails('export something', 'E1043') 15228a7d6542SBram Moolenaarenddef 15238a7d6542SBram Moolenaar 1524f7d267efSBram Moolenaarfunc Test_import_fails_without_script() 1525101f4810SBram Moolenaar CheckRunVimInTerminal 1526101f4810SBram Moolenaar 15279bb3eb3eSBram Moolenaar " call indirectly to avoid compilation error for missing functions 1528c620c055SBram Moolenaar call Run_Test_import_fails_on_command_line() 15299bb3eb3eSBram Moolenaarendfunc 15309bb3eb3eSBram Moolenaar 1531c620c055SBram Moolenaardef Run_Test_import_fails_on_command_line() 1532101f4810SBram Moolenaar let export =<< trim END 1533101f4810SBram Moolenaar vim9script 1534101f4810SBram Moolenaar export def Foo(): number 1535101f4810SBram Moolenaar return 0 1536101f4810SBram Moolenaar enddef 1537101f4810SBram Moolenaar END 1538730b2483SBram Moolenaar writefile(export, 'XexportCmd.vim') 1539101f4810SBram Moolenaar 1540730b2483SBram Moolenaar let buf = RunVimInTerminal('-c "import Foo from ''./XexportCmd.vim''"', #{ 15419bb3eb3eSBram Moolenaar rows: 6, wait_for_ruler: 0}) 15429bb3eb3eSBram Moolenaar WaitForAssert({-> assert_match('^E1094:', term_getline(buf, 5))}) 1543101f4810SBram Moolenaar 1544730b2483SBram Moolenaar delete('XexportCmd.vim') 15459bb3eb3eSBram Moolenaar StopVimInTerminal(buf) 15469bb3eb3eSBram Moolenaarenddef 1547101f4810SBram Moolenaar 15484c17ad94SBram Moolenaardef Test_vim9script_reload_import() 15498a7d6542SBram Moolenaar let lines =<< trim END 15508a7d6542SBram Moolenaar vim9script 15518a7d6542SBram Moolenaar const var = '' 15528a7d6542SBram Moolenaar let valone = 1234 15538a7d6542SBram Moolenaar def MyFunc(arg: string) 15548a7d6542SBram Moolenaar valone = 5678 15558a7d6542SBram Moolenaar enddef 15568a7d6542SBram Moolenaar END 15578a7d6542SBram Moolenaar let morelines =<< trim END 15588a7d6542SBram Moolenaar let valtwo = 222 15598a7d6542SBram Moolenaar export def GetValtwo(): number 15608a7d6542SBram Moolenaar return valtwo 15618a7d6542SBram Moolenaar enddef 15628a7d6542SBram Moolenaar END 156303afdcf1SBram Moolenaar writefile(lines + morelines, 'Xreload.vim') 15648a7d6542SBram Moolenaar source Xreload.vim 15658a7d6542SBram Moolenaar source Xreload.vim 15668a7d6542SBram Moolenaar source Xreload.vim 15678a7d6542SBram Moolenaar 15688a7d6542SBram Moolenaar let testlines =<< trim END 15698a7d6542SBram Moolenaar vim9script 15708a7d6542SBram Moolenaar def TheFunc() 15718a7d6542SBram Moolenaar import GetValtwo from './Xreload.vim' 15728a7d6542SBram Moolenaar assert_equal(222, GetValtwo()) 15738a7d6542SBram Moolenaar enddef 15748a7d6542SBram Moolenaar TheFunc() 15758a7d6542SBram Moolenaar END 15768a7d6542SBram Moolenaar writefile(testlines, 'Ximport.vim') 15778a7d6542SBram Moolenaar source Ximport.vim 15788a7d6542SBram Moolenaar 1579f5be8cdbSBram Moolenaar # Test that when not using "morelines" GetValtwo() and valtwo are still 1580f5be8cdbSBram Moolenaar # defined, because import doesn't reload a script. 15818a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 15828a7d6542SBram Moolenaar source Ximport.vim 15838a7d6542SBram Moolenaar 1584f5be8cdbSBram Moolenaar # cannot declare a var twice 15858a7d6542SBram Moolenaar lines =<< trim END 15868a7d6542SBram Moolenaar vim9script 15878a7d6542SBram Moolenaar let valone = 1234 15888a7d6542SBram Moolenaar let valone = 5678 15898a7d6542SBram Moolenaar END 15908a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 15918a7d6542SBram Moolenaar assert_fails('source Xreload.vim', 'E1041:') 15928a7d6542SBram Moolenaar 15938a7d6542SBram Moolenaar delete('Xreload.vim') 15948a7d6542SBram Moolenaar delete('Ximport.vim') 15958a7d6542SBram Moolenaarenddef 15968a7d6542SBram Moolenaar 1597fe465a01SBram Moolenaar" Not exported function that is referenced needs to be accessed by the 1598fe465a01SBram Moolenaar" script-local name. 1599fe465a01SBram Moolenaardef Test_vim9script_funcref() 1600fe465a01SBram Moolenaar let sortlines =<< trim END 1601fe465a01SBram Moolenaar vim9script 1602fe465a01SBram Moolenaar def Compare(i1: number, i2: number): number 1603bed36b93SBram Moolenaar return i2 - i1 1604fe465a01SBram Moolenaar enddef 1605fe465a01SBram Moolenaar 1606fe465a01SBram Moolenaar export def FastSort(): list<number> 1607fe465a01SBram Moolenaar return range(5)->sort(Compare) 1608fe465a01SBram Moolenaar enddef 1609fe465a01SBram Moolenaar END 1610fe465a01SBram Moolenaar writefile(sortlines, 'Xsort.vim') 1611fe465a01SBram Moolenaar 1612fe465a01SBram Moolenaar let lines =<< trim END 1613fe465a01SBram Moolenaar vim9script 1614fe465a01SBram Moolenaar import FastSort from './Xsort.vim' 1615fe465a01SBram Moolenaar def Test() 1616fe465a01SBram Moolenaar g:result = FastSort() 1617fe465a01SBram Moolenaar enddef 1618fe465a01SBram Moolenaar Test() 1619fe465a01SBram Moolenaar END 1620fe465a01SBram Moolenaar writefile(lines, 'Xscript.vim') 1621fe465a01SBram Moolenaar 1622fe465a01SBram Moolenaar source Xscript.vim 1623fe465a01SBram Moolenaar assert_equal([4, 3, 2, 1, 0], g:result) 1624fe465a01SBram Moolenaar 1625fe465a01SBram Moolenaar unlet g:result 1626fe465a01SBram Moolenaar delete('Xsort.vim') 1627fe465a01SBram Moolenaar delete('Xscript.vim') 1628fe465a01SBram Moolenaarenddef 1629fe465a01SBram Moolenaar 1630c620c055SBram Moolenaar" Check that when searcing for "FilterFunc" it doesn't find the import in the 1631c620c055SBram Moolenaar" script where FastFilter() is called from. 1632c620c055SBram Moolenaardef Test_vim9script_funcref_other_script() 1633c620c055SBram Moolenaar let filterLines =<< trim END 1634c620c055SBram Moolenaar vim9script 1635c620c055SBram Moolenaar export def FilterFunc(idx: number, val: number): bool 1636c620c055SBram Moolenaar return idx % 2 == 1 1637c620c055SBram Moolenaar enddef 1638c620c055SBram Moolenaar export def FastFilter(): list<number> 1639c620c055SBram Moolenaar return range(10)->filter('FilterFunc') 1640c620c055SBram Moolenaar enddef 1641c620c055SBram Moolenaar END 1642c620c055SBram Moolenaar writefile(filterLines, 'Xfilter.vim') 1643c620c055SBram Moolenaar 1644c620c055SBram Moolenaar let lines =<< trim END 1645c620c055SBram Moolenaar vim9script 1646c620c055SBram Moolenaar import {FilterFunc, FastFilter} from './Xfilter.vim' 1647c620c055SBram Moolenaar def Test() 1648c620c055SBram Moolenaar let x: list<number> = FastFilter() 1649c620c055SBram Moolenaar enddef 1650c620c055SBram Moolenaar Test() 1651c620c055SBram Moolenaar END 1652c620c055SBram Moolenaar writefile(lines, 'Ximport.vim') 1653c620c055SBram Moolenaar assert_fails('source Ximport.vim', 'E121:') 1654c620c055SBram Moolenaar 1655c620c055SBram Moolenaar delete('Xfilter.vim') 1656c620c055SBram Moolenaar delete('Ximport.vim') 1657c620c055SBram Moolenaarenddef 1658c620c055SBram Moolenaar 16594c17ad94SBram Moolenaardef Test_vim9script_reload_delfunc() 16604c17ad94SBram Moolenaar let first_lines =<< trim END 16614c17ad94SBram Moolenaar vim9script 16624c17ad94SBram Moolenaar def FuncYes(): string 16634c17ad94SBram Moolenaar return 'yes' 16644c17ad94SBram Moolenaar enddef 16654c17ad94SBram Moolenaar END 166603afdcf1SBram Moolenaar let withno_lines =<< trim END 16674c17ad94SBram Moolenaar def FuncNo(): string 16684c17ad94SBram Moolenaar return 'no' 16694c17ad94SBram Moolenaar enddef 16704c17ad94SBram Moolenaar def g:DoCheck(no_exists: bool) 16714c17ad94SBram Moolenaar assert_equal('yes', FuncYes()) 16724c17ad94SBram Moolenaar assert_equal('no', FuncNo()) 167303afdcf1SBram Moolenaar enddef 167403afdcf1SBram Moolenaar END 167503afdcf1SBram Moolenaar let nono_lines =<< trim END 167603afdcf1SBram Moolenaar def g:DoCheck(no_exists: bool) 167703afdcf1SBram Moolenaar assert_equal('yes', FuncYes()) 16784c17ad94SBram Moolenaar assert_fails('call FuncNo()', 'E117:') 16794c17ad94SBram Moolenaar enddef 16804c17ad94SBram Moolenaar END 16814c17ad94SBram Moolenaar 16824c17ad94SBram Moolenaar # FuncNo() is defined 168303afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 16844c17ad94SBram Moolenaar source Xreloaded.vim 16854c17ad94SBram Moolenaar g:DoCheck(true) 16864c17ad94SBram Moolenaar 16874c17ad94SBram Moolenaar # FuncNo() is not redefined 168803afdcf1SBram Moolenaar writefile(first_lines + nono_lines, 'Xreloaded.vim') 16894c17ad94SBram Moolenaar source Xreloaded.vim 169003afdcf1SBram Moolenaar g:DoCheck() 16914c17ad94SBram Moolenaar 16924c17ad94SBram Moolenaar # FuncNo() is back 169303afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 16944c17ad94SBram Moolenaar source Xreloaded.vim 169503afdcf1SBram Moolenaar g:DoCheck() 16964c17ad94SBram Moolenaar 16974c17ad94SBram Moolenaar delete('Xreloaded.vim') 16984c17ad94SBram Moolenaarenddef 16994c17ad94SBram Moolenaar 170089483d40SBram Moolenaardef Test_vim9script_reload_delvar() 170189483d40SBram Moolenaar # write the script with a script-local variable 170289483d40SBram Moolenaar let lines =<< trim END 170389483d40SBram Moolenaar vim9script 170489483d40SBram Moolenaar let var = 'string' 170589483d40SBram Moolenaar END 170689483d40SBram Moolenaar writefile(lines, 'XreloadVar.vim') 170789483d40SBram Moolenaar source XreloadVar.vim 170889483d40SBram Moolenaar 170989483d40SBram Moolenaar # now write the script using the same variable locally - works 171089483d40SBram Moolenaar lines =<< trim END 171189483d40SBram Moolenaar vim9script 171289483d40SBram Moolenaar def Func() 171389483d40SBram Moolenaar let var = 'string' 171489483d40SBram Moolenaar enddef 171589483d40SBram Moolenaar END 171689483d40SBram Moolenaar writefile(lines, 'XreloadVar.vim') 171789483d40SBram Moolenaar source XreloadVar.vim 171889483d40SBram Moolenaar 171989483d40SBram Moolenaar delete('XreloadVar.vim') 172089483d40SBram Moolenaarenddef 172189483d40SBram Moolenaar 17228a7d6542SBram Moolenaardef Test_import_absolute() 17238a7d6542SBram Moolenaar let import_lines = [ 1724e6085c53SBram Moolenaar 'vim9script', 1725e6085c53SBram Moolenaar 'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"', 1726e6085c53SBram Moolenaar 'def UseExported()', 1727e6085c53SBram Moolenaar ' g:imported_abs = exported', 1728e6085c53SBram Moolenaar ' exported = 8888', 1729e6085c53SBram Moolenaar ' g:imported_after = exported', 1730e6085c53SBram Moolenaar 'enddef', 1731e6085c53SBram Moolenaar 'UseExported()', 1732e6085c53SBram Moolenaar 'g:import_disassembled = execute("disass UseExported")', 1733e6085c53SBram Moolenaar ] 17348a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_abs.vim') 17358a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport_abs.vim') 17368a7d6542SBram Moolenaar 17378a7d6542SBram Moolenaar source Ximport_abs.vim 17388a7d6542SBram Moolenaar 17398a7d6542SBram Moolenaar assert_equal(9876, g:imported_abs) 17404e12a5dfSBram Moolenaar assert_equal(8888, g:imported_after) 1741675f716eSBram Moolenaar assert_match('<SNR>\d\+_UseExported.*' .. 1742675f716eSBram Moolenaar 'g:imported_abs = exported.*' .. 1743675f716eSBram Moolenaar '0 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 1744675f716eSBram Moolenaar '1 STOREG g:imported_abs.*' .. 1745675f716eSBram Moolenaar 'exported = 8888.*' .. 1746675f716eSBram Moolenaar '3 STORESCRIPT exported in .*Xexport_abs.vim.*' .. 1747675f716eSBram Moolenaar 'g:imported_after = exported.*' .. 1748675f716eSBram Moolenaar '4 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 1749675f716eSBram Moolenaar '5 STOREG g:imported_after.*', 1750e6085c53SBram Moolenaar g:import_disassembled) 1751b3ca9824SBram Moolenaar 1752b3ca9824SBram Moolenaar Undo_export_script_lines() 17538a7d6542SBram Moolenaar unlet g:imported_abs 17544e12a5dfSBram Moolenaar unlet g:import_disassembled 17558a7d6542SBram Moolenaar 17568a7d6542SBram Moolenaar delete('Ximport_abs.vim') 17578a7d6542SBram Moolenaar delete('Xexport_abs.vim') 17588a7d6542SBram Moolenaarenddef 17598a7d6542SBram Moolenaar 17608a7d6542SBram Moolenaardef Test_import_rtp() 17618a7d6542SBram Moolenaar let import_lines = [ 1762e6085c53SBram Moolenaar 'vim9script', 1763e6085c53SBram Moolenaar 'import exported from "Xexport_rtp.vim"', 1764e6085c53SBram Moolenaar 'g:imported_rtp = exported', 1765e6085c53SBram Moolenaar ] 17668a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_rtp.vim') 17678a7d6542SBram Moolenaar mkdir('import') 17688a7d6542SBram Moolenaar writefile(s:export_script_lines, 'import/Xexport_rtp.vim') 17698a7d6542SBram Moolenaar 17708a7d6542SBram Moolenaar let save_rtp = &rtp 17718a7d6542SBram Moolenaar &rtp = getcwd() 17728a7d6542SBram Moolenaar source Ximport_rtp.vim 17738a7d6542SBram Moolenaar &rtp = save_rtp 17748a7d6542SBram Moolenaar 17758a7d6542SBram Moolenaar assert_equal(9876, g:imported_rtp) 17768a7d6542SBram Moolenaar 1777b3ca9824SBram Moolenaar Undo_export_script_lines() 1778b3ca9824SBram Moolenaar unlet g:imported_rtp 17798a7d6542SBram Moolenaar delete('Ximport_rtp.vim') 178089483d40SBram Moolenaar delete('import', 'rf') 17818a7d6542SBram Moolenaarenddef 17828a7d6542SBram Moolenaar 178325e0f586SBram Moolenaardef Test_import_compile_error() 178425e0f586SBram Moolenaar let export_lines = [ 178525e0f586SBram Moolenaar 'vim9script', 178625e0f586SBram Moolenaar 'export def ExpFunc(): string', 178725e0f586SBram Moolenaar ' return notDefined', 178825e0f586SBram Moolenaar 'enddef', 178925e0f586SBram Moolenaar ] 179025e0f586SBram Moolenaar writefile(export_lines, 'Xexported.vim') 179125e0f586SBram Moolenaar 179225e0f586SBram Moolenaar let import_lines = [ 179325e0f586SBram Moolenaar 'vim9script', 179425e0f586SBram Moolenaar 'import ExpFunc from "./Xexported.vim"', 179525e0f586SBram Moolenaar 'def ImpFunc()', 179625e0f586SBram Moolenaar ' echo ExpFunc()', 179725e0f586SBram Moolenaar 'enddef', 179825e0f586SBram Moolenaar 'defcompile', 179925e0f586SBram Moolenaar ] 180025e0f586SBram Moolenaar writefile(import_lines, 'Ximport.vim') 180125e0f586SBram Moolenaar 180225e0f586SBram Moolenaar try 180325e0f586SBram Moolenaar source Ximport.vim 180425e0f586SBram Moolenaar catch /E1001/ 1805f5be8cdbSBram Moolenaar # Error should be fore the Xexported.vim file. 180625e0f586SBram Moolenaar assert_match('E1001: variable not found: notDefined', v:exception) 180725e0f586SBram Moolenaar assert_match('function <SNR>\d\+_ImpFunc\[1\]..<SNR>\d\+_ExpFunc, line 1', v:throwpoint) 180825e0f586SBram Moolenaar endtry 180925e0f586SBram Moolenaar 181025e0f586SBram Moolenaar delete('Xexported.vim') 181125e0f586SBram Moolenaar delete('Ximport.vim') 181225e0f586SBram Moolenaarenddef 181325e0f586SBram Moolenaar 1814c4ce36d4SBram Moolenaardef Test_func_redefine_error() 1815c4ce36d4SBram Moolenaar let lines = [ 1816c4ce36d4SBram Moolenaar 'vim9script', 1817c4ce36d4SBram Moolenaar 'def Func()', 1818c4ce36d4SBram Moolenaar ' eval [][0]', 1819c4ce36d4SBram Moolenaar 'enddef', 1820c4ce36d4SBram Moolenaar 'Func()', 1821c4ce36d4SBram Moolenaar ] 1822c4ce36d4SBram Moolenaar writefile(lines, 'Xtestscript.vim') 1823c4ce36d4SBram Moolenaar 1824c4ce36d4SBram Moolenaar for count in range(3) 1825c4ce36d4SBram Moolenaar try 1826c4ce36d4SBram Moolenaar source Xtestscript.vim 1827c4ce36d4SBram Moolenaar catch /E684/ 1828c4ce36d4SBram Moolenaar # function name should contain <SNR> every time 1829c4ce36d4SBram Moolenaar assert_match('E684: list index out of range', v:exception) 1830c4ce36d4SBram Moolenaar assert_match('function <SNR>\d\+_Func, line 1', v:throwpoint) 1831c4ce36d4SBram Moolenaar endtry 1832c4ce36d4SBram Moolenaar endfor 1833c4ce36d4SBram Moolenaar 1834c4ce36d4SBram Moolenaar delete('Xtestscript.vim') 1835c4ce36d4SBram Moolenaarenddef 1836c4ce36d4SBram Moolenaar 1837eef2102eSBram Moolenaardef Test_func_overrules_import_fails() 1838eef2102eSBram Moolenaar let export_lines =<< trim END 1839eef2102eSBram Moolenaar vim9script 1840eef2102eSBram Moolenaar export def Func() 1841eef2102eSBram Moolenaar echo 'imported' 1842eef2102eSBram Moolenaar enddef 1843eef2102eSBram Moolenaar END 1844eef2102eSBram Moolenaar writefile(export_lines, 'XexportedFunc.vim') 1845eef2102eSBram Moolenaar 1846eef2102eSBram Moolenaar let lines =<< trim END 1847eef2102eSBram Moolenaar vim9script 1848eef2102eSBram Moolenaar import Func from './XexportedFunc.vim' 1849eef2102eSBram Moolenaar def Func() 1850eef2102eSBram Moolenaar echo 'local to function' 1851eef2102eSBram Moolenaar enddef 1852eef2102eSBram Moolenaar END 1853eef2102eSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1854eef2102eSBram Moolenaar 1855eef2102eSBram Moolenaar lines =<< trim END 1856eef2102eSBram Moolenaar vim9script 1857eef2102eSBram Moolenaar import Func from './XexportedFunc.vim' 1858eef2102eSBram Moolenaar def Outer() 1859eef2102eSBram Moolenaar def Func() 1860eef2102eSBram Moolenaar echo 'local to function' 1861eef2102eSBram Moolenaar enddef 1862eef2102eSBram Moolenaar enddef 1863eef2102eSBram Moolenaar defcompile 1864eef2102eSBram Moolenaar END 1865eef2102eSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1866eef2102eSBram Moolenaar 1867eef2102eSBram Moolenaar delete('XexportedFunc.vim') 1868eef2102eSBram Moolenaarenddef 1869eef2102eSBram Moolenaar 1870b9a2cac3SBram Moolenaardef Test_func_redefine_fails() 1871b9a2cac3SBram Moolenaar let lines =<< trim END 1872b9a2cac3SBram Moolenaar vim9script 1873b9a2cac3SBram Moolenaar def Func() 1874b9a2cac3SBram Moolenaar echo 'one' 1875b9a2cac3SBram Moolenaar enddef 1876b9a2cac3SBram Moolenaar def Func() 1877b9a2cac3SBram Moolenaar echo 'two' 1878b9a2cac3SBram Moolenaar enddef 1879b9a2cac3SBram Moolenaar END 1880b9a2cac3SBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1881fa211f3cSBram Moolenaar 1882fa211f3cSBram Moolenaar lines =<< trim END 1883fa211f3cSBram Moolenaar vim9script 1884fa211f3cSBram Moolenaar def Foo(): string 1885fa211f3cSBram Moolenaar return 'foo' 1886fa211f3cSBram Moolenaar enddef 1887fa211f3cSBram Moolenaar def Func() 1888fa211f3cSBram Moolenaar let Foo = {-> 'lambda'} 1889fa211f3cSBram Moolenaar enddef 1890fa211f3cSBram Moolenaar defcompile 1891fa211f3cSBram Moolenaar END 1892fa211f3cSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1893b9a2cac3SBram Moolenaarenddef 1894b9a2cac3SBram Moolenaar 18958a7d6542SBram Moolenaardef Test_fixed_size_list() 1896f5be8cdbSBram Moolenaar # will be allocated as one piece of memory, check that changes work 18978a7d6542SBram Moolenaar let l = [1, 2, 3, 4] 18988a7d6542SBram Moolenaar l->remove(0) 18998a7d6542SBram Moolenaar l->add(5) 19008a7d6542SBram Moolenaar l->insert(99, 1) 19010f18b6d1SBram Moolenaar assert_equal([2, 99, 3, 4, 5], l) 19028a7d6542SBram Moolenaarenddef 19038a7d6542SBram Moolenaar 1904ae616494SBram Moolenaardef Test_no_insert_xit() 1905ae616494SBram Moolenaar call CheckDefExecFailure(['a = 1'], 'E1100:') 1906ae616494SBram Moolenaar call CheckDefExecFailure(['c = 1'], 'E1100:') 1907f5a48010SBram Moolenaar call CheckDefExecFailure(['i = 1'], 'E1100:') 1908f5a48010SBram Moolenaar call CheckDefExecFailure(['t = 1'], 'E1100:') 1909f5a48010SBram Moolenaar call CheckDefExecFailure(['x = 1'], 'E1100:') 1910ae616494SBram Moolenaar 1911ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'a = 1'], 'E488:') 1912ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'a'], 'E1100:') 1913ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'c = 1'], 'E488:') 1914ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'c'], 'E1100:') 1915f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'i = 1'], 'E488:') 1916f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'i'], 'E1100:') 1917f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 't'], 'E1100:') 1918f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 't = 1'], 'E1100:') 1919f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'x = 1'], 'E1100:') 1920ae616494SBram Moolenaarenddef 1921ae616494SBram Moolenaar 1922158906cfSBram Moolenaardef IfElse(what: number): string 1923158906cfSBram Moolenaar let res = '' 1924158906cfSBram Moolenaar if what == 1 1925158906cfSBram Moolenaar res = "one" 1926158906cfSBram Moolenaar elseif what == 2 1927158906cfSBram Moolenaar res = "two" 1928a259d8d3SBram Moolenaar else 1929158906cfSBram Moolenaar res = "three" 1930a259d8d3SBram Moolenaar endif 1931158906cfSBram Moolenaar return res 1932a259d8d3SBram Moolenaarenddef 1933a259d8d3SBram Moolenaar 1934158906cfSBram Moolenaardef Test_if_elseif_else() 1935158906cfSBram Moolenaar assert_equal('one', IfElse(1)) 1936158906cfSBram Moolenaar assert_equal('two', IfElse(2)) 1937158906cfSBram Moolenaar assert_equal('three', IfElse(3)) 19380f18b6d1SBram Moolenaarenddef 19390f18b6d1SBram Moolenaar 1940e8c4abbbSBram Moolenaardef Test_if_elseif_else_fails() 1941e8c4abbbSBram Moolenaar call CheckDefFailure(['elseif true'], 'E582:') 1942e8c4abbbSBram Moolenaar call CheckDefFailure(['else'], 'E581:') 1943e8c4abbbSBram Moolenaar call CheckDefFailure(['endif'], 'E580:') 1944e8c4abbbSBram Moolenaar call CheckDefFailure(['if true', 'elseif xxx'], 'E1001:') 1945585fea7bSBram Moolenaar call CheckDefFailure(['if true', 'echo 1'], 'E171:') 1946e8c4abbbSBram Moolenaarenddef 1947e8c4abbbSBram Moolenaar 19486d69bf60SBram Moolenaarlet g:bool_true = v:true 19496d69bf60SBram Moolenaarlet g:bool_false = v:false 19506d69bf60SBram Moolenaar 19516d69bf60SBram Moolenaardef Test_if_const_expr() 19526d69bf60SBram Moolenaar let res = false 19536d69bf60SBram Moolenaar if true ? true : false 19546d69bf60SBram Moolenaar res = true 19556d69bf60SBram Moolenaar endif 19566d69bf60SBram Moolenaar assert_equal(true, res) 19576d69bf60SBram Moolenaar 1958585fea7bSBram Moolenaar g:glob = 2 1959585fea7bSBram Moolenaar if false 19606797966dSBram Moolenaar execute('g:glob = 3') 1961585fea7bSBram Moolenaar endif 1962585fea7bSBram Moolenaar assert_equal(2, g:glob) 1963585fea7bSBram Moolenaar if true 19646797966dSBram Moolenaar execute('g:glob = 3') 1965585fea7bSBram Moolenaar endif 1966585fea7bSBram Moolenaar assert_equal(3, g:glob) 1967585fea7bSBram Moolenaar 19686d69bf60SBram Moolenaar res = false 19696d69bf60SBram Moolenaar if g:bool_true ? true : false 19706d69bf60SBram Moolenaar res = true 19716d69bf60SBram Moolenaar endif 19726d69bf60SBram Moolenaar assert_equal(true, res) 19736d69bf60SBram Moolenaar 19746d69bf60SBram Moolenaar res = false 19756d69bf60SBram Moolenaar if true ? g:bool_true : false 19766d69bf60SBram Moolenaar res = true 19776d69bf60SBram Moolenaar endif 19786d69bf60SBram Moolenaar assert_equal(true, res) 19796d69bf60SBram Moolenaar 19806d69bf60SBram Moolenaar res = false 19816d69bf60SBram Moolenaar if true ? true : g:bool_false 19826d69bf60SBram Moolenaar res = true 19836d69bf60SBram Moolenaar endif 19846d69bf60SBram Moolenaar assert_equal(true, res) 19856d69bf60SBram Moolenaar 19866d69bf60SBram Moolenaar res = false 19876d69bf60SBram Moolenaar if true ? false : true 19886d69bf60SBram Moolenaar res = true 19896d69bf60SBram Moolenaar endif 19906d69bf60SBram Moolenaar assert_equal(false, res) 19916d69bf60SBram Moolenaar 19926d69bf60SBram Moolenaar res = false 19936d69bf60SBram Moolenaar if false ? false : true 19946d69bf60SBram Moolenaar res = true 19956d69bf60SBram Moolenaar endif 19966d69bf60SBram Moolenaar assert_equal(true, res) 19976d69bf60SBram Moolenaar 19986d69bf60SBram Moolenaar res = false 19996d69bf60SBram Moolenaar if false ? true : false 20006d69bf60SBram Moolenaar res = true 20016d69bf60SBram Moolenaar endif 20026d69bf60SBram Moolenaar assert_equal(false, res) 20036d69bf60SBram Moolenaar 20046d69bf60SBram Moolenaar res = false 2005e8c4abbbSBram Moolenaar if has('xyz') ? true : false 2006e8c4abbbSBram Moolenaar res = true 2007e8c4abbbSBram Moolenaar endif 2008e8c4abbbSBram Moolenaar assert_equal(false, res) 2009e8c4abbbSBram Moolenaar 2010e8c4abbbSBram Moolenaar res = false 20116d69bf60SBram Moolenaar if true && true 20126d69bf60SBram Moolenaar res = true 20136d69bf60SBram Moolenaar endif 20146d69bf60SBram Moolenaar assert_equal(true, res) 20156d69bf60SBram Moolenaar 20166d69bf60SBram Moolenaar res = false 20176d69bf60SBram Moolenaar if true && false 20186d69bf60SBram Moolenaar res = true 20196d69bf60SBram Moolenaar endif 20206d69bf60SBram Moolenaar assert_equal(false, res) 20216d69bf60SBram Moolenaar 20226d69bf60SBram Moolenaar res = false 20236d69bf60SBram Moolenaar if g:bool_true && false 20246d69bf60SBram Moolenaar res = true 20256d69bf60SBram Moolenaar endif 20266d69bf60SBram Moolenaar assert_equal(false, res) 20276d69bf60SBram Moolenaar 20286d69bf60SBram Moolenaar res = false 20296d69bf60SBram Moolenaar if true && g:bool_false 20306d69bf60SBram Moolenaar res = true 20316d69bf60SBram Moolenaar endif 20326d69bf60SBram Moolenaar assert_equal(false, res) 20336d69bf60SBram Moolenaar 20346d69bf60SBram Moolenaar res = false 20356d69bf60SBram Moolenaar if false && false 20366d69bf60SBram Moolenaar res = true 20376d69bf60SBram Moolenaar endif 20386d69bf60SBram Moolenaar assert_equal(false, res) 20396d69bf60SBram Moolenaar 20406d69bf60SBram Moolenaar res = false 20416d69bf60SBram Moolenaar if true || false 20426d69bf60SBram Moolenaar res = true 20436d69bf60SBram Moolenaar endif 20446d69bf60SBram Moolenaar assert_equal(true, res) 20456d69bf60SBram Moolenaar 20466d69bf60SBram Moolenaar res = false 20476d69bf60SBram Moolenaar if g:bool_true || false 20486d69bf60SBram Moolenaar res = true 20496d69bf60SBram Moolenaar endif 20506d69bf60SBram Moolenaar assert_equal(true, res) 20516d69bf60SBram Moolenaar 20526d69bf60SBram Moolenaar res = false 20536d69bf60SBram Moolenaar if true || g:bool_false 20546d69bf60SBram Moolenaar res = true 20556d69bf60SBram Moolenaar endif 20566d69bf60SBram Moolenaar assert_equal(true, res) 20576d69bf60SBram Moolenaar 20586d69bf60SBram Moolenaar res = false 20596d69bf60SBram Moolenaar if false || false 20606d69bf60SBram Moolenaar res = true 20616d69bf60SBram Moolenaar endif 20626d69bf60SBram Moolenaar assert_equal(false, res) 206380c34ca3SBram Moolenaarenddef 20646d69bf60SBram Moolenaar 206580c34ca3SBram Moolenaardef Test_if_const_expr_fails() 206680c34ca3SBram Moolenaar call CheckDefFailure(['if "aaa" == "bbb'], 'E114:') 206780c34ca3SBram Moolenaar call CheckDefFailure(["if 'aaa' == 'bbb"], 'E115:') 2068e8c4abbbSBram Moolenaar call CheckDefFailure(["if has('aaa'"], 'E110:') 2069e8c4abbbSBram Moolenaar call CheckDefFailure(["if has('aaa') ? true false"], 'E109:') 20706d69bf60SBram Moolenaarenddef 20716d69bf60SBram Moolenaar 207272abcf42SBram Moolenaardef RunNested(i: number): number 207372abcf42SBram Moolenaar let x: number = 0 207472abcf42SBram Moolenaar if i % 2 207572abcf42SBram Moolenaar if 1 2076f5be8cdbSBram Moolenaar # comment 207772abcf42SBram Moolenaar else 2078f5be8cdbSBram Moolenaar # comment 207972abcf42SBram Moolenaar endif 208072abcf42SBram Moolenaar x += 1 208172abcf42SBram Moolenaar else 208272abcf42SBram Moolenaar x += 1000 208372abcf42SBram Moolenaar endif 208472abcf42SBram Moolenaar return x 208572abcf42SBram Moolenaarenddef 208672abcf42SBram Moolenaar 208772abcf42SBram Moolenaardef Test_nested_if() 208872abcf42SBram Moolenaar assert_equal(1, RunNested(1)) 208972abcf42SBram Moolenaar assert_equal(1000, RunNested(2)) 209072abcf42SBram Moolenaarenddef 209172abcf42SBram Moolenaar 2092ad39c094SBram Moolenaardef Test_execute_cmd() 2093ad39c094SBram Moolenaar new 2094ad39c094SBram Moolenaar setline(1, 'default') 2095ad39c094SBram Moolenaar execute 'call setline(1, "execute-string")' 2096ad39c094SBram Moolenaar assert_equal('execute-string', getline(1)) 2097a72cfb80SBram Moolenaar 2098a72cfb80SBram Moolenaar execute "call setline(1, 'execute-string')" 2099a72cfb80SBram Moolenaar assert_equal('execute-string', getline(1)) 2100a72cfb80SBram Moolenaar 2101ad39c094SBram Moolenaar let cmd1 = 'call setline(1,' 2102ad39c094SBram Moolenaar let cmd2 = '"execute-var")' 2103a72cfb80SBram Moolenaar execute cmd1 cmd2 # comment 2104ad39c094SBram Moolenaar assert_equal('execute-var', getline(1)) 2105a72cfb80SBram Moolenaar 2106ad39c094SBram Moolenaar execute cmd1 cmd2 '|call setline(1, "execute-var-string")' 2107ad39c094SBram Moolenaar assert_equal('execute-var-string', getline(1)) 2108a72cfb80SBram Moolenaar 2109ad39c094SBram Moolenaar let cmd_first = 'call ' 2110ad39c094SBram Moolenaar let cmd_last = 'setline(1, "execute-var-var")' 2111ad39c094SBram Moolenaar execute cmd_first .. cmd_last 2112ad39c094SBram Moolenaar assert_equal('execute-var-var', getline(1)) 2113ad39c094SBram Moolenaar bwipe! 2114585fea7bSBram Moolenaar 21152d6b20d6SBram Moolenaar let n = true 21162d6b20d6SBram Moolenaar execute 'echomsg' (n ? '"true"' : '"no"') 21172d6b20d6SBram Moolenaar assert_match('^true$', Screenline(&lines)) 21182d6b20d6SBram Moolenaar 2119e5abf7afSBram Moolenaar echomsg [1, 2, 3] #{a: 1, b: 2} 2120e5abf7afSBram Moolenaar assert_match('^\[1, 2, 3\] {''a'': 1, ''b'': 2}$', Screenline(&lines)) 2121e5abf7afSBram Moolenaar 2122585fea7bSBram Moolenaar call CheckDefFailure(['execute xxx'], 'E1001:') 2123a72cfb80SBram Moolenaar call CheckDefFailure(['execute "cmd"# comment'], 'E488:') 2124ad39c094SBram Moolenaarenddef 2125ad39c094SBram Moolenaar 212647e880d6SBram Moolenaardef Test_execute_cmd_vimscript() 2127f5be8cdbSBram Moolenaar # only checks line continuation 212847e880d6SBram Moolenaar let lines =<< trim END 212947e880d6SBram Moolenaar vim9script 213047e880d6SBram Moolenaar execute 'g:someVar' 213147e880d6SBram Moolenaar .. ' = ' .. 213247e880d6SBram Moolenaar '28' 213347e880d6SBram Moolenaar assert_equal(28, g:someVar) 213447e880d6SBram Moolenaar unlet g:someVar 213547e880d6SBram Moolenaar END 213647e880d6SBram Moolenaar CheckScriptSuccess(lines) 213747e880d6SBram Moolenaarenddef 213847e880d6SBram Moolenaar 2139ad39c094SBram Moolenaardef Test_echo_cmd() 2140a72cfb80SBram Moolenaar echo 'some' # comment 2141585fea7bSBram Moolenaar echon 'thing' 2142ad39c094SBram Moolenaar assert_match('^something$', Screenline(&lines)) 2143ad39c094SBram Moolenaar 2144a72cfb80SBram Moolenaar echo "some" # comment 2145a72cfb80SBram Moolenaar echon "thing" 2146a72cfb80SBram Moolenaar assert_match('^something$', Screenline(&lines)) 2147a72cfb80SBram Moolenaar 2148ad39c094SBram Moolenaar let str1 = 'some' 2149ad39c094SBram Moolenaar let str2 = 'more' 2150ad39c094SBram Moolenaar echo str1 str2 2151ad39c094SBram Moolenaar assert_match('^some more$', Screenline(&lines)) 2152a72cfb80SBram Moolenaar 2153a72cfb80SBram Moolenaar call CheckDefFailure(['echo "xxx"# comment'], 'E488:') 2154ad39c094SBram Moolenaarenddef 2155ad39c094SBram Moolenaar 2156f93c7feaSBram Moolenaardef Test_echomsg_cmd() 2157f93c7feaSBram Moolenaar echomsg 'some' 'more' # comment 2158f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 2159f93c7feaSBram Moolenaar echo 'clear' 2160df069eecSBram Moolenaar :1messages 2161f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 2162f93c7feaSBram Moolenaar 2163f93c7feaSBram Moolenaar call CheckDefFailure(['echomsg "xxx"# comment'], 'E488:') 2164f93c7feaSBram Moolenaarenddef 2165f93c7feaSBram Moolenaar 216647e880d6SBram Moolenaardef Test_echomsg_cmd_vimscript() 2167f5be8cdbSBram Moolenaar # only checks line continuation 216847e880d6SBram Moolenaar let lines =<< trim END 216947e880d6SBram Moolenaar vim9script 217047e880d6SBram Moolenaar echomsg 'here' 217147e880d6SBram Moolenaar .. ' is ' .. 217247e880d6SBram Moolenaar 'a message' 217347e880d6SBram Moolenaar assert_match('^here is a message$', Screenline(&lines)) 217447e880d6SBram Moolenaar END 217547e880d6SBram Moolenaar CheckScriptSuccess(lines) 217647e880d6SBram Moolenaarenddef 217747e880d6SBram Moolenaar 2178f93c7feaSBram Moolenaardef Test_echoerr_cmd() 217940ee466cSBram Moolenaar try 218040ee466cSBram Moolenaar echoerr 'something' 'wrong' # comment 218140ee466cSBram Moolenaar catch 218240ee466cSBram Moolenaar assert_match('something wrong', v:exception) 218340ee466cSBram Moolenaar endtry 2184f93c7feaSBram Moolenaarenddef 2185f93c7feaSBram Moolenaar 218647e880d6SBram Moolenaardef Test_echoerr_cmd_vimscript() 2187f5be8cdbSBram Moolenaar # only checks line continuation 218847e880d6SBram Moolenaar let lines =<< trim END 218947e880d6SBram Moolenaar vim9script 219047e880d6SBram Moolenaar try 219147e880d6SBram Moolenaar echoerr 'this' 219247e880d6SBram Moolenaar .. ' is ' .. 219347e880d6SBram Moolenaar 'wrong' 219447e880d6SBram Moolenaar catch 219547e880d6SBram Moolenaar assert_match('this is wrong', v:exception) 219647e880d6SBram Moolenaar endtry 219747e880d6SBram Moolenaar END 219847e880d6SBram Moolenaar CheckScriptSuccess(lines) 219947e880d6SBram Moolenaarenddef 220047e880d6SBram Moolenaar 220141fe0617SBram Moolenaardef Test_for_outside_of_function() 220241fe0617SBram Moolenaar let lines =<< trim END 220341fe0617SBram Moolenaar vim9script 220441fe0617SBram Moolenaar new 220541fe0617SBram Moolenaar for var in range(0, 3) 220641fe0617SBram Moolenaar append(line('$'), var) 220741fe0617SBram Moolenaar endfor 220841fe0617SBram Moolenaar assert_equal(['', '0', '1', '2', '3'], getline(1, '$')) 220941fe0617SBram Moolenaar bwipe! 221041fe0617SBram Moolenaar END 221141fe0617SBram Moolenaar writefile(lines, 'Xvim9for.vim') 221241fe0617SBram Moolenaar source Xvim9for.vim 221341fe0617SBram Moolenaar delete('Xvim9for.vim') 221441fe0617SBram Moolenaarenddef 22158a7d6542SBram Moolenaar 2216e8c4abbbSBram Moolenaardef Test_for_loop() 2217e8c4abbbSBram Moolenaar let result = '' 2218e8c4abbbSBram Moolenaar for cnt in range(7) 2219e8c4abbbSBram Moolenaar if cnt == 4 2220e8c4abbbSBram Moolenaar break 2221e8c4abbbSBram Moolenaar endif 2222e8c4abbbSBram Moolenaar if cnt == 2 2223e8c4abbbSBram Moolenaar continue 2224e8c4abbbSBram Moolenaar endif 2225e8c4abbbSBram Moolenaar result ..= cnt .. '_' 2226e8c4abbbSBram Moolenaar endfor 2227e8c4abbbSBram Moolenaar assert_equal('0_1_3_', result) 22280ad3e894SBram Moolenaar 22290ad3e894SBram Moolenaar let concat = '' 22300ad3e894SBram Moolenaar for str in eval('["one", "two"]') 22310ad3e894SBram Moolenaar concat ..= str 22320ad3e894SBram Moolenaar endfor 22330ad3e894SBram Moolenaar assert_equal('onetwo', concat) 2234e8c4abbbSBram Moolenaarenddef 2235e8c4abbbSBram Moolenaar 2236e8c4abbbSBram Moolenaardef Test_for_loop_fails() 2237675f716eSBram Moolenaar CheckDefFailure(['for # in range(5)'], 'E690:') 2238675f716eSBram Moolenaar CheckDefFailure(['for i In range(5)'], 'E690:') 2239451c2e35SBram Moolenaar CheckDefFailure(['let x = 5', 'for x in range(5)'], 'E1017:') 2240822ba247SBram Moolenaar CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef', 'defcompile'], 'E1006:') 2241451c2e35SBram Moolenaar CheckDefFailure(['for i in "text"'], 'E1012:') 2242675f716eSBram Moolenaar CheckDefFailure(['for i in xxx'], 'E1001:') 2243675f716eSBram Moolenaar CheckDefFailure(['endfor'], 'E588:') 2244675f716eSBram Moolenaar CheckDefFailure(['for i in range(3)', 'echo 3'], 'E170:') 2245e8c4abbbSBram Moolenaarenddef 2246e8c4abbbSBram Moolenaar 2247d0df1aacSBram Moolenaardef Test_while_loop() 2248d0df1aacSBram Moolenaar let result = '' 2249d0df1aacSBram Moolenaar let cnt = 0 2250d0df1aacSBram Moolenaar while cnt < 555 2251d0df1aacSBram Moolenaar if cnt == 3 2252d0df1aacSBram Moolenaar break 2253d0df1aacSBram Moolenaar endif 2254d0df1aacSBram Moolenaar cnt += 1 2255d0df1aacSBram Moolenaar if cnt == 2 2256d0df1aacSBram Moolenaar continue 2257d0df1aacSBram Moolenaar endif 2258d0df1aacSBram Moolenaar result ..= cnt .. '_' 2259d0df1aacSBram Moolenaar endwhile 2260d0df1aacSBram Moolenaar assert_equal('1_3_', result) 2261d0df1aacSBram Moolenaarenddef 2262d0df1aacSBram Moolenaar 2263e8c4abbbSBram Moolenaardef Test_while_loop_fails() 2264675f716eSBram Moolenaar CheckDefFailure(['while xxx'], 'E1001:') 2265675f716eSBram Moolenaar CheckDefFailure(['endwhile'], 'E588:') 2266675f716eSBram Moolenaar CheckDefFailure(['continue'], 'E586:') 2267675f716eSBram Moolenaar CheckDefFailure(['if true', 'continue'], 'E586:') 2268675f716eSBram Moolenaar CheckDefFailure(['break'], 'E587:') 2269675f716eSBram Moolenaar CheckDefFailure(['if true', 'break'], 'E587:') 2270675f716eSBram Moolenaar CheckDefFailure(['while 1', 'echo 3'], 'E170:') 2271bd5da371SBram Moolenaarenddef 2272bd5da371SBram Moolenaar 22739645e2d9SBram Moolenaardef Test_interrupt_loop() 227497acfc78SBram Moolenaar let caught = false 22759645e2d9SBram Moolenaar let x = 0 227697acfc78SBram Moolenaar try 22779645e2d9SBram Moolenaar while 1 22789645e2d9SBram Moolenaar x += 1 22799645e2d9SBram Moolenaar if x == 100 22809645e2d9SBram Moolenaar feedkeys("\<C-C>", 'Lt') 22819645e2d9SBram Moolenaar endif 22829645e2d9SBram Moolenaar endwhile 228397acfc78SBram Moolenaar catch 228497acfc78SBram Moolenaar caught = true 228597acfc78SBram Moolenaar assert_equal(100, x) 228697acfc78SBram Moolenaar endtry 228797acfc78SBram Moolenaar assert_true(caught, 'should have caught an exception') 22889645e2d9SBram Moolenaarenddef 228920431c9dSBram Moolenaar 22904fdae999SBram Moolenaardef Test_automatic_line_continuation() 22914fdae999SBram Moolenaar let mylist = [ 22924fdae999SBram Moolenaar 'one', 22934fdae999SBram Moolenaar 'two', 22944fdae999SBram Moolenaar 'three', 2295f5be8cdbSBram Moolenaar ] # comment 22964fdae999SBram Moolenaar assert_equal(['one', 'two', 'three'], mylist) 22974fdae999SBram Moolenaar 22984fdae999SBram Moolenaar let mydict = { 22994fdae999SBram Moolenaar 'one': 1, 23004fdae999SBram Moolenaar 'two': 2, 23014fdae999SBram Moolenaar 'three': 23024fdae999SBram Moolenaar 3, 2303f5be8cdbSBram Moolenaar } # comment 23044fdae999SBram Moolenaar assert_equal({'one': 1, 'two': 2, 'three': 3}, mydict) 23054fdae999SBram Moolenaar mydict = #{ 23062c330432SBram Moolenaar one: 1, # comment 23072c330432SBram Moolenaar two: # comment 23082c330432SBram Moolenaar 2, # comment 23092c330432SBram Moolenaar three: 3 # comment 23102c330432SBram Moolenaar } 23112c330432SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 23122c330432SBram Moolenaar mydict = #{ 23132c330432SBram Moolenaar one: 1, 23144fdae999SBram Moolenaar two: 23154fdae999SBram Moolenaar 2, 23162c330432SBram Moolenaar three: 3 23174fdae999SBram Moolenaar } 23184fdae999SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 2319e6085c53SBram Moolenaar 2320e6085c53SBram Moolenaar assert_equal( 2321e6085c53SBram Moolenaar ['one', 'two', 'three'], 2322e6085c53SBram Moolenaar split('one two three') 2323e6085c53SBram Moolenaar ) 23244fdae999SBram Moolenaarenddef 23254fdae999SBram Moolenaar 23267a092245SBram Moolenaardef Test_vim9_comment() 23277a092245SBram Moolenaar CheckScriptSuccess([ 23287a092245SBram Moolenaar 'vim9script', 23297a092245SBram Moolenaar '# something', 23307a092245SBram Moolenaar ]) 23317a092245SBram Moolenaar CheckScriptFailure([ 23327a092245SBram Moolenaar 'vim9script', 23337a092245SBram Moolenaar ':# something', 23347a092245SBram Moolenaar ], 'E488:') 23357a092245SBram Moolenaar CheckScriptFailure([ 23367a092245SBram Moolenaar '# something', 23377a092245SBram Moolenaar ], 'E488:') 23387a092245SBram Moolenaar CheckScriptFailure([ 23397a092245SBram Moolenaar ':# something', 23407a092245SBram Moolenaar ], 'E488:') 23417a092245SBram Moolenaar 23424a8d9f2eSBram Moolenaar { # block start 23434a8d9f2eSBram Moolenaar } # block end 23444a8d9f2eSBram Moolenaar CheckDefFailure([ 23454a8d9f2eSBram Moolenaar '{# comment', 23464a8d9f2eSBram Moolenaar ], 'E488:') 23474a8d9f2eSBram Moolenaar CheckDefFailure([ 23484a8d9f2eSBram Moolenaar '{', 23494a8d9f2eSBram Moolenaar '}# comment', 23504a8d9f2eSBram Moolenaar ], 'E488:') 23514a8d9f2eSBram Moolenaar 23524a8d9f2eSBram Moolenaar echo "yes" # comment 23534a8d9f2eSBram Moolenaar CheckDefFailure([ 23544a8d9f2eSBram Moolenaar 'echo "yes"# comment', 23554a8d9f2eSBram Moolenaar ], 'E488:') 23567a092245SBram Moolenaar CheckScriptSuccess([ 23577a092245SBram Moolenaar 'vim9script', 23587a092245SBram Moolenaar 'echo "yes" # something', 23597a092245SBram Moolenaar ]) 23607a092245SBram Moolenaar CheckScriptFailure([ 23617a092245SBram Moolenaar 'vim9script', 23627a092245SBram Moolenaar 'echo "yes"# something', 23637a092245SBram Moolenaar ], 'E121:') 23647a092245SBram Moolenaar CheckScriptFailure([ 23657a092245SBram Moolenaar 'vim9script', 23667a092245SBram Moolenaar 'echo# something', 23677a092245SBram Moolenaar ], 'E121:') 23687a092245SBram Moolenaar CheckScriptFailure([ 23697a092245SBram Moolenaar 'echo "yes" # something', 23707a092245SBram Moolenaar ], 'E121:') 23717a092245SBram Moolenaar 23724a8d9f2eSBram Moolenaar exe "echo" # comment 23734a8d9f2eSBram Moolenaar CheckDefFailure([ 23744a8d9f2eSBram Moolenaar 'exe "echo"# comment', 23754a8d9f2eSBram Moolenaar ], 'E488:') 23764a8d9f2eSBram Moolenaar CheckScriptSuccess([ 23774a8d9f2eSBram Moolenaar 'vim9script', 23784a8d9f2eSBram Moolenaar 'exe "echo" # something', 23794a8d9f2eSBram Moolenaar ]) 23804a8d9f2eSBram Moolenaar CheckScriptFailure([ 23814a8d9f2eSBram Moolenaar 'vim9script', 23824a8d9f2eSBram Moolenaar 'exe "echo"# something', 23834a8d9f2eSBram Moolenaar ], 'E121:') 23844a8d9f2eSBram Moolenaar CheckDefFailure([ 23854a8d9f2eSBram Moolenaar 'exe # comment', 23864a8d9f2eSBram Moolenaar ], 'E1015:') 23874a8d9f2eSBram Moolenaar CheckScriptFailure([ 23884a8d9f2eSBram Moolenaar 'vim9script', 23894a8d9f2eSBram Moolenaar 'exe# something', 23904a8d9f2eSBram Moolenaar ], 'E121:') 23914a8d9f2eSBram Moolenaar CheckScriptFailure([ 23924a8d9f2eSBram Moolenaar 'exe "echo" # something', 23934a8d9f2eSBram Moolenaar ], 'E121:') 23944a8d9f2eSBram Moolenaar 23957a092245SBram Moolenaar CheckDefFailure([ 23967a092245SBram Moolenaar 'try# comment', 23977a092245SBram Moolenaar ' echo "yes"', 23987a092245SBram Moolenaar 'catch', 23997a092245SBram Moolenaar 'endtry', 24007a092245SBram Moolenaar ], 'E488:') 24012c5ed4e3SBram Moolenaar CheckScriptFailure([ 24022c5ed4e3SBram Moolenaar 'vim9script', 24032c5ed4e3SBram Moolenaar 'try# comment', 24042c5ed4e3SBram Moolenaar 'echo "yes"', 24052c5ed4e3SBram Moolenaar ], 'E488:') 24067a092245SBram Moolenaar CheckDefFailure([ 24077a092245SBram Moolenaar 'try', 2408a72cfb80SBram Moolenaar ' throw#comment', 2409a72cfb80SBram Moolenaar 'catch', 2410a72cfb80SBram Moolenaar 'endtry', 2411a72cfb80SBram Moolenaar ], 'E1015:') 2412a72cfb80SBram Moolenaar CheckDefFailure([ 2413a72cfb80SBram Moolenaar 'try', 2414a72cfb80SBram Moolenaar ' throw "yes"#comment', 2415a72cfb80SBram Moolenaar 'catch', 2416a72cfb80SBram Moolenaar 'endtry', 2417a72cfb80SBram Moolenaar ], 'E488:') 2418a72cfb80SBram Moolenaar CheckDefFailure([ 2419a72cfb80SBram Moolenaar 'try', 24207a092245SBram Moolenaar ' echo "yes"', 24217a092245SBram Moolenaar 'catch# comment', 24227a092245SBram Moolenaar 'endtry', 24237a092245SBram Moolenaar ], 'E488:') 24242c5ed4e3SBram Moolenaar CheckScriptFailure([ 24252c5ed4e3SBram Moolenaar 'vim9script', 24262c5ed4e3SBram Moolenaar 'try', 24272c5ed4e3SBram Moolenaar ' echo "yes"', 24282c5ed4e3SBram Moolenaar 'catch# comment', 24292c5ed4e3SBram Moolenaar 'endtry', 24302c5ed4e3SBram Moolenaar ], 'E654:') 24312c5ed4e3SBram Moolenaar CheckDefFailure([ 24322c5ed4e3SBram Moolenaar 'try', 24332c5ed4e3SBram Moolenaar ' echo "yes"', 24342c5ed4e3SBram Moolenaar 'catch /pat/# comment', 24352c5ed4e3SBram Moolenaar 'endtry', 24362c5ed4e3SBram Moolenaar ], 'E488:') 24377a092245SBram Moolenaar CheckDefFailure([ 24387a092245SBram Moolenaar 'try', 24397a092245SBram Moolenaar 'echo "yes"', 24407a092245SBram Moolenaar 'catch', 24417a092245SBram Moolenaar 'endtry# comment', 24427a092245SBram Moolenaar ], 'E488:') 24432c5ed4e3SBram Moolenaar CheckScriptFailure([ 24442c5ed4e3SBram Moolenaar 'vim9script', 24452c5ed4e3SBram Moolenaar 'try', 24462c5ed4e3SBram Moolenaar ' echo "yes"', 24472c5ed4e3SBram Moolenaar 'catch', 24482c5ed4e3SBram Moolenaar 'endtry# comment', 24499b7bf9e9SBram Moolenaar ], 'E488:') 24502c5ed4e3SBram Moolenaar 24512c5ed4e3SBram Moolenaar CheckScriptSuccess([ 24522c5ed4e3SBram Moolenaar 'vim9script', 24532c5ed4e3SBram Moolenaar 'hi # comment', 24542c5ed4e3SBram Moolenaar ]) 24552c5ed4e3SBram Moolenaar CheckScriptFailure([ 24562c5ed4e3SBram Moolenaar 'vim9script', 24572c5ed4e3SBram Moolenaar 'hi# comment', 24582c5ed4e3SBram Moolenaar ], 'E416:') 24591966c248SBram Moolenaar CheckScriptSuccess([ 24601966c248SBram Moolenaar 'vim9script', 24611966c248SBram Moolenaar 'hi Search # comment', 24621966c248SBram Moolenaar ]) 24631966c248SBram Moolenaar CheckScriptFailure([ 24641966c248SBram Moolenaar 'vim9script', 24651966c248SBram Moolenaar 'hi Search# comment', 24661966c248SBram Moolenaar ], 'E416:') 24671966c248SBram Moolenaar CheckScriptSuccess([ 24681966c248SBram Moolenaar 'vim9script', 24691966c248SBram Moolenaar 'hi link This Search # comment', 24701966c248SBram Moolenaar ]) 24711966c248SBram Moolenaar CheckScriptFailure([ 24721966c248SBram Moolenaar 'vim9script', 24731966c248SBram Moolenaar 'hi link This That# comment', 24741966c248SBram Moolenaar ], 'E413:') 24751966c248SBram Moolenaar CheckScriptSuccess([ 24761966c248SBram Moolenaar 'vim9script', 24771966c248SBram Moolenaar 'hi clear This # comment', 24781966c248SBram Moolenaar 'hi clear # comment', 24791966c248SBram Moolenaar ]) 2480f5be8cdbSBram Moolenaar # not tested, because it doesn't give an error but a warning: 2481f5be8cdbSBram Moolenaar # hi clear This# comment', 24821966c248SBram Moolenaar CheckScriptFailure([ 24831966c248SBram Moolenaar 'vim9script', 24841966c248SBram Moolenaar 'hi clear# comment', 24851966c248SBram Moolenaar ], 'E416:') 24861966c248SBram Moolenaar 24871966c248SBram Moolenaar CheckScriptSuccess([ 24881966c248SBram Moolenaar 'vim9script', 24891966c248SBram Moolenaar 'hi Group term=bold', 24901966c248SBram Moolenaar 'match Group /todo/ # comment', 24911966c248SBram Moolenaar ]) 24921966c248SBram Moolenaar CheckScriptFailure([ 24931966c248SBram Moolenaar 'vim9script', 24941966c248SBram Moolenaar 'hi Group term=bold', 24951966c248SBram Moolenaar 'match Group /todo/# comment', 24961966c248SBram Moolenaar ], 'E488:') 24971966c248SBram Moolenaar CheckScriptSuccess([ 24981966c248SBram Moolenaar 'vim9script', 24991966c248SBram Moolenaar 'match # comment', 25001966c248SBram Moolenaar ]) 25011966c248SBram Moolenaar CheckScriptFailure([ 25021966c248SBram Moolenaar 'vim9script', 25031966c248SBram Moolenaar 'match# comment', 25041966c248SBram Moolenaar ], 'E475:') 25051966c248SBram Moolenaar CheckScriptSuccess([ 25061966c248SBram Moolenaar 'vim9script', 25071966c248SBram Moolenaar 'match none # comment', 25081966c248SBram Moolenaar ]) 25091966c248SBram Moolenaar CheckScriptFailure([ 25101966c248SBram Moolenaar 'vim9script', 25111966c248SBram Moolenaar 'match none# comment', 25121966c248SBram Moolenaar ], 'E475:') 25131966c248SBram Moolenaar 25141966c248SBram Moolenaar CheckScriptSuccess([ 25151966c248SBram Moolenaar 'vim9script', 25161966c248SBram Moolenaar 'menutrans clear # comment', 25171966c248SBram Moolenaar ]) 25181966c248SBram Moolenaar CheckScriptFailure([ 25191966c248SBram Moolenaar 'vim9script', 25201966c248SBram Moolenaar 'menutrans clear# comment text', 25211966c248SBram Moolenaar ], 'E474:') 25221966c248SBram Moolenaar 25231966c248SBram Moolenaar CheckScriptSuccess([ 25241966c248SBram Moolenaar 'vim9script', 25251966c248SBram Moolenaar 'syntax clear # comment', 25261966c248SBram Moolenaar ]) 25271966c248SBram Moolenaar CheckScriptFailure([ 25281966c248SBram Moolenaar 'vim9script', 25291966c248SBram Moolenaar 'syntax clear# comment text', 25301966c248SBram Moolenaar ], 'E28:') 25311966c248SBram Moolenaar CheckScriptSuccess([ 25321966c248SBram Moolenaar 'vim9script', 25331966c248SBram Moolenaar 'syntax keyword Word some', 25341966c248SBram Moolenaar 'syntax clear Word # comment', 25351966c248SBram Moolenaar ]) 25361966c248SBram Moolenaar CheckScriptFailure([ 25371966c248SBram Moolenaar 'vim9script', 25381966c248SBram Moolenaar 'syntax keyword Word some', 25391966c248SBram Moolenaar 'syntax clear Word# comment text', 25401966c248SBram Moolenaar ], 'E28:') 25411966c248SBram Moolenaar 25421966c248SBram Moolenaar CheckScriptSuccess([ 25431966c248SBram Moolenaar 'vim9script', 25441966c248SBram Moolenaar 'syntax list # comment', 25451966c248SBram Moolenaar ]) 25461966c248SBram Moolenaar CheckScriptFailure([ 25471966c248SBram Moolenaar 'vim9script', 25481966c248SBram Moolenaar 'syntax list# comment text', 25491966c248SBram Moolenaar ], 'E28:') 25501966c248SBram Moolenaar 25511966c248SBram Moolenaar CheckScriptSuccess([ 25521966c248SBram Moolenaar 'vim9script', 25531966c248SBram Moolenaar 'syntax match Word /pat/ oneline # comment', 25541966c248SBram Moolenaar ]) 25551966c248SBram Moolenaar CheckScriptFailure([ 25561966c248SBram Moolenaar 'vim9script', 25571966c248SBram Moolenaar 'syntax match Word /pat/ oneline# comment', 25581966c248SBram Moolenaar ], 'E475:') 25591966c248SBram Moolenaar 25601966c248SBram Moolenaar CheckScriptSuccess([ 25611966c248SBram Moolenaar 'vim9script', 25621966c248SBram Moolenaar 'syntax keyword Word word # comm[ent', 25631966c248SBram Moolenaar ]) 25641966c248SBram Moolenaar CheckScriptFailure([ 25651966c248SBram Moolenaar 'vim9script', 25661966c248SBram Moolenaar 'syntax keyword Word word# comm[ent', 25671966c248SBram Moolenaar ], 'E789:') 25681966c248SBram Moolenaar 25691966c248SBram Moolenaar CheckScriptSuccess([ 25701966c248SBram Moolenaar 'vim9script', 25711966c248SBram Moolenaar 'syntax match Word /pat/ # comment', 25721966c248SBram Moolenaar ]) 25731966c248SBram Moolenaar CheckScriptFailure([ 25741966c248SBram Moolenaar 'vim9script', 25751966c248SBram Moolenaar 'syntax match Word /pat/# comment', 25761966c248SBram Moolenaar ], 'E402:') 25771966c248SBram Moolenaar 25781966c248SBram Moolenaar CheckScriptSuccess([ 25791966c248SBram Moolenaar 'vim9script', 25801966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something # comment', 25811966c248SBram Moolenaar ]) 25821966c248SBram Moolenaar CheckScriptFailure([ 25831966c248SBram Moolenaar 'vim9script', 25841966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something# comment', 25851966c248SBram Moolenaar ], 'E475:') 25861966c248SBram Moolenaar CheckScriptFailure([ 25871966c248SBram Moolenaar 'vim9script', 25881966c248SBram Moolenaar 'syntax match Word /pat/ contains= # comment', 25891966c248SBram Moolenaar ], 'E406:') 25901966c248SBram Moolenaar CheckScriptFailure([ 25911966c248SBram Moolenaar 'vim9script', 25921966c248SBram Moolenaar 'syntax match Word /pat/ contains=# comment', 25931966c248SBram Moolenaar ], 'E475:') 25941966c248SBram Moolenaar 25951966c248SBram Moolenaar CheckScriptSuccess([ 25961966c248SBram Moolenaar 'vim9script', 25971966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/ # comment', 25981966c248SBram Moolenaar ]) 25991966c248SBram Moolenaar CheckScriptFailure([ 26001966c248SBram Moolenaar 'vim9script', 26011966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/# comment', 2602d032f34aSBram Moolenaar ], 'E402:') 26031966c248SBram Moolenaar 26041966c248SBram Moolenaar CheckScriptSuccess([ 26051966c248SBram Moolenaar 'vim9script', 26061966c248SBram Moolenaar 'syntax sync # comment', 26071966c248SBram Moolenaar ]) 26081966c248SBram Moolenaar CheckScriptFailure([ 26091966c248SBram Moolenaar 'vim9script', 26101966c248SBram Moolenaar 'syntax sync# comment', 26111966c248SBram Moolenaar ], 'E404:') 26121966c248SBram Moolenaar CheckScriptSuccess([ 26131966c248SBram Moolenaar 'vim9script', 26141966c248SBram Moolenaar 'syntax sync ccomment # comment', 26151966c248SBram Moolenaar ]) 26161966c248SBram Moolenaar CheckScriptFailure([ 26171966c248SBram Moolenaar 'vim9script', 26181966c248SBram Moolenaar 'syntax sync ccomment# comment', 26191966c248SBram Moolenaar ], 'E404:') 26201966c248SBram Moolenaar 26211966c248SBram Moolenaar CheckScriptSuccess([ 26221966c248SBram Moolenaar 'vim9script', 26231966c248SBram Moolenaar 'syntax cluster Some contains=Word # comment', 26241966c248SBram Moolenaar ]) 26251966c248SBram Moolenaar CheckScriptFailure([ 26261966c248SBram Moolenaar 'vim9script', 26271966c248SBram Moolenaar 'syntax cluster Some contains=Word# comment', 26281966c248SBram Moolenaar ], 'E475:') 2629a72cfb80SBram Moolenaar 2630a72cfb80SBram Moolenaar CheckScriptSuccess([ 2631a72cfb80SBram Moolenaar 'vim9script', 2632a72cfb80SBram Moolenaar 'command Echo echo # comment', 2633a72cfb80SBram Moolenaar 'command Echo # comment', 2634a72cfb80SBram Moolenaar ]) 2635a72cfb80SBram Moolenaar CheckScriptFailure([ 2636a72cfb80SBram Moolenaar 'vim9script', 2637a72cfb80SBram Moolenaar 'command Echo echo# comment', 2638a72cfb80SBram Moolenaar 'Echo', 2639a72cfb80SBram Moolenaar ], 'E121:') 2640a72cfb80SBram Moolenaar CheckScriptFailure([ 2641a72cfb80SBram Moolenaar 'vim9script', 2642a72cfb80SBram Moolenaar 'command Echo# comment', 2643a72cfb80SBram Moolenaar ], 'E182:') 2644a72cfb80SBram Moolenaar CheckScriptFailure([ 2645a72cfb80SBram Moolenaar 'vim9script', 2646a72cfb80SBram Moolenaar 'command Echo echo', 2647a72cfb80SBram Moolenaar 'command Echo# comment', 2648a72cfb80SBram Moolenaar ], 'E182:') 2649a72cfb80SBram Moolenaar 2650a72cfb80SBram Moolenaar CheckScriptSuccess([ 2651a72cfb80SBram Moolenaar 'vim9script', 2652a72cfb80SBram Moolenaar 'function # comment', 2653a72cfb80SBram Moolenaar ]) 2654a72cfb80SBram Moolenaar CheckScriptFailure([ 2655a72cfb80SBram Moolenaar 'vim9script', 26569898107fSBram Moolenaar 'function " comment', 26579898107fSBram Moolenaar ], 'E129:') 26589898107fSBram Moolenaar CheckScriptFailure([ 26599898107fSBram Moolenaar 'vim9script', 2660a72cfb80SBram Moolenaar 'function# comment', 2661a72cfb80SBram Moolenaar ], 'E129:') 2662a72cfb80SBram Moolenaar CheckScriptSuccess([ 2663a72cfb80SBram Moolenaar 'vim9script', 2664a72cfb80SBram Moolenaar 'function CheckScriptSuccess # comment', 2665a72cfb80SBram Moolenaar ]) 2666a72cfb80SBram Moolenaar CheckScriptFailure([ 2667a72cfb80SBram Moolenaar 'vim9script', 2668a72cfb80SBram Moolenaar 'function CheckScriptSuccess# comment', 2669a72cfb80SBram Moolenaar ], 'E488:') 2670a72cfb80SBram Moolenaar 2671a72cfb80SBram Moolenaar CheckScriptSuccess([ 2672a72cfb80SBram Moolenaar 'vim9script', 26734c17ad94SBram Moolenaar 'func g:DeleteMeA()', 2674a72cfb80SBram Moolenaar 'endfunc', 26754c17ad94SBram Moolenaar 'delfunction g:DeleteMeA # comment', 2676a72cfb80SBram Moolenaar ]) 2677a72cfb80SBram Moolenaar CheckScriptFailure([ 2678a72cfb80SBram Moolenaar 'vim9script', 26794c17ad94SBram Moolenaar 'func g:DeleteMeB()', 2680a72cfb80SBram Moolenaar 'endfunc', 26814c17ad94SBram Moolenaar 'delfunction g:DeleteMeB# comment', 2682a72cfb80SBram Moolenaar ], 'E488:') 2683a72cfb80SBram Moolenaar 2684a72cfb80SBram Moolenaar CheckScriptSuccess([ 2685a72cfb80SBram Moolenaar 'vim9script', 2686a72cfb80SBram Moolenaar 'call execute("ls") # comment', 2687a72cfb80SBram Moolenaar ]) 2688a72cfb80SBram Moolenaar CheckScriptFailure([ 2689a72cfb80SBram Moolenaar 'vim9script', 2690a72cfb80SBram Moolenaar 'call execute("ls")# comment', 2691a72cfb80SBram Moolenaar ], 'E488:') 2692e7e4838fSBram Moolenaar 2693e7e4838fSBram Moolenaar CheckScriptFailure([ 2694e7e4838fSBram Moolenaar 'def Test() " comment', 2695e7e4838fSBram Moolenaar 'enddef', 2696e7e4838fSBram Moolenaar ], 'E488:') 2697e7e4838fSBram Moolenaar CheckScriptFailure([ 2698e7e4838fSBram Moolenaar 'vim9script', 2699e7e4838fSBram Moolenaar 'def Test() " comment', 2700e7e4838fSBram Moolenaar 'enddef', 2701e7e4838fSBram Moolenaar ], 'E488:') 2702e7e4838fSBram Moolenaar 2703e7e4838fSBram Moolenaar CheckScriptSuccess([ 2704e7e4838fSBram Moolenaar 'func Test() " comment', 2705e7e4838fSBram Moolenaar 'endfunc', 2706e7e4838fSBram Moolenaar ]) 27079898107fSBram Moolenaar CheckScriptSuccess([ 2708e7e4838fSBram Moolenaar 'vim9script', 2709e7e4838fSBram Moolenaar 'func Test() " comment', 2710e7e4838fSBram Moolenaar 'endfunc', 27119898107fSBram Moolenaar ]) 2712e7e4838fSBram Moolenaar 2713e7e4838fSBram Moolenaar CheckScriptSuccess([ 2714e7e4838fSBram Moolenaar 'def Test() # comment', 2715e7e4838fSBram Moolenaar 'enddef', 2716e7e4838fSBram Moolenaar ]) 2717e7e4838fSBram Moolenaar CheckScriptFailure([ 2718e7e4838fSBram Moolenaar 'func Test() # comment', 2719e7e4838fSBram Moolenaar 'endfunc', 2720e7e4838fSBram Moolenaar ], 'E488:') 27212c5ed4e3SBram Moolenaarenddef 27222c5ed4e3SBram Moolenaar 27232c5ed4e3SBram Moolenaardef Test_vim9_comment_gui() 27242c5ed4e3SBram Moolenaar CheckCanRunGui 27252c5ed4e3SBram Moolenaar 27262c5ed4e3SBram Moolenaar CheckScriptFailure([ 27272c5ed4e3SBram Moolenaar 'vim9script', 27282c5ed4e3SBram Moolenaar 'gui#comment' 27292c5ed4e3SBram Moolenaar ], 'E499:') 27302c5ed4e3SBram Moolenaar CheckScriptFailure([ 27312c5ed4e3SBram Moolenaar 'vim9script', 27322c5ed4e3SBram Moolenaar 'gui -f#comment' 27332c5ed4e3SBram Moolenaar ], 'E499:') 27347a092245SBram Moolenaarenddef 27357a092245SBram Moolenaar 2736a26b9700SBram Moolenaardef Test_vim9_comment_not_compiled() 27376797966dSBram Moolenaar au TabEnter *.vim g:entered = 1 27386797966dSBram Moolenaar au TabEnter *.x g:entered = 2 2739a26b9700SBram Moolenaar 2740a26b9700SBram Moolenaar edit test.vim 2741a26b9700SBram Moolenaar doautocmd TabEnter #comment 2742a26b9700SBram Moolenaar assert_equal(1, g:entered) 2743a26b9700SBram Moolenaar 2744a26b9700SBram Moolenaar doautocmd TabEnter f.x 2745a26b9700SBram Moolenaar assert_equal(2, g:entered) 2746a26b9700SBram Moolenaar 2747a26b9700SBram Moolenaar g:entered = 0 2748a26b9700SBram Moolenaar doautocmd TabEnter f.x #comment 2749a26b9700SBram Moolenaar assert_equal(2, g:entered) 2750a26b9700SBram Moolenaar 2751a26b9700SBram Moolenaar assert_fails('doautocmd Syntax#comment', 'E216:') 2752a26b9700SBram Moolenaar 2753a26b9700SBram Moolenaar au! TabEnter 2754a26b9700SBram Moolenaar unlet g:entered 2755d72c1bf0SBram Moolenaar 2756d72c1bf0SBram Moolenaar CheckScriptSuccess([ 2757d72c1bf0SBram Moolenaar 'vim9script', 27586797966dSBram Moolenaar 'g:var = 123', 2759e55b1c09SBram Moolenaar 'b:var = 456', 2760e55b1c09SBram Moolenaar 'w:var = 777', 2761e55b1c09SBram Moolenaar 't:var = 888', 2762d72c1bf0SBram Moolenaar 'unlet g:var w:var # something', 2763d72c1bf0SBram Moolenaar ]) 2764d72c1bf0SBram Moolenaar 2765d72c1bf0SBram Moolenaar CheckScriptFailure([ 2766d72c1bf0SBram Moolenaar 'vim9script', 2767d72c1bf0SBram Moolenaar 'let g:var = 123', 2768e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a global variable:') 2769e55b1c09SBram Moolenaar 2770e55b1c09SBram Moolenaar CheckScriptFailure([ 2771e55b1c09SBram Moolenaar 'vim9script', 2772e55b1c09SBram Moolenaar 'let b:var = 123', 2773e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a buffer variable:') 2774e55b1c09SBram Moolenaar 2775e55b1c09SBram Moolenaar CheckScriptFailure([ 2776e55b1c09SBram Moolenaar 'vim9script', 2777e55b1c09SBram Moolenaar 'let w:var = 123', 2778e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a window variable:') 2779e55b1c09SBram Moolenaar 2780e55b1c09SBram Moolenaar CheckScriptFailure([ 2781e55b1c09SBram Moolenaar 'vim9script', 2782e55b1c09SBram Moolenaar 'let t:var = 123', 2783e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a tab variable:') 2784e55b1c09SBram Moolenaar 2785e55b1c09SBram Moolenaar CheckScriptFailure([ 2786e55b1c09SBram Moolenaar 'vim9script', 2787e55b1c09SBram Moolenaar 'let v:version = 123', 2788e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a v: variable:') 2789e55b1c09SBram Moolenaar 2790e55b1c09SBram Moolenaar CheckScriptFailure([ 2791e55b1c09SBram Moolenaar 'vim9script', 2792e55b1c09SBram Moolenaar 'let $VARIABLE = "text"', 2793e55b1c09SBram Moolenaar ], 'E1016: Cannot declare an environment variable:') 27946797966dSBram Moolenaar 27956797966dSBram Moolenaar CheckScriptFailure([ 27966797966dSBram Moolenaar 'vim9script', 27976797966dSBram Moolenaar 'g:var = 123', 279832e35117SBram Moolenaar 'unlet g:var# comment1', 2799d72c1bf0SBram Moolenaar ], 'E108:') 2800d72c1bf0SBram Moolenaar 2801d72c1bf0SBram Moolenaar CheckScriptFailure([ 2802d72c1bf0SBram Moolenaar 'let g:var = 123', 2803d72c1bf0SBram Moolenaar 'unlet g:var # something', 2804d72c1bf0SBram Moolenaar ], 'E488:') 2805faac4104SBram Moolenaar 2806faac4104SBram Moolenaar CheckScriptSuccess([ 2807faac4104SBram Moolenaar 'vim9script', 280832e35117SBram Moolenaar 'if 1 # comment2', 2809faac4104SBram Moolenaar ' echo "yes"', 2810faac4104SBram Moolenaar 'elseif 2 #comment', 2811faac4104SBram Moolenaar ' echo "no"', 2812faac4104SBram Moolenaar 'endif', 2813faac4104SBram Moolenaar ]) 2814faac4104SBram Moolenaar 2815faac4104SBram Moolenaar CheckScriptFailure([ 2816faac4104SBram Moolenaar 'vim9script', 281732e35117SBram Moolenaar 'if 1# comment3', 2818faac4104SBram Moolenaar ' echo "yes"', 2819faac4104SBram Moolenaar 'endif', 2820faac4104SBram Moolenaar ], 'E15:') 2821faac4104SBram Moolenaar 2822faac4104SBram Moolenaar CheckScriptFailure([ 2823faac4104SBram Moolenaar 'vim9script', 282432e35117SBram Moolenaar 'if 0 # comment4', 2825faac4104SBram Moolenaar ' echo "yes"', 2826faac4104SBram Moolenaar 'elseif 2#comment', 2827faac4104SBram Moolenaar ' echo "no"', 2828faac4104SBram Moolenaar 'endif', 2829faac4104SBram Moolenaar ], 'E15:') 2830faac4104SBram Moolenaar 2831faac4104SBram Moolenaar CheckScriptSuccess([ 2832faac4104SBram Moolenaar 'vim9script', 283332e35117SBram Moolenaar 'let v = 1 # comment5', 2834faac4104SBram Moolenaar ]) 2835faac4104SBram Moolenaar 2836faac4104SBram Moolenaar CheckScriptFailure([ 2837faac4104SBram Moolenaar 'vim9script', 283832e35117SBram Moolenaar 'let v = 1# comment6', 283932e35117SBram Moolenaar ], 'E15:') 2840faac4104SBram Moolenaar 2841faac4104SBram Moolenaar CheckScriptSuccess([ 2842faac4104SBram Moolenaar 'vim9script', 2843faac4104SBram Moolenaar 'new' 2844faac4104SBram Moolenaar 'call setline(1, ["# define pat", "last"])', 2845df069eecSBram Moolenaar ':$', 2846faac4104SBram Moolenaar 'dsearch /pat/ #comment', 2847faac4104SBram Moolenaar 'bwipe!', 2848faac4104SBram Moolenaar ]) 2849faac4104SBram Moolenaar 2850f5be8cdbSBram Moolenaar CheckScriptFailure([ 2851f5be8cdbSBram Moolenaar 'vim9script', 2852f5be8cdbSBram Moolenaar 'new' 2853f5be8cdbSBram Moolenaar 'call setline(1, ["# define pat", "last"])', 2854f5be8cdbSBram Moolenaar ':$', 2855f5be8cdbSBram Moolenaar 'dsearch /pat/#comment', 2856f5be8cdbSBram Moolenaar 'bwipe!', 2857f5be8cdbSBram Moolenaar ], 'E488:') 2858f5be8cdbSBram Moolenaar 2859f5be8cdbSBram Moolenaar CheckScriptFailure([ 2860f5be8cdbSBram Moolenaar 'vim9script', 2861f5be8cdbSBram Moolenaar 'func! SomeFunc()', 2862f5be8cdbSBram Moolenaar ], 'E477:') 2863a26b9700SBram Moolenaarenddef 2864a26b9700SBram Moolenaar 28657e5bd91dSBram Moolenaardef Test_finish() 28667e5bd91dSBram Moolenaar let lines =<< trim END 28677e5bd91dSBram Moolenaar vim9script 28686797966dSBram Moolenaar g:res = 'one' 28697e5bd91dSBram Moolenaar if v:false | finish | endif 28706797966dSBram Moolenaar g:res = 'two' 28717e5bd91dSBram Moolenaar finish 28726797966dSBram Moolenaar g:res = 'three' 28737e5bd91dSBram Moolenaar END 28747e5bd91dSBram Moolenaar writefile(lines, 'Xfinished') 28757e5bd91dSBram Moolenaar source Xfinished 28767e5bd91dSBram Moolenaar assert_equal('two', g:res) 28777e5bd91dSBram Moolenaar 28787e5bd91dSBram Moolenaar unlet g:res 28797e5bd91dSBram Moolenaar delete('Xfinished') 28807e5bd91dSBram Moolenaarenddef 28817e5bd91dSBram Moolenaar 288232e35117SBram Moolenaardef Test_let_func_call() 288332e35117SBram Moolenaar let lines =<< trim END 288432e35117SBram Moolenaar vim9script 288532e35117SBram Moolenaar func GetValue() 288632e35117SBram Moolenaar if exists('g:count') 288732e35117SBram Moolenaar let g:count += 1 288832e35117SBram Moolenaar else 288932e35117SBram Moolenaar let g:count = 1 289032e35117SBram Moolenaar endif 289132e35117SBram Moolenaar return 'this' 289232e35117SBram Moolenaar endfunc 289332e35117SBram Moolenaar let val: string = GetValue() 2894f5be8cdbSBram Moolenaar # env var is always a string 2895df671b46SBram Moolenaar let env = $TERM 289632e35117SBram Moolenaar END 289732e35117SBram Moolenaar writefile(lines, 'Xfinished') 289832e35117SBram Moolenaar source Xfinished 2899f5be8cdbSBram Moolenaar # GetValue() is not called during discovery phase 290032e35117SBram Moolenaar assert_equal(1, g:count) 290132e35117SBram Moolenaar 290232e35117SBram Moolenaar unlet g:count 290332e35117SBram Moolenaar delete('Xfinished') 290432e35117SBram Moolenaarenddef 290532e35117SBram Moolenaar 290632e35117SBram Moolenaardef Test_let_missing_type() 290732e35117SBram Moolenaar let lines =<< trim END 290832e35117SBram Moolenaar vim9script 2909df671b46SBram Moolenaar let var = g:unknown 2910227a69deSBram Moolenaar END 2911822ba247SBram Moolenaar CheckScriptFailure(lines, 'E121:') 2912227a69deSBram Moolenaar 2913227a69deSBram Moolenaar lines =<< trim END 2914227a69deSBram Moolenaar vim9script 2915227a69deSBram Moolenaar let nr: number = 123 2916227a69deSBram Moolenaar let var = nr 2917227a69deSBram Moolenaar END 2918822ba247SBram Moolenaar CheckScriptSuccess(lines) 291932e35117SBram Moolenaarenddef 292032e35117SBram Moolenaar 2921c82a5b5dSBram Moolenaardef Test_let_declaration() 2922c82a5b5dSBram Moolenaar let lines =<< trim END 2923c82a5b5dSBram Moolenaar vim9script 2924c82a5b5dSBram Moolenaar let var: string 2925c82a5b5dSBram Moolenaar g:var_uninit = var 2926c82a5b5dSBram Moolenaar var = 'text' 2927c82a5b5dSBram Moolenaar g:var_test = var 2928f5be8cdbSBram Moolenaar # prefixing s: is optional 2929984dddbeSBram Moolenaar s:var = 'prefixed' 2930984dddbeSBram Moolenaar g:var_prefixed = s:var 2931984dddbeSBram Moolenaar 2932984dddbeSBram Moolenaar let s:other: number 2933984dddbeSBram Moolenaar other = 1234 2934984dddbeSBram Moolenaar g:other_var = other 293553b29e48SBram Moolenaar 293653b29e48SBram Moolenaar # type is inferred 293753b29e48SBram Moolenaar s:dict = {'a': 222} 293853b29e48SBram Moolenaar def GetDictVal(key: any) 293953b29e48SBram Moolenaar g:dict_val = s:dict[key] 294053b29e48SBram Moolenaar enddef 294153b29e48SBram Moolenaar GetDictVal('a') 2942c82a5b5dSBram Moolenaar END 2943c82a5b5dSBram Moolenaar CheckScriptSuccess(lines) 2944c82a5b5dSBram Moolenaar assert_equal('', g:var_uninit) 2945c82a5b5dSBram Moolenaar assert_equal('text', g:var_test) 2946984dddbeSBram Moolenaar assert_equal('prefixed', g:var_prefixed) 2947984dddbeSBram Moolenaar assert_equal(1234, g:other_var) 294853b29e48SBram Moolenaar assert_equal(222, g:dict_val) 2949c82a5b5dSBram Moolenaar 2950c82a5b5dSBram Moolenaar unlet g:var_uninit 2951c82a5b5dSBram Moolenaar unlet g:var_test 2952984dddbeSBram Moolenaar unlet g:var_prefixed 2953984dddbeSBram Moolenaar unlet g:other_var 2954c82a5b5dSBram Moolenaarenddef 2955c82a5b5dSBram Moolenaar 2956c5b1c20bSBram Moolenaardef Test_let_declaration_fails() 2957c5b1c20bSBram Moolenaar let lines =<< trim END 2958c5b1c20bSBram Moolenaar vim9script 2959c5b1c20bSBram Moolenaar const var: string 2960c5b1c20bSBram Moolenaar END 2961c5b1c20bSBram Moolenaar CheckScriptFailure(lines, 'E1021:') 2962c5b1c20bSBram Moolenaar 2963c5b1c20bSBram Moolenaar lines =<< trim END 2964c5b1c20bSBram Moolenaar vim9script 2965c5b1c20bSBram Moolenaar let 9var: string 2966c5b1c20bSBram Moolenaar END 2967c5b1c20bSBram Moolenaar CheckScriptFailure(lines, 'E475:') 2968c5b1c20bSBram Moolenaarenddef 2969c5b1c20bSBram Moolenaar 297034db91f7SBram Moolenaardef Test_let_type_check() 297134db91f7SBram Moolenaar let lines =<< trim END 297234db91f7SBram Moolenaar vim9script 297334db91f7SBram Moolenaar let var: string 297434db91f7SBram Moolenaar var = 1234 297534db91f7SBram Moolenaar END 2976451c2e35SBram Moolenaar CheckScriptFailure(lines, 'E1012:') 2977984dddbeSBram Moolenaar 2978984dddbeSBram Moolenaar lines =<< trim END 2979984dddbeSBram Moolenaar vim9script 2980984dddbeSBram Moolenaar let var:string 2981984dddbeSBram Moolenaar END 2982984dddbeSBram Moolenaar CheckScriptFailure(lines, 'E1069:') 2983c5b1c20bSBram Moolenaar 2984c5b1c20bSBram Moolenaar lines =<< trim END 2985c5b1c20bSBram Moolenaar vim9script 2986c5b1c20bSBram Moolenaar let var: asdf 2987c5b1c20bSBram Moolenaar END 2988c5b1c20bSBram Moolenaar CheckScriptFailure(lines, 'E1010:') 2989a71e2633SBram Moolenaar 2990a71e2633SBram Moolenaar lines =<< trim END 2991a71e2633SBram Moolenaar vim9script 2992a71e2633SBram Moolenaar let s:l: list<number> 2993a71e2633SBram Moolenaar s:l = [] 2994a71e2633SBram Moolenaar END 2995a71e2633SBram Moolenaar CheckScriptSuccess(lines) 2996a71e2633SBram Moolenaar 2997a71e2633SBram Moolenaar lines =<< trim END 2998a71e2633SBram Moolenaar vim9script 2999a71e2633SBram Moolenaar let s:d: dict<number> 3000a71e2633SBram Moolenaar s:d = {} 3001a71e2633SBram Moolenaar END 3002a71e2633SBram Moolenaar CheckScriptSuccess(lines) 300334db91f7SBram Moolenaarenddef 300434db91f7SBram Moolenaar 3005a5d0077eSBram Moolenaardef Test_forward_declaration() 3006a5d0077eSBram Moolenaar let lines =<< trim END 3007a5d0077eSBram Moolenaar vim9script 3008a5d0077eSBram Moolenaar def GetValue(): string 3009a5d0077eSBram Moolenaar return theVal 3010a5d0077eSBram Moolenaar enddef 3011a5d0077eSBram Moolenaar let theVal = 'something' 3012822ba247SBram Moolenaar g:initVal = GetValue() 3013a5d0077eSBram Moolenaar theVal = 'else' 3014a5d0077eSBram Moolenaar g:laterVal = GetValue() 3015a5d0077eSBram Moolenaar END 3016a5d0077eSBram Moolenaar writefile(lines, 'Xforward') 3017a5d0077eSBram Moolenaar source Xforward 3018a5d0077eSBram Moolenaar assert_equal('something', g:initVal) 3019a5d0077eSBram Moolenaar assert_equal('else', g:laterVal) 3020a5d0077eSBram Moolenaar 3021a5d0077eSBram Moolenaar unlet g:initVal 3022a5d0077eSBram Moolenaar unlet g:laterVal 3023a5d0077eSBram Moolenaar delete('Xforward') 3024a5d0077eSBram Moolenaarenddef 3025a5d0077eSBram Moolenaar 30269721fb4eSBram Moolenaardef Test_source_vim9_from_legacy() 30279721fb4eSBram Moolenaar let legacy_lines =<< trim END 30289721fb4eSBram Moolenaar source Xvim9_script.vim 30299721fb4eSBram Moolenaar 30309721fb4eSBram Moolenaar call assert_false(exists('local')) 30319721fb4eSBram Moolenaar call assert_false(exists('exported')) 30329721fb4eSBram Moolenaar call assert_false(exists('s:exported')) 30339721fb4eSBram Moolenaar call assert_equal('global', global) 30349721fb4eSBram Moolenaar call assert_equal('global', g:global) 30359721fb4eSBram Moolenaar 30369721fb4eSBram Moolenaar " imported variable becomes script-local 30379721fb4eSBram Moolenaar import exported from './Xvim9_script.vim' 30389721fb4eSBram Moolenaar call assert_equal('exported', s:exported) 30399721fb4eSBram Moolenaar call assert_false(exists('exported')) 30409721fb4eSBram Moolenaar 30419721fb4eSBram Moolenaar " imported function becomes script-local 30429721fb4eSBram Moolenaar import GetText from './Xvim9_script.vim' 30439721fb4eSBram Moolenaar call assert_equal('text', s:GetText()) 30449721fb4eSBram Moolenaar call assert_false(exists('*GetText')) 30459721fb4eSBram Moolenaar END 30469721fb4eSBram Moolenaar writefile(legacy_lines, 'Xlegacy_script.vim') 30479721fb4eSBram Moolenaar 30489721fb4eSBram Moolenaar let vim9_lines =<< trim END 30499721fb4eSBram Moolenaar vim9script 30509721fb4eSBram Moolenaar let local = 'local' 30519721fb4eSBram Moolenaar g:global = 'global' 30529721fb4eSBram Moolenaar export let exported = 'exported' 30539721fb4eSBram Moolenaar export def GetText(): string 30549721fb4eSBram Moolenaar return 'text' 30559721fb4eSBram Moolenaar enddef 30569721fb4eSBram Moolenaar END 30579721fb4eSBram Moolenaar writefile(vim9_lines, 'Xvim9_script.vim') 30589721fb4eSBram Moolenaar 30599721fb4eSBram Moolenaar source Xlegacy_script.vim 30609721fb4eSBram Moolenaar 30619721fb4eSBram Moolenaar assert_equal('global', g:global) 3062f5be8cdbSBram Moolenaar unlet g:global 30639721fb4eSBram Moolenaar 30649721fb4eSBram Moolenaar delete('Xlegacy_script.vim') 30659721fb4eSBram Moolenaar delete('Xvim9_script.vim') 30669721fb4eSBram Moolenaarenddef 3067a5d0077eSBram Moolenaar 30687d699701SBram Moolenaarfunc Test_vim9script_not_global() 30697d699701SBram Moolenaar " check that items defined in Vim9 script are script-local, not global 30707d699701SBram Moolenaar let vim9lines =<< trim END 30717d699701SBram Moolenaar vim9script 30727d699701SBram Moolenaar let var = 'local' 30737d699701SBram Moolenaar func TheFunc() 30747d699701SBram Moolenaar echo 'local' 30757d699701SBram Moolenaar endfunc 30767d699701SBram Moolenaar def DefFunc() 30777d699701SBram Moolenaar echo 'local' 30787d699701SBram Moolenaar enddef 30797d699701SBram Moolenaar END 30807d699701SBram Moolenaar call writefile(vim9lines, 'Xvim9script.vim') 30817d699701SBram Moolenaar source Xvim9script.vim 30827d699701SBram Moolenaar try 30837d699701SBram Moolenaar echo g:var 30847d699701SBram Moolenaar assert_report('did not fail') 30857d699701SBram Moolenaar catch /E121:/ 30867d699701SBram Moolenaar " caught 30877d699701SBram Moolenaar endtry 30887d699701SBram Moolenaar try 30897d699701SBram Moolenaar call TheFunc() 30907d699701SBram Moolenaar assert_report('did not fail') 30917d699701SBram Moolenaar catch /E117:/ 30927d699701SBram Moolenaar " caught 30937d699701SBram Moolenaar endtry 30947d699701SBram Moolenaar try 30957d699701SBram Moolenaar call DefFunc() 30967d699701SBram Moolenaar assert_report('did not fail') 30977d699701SBram Moolenaar catch /E117:/ 30987d699701SBram Moolenaar " caught 30997d699701SBram Moolenaar endtry 31007d699701SBram Moolenaar 31017d699701SBram Moolenaar call delete('Xvim9script.vium') 31027d699701SBram Moolenaarendfunc 31037d699701SBram Moolenaar 3104eeb27bfeSBram Moolenaardef Test_vim9_copen() 3105eeb27bfeSBram Moolenaar # this was giving an error for setting w:quickfix_title 3106eeb27bfeSBram Moolenaar copen 3107eeb27bfeSBram Moolenaar quit 3108eeb27bfeSBram Moolenaarenddef 3109eeb27bfeSBram Moolenaar 31102d6b20d6SBram Moolenaar" test using a vim9script that is auto-loaded from an autocmd 31112d6b20d6SBram Moolenaardef Test_vim9_autoload() 31122d6b20d6SBram Moolenaar let lines =<< trim END 31132d6b20d6SBram Moolenaar vim9script 31142d6b20d6SBram Moolenaar def foo#test() 31152d6b20d6SBram Moolenaar echomsg getreg('"') 31162d6b20d6SBram Moolenaar enddef 31172d6b20d6SBram Moolenaar END 31182d6b20d6SBram Moolenaar 31192d6b20d6SBram Moolenaar mkdir('Xdir/autoload', 'p') 31202d6b20d6SBram Moolenaar writefile(lines, 'Xdir/autoload/foo.vim') 31212d6b20d6SBram Moolenaar let save_rtp = &rtp 31222d6b20d6SBram Moolenaar exe 'set rtp^=' .. getcwd() .. '/Xdir' 31232d6b20d6SBram Moolenaar augroup test 31242d6b20d6SBram Moolenaar autocmd TextYankPost * call foo#test() 31252d6b20d6SBram Moolenaar augroup END 31262d6b20d6SBram Moolenaar 31272d6b20d6SBram Moolenaar normal Y 31282d6b20d6SBram Moolenaar 31292d6b20d6SBram Moolenaar augroup test 31302d6b20d6SBram Moolenaar autocmd! 31312d6b20d6SBram Moolenaar augroup END 31322d6b20d6SBram Moolenaar delete('Xdir', 'rf') 31332d6b20d6SBram Moolenaar &rtp = save_rtp 31342d6b20d6SBram Moolenaarenddef 31352d6b20d6SBram Moolenaar 31363896a105SBram Moolenaardef Test_cmdline_win() 31373896a105SBram Moolenaar # if the Vim syntax highlighting uses Vim9 constructs they can be used from 31383896a105SBram Moolenaar # the command line window. 31393896a105SBram Moolenaar mkdir('rtp/syntax', 'p') 31403896a105SBram Moolenaar let export_lines =<< trim END 31413896a105SBram Moolenaar vim9script 31423896a105SBram Moolenaar export let That = 'yes' 31433896a105SBram Moolenaar END 31443896a105SBram Moolenaar writefile(export_lines, 'rtp/syntax/Xexport.vim') 31453896a105SBram Moolenaar let import_lines =<< trim END 31463896a105SBram Moolenaar vim9script 31473896a105SBram Moolenaar import That from './Xexport.vim' 31483896a105SBram Moolenaar END 31493896a105SBram Moolenaar writefile(import_lines, 'rtp/syntax/vim.vim') 31503896a105SBram Moolenaar let save_rtp = &rtp 31513896a105SBram Moolenaar &rtp = getcwd() .. '/rtp' .. ',' .. &rtp 31523896a105SBram Moolenaar syntax on 31533896a105SBram Moolenaar augroup CmdWin 31543896a105SBram Moolenaar autocmd CmdwinEnter * g:got_there = 'yes' 31553896a105SBram Moolenaar augroup END 31563896a105SBram Moolenaar # this will open and also close the cmdline window 31573896a105SBram Moolenaar feedkeys('q:', 'xt') 31583896a105SBram Moolenaar assert_equal('yes', g:got_there) 31593896a105SBram Moolenaar 31603896a105SBram Moolenaar augroup CmdWin 31613896a105SBram Moolenaar au! 31623896a105SBram Moolenaar augroup END 31633896a105SBram Moolenaar &rtp = save_rtp 31643896a105SBram Moolenaar delete('rtp', 'rf') 31653896a105SBram Moolenaarenddef 31663896a105SBram Moolenaar 3167585fea7bSBram Moolenaar" Keep this last, it messes up highlighting. 3168585fea7bSBram Moolenaardef Test_substitute_cmd() 3169585fea7bSBram Moolenaar new 3170585fea7bSBram Moolenaar setline(1, 'something') 3171585fea7bSBram Moolenaar :substitute(some(other( 3172585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 3173585fea7bSBram Moolenaar bwipe! 3174585fea7bSBram Moolenaar 3175f5be8cdbSBram Moolenaar # also when the context is Vim9 script 3176585fea7bSBram Moolenaar let lines =<< trim END 3177585fea7bSBram Moolenaar vim9script 3178585fea7bSBram Moolenaar new 3179585fea7bSBram Moolenaar setline(1, 'something') 3180585fea7bSBram Moolenaar :substitute(some(other( 3181585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 3182585fea7bSBram Moolenaar bwipe! 3183585fea7bSBram Moolenaar END 3184585fea7bSBram Moolenaar writefile(lines, 'Xvim9lines') 3185585fea7bSBram Moolenaar source Xvim9lines 3186585fea7bSBram Moolenaar 3187585fea7bSBram Moolenaar delete('Xvim9lines') 3188585fea7bSBram Moolenaarenddef 3189585fea7bSBram Moolenaar 31908a7d6542SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker 3191