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 93*93ad1471SBram Moolenaar if has('float') 94*93ad1471SBram Moolenaar let f100: float = 100.0 95*93ad1471SBram Moolenaar f100 /= 5 96*93ad1471SBram Moolenaar assert_equal(20.0, f100) 97*93ad1471SBram Moolenaar 98*93ad1471SBram Moolenaar let f200: float = 200.0 99*93ad1471SBram Moolenaar f200 /= 5.0 100*93ad1471SBram Moolenaar assert_equal(40.0, f200) 101*93ad1471SBram Moolenaar 102*93ad1471SBram Moolenaar CheckDefFailure(['let nr: number = 200', 'nr /= 5.0'], 'E1012:') 103*93ad1471SBram Moolenaar endif 104*93ad1471SBram Moolenaar 105b5ed2660SBram Moolenaar lines =<< trim END 106b5ed2660SBram Moolenaar vim9script 107b5ed2660SBram Moolenaar &ts = 6 108b5ed2660SBram Moolenaar &ts += 3 109b5ed2660SBram Moolenaar assert_equal(9, &ts) 110b5ed2660SBram Moolenaar END 1110aae4809SBram Moolenaar CheckScriptSuccess(lines) 112b5ed2660SBram Moolenaar 1130aae4809SBram Moolenaar CheckDefFailure(['¬ex += 3'], 'E113:') 1140aae4809SBram Moolenaar CheckDefFailure(['&ts ..= "xxx"'], 'E1019:') 1150aae4809SBram Moolenaar CheckDefFailure(['&ts = [7]'], 'E1012:') 1160aae4809SBram Moolenaar CheckDefExecFailure(['&ts = g:alist'], 'E1029: Expected number but got list') 1170aae4809SBram Moolenaar CheckDefFailure(['&ts = "xx"'], 'E1012:') 1180aae4809SBram Moolenaar CheckDefExecFailure(['&ts = g:astring'], 'E1029: Expected number but got string') 1190aae4809SBram Moolenaar CheckDefFailure(['&path += 3'], 'E1012:') 1200aae4809SBram Moolenaar CheckDefExecFailure(['&bs = "asdf"'], 'E474:') 121cb711abfSBram Moolenaar # test freeing ISN_STOREOPT 1220aae4809SBram Moolenaar CheckDefFailure(['&ts = 3', 'let asdf'], 'E1022:') 12380c34ca3SBram Moolenaar &ts = 8 124a8c17704SBram Moolenaar 1250aae4809SBram Moolenaar lines =<< trim END 1260aae4809SBram Moolenaar let save_TI = &t_TI 1270aae4809SBram Moolenaar &t_TI = '' 1280aae4809SBram Moolenaar assert_equal('', &t_TI) 1290aae4809SBram Moolenaar &t_TI = 'xxx' 1300aae4809SBram Moolenaar assert_equal('xxx', &t_TI) 1310aae4809SBram Moolenaar &t_TI = save_TI 1320aae4809SBram Moolenaar END 1330aae4809SBram Moolenaar CheckDefSuccess(lines) 1340aae4809SBram Moolenaar CheckScriptSuccess(['vim9script'] + lines) 1350aae4809SBram Moolenaar 1360aae4809SBram Moolenaar CheckDefFailure(['&t_TI = 123'], 'E1012:') 1370aae4809SBram Moolenaar CheckScriptFailure(['vim9script', '&t_TI = 123'], 'E928:') 1380aae4809SBram Moolenaar 1390aae4809SBram Moolenaar CheckDefFailure(['let s:var = 123'], 'E1101:') 1400aae4809SBram Moolenaar CheckDefFailure(['let s:var: number'], 'E1101:') 14133afa244SBram Moolenaar 142f9b2b496SBram Moolenaar lines =<< trim END 143f9b2b496SBram Moolenaar vim9script 144f9b2b496SBram Moolenaar def SomeFunc() 145f9b2b496SBram Moolenaar s:var = 123 146f9b2b496SBram Moolenaar enddef 147f9b2b496SBram Moolenaar defcompile 148f9b2b496SBram Moolenaar END 149f9b2b496SBram Moolenaar call CheckScriptFailure(lines, 'E1089:') 150f9b2b496SBram Moolenaar 151a8c17704SBram Moolenaar g:inc_counter += 1 152a8c17704SBram Moolenaar assert_equal(2, g:inc_counter) 153a8c17704SBram Moolenaar 154a8c17704SBram Moolenaar $SOME_ENV_VAR ..= 'more' 155a8c17704SBram Moolenaar assert_equal('somemore', $SOME_ENV_VAR) 156dd29f1b0SBram Moolenaar call CheckDefFailure(['$SOME_ENV_VAR += "more"'], 'E1051:') 157451c2e35SBram Moolenaar call CheckDefFailure(['$SOME_ENV_VAR += 123'], 'E1012:') 158a8c17704SBram Moolenaar 159a8c17704SBram Moolenaar @a = 'areg' 160a8c17704SBram Moolenaar @a ..= 'add' 161a8c17704SBram Moolenaar assert_equal('aregadd', @a) 162dd29f1b0SBram Moolenaar call CheckDefFailure(['@a += "more"'], 'E1051:') 163451c2e35SBram Moolenaar call CheckDefFailure(['@a += 123'], 'E1012:') 164e69f6d04SBram Moolenaar 165b5ed2660SBram Moolenaar lines =<< trim END 166b5ed2660SBram Moolenaar vim9script 167b5ed2660SBram Moolenaar @c = 'areg' 168b5ed2660SBram Moolenaar @c ..= 'add' 169b5ed2660SBram Moolenaar assert_equal('aregadd', @c) 170b5ed2660SBram Moolenaar END 171b5ed2660SBram Moolenaar call CheckScriptSuccess(lines) 172b5ed2660SBram Moolenaar 173e69f6d04SBram Moolenaar v:errmsg = 'none' 174e69f6d04SBram Moolenaar v:errmsg ..= 'again' 175e69f6d04SBram Moolenaar assert_equal('noneagain', v:errmsg) 176dd29f1b0SBram Moolenaar call CheckDefFailure(['v:errmsg += "more"'], 'E1051:') 177451c2e35SBram Moolenaar call CheckDefFailure(['v:errmsg += 123'], 'E1012:') 17833afa244SBram Moolenaar 17933afa244SBram Moolenaar # single letter variables 18033afa244SBram Moolenaar a = 123 18133afa244SBram Moolenaar assert_equal(123, a) 18233afa244SBram Moolenaar let b: number 18333afa244SBram Moolenaar b = 123 18433afa244SBram Moolenaar assert_equal(123, b) 18533afa244SBram Moolenaar let g: number 18633afa244SBram Moolenaar g = 123 18733afa244SBram Moolenaar assert_equal(123, g) 18833afa244SBram Moolenaar let s: number 18933afa244SBram Moolenaar s = 123 19033afa244SBram Moolenaar assert_equal(123, s) 19133afa244SBram Moolenaar let t: number 19233afa244SBram Moolenaar t = 123 19333afa244SBram Moolenaar assert_equal(123, t) 19433afa244SBram Moolenaar let v: number 19533afa244SBram Moolenaar v = 123 19633afa244SBram Moolenaar assert_equal(123, v) 19733afa244SBram Moolenaar let w: number 19833afa244SBram Moolenaar w = 123 19933afa244SBram Moolenaar assert_equal(123, w) 2005deeb3f1SBram Moolenaarenddef 2015deeb3f1SBram Moolenaar 2023b74b6b4SBram Moolenaardef Test_vim9_single_char_vars() 2033b74b6b4SBram Moolenaar let lines =<< trim END 2043b74b6b4SBram Moolenaar vim9script 2053b74b6b4SBram Moolenaar 206f5be8cdbSBram Moolenaar # single character variable declarations work 2073b74b6b4SBram Moolenaar let a: string 2083b74b6b4SBram Moolenaar let b: number 2093b74b6b4SBram Moolenaar let l: list<any> 2103b74b6b4SBram Moolenaar let s: string 2113b74b6b4SBram Moolenaar let t: number 2123b74b6b4SBram Moolenaar let v: number 2133b74b6b4SBram Moolenaar let w: number 2143b74b6b4SBram Moolenaar 215f5be8cdbSBram Moolenaar # script-local variables can be used without s: prefix 2163b74b6b4SBram Moolenaar a = 'script-a' 2173b74b6b4SBram Moolenaar b = 111 2183b74b6b4SBram Moolenaar l = [1, 2, 3] 2193b74b6b4SBram Moolenaar s = 'script-s' 2203b74b6b4SBram Moolenaar t = 222 2213b74b6b4SBram Moolenaar v = 333 2223b74b6b4SBram Moolenaar w = 444 2233b74b6b4SBram Moolenaar 2243b74b6b4SBram Moolenaar assert_equal('script-a', a) 2253b74b6b4SBram Moolenaar assert_equal(111, b) 2263b74b6b4SBram Moolenaar assert_equal([1, 2, 3], l) 2273b74b6b4SBram Moolenaar assert_equal('script-s', s) 2283b74b6b4SBram Moolenaar assert_equal(222, t) 2293b74b6b4SBram Moolenaar assert_equal(333, v) 2303b74b6b4SBram Moolenaar assert_equal(444, w) 2313b74b6b4SBram Moolenaar END 2323b74b6b4SBram Moolenaar writefile(lines, 'Xsinglechar') 2333b74b6b4SBram Moolenaar source Xsinglechar 2343b74b6b4SBram Moolenaar delete('Xsinglechar') 2353b74b6b4SBram Moolenaarenddef 2363b74b6b4SBram Moolenaar 23784370087SBram Moolenaardef Test_assignment_list() 23884370087SBram Moolenaar let list1: list<bool> = [false, true, false] 23984370087SBram Moolenaar let list2: list<number> = [1, 2, 3] 24084370087SBram Moolenaar let list3: list<string> = ['sdf', 'asdf'] 24184370087SBram Moolenaar let list4: list<any> = ['yes', true, 1234] 24284370087SBram Moolenaar let list5: list<blob> = [0z01, 0z02] 24384370087SBram Moolenaar 24484370087SBram Moolenaar let listS: list<string> = [] 24584370087SBram Moolenaar let listN: list<number> = [] 24684370087SBram Moolenaar 24784370087SBram Moolenaar assert_equal([1, 2, 3], list2) 24884370087SBram Moolenaar list2[-1] = 99 24984370087SBram Moolenaar assert_equal([1, 2, 99], list2) 25084370087SBram Moolenaar list2[-2] = 88 25184370087SBram Moolenaar assert_equal([1, 88, 99], list2) 25284370087SBram Moolenaar list2[-3] = 77 25384370087SBram Moolenaar assert_equal([77, 88, 99], list2) 254dd29f1b0SBram Moolenaar list2 += [100] 255dd29f1b0SBram Moolenaar assert_equal([77, 88, 99, 100], list2) 256dd29f1b0SBram Moolenaar 257dd29f1b0SBram Moolenaar list3 += ['end'] 258dd29f1b0SBram Moolenaar assert_equal(['sdf', 'asdf', 'end'], list3) 259dd29f1b0SBram Moolenaar 260dd29f1b0SBram Moolenaar 26184370087SBram Moolenaar call CheckDefExecFailure(['let ll = [1, 2, 3]', 'll[-4] = 6'], 'E684:') 262c5b1c20bSBram Moolenaar call CheckDefExecFailure(['let [v1, v2] = [1, 2]'], 'E1092:') 26384370087SBram Moolenaar 26484370087SBram Moolenaar # type becomes list<any> 26584370087SBram Moolenaar let somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c'] 26684370087SBram Moolenaarenddef 26784370087SBram Moolenaar 268b31be3f9SBram Moolenaardef Test_assignment_list_vim9script() 269b31be3f9SBram Moolenaar let lines =<< trim END 270b31be3f9SBram Moolenaar vim9script 271b31be3f9SBram Moolenaar let v1: number 272b31be3f9SBram Moolenaar let v2: number 273b31be3f9SBram Moolenaar let v3: number 274b31be3f9SBram Moolenaar [v1, v2, v3] = [1, 2, 3] 275b31be3f9SBram Moolenaar assert_equal([1, 2, 3], [v1, v2, v3]) 276b31be3f9SBram Moolenaar END 277b31be3f9SBram Moolenaar call CheckScriptSuccess(lines) 278b31be3f9SBram Moolenaarenddef 279b31be3f9SBram Moolenaar 28084370087SBram Moolenaardef Test_assignment_dict() 28184370087SBram Moolenaar let dict1: dict<bool> = #{one: false, two: true} 28284370087SBram Moolenaar let dict2: dict<number> = #{one: 1, two: 2} 28384370087SBram Moolenaar let dict3: dict<string> = #{key: 'value'} 28484370087SBram Moolenaar let dict4: dict<any> = #{one: 1, two: '2'} 28574fae513SBram Moolenaar let dict5: dict<blob> = #{one: 0z01, two: 0z02} 28684370087SBram Moolenaar 287f5be8cdbSBram Moolenaar # overwrite 288c785b9a7SBram Moolenaar dict3['key'] = 'another' 289c785b9a7SBram Moolenaar 29058626872SBram Moolenaar # empty key can be used 29158626872SBram Moolenaar let dd = {} 29258626872SBram Moolenaar dd[""] = 6 29358626872SBram Moolenaar assert_equal({'': 6}, dd) 29484370087SBram Moolenaar 29584370087SBram Moolenaar # type becomes dict<any> 29684370087SBram Moolenaar let somedict = rand() > 0 ? #{a: 1, b: 2} : #{a: 'a', b: 'b'} 2978e4c8c85SBram Moolenaar 2988e4c8c85SBram Moolenaar # assignment to script-local dict 2998e4c8c85SBram Moolenaar let lines =<< trim END 3008e4c8c85SBram Moolenaar vim9script 3018e4c8c85SBram Moolenaar let test: dict<any> = {} 3028e4c8c85SBram Moolenaar def FillDict(): dict<any> 3038e4c8c85SBram Moolenaar test['a'] = 43 3048e4c8c85SBram Moolenaar return test 3058e4c8c85SBram Moolenaar enddef 3068e4c8c85SBram Moolenaar assert_equal(#{a: 43}, FillDict()) 3078e4c8c85SBram Moolenaar END 3088e4c8c85SBram Moolenaar call CheckScriptSuccess(lines) 3098e4c8c85SBram Moolenaar 3108e4c8c85SBram Moolenaar lines =<< trim END 3118e4c8c85SBram Moolenaar vim9script 3128e4c8c85SBram Moolenaar let test: dict<any> 3138e4c8c85SBram Moolenaar def FillDict(): dict<any> 3148e4c8c85SBram Moolenaar test['a'] = 43 3158e4c8c85SBram Moolenaar return test 3168e4c8c85SBram Moolenaar enddef 3178e4c8c85SBram Moolenaar FillDict() 3188e4c8c85SBram Moolenaar END 3198e4c8c85SBram Moolenaar call CheckScriptFailure(lines, 'E1103:') 3202caa1594SBram Moolenaar 3212caa1594SBram Moolenaar # assignment to global dict 3222caa1594SBram Moolenaar lines =<< trim END 3232caa1594SBram Moolenaar vim9script 3242caa1594SBram Moolenaar g:test = {} 3252caa1594SBram Moolenaar def FillDict(): dict<any> 3262caa1594SBram Moolenaar g:test['a'] = 43 3272caa1594SBram Moolenaar return g:test 3282caa1594SBram Moolenaar enddef 3292caa1594SBram Moolenaar assert_equal(#{a: 43}, FillDict()) 3302caa1594SBram Moolenaar END 3312caa1594SBram Moolenaar call CheckScriptSuccess(lines) 3322caa1594SBram Moolenaar 3332caa1594SBram Moolenaar # assignment to buffer dict 3342caa1594SBram Moolenaar lines =<< trim END 3352caa1594SBram Moolenaar vim9script 3362caa1594SBram Moolenaar b:test = {} 3372caa1594SBram Moolenaar def FillDict(): dict<any> 3382caa1594SBram Moolenaar b:test['a'] = 43 3392caa1594SBram Moolenaar return b:test 3402caa1594SBram Moolenaar enddef 3412caa1594SBram Moolenaar assert_equal(#{a: 43}, FillDict()) 3422caa1594SBram Moolenaar END 3432caa1594SBram Moolenaar call CheckScriptSuccess(lines) 34484370087SBram Moolenaarenddef 34584370087SBram Moolenaar 346d3aac291SBram Moolenaardef Test_assignment_local() 347f5be8cdbSBram Moolenaar # Test in a separated file in order not to the current buffer/window/tab is 348f5be8cdbSBram Moolenaar # changed. 349d3aac291SBram Moolenaar let script_lines: list<string> =<< trim END 350d3aac291SBram Moolenaar let b:existing = 'yes' 351d3aac291SBram Moolenaar let w:existing = 'yes' 352d3aac291SBram Moolenaar let t:existing = 'yes' 353d3aac291SBram Moolenaar 354d3aac291SBram Moolenaar def Test_assignment_local_internal() 355d3aac291SBram Moolenaar b:newvar = 'new' 356d3aac291SBram Moolenaar assert_equal('new', b:newvar) 357d3aac291SBram Moolenaar assert_equal('yes', b:existing) 358d3aac291SBram Moolenaar b:existing = 'no' 359d3aac291SBram Moolenaar assert_equal('no', b:existing) 360396f3138SBram Moolenaar b:existing ..= 'NO' 361396f3138SBram Moolenaar assert_equal('noNO', b:existing) 362d3aac291SBram Moolenaar 363d3aac291SBram Moolenaar w:newvar = 'new' 364d3aac291SBram Moolenaar assert_equal('new', w:newvar) 365d3aac291SBram Moolenaar assert_equal('yes', w:existing) 366d3aac291SBram Moolenaar w:existing = 'no' 367d3aac291SBram Moolenaar assert_equal('no', w:existing) 368396f3138SBram Moolenaar w:existing ..= 'NO' 369396f3138SBram Moolenaar assert_equal('noNO', w:existing) 370d3aac291SBram Moolenaar 371d3aac291SBram Moolenaar t:newvar = 'new' 372d3aac291SBram Moolenaar assert_equal('new', t:newvar) 373d3aac291SBram Moolenaar assert_equal('yes', t:existing) 374d3aac291SBram Moolenaar t:existing = 'no' 375d3aac291SBram Moolenaar assert_equal('no', t:existing) 376396f3138SBram Moolenaar t:existing ..= 'NO' 377396f3138SBram Moolenaar assert_equal('noNO', t:existing) 378d3aac291SBram Moolenaar enddef 379d3aac291SBram Moolenaar call Test_assignment_local_internal() 380d3aac291SBram Moolenaar END 381d3aac291SBram Moolenaar call CheckScriptSuccess(script_lines) 382d3aac291SBram Moolenaarenddef 383d3aac291SBram Moolenaar 3845deeb3f1SBram Moolenaardef Test_assignment_default() 385e69f6d04SBram Moolenaar 386cb711abfSBram Moolenaar # Test default values. 387e69f6d04SBram Moolenaar let thebool: bool 388e69f6d04SBram Moolenaar assert_equal(v:false, thebool) 389e69f6d04SBram Moolenaar 390e69f6d04SBram Moolenaar let thenumber: number 391e69f6d04SBram Moolenaar assert_equal(0, thenumber) 392e69f6d04SBram Moolenaar 393e69f6d04SBram Moolenaar if has('float') 394e69f6d04SBram Moolenaar let thefloat: float 395e69f6d04SBram Moolenaar assert_equal(0.0, thefloat) 396e69f6d04SBram Moolenaar endif 397e69f6d04SBram Moolenaar 398e69f6d04SBram Moolenaar let thestring: string 399e69f6d04SBram Moolenaar assert_equal('', thestring) 400e69f6d04SBram Moolenaar 401e69f6d04SBram Moolenaar let theblob: blob 402e69f6d04SBram Moolenaar assert_equal(0z, theblob) 403e69f6d04SBram Moolenaar 4045deeb3f1SBram Moolenaar let Thefunc: func 4055deeb3f1SBram Moolenaar assert_equal(test_null_function(), Thefunc) 406e69f6d04SBram Moolenaar 407e69f6d04SBram Moolenaar let thelist: list<any> 408e69f6d04SBram Moolenaar assert_equal([], thelist) 409e69f6d04SBram Moolenaar 410e69f6d04SBram Moolenaar let thedict: dict<any> 411e69f6d04SBram Moolenaar assert_equal({}, thedict) 412e69f6d04SBram Moolenaar 4132c869deeSBram Moolenaar if has('channel') 414e69f6d04SBram Moolenaar let thejob: job 415e69f6d04SBram Moolenaar assert_equal(test_null_job(), thejob) 416e69f6d04SBram Moolenaar 417e69f6d04SBram Moolenaar let thechannel: channel 418e69f6d04SBram Moolenaar assert_equal(test_null_channel(), thechannel) 419c785b9a7SBram Moolenaar 420c785b9a7SBram Moolenaar if has('unix') && executable('cat') 421f5be8cdbSBram Moolenaar # check with non-null job and channel, types must match 422c785b9a7SBram Moolenaar thejob = job_start("cat ", #{}) 423c785b9a7SBram Moolenaar thechannel = job_getchannel(thejob) 424c785b9a7SBram Moolenaar job_stop(thejob, 'kill') 425c785b9a7SBram Moolenaar endif 4262c869deeSBram Moolenaar endif 427585fea7bSBram Moolenaar 428585fea7bSBram Moolenaar let nr = 1234 | nr = 5678 429585fea7bSBram Moolenaar assert_equal(5678, nr) 4308a7d6542SBram Moolenaarenddef 4318a7d6542SBram Moolenaar 43247a519a9SBram Moolenaardef Test_assignment_var_list() 43347a519a9SBram Moolenaar let v1: string 43447a519a9SBram Moolenaar let v2: string 4359af78769SBram Moolenaar let vrem: list<string> 4369af78769SBram Moolenaar [v1] = ['aaa'] 4379af78769SBram Moolenaar assert_equal('aaa', v1) 4389af78769SBram Moolenaar 43947a519a9SBram Moolenaar [v1, v2] = ['one', 'two'] 44047a519a9SBram Moolenaar assert_equal('one', v1) 44147a519a9SBram Moolenaar assert_equal('two', v2) 4429af78769SBram Moolenaar 4439af78769SBram Moolenaar [v1, v2; vrem] = ['one', 'two'] 4449af78769SBram Moolenaar assert_equal('one', v1) 4459af78769SBram Moolenaar assert_equal('two', v2) 4469af78769SBram Moolenaar assert_equal([], vrem) 4479af78769SBram Moolenaar 4489af78769SBram Moolenaar [v1, v2; vrem] = ['one', 'two', 'three'] 4499af78769SBram Moolenaar assert_equal('one', v1) 4509af78769SBram Moolenaar assert_equal('two', v2) 4519af78769SBram Moolenaar assert_equal(['three'], vrem) 4521c199f9cSBram Moolenaar 4531c199f9cSBram Moolenaar [&ts, &sw] = [3, 4] 4541c199f9cSBram Moolenaar assert_equal(3, &ts) 4551c199f9cSBram Moolenaar assert_equal(4, &sw) 4561c199f9cSBram Moolenaar set ts=8 sw=4 45747a519a9SBram Moolenaarenddef 45847a519a9SBram Moolenaar 459c7e44a7eSBram Moolenaardef Test_assignment_vim9script() 460c7e44a7eSBram Moolenaar let lines =<< trim END 461c7e44a7eSBram Moolenaar vim9script 462c7e44a7eSBram Moolenaar def Func(): list<number> 463c7e44a7eSBram Moolenaar return [1, 2] 464c7e44a7eSBram Moolenaar enddef 465c7e44a7eSBram Moolenaar let var1: number 466c7e44a7eSBram Moolenaar let var2: number 467c7e44a7eSBram Moolenaar [var1, var2] = 468c7e44a7eSBram Moolenaar Func() 469c7e44a7eSBram Moolenaar assert_equal(1, var1) 470c7e44a7eSBram Moolenaar assert_equal(2, var2) 471c7e44a7eSBram Moolenaar let ll = 472c7e44a7eSBram Moolenaar Func() 473c7e44a7eSBram Moolenaar assert_equal([1, 2], ll) 47483144546SBram Moolenaar 47583144546SBram Moolenaar @/ = 'text' 47683144546SBram Moolenaar assert_equal('text', @/) 47783144546SBram Moolenaar @0 = 'zero' 47883144546SBram Moolenaar assert_equal('zero', @0) 47983144546SBram Moolenaar @1 = 'one' 48083144546SBram Moolenaar assert_equal('one', @1) 48183144546SBram Moolenaar @9 = 'nine' 48283144546SBram Moolenaar assert_equal('nine', @9) 48383144546SBram Moolenaar @- = 'minus' 48483144546SBram Moolenaar assert_equal('minus', @-) 48583144546SBram Moolenaar if has('clipboard_working') 48683144546SBram Moolenaar @* = 'star' 48783144546SBram Moolenaar assert_equal('star', @*) 48883144546SBram Moolenaar @+ = 'plus' 48983144546SBram Moolenaar assert_equal('plus', @+) 49083144546SBram Moolenaar endif 49195dd9f25SBram Moolenaar 49295dd9f25SBram Moolenaar let a: number = 123 49395dd9f25SBram Moolenaar assert_equal(123, a) 49495dd9f25SBram Moolenaar let s: string = 'yes' 49595dd9f25SBram Moolenaar assert_equal('yes', s) 49695dd9f25SBram Moolenaar let b: number = 42 49795dd9f25SBram Moolenaar assert_equal(42, b) 49895dd9f25SBram Moolenaar let w: number = 43 49995dd9f25SBram Moolenaar assert_equal(43, w) 50095dd9f25SBram Moolenaar let t: number = 44 50195dd9f25SBram Moolenaar assert_equal(44, t) 502c7e44a7eSBram Moolenaar END 503c7e44a7eSBram Moolenaar CheckScriptSuccess(lines) 504c7e44a7eSBram Moolenaarenddef 505c7e44a7eSBram Moolenaar 506cab27678SBram Moolenaardef Mess(): string 507cab27678SBram Moolenaar v:foldstart = 123 508cab27678SBram Moolenaar return 'xxx' 509cab27678SBram Moolenaarenddef 510cab27678SBram Moolenaar 511d72c1bf0SBram Moolenaardef Test_assignment_failure() 5128a7d6542SBram Moolenaar call CheckDefFailure(['let var=234'], 'E1004:') 5138a7d6542SBram Moolenaar call CheckDefFailure(['let var =234'], 'E1004:') 5148a7d6542SBram Moolenaar call CheckDefFailure(['let var= 234'], 'E1004:') 5158a7d6542SBram Moolenaar 51663be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var=234'], 'E1004:') 51763be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var=234'], "before and after '='") 51863be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var =234'], 'E1004:') 51963be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var= 234'], 'E1004:') 52063be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var = 234', 'var+=234'], 'E1004:') 52163be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var = 234', 'var+=234'], "before and after '+='") 52263be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var = "x"', 'var..="y"'], 'E1004:') 52363be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var = "x"', 'var..="y"'], "before and after '..='") 52463be3d4bSBram Moolenaar 5258a7d6542SBram Moolenaar call CheckDefFailure(['let true = 1'], 'E1034:') 5268a7d6542SBram Moolenaar call CheckDefFailure(['let false = 1'], 'E1034:') 5278a7d6542SBram Moolenaar 5289b7bf9e9SBram Moolenaar call CheckDefFailure(['[a; b; c] = g:list'], 'E452:') 5299af78769SBram Moolenaar call CheckDefExecFailure(['let a: number', 5309af78769SBram Moolenaar '[a] = test_null_list()'], 'E1093:') 5319af78769SBram Moolenaar call CheckDefExecFailure(['let a: number', 5329af78769SBram Moolenaar '[a] = []'], 'E1093:') 5339af78769SBram Moolenaar call CheckDefExecFailure(['let x: number', 5349af78769SBram Moolenaar 'let y: number', 5359af78769SBram Moolenaar '[x, y] = [1]'], 'E1093:') 5369af78769SBram Moolenaar call CheckDefExecFailure(['let x: number', 5379af78769SBram Moolenaar 'let y: number', 5389af78769SBram Moolenaar 'let z: list<number>', 5399af78769SBram Moolenaar '[x, y; z] = [1]'], 'E1093:') 5409be61bbbSBram Moolenaar 541e69f6d04SBram Moolenaar call CheckDefFailure(['let somevar'], "E1022:") 542c2ee44ccSBram Moolenaar call CheckDefFailure(['let &tabstop = 4'], 'E1052:') 5439be61bbbSBram Moolenaar call CheckDefFailure(['&g:option = 5'], 'E113:') 544c2ee44ccSBram Moolenaar call CheckScriptFailure(['vim9script', 'let &tabstop = 4'], 'E1052:') 5459be61bbbSBram Moolenaar 546e55b1c09SBram Moolenaar call CheckDefFailure(['let $VAR = 5'], 'E1016: Cannot declare an environment variable:') 547c2ee44ccSBram Moolenaar call CheckScriptFailure(['vim9script', 'let $ENV = "xxx"'], 'E1016:') 5489be61bbbSBram Moolenaar 549434d72cbSBram Moolenaar if has('dnd') 55065821727SBram Moolenaar call CheckDefFailure(['let @~ = 5'], 'E1066:') 551434d72cbSBram Moolenaar else 552434d72cbSBram Moolenaar call CheckDefFailure(['let @~ = 5'], 'E354:') 553434d72cbSBram Moolenaar call CheckDefFailure(['@~ = 5'], 'E354:') 554434d72cbSBram Moolenaar endif 5559be61bbbSBram Moolenaar call CheckDefFailure(['let @a = 5'], 'E1066:') 55665821727SBram Moolenaar call CheckDefFailure(['let @/ = "x"'], 'E1066:') 557c2ee44ccSBram Moolenaar call CheckScriptFailure(['vim9script', 'let @a = "abc"'], 'E1066:') 5589be61bbbSBram Moolenaar 559e55b1c09SBram Moolenaar call CheckDefFailure(['let g:var = 5'], 'E1016: Cannot declare a global variable:') 560e55b1c09SBram Moolenaar call CheckDefFailure(['let w:var = 5'], 'E1016: Cannot declare a window variable:') 561e55b1c09SBram Moolenaar call CheckDefFailure(['let b:var = 5'], 'E1016: Cannot declare a buffer variable:') 562e55b1c09SBram Moolenaar call CheckDefFailure(['let t:var = 5'], 'E1016: Cannot declare a tab variable:') 5639be61bbbSBram Moolenaar 5649be61bbbSBram Moolenaar call CheckDefFailure(['let anr = 4', 'anr ..= "text"'], 'E1019:') 5659be61bbbSBram Moolenaar call CheckDefFailure(['let xnr += 4'], 'E1020:') 5669be61bbbSBram Moolenaar 567451c2e35SBram Moolenaar call CheckScriptFailure(['vim9script', 'def Func()', 'let dummy = s:notfound', 'enddef', 'defcompile'], 'E1108:') 56833fa29cfSBram Moolenaar 5698a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<string> = [123]'], 'expected list<string> but got list<number>') 5708a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<number> = ["xx"]'], 'expected list<number> but got list<string>') 5718a7d6542SBram Moolenaar 5728a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<string> = #{key: 123}'], 'expected dict<string> but got dict<number>') 5738a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<number> = #{key: "xx"}'], 'expected dict<number> but got dict<string>') 5748a7d6542SBram Moolenaar 5758a7d6542SBram Moolenaar call CheckDefFailure(['let var = feedkeys("0")'], 'E1031:') 5768a7d6542SBram Moolenaar call CheckDefFailure(['let var: number = feedkeys("0")'], 'expected number but got void') 57742a480bfSBram Moolenaar 578d77a8525SBram Moolenaar call CheckDefFailure(['let var: dict <number>'], 'E1068:') 57942a480bfSBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 580cab27678SBram Moolenaar 581cab27678SBram Moolenaar call assert_fails('s/^/\=Mess()/n', 'E794:') 582cab27678SBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 58343e969d3SBram Moolenaar 58443e969d3SBram Moolenaar call CheckDefFailure(['w:foo: number = 10'], 58543e969d3SBram Moolenaar 'E488: Trailing characters: : number = 1') 58643e969d3SBram Moolenaar call CheckDefFailure(['t:foo: bool = true'], 58743e969d3SBram Moolenaar 'E488: Trailing characters: : bool = true') 58843e969d3SBram Moolenaar call CheckDefFailure(['b:foo: string = "x"'], 58943e969d3SBram Moolenaar 'E488: Trailing characters: : string = "x"') 59043e969d3SBram Moolenaar call CheckDefFailure(['g:foo: number = 123'], 59143e969d3SBram Moolenaar 'E488: Trailing characters: : number = 123') 592d72c1bf0SBram Moolenaarenddef 593d72c1bf0SBram Moolenaar 594d72c1bf0SBram Moolenaardef Test_unlet() 595d72c1bf0SBram Moolenaar g:somevar = 'yes' 596d72c1bf0SBram Moolenaar assert_true(exists('g:somevar')) 597d72c1bf0SBram Moolenaar unlet g:somevar 598d72c1bf0SBram Moolenaar assert_false(exists('g:somevar')) 599d72c1bf0SBram Moolenaar unlet! g:somevar 600d72c1bf0SBram Moolenaar 601d72c1bf0SBram Moolenaar call CheckScriptFailure([ 602d72c1bf0SBram Moolenaar 'vim9script', 603d72c1bf0SBram Moolenaar 'let svar = 123', 604d72c1bf0SBram Moolenaar 'unlet svar', 605d72c1bf0SBram Moolenaar ], 'E1081:') 606d72c1bf0SBram Moolenaar call CheckScriptFailure([ 607d72c1bf0SBram Moolenaar 'vim9script', 608d72c1bf0SBram Moolenaar 'let svar = 123', 609d72c1bf0SBram Moolenaar 'unlet s:svar', 610d72c1bf0SBram Moolenaar ], 'E1081:') 611d72c1bf0SBram Moolenaar call CheckScriptFailure([ 612d72c1bf0SBram Moolenaar 'vim9script', 613d72c1bf0SBram Moolenaar 'let svar = 123', 614d72c1bf0SBram Moolenaar 'def Func()', 615d72c1bf0SBram Moolenaar ' unlet svar', 616d72c1bf0SBram Moolenaar 'enddef', 617822ba247SBram Moolenaar 'defcompile', 618d72c1bf0SBram Moolenaar ], 'E1081:') 619d72c1bf0SBram Moolenaar call CheckScriptFailure([ 620d72c1bf0SBram Moolenaar 'vim9script', 621d72c1bf0SBram Moolenaar 'let svar = 123', 622d72c1bf0SBram Moolenaar 'def Func()', 623d72c1bf0SBram Moolenaar ' unlet s:svar', 624d72c1bf0SBram Moolenaar 'enddef', 625822ba247SBram Moolenaar 'defcompile', 626d72c1bf0SBram Moolenaar ], 'E1081:') 6277bdaea6eSBram Moolenaar 6287bdaea6eSBram Moolenaar $ENVVAR = 'foobar' 6297bdaea6eSBram Moolenaar assert_equal('foobar', $ENVVAR) 6307bdaea6eSBram Moolenaar unlet $ENVVAR 6317bdaea6eSBram Moolenaar assert_equal('', $ENVVAR) 632d72c1bf0SBram Moolenaarenddef 633599c89c8SBram Moolenaar 6344c17ad94SBram Moolenaardef Test_delfunction() 635f5be8cdbSBram Moolenaar # Check function is defined in script namespace 6364c17ad94SBram Moolenaar CheckScriptSuccess([ 6374c17ad94SBram Moolenaar 'vim9script', 6384c17ad94SBram Moolenaar 'func CheckMe()', 6394c17ad94SBram Moolenaar ' return 123', 6404c17ad94SBram Moolenaar 'endfunc', 6414c17ad94SBram Moolenaar 'assert_equal(123, s:CheckMe())', 6424c17ad94SBram Moolenaar ]) 6434c17ad94SBram Moolenaar 644f5be8cdbSBram Moolenaar # Check function in script namespace cannot be deleted 6454c17ad94SBram Moolenaar CheckScriptFailure([ 6464c17ad94SBram Moolenaar 'vim9script', 6474c17ad94SBram Moolenaar 'func DeleteMe1()', 6484c17ad94SBram Moolenaar 'endfunc', 6494c17ad94SBram Moolenaar 'delfunction DeleteMe1', 6504c17ad94SBram Moolenaar ], 'E1084:') 6514c17ad94SBram Moolenaar CheckScriptFailure([ 6524c17ad94SBram Moolenaar 'vim9script', 6534c17ad94SBram Moolenaar 'func DeleteMe2()', 6544c17ad94SBram Moolenaar 'endfunc', 6554c17ad94SBram Moolenaar 'def DoThat()', 6564c17ad94SBram Moolenaar ' delfunction DeleteMe2', 6574c17ad94SBram Moolenaar 'enddef', 6584c17ad94SBram Moolenaar 'DoThat()', 6594c17ad94SBram Moolenaar ], 'E1084:') 6604c17ad94SBram Moolenaar CheckScriptFailure([ 6614c17ad94SBram Moolenaar 'vim9script', 6624c17ad94SBram Moolenaar 'def DeleteMe3()', 6634c17ad94SBram Moolenaar 'enddef', 6644c17ad94SBram Moolenaar 'delfunction DeleteMe3', 6654c17ad94SBram Moolenaar ], 'E1084:') 6664c17ad94SBram Moolenaar CheckScriptFailure([ 6674c17ad94SBram Moolenaar 'vim9script', 6684c17ad94SBram Moolenaar 'def DeleteMe4()', 6694c17ad94SBram Moolenaar 'enddef', 6704c17ad94SBram Moolenaar 'def DoThat()', 6714c17ad94SBram Moolenaar ' delfunction DeleteMe4', 6724c17ad94SBram Moolenaar 'enddef', 6734c17ad94SBram Moolenaar 'DoThat()', 6744c17ad94SBram Moolenaar ], 'E1084:') 675925e9fd6SBram Moolenaar 676925e9fd6SBram Moolenaar # Check that global :def function can be replaced and deleted 677925e9fd6SBram Moolenaar let lines =<< trim END 678925e9fd6SBram Moolenaar vim9script 679925e9fd6SBram Moolenaar def g:Global(): string 680925e9fd6SBram Moolenaar return "yes" 681925e9fd6SBram Moolenaar enddef 682925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 683925e9fd6SBram Moolenaar def! g:Global(): string 684925e9fd6SBram Moolenaar return "no" 685925e9fd6SBram Moolenaar enddef 686925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 687925e9fd6SBram Moolenaar delfunc g:Global 688925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 689925e9fd6SBram Moolenaar END 690925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 691925e9fd6SBram Moolenaar 692925e9fd6SBram Moolenaar # Check that global function can be replaced by a :def function and deleted 693925e9fd6SBram Moolenaar lines =<< trim END 694925e9fd6SBram Moolenaar vim9script 695925e9fd6SBram Moolenaar func g:Global() 696925e9fd6SBram Moolenaar return "yes" 697925e9fd6SBram Moolenaar endfunc 698925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 699925e9fd6SBram Moolenaar def! g:Global(): string 700925e9fd6SBram Moolenaar return "no" 701925e9fd6SBram Moolenaar enddef 702925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 703925e9fd6SBram Moolenaar delfunc g:Global 704925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 705925e9fd6SBram Moolenaar END 706925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 707925e9fd6SBram Moolenaar 708925e9fd6SBram Moolenaar # Check that global :def function can be replaced by a function and deleted 709925e9fd6SBram Moolenaar lines =<< trim END 710925e9fd6SBram Moolenaar vim9script 711925e9fd6SBram Moolenaar def g:Global(): string 712925e9fd6SBram Moolenaar return "yes" 713925e9fd6SBram Moolenaar enddef 714925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 715925e9fd6SBram Moolenaar func! g:Global() 716925e9fd6SBram Moolenaar return "no" 717925e9fd6SBram Moolenaar endfunc 718925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 719925e9fd6SBram Moolenaar delfunc g:Global 720925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 721925e9fd6SBram Moolenaar END 722925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 7234c17ad94SBram Moolenaarenddef 7244c17ad94SBram Moolenaar 725599c89c8SBram Moolenaarfunc Test_wrong_type() 726599c89c8SBram Moolenaar call CheckDefFailure(['let var: list<nothing>'], 'E1010:') 727599c89c8SBram Moolenaar call CheckDefFailure(['let var: list<list<nothing>>'], 'E1010:') 728599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<nothing>'], 'E1010:') 729599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<dict<nothing>>'], 'E1010:') 730599c89c8SBram Moolenaar 731599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 732599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<list<number>'], 'E1009:') 73342a480bfSBram Moolenaar 73442a480bfSBram Moolenaar call CheckDefFailure(['let var: ally'], 'E1010:') 73542a480bfSBram Moolenaar call CheckDefFailure(['let var: bram'], 'E1010:') 73642a480bfSBram Moolenaar call CheckDefFailure(['let var: cathy'], 'E1010:') 73742a480bfSBram Moolenaar call CheckDefFailure(['let var: dom'], 'E1010:') 73842a480bfSBram Moolenaar call CheckDefFailure(['let var: freddy'], 'E1010:') 73942a480bfSBram Moolenaar call CheckDefFailure(['let var: john'], 'E1010:') 74042a480bfSBram Moolenaar call CheckDefFailure(['let var: larry'], 'E1010:') 74142a480bfSBram Moolenaar call CheckDefFailure(['let var: ned'], 'E1010:') 74242a480bfSBram Moolenaar call CheckDefFailure(['let var: pam'], 'E1010:') 74342a480bfSBram Moolenaar call CheckDefFailure(['let var: sam'], 'E1010:') 74442a480bfSBram Moolenaar call CheckDefFailure(['let var: vim'], 'E1010:') 745a0a9f43aSBram Moolenaar 746a0a9f43aSBram Moolenaar call CheckDefFailure(['let Ref: number', 'Ref()'], 'E1085:') 747a0a9f43aSBram Moolenaar call CheckDefFailure(['let Ref: string', 'let res = Ref()'], 'E1085:') 7488a7d6542SBram Moolenaarendfunc 7498a7d6542SBram Moolenaar 7508a7d6542SBram Moolenaarfunc Test_const() 7518a7d6542SBram Moolenaar call CheckDefFailure(['const var = 234', 'var = 99'], 'E1018:') 7528a7d6542SBram Moolenaar call CheckDefFailure(['const one = 234', 'let one = 99'], 'E1017:') 7538a7d6542SBram Moolenaar call CheckDefFailure(['const two'], 'E1021:') 7549be61bbbSBram Moolenaar call CheckDefFailure(['const &option'], 'E996:') 7558a7d6542SBram Moolenaarendfunc 7568a7d6542SBram Moolenaar 757df069eecSBram Moolenaardef Test_range_no_colon() 758df069eecSBram Moolenaar call CheckDefFailure(['%s/a/b/'], 'E1050:') 759df069eecSBram Moolenaar call CheckDefFailure(['+ s/a/b/'], 'E1050:') 760df069eecSBram Moolenaar call CheckDefFailure(['- s/a/b/'], 'E1050:') 761df069eecSBram Moolenaar call CheckDefFailure(['. s/a/b/'], 'E1050:') 762df069eecSBram Moolenaarenddef 763df069eecSBram Moolenaar 764df069eecSBram Moolenaar 7658a7d6542SBram Moolenaardef Test_block() 7668a7d6542SBram Moolenaar let outer = 1 7678a7d6542SBram Moolenaar { 7688a7d6542SBram Moolenaar let inner = 2 7698a7d6542SBram Moolenaar assert_equal(1, outer) 7708a7d6542SBram Moolenaar assert_equal(2, inner) 7718a7d6542SBram Moolenaar } 7728a7d6542SBram Moolenaar assert_equal(1, outer) 7738a7d6542SBram Moolenaarenddef 7748a7d6542SBram Moolenaar 7758a7d6542SBram Moolenaarfunc Test_block_failure() 7768a7d6542SBram Moolenaar call CheckDefFailure(['{', 'let inner = 1', '}', 'echo inner'], 'E1001:') 777585fea7bSBram Moolenaar call CheckDefFailure(['}'], 'E1025:') 778585fea7bSBram Moolenaar call CheckDefFailure(['{', 'echo 1'], 'E1026:') 7798a7d6542SBram Moolenaarendfunc 7808a7d6542SBram Moolenaar 781d032f34aSBram Moolenaarfunc g:NoSuchFunc() 782d032f34aSBram Moolenaar echo 'none' 783d032f34aSBram Moolenaarendfunc 784d032f34aSBram Moolenaar 7858a7d6542SBram Moolenaardef Test_try_catch() 7868a7d6542SBram Moolenaar let l = [] 7877a092245SBram Moolenaar try # comment 7888a7d6542SBram Moolenaar add(l, '1') 7898a7d6542SBram Moolenaar throw 'wrong' 7908a7d6542SBram Moolenaar add(l, '2') 7917a092245SBram Moolenaar catch # comment 7928a7d6542SBram Moolenaar add(l, v:exception) 7937a092245SBram Moolenaar finally # comment 7948a7d6542SBram Moolenaar add(l, '3') 7957a092245SBram Moolenaar endtry # comment 7968a7d6542SBram Moolenaar assert_equal(['1', 'wrong', '3'], l) 79768d130c6SBram Moolenaar 798e859312eSBram Moolenaar l = [] 799e859312eSBram Moolenaar try 800e859312eSBram Moolenaar try 801e859312eSBram Moolenaar add(l, '1') 802e859312eSBram Moolenaar throw 'wrong' 803e859312eSBram Moolenaar add(l, '2') 804e859312eSBram Moolenaar catch /right/ 805e859312eSBram Moolenaar add(l, v:exception) 806e859312eSBram Moolenaar endtry 807e859312eSBram Moolenaar catch /wrong/ 808e859312eSBram Moolenaar add(l, 'caught') 809e859312eSBram Moolenaar finally 810e859312eSBram Moolenaar add(l, 'finally') 811e859312eSBram Moolenaar endtry 812e859312eSBram Moolenaar assert_equal(['1', 'caught', 'finally'], l) 813e859312eSBram Moolenaar 81468d130c6SBram Moolenaar let n: number 81568d130c6SBram Moolenaar try 81668d130c6SBram Moolenaar n = l[3] 81768d130c6SBram Moolenaar catch /E684:/ 81868d130c6SBram Moolenaar n = 99 81968d130c6SBram Moolenaar endtry 82068d130c6SBram Moolenaar assert_equal(99, n) 82168d130c6SBram Moolenaar 82268d130c6SBram Moolenaar try 823cc673e74SBram Moolenaar # string slice returns a string, not a number 82468d130c6SBram Moolenaar n = g:astring[3] 82556acb094SBram Moolenaar catch /E1029:/ 82668d130c6SBram Moolenaar n = 77 82768d130c6SBram Moolenaar endtry 82868d130c6SBram Moolenaar assert_equal(77, n) 82968d130c6SBram Moolenaar 83068d130c6SBram Moolenaar try 83168d130c6SBram Moolenaar n = l[g:astring] 83256acb094SBram Moolenaar catch /E1029:/ 83356acb094SBram Moolenaar n = 88 83468d130c6SBram Moolenaar endtry 83556acb094SBram Moolenaar assert_equal(88, n) 83668d130c6SBram Moolenaar 83768d130c6SBram Moolenaar try 83868d130c6SBram Moolenaar n = s:does_not_exist 83968d130c6SBram Moolenaar catch /E121:/ 840f0b9f43cSBram Moolenaar n = 111 841f0b9f43cSBram Moolenaar endtry 842f0b9f43cSBram Moolenaar assert_equal(111, n) 843f0b9f43cSBram Moolenaar 844f0b9f43cSBram Moolenaar try 845f0b9f43cSBram Moolenaar n = g:does_not_exist 846f0b9f43cSBram Moolenaar catch /E121:/ 84768d130c6SBram Moolenaar n = 121 84868d130c6SBram Moolenaar endtry 84968d130c6SBram Moolenaar assert_equal(121, n) 85068d130c6SBram Moolenaar 85168d130c6SBram Moolenaar let d = #{one: 1} 85268d130c6SBram Moolenaar try 85368d130c6SBram Moolenaar n = d[g:astring] 85468d130c6SBram Moolenaar catch /E716:/ 85568d130c6SBram Moolenaar n = 222 85668d130c6SBram Moolenaar endtry 85768d130c6SBram Moolenaar assert_equal(222, n) 858f0b9f43cSBram Moolenaar 859f0b9f43cSBram Moolenaar try 860f0b9f43cSBram Moolenaar n = -g:astring 861f0b9f43cSBram Moolenaar catch /E39:/ 862f0b9f43cSBram Moolenaar n = 233 863f0b9f43cSBram Moolenaar endtry 864f0b9f43cSBram Moolenaar assert_equal(233, n) 865f0b9f43cSBram Moolenaar 866f0b9f43cSBram Moolenaar try 867f0b9f43cSBram Moolenaar n = +g:astring 868f0b9f43cSBram Moolenaar catch /E1030:/ 869f0b9f43cSBram Moolenaar n = 244 870f0b9f43cSBram Moolenaar endtry 871f0b9f43cSBram Moolenaar assert_equal(244, n) 872f0b9f43cSBram Moolenaar 873f0b9f43cSBram Moolenaar try 874f0b9f43cSBram Moolenaar n = +g:alist 875f0b9f43cSBram Moolenaar catch /E745:/ 876f0b9f43cSBram Moolenaar n = 255 877f0b9f43cSBram Moolenaar endtry 878f0b9f43cSBram Moolenaar assert_equal(255, n) 879f0b9f43cSBram Moolenaar 880f0b9f43cSBram Moolenaar let nd: dict<any> 881f0b9f43cSBram Moolenaar try 882f0b9f43cSBram Moolenaar nd = {g:anumber: 1} 883f0b9f43cSBram Moolenaar catch /E1029:/ 884f0b9f43cSBram Moolenaar n = 266 885f0b9f43cSBram Moolenaar endtry 886f0b9f43cSBram Moolenaar assert_equal(266, n) 887f0b9f43cSBram Moolenaar 888f0b9f43cSBram Moolenaar try 889f0b9f43cSBram Moolenaar [n] = [1, 2, 3] 890f0b9f43cSBram Moolenaar catch /E1093:/ 891f0b9f43cSBram Moolenaar n = 277 892f0b9f43cSBram Moolenaar endtry 893f0b9f43cSBram Moolenaar assert_equal(277, n) 894f0b9f43cSBram Moolenaar 895e859312eSBram Moolenaar try 896e859312eSBram Moolenaar &ts = g:astring 897e859312eSBram Moolenaar catch /E1029:/ 898e859312eSBram Moolenaar n = 288 899e859312eSBram Moolenaar endtry 900e859312eSBram Moolenaar assert_equal(288, n) 901e859312eSBram Moolenaar 902e859312eSBram Moolenaar try 903e859312eSBram Moolenaar &backspace = 'asdf' 904e859312eSBram Moolenaar catch /E474:/ 905e859312eSBram Moolenaar n = 299 906e859312eSBram Moolenaar endtry 907e859312eSBram Moolenaar assert_equal(299, n) 908e859312eSBram Moolenaar 909e859312eSBram Moolenaar l = [1] 910e859312eSBram Moolenaar try 911e859312eSBram Moolenaar l[3] = 3 912e859312eSBram Moolenaar catch /E684:/ 913e859312eSBram Moolenaar n = 300 914e859312eSBram Moolenaar endtry 915e859312eSBram Moolenaar assert_equal(300, n) 916e859312eSBram Moolenaar 917e859312eSBram Moolenaar try 918e859312eSBram Moolenaar unlet g:does_not_exist 919e859312eSBram Moolenaar catch /E108:/ 920e859312eSBram Moolenaar n = 322 921e859312eSBram Moolenaar endtry 922e859312eSBram Moolenaar assert_equal(322, n) 923e859312eSBram Moolenaar 924e859312eSBram Moolenaar try 925e859312eSBram Moolenaar d = {'text': 1, g:astring: 2} 926e859312eSBram Moolenaar catch /E721:/ 927e859312eSBram Moolenaar n = 333 928e859312eSBram Moolenaar endtry 929e859312eSBram Moolenaar assert_equal(333, n) 930e859312eSBram Moolenaar 931e859312eSBram Moolenaar try 932e859312eSBram Moolenaar l = DeletedFunc() 933e859312eSBram Moolenaar catch /E933:/ 934e859312eSBram Moolenaar n = 344 935e859312eSBram Moolenaar endtry 936e859312eSBram Moolenaar assert_equal(344, n) 937d032f34aSBram Moolenaar 938d032f34aSBram Moolenaar try 939d032f34aSBram Moolenaar echo len(v:true) 940d032f34aSBram Moolenaar catch /E701:/ 941d032f34aSBram Moolenaar n = 355 942d032f34aSBram Moolenaar endtry 943d032f34aSBram Moolenaar assert_equal(355, n) 944d032f34aSBram Moolenaar 945d032f34aSBram Moolenaar let P = function('g:NoSuchFunc') 946d032f34aSBram Moolenaar delfunc g:NoSuchFunc 947d032f34aSBram Moolenaar try 948d032f34aSBram Moolenaar echo P() 949d032f34aSBram Moolenaar catch /E117:/ 950d032f34aSBram Moolenaar n = 366 951d032f34aSBram Moolenaar endtry 952d032f34aSBram Moolenaar assert_equal(366, n) 953d032f34aSBram Moolenaar 954d032f34aSBram Moolenaar try 955d032f34aSBram Moolenaar echo g:NoSuchFunc() 956d032f34aSBram Moolenaar catch /E117:/ 957d032f34aSBram Moolenaar n = 377 958d032f34aSBram Moolenaar endtry 959d032f34aSBram Moolenaar assert_equal(377, n) 960d032f34aSBram Moolenaar 961d032f34aSBram Moolenaar try 962d032f34aSBram Moolenaar echo g:alist + 4 963d032f34aSBram Moolenaar catch /E745:/ 964d032f34aSBram Moolenaar n = 388 965d032f34aSBram Moolenaar endtry 966d032f34aSBram Moolenaar assert_equal(388, n) 967d032f34aSBram Moolenaar 968d032f34aSBram Moolenaar try 969d032f34aSBram Moolenaar echo 4 + g:alist 970d032f34aSBram Moolenaar catch /E745:/ 971d032f34aSBram Moolenaar n = 399 972d032f34aSBram Moolenaar endtry 973d032f34aSBram Moolenaar assert_equal(399, n) 974d032f34aSBram Moolenaar 975d032f34aSBram Moolenaar try 976d032f34aSBram Moolenaar echo g:alist.member 977d032f34aSBram Moolenaar catch /E715:/ 978d032f34aSBram Moolenaar n = 400 979d032f34aSBram Moolenaar endtry 980d032f34aSBram Moolenaar assert_equal(400, n) 981d032f34aSBram Moolenaar 982d032f34aSBram Moolenaar try 983d032f34aSBram Moolenaar echo d.member 984d032f34aSBram Moolenaar catch /E716:/ 985d032f34aSBram Moolenaar n = 411 986d032f34aSBram Moolenaar endtry 987d032f34aSBram Moolenaar assert_equal(411, n) 9888a7d6542SBram Moolenaarenddef 9898a7d6542SBram Moolenaar 990e859312eSBram Moolenaardef DeletedFunc(): list<any> 991e859312eSBram Moolenaar return ['delete me'] 992e859312eSBram Moolenaarenddef 993e859312eSBram Moolenaardefcompile 994e859312eSBram Moolenaardelfunc DeletedFunc 995e859312eSBram Moolenaar 996257cc5eeSBram Moolenaardef ThrowFromDef() 997a72cfb80SBram Moolenaar throw "getout" # comment 998257cc5eeSBram Moolenaarenddef 999257cc5eeSBram Moolenaar 1000257cc5eeSBram Moolenaarfunc CatchInFunc() 1001257cc5eeSBram Moolenaar try 1002257cc5eeSBram Moolenaar call ThrowFromDef() 1003257cc5eeSBram Moolenaar catch 1004257cc5eeSBram Moolenaar let g:thrown_func = v:exception 1005257cc5eeSBram Moolenaar endtry 1006257cc5eeSBram Moolenaarendfunc 1007257cc5eeSBram Moolenaar 1008257cc5eeSBram Moolenaardef CatchInDef() 1009257cc5eeSBram Moolenaar try 1010257cc5eeSBram Moolenaar ThrowFromDef() 1011257cc5eeSBram Moolenaar catch 1012257cc5eeSBram Moolenaar g:thrown_def = v:exception 1013257cc5eeSBram Moolenaar endtry 1014257cc5eeSBram Moolenaarenddef 1015257cc5eeSBram Moolenaar 1016f575adffSBram Moolenaardef ReturnFinally(): string 1017f575adffSBram Moolenaar try 1018f575adffSBram Moolenaar return 'intry' 1019f575adffSBram Moolenaar finally 1020f575adffSBram Moolenaar g:in_finally = 'finally' 1021f575adffSBram Moolenaar endtry 1022f575adffSBram Moolenaar return 'end' 1023f575adffSBram Moolenaarenddef 1024f575adffSBram Moolenaar 1025257cc5eeSBram Moolenaardef Test_try_catch_nested() 1026257cc5eeSBram Moolenaar CatchInFunc() 1027257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_func) 1028257cc5eeSBram Moolenaar 1029257cc5eeSBram Moolenaar CatchInDef() 1030257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_def) 1031f575adffSBram Moolenaar 1032f575adffSBram Moolenaar assert_equal('intry', ReturnFinally()) 1033f575adffSBram Moolenaar assert_equal('finally', g:in_finally) 1034f575adffSBram Moolenaarenddef 1035f575adffSBram Moolenaar 1036f575adffSBram Moolenaardef Test_try_catch_match() 1037f575adffSBram Moolenaar let seq = 'a' 1038f575adffSBram Moolenaar try 1039f575adffSBram Moolenaar throw 'something' 1040f575adffSBram Moolenaar catch /nothing/ 1041f575adffSBram Moolenaar seq ..= 'x' 1042f575adffSBram Moolenaar catch /some/ 1043f575adffSBram Moolenaar seq ..= 'b' 1044f575adffSBram Moolenaar catch /asdf/ 1045f575adffSBram Moolenaar seq ..= 'x' 1046e8c4abbbSBram Moolenaar catch ?a\?sdf? 1047e8c4abbbSBram Moolenaar seq ..= 'y' 1048f575adffSBram Moolenaar finally 1049f575adffSBram Moolenaar seq ..= 'c' 1050f575adffSBram Moolenaar endtry 1051f575adffSBram Moolenaar assert_equal('abc', seq) 1052257cc5eeSBram Moolenaarenddef 1053257cc5eeSBram Moolenaar 1054e8c4abbbSBram Moolenaardef Test_try_catch_fails() 1055e8c4abbbSBram Moolenaar call CheckDefFailure(['catch'], 'E603:') 1056e8c4abbbSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'catch', 'catch'], 'E1033:') 1057e8c4abbbSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'catch /pat'], 'E1067:') 1058585fea7bSBram Moolenaar call CheckDefFailure(['finally'], 'E606:') 1059585fea7bSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'finally', 'echo 1', 'finally'], 'E607:') 1060585fea7bSBram Moolenaar call CheckDefFailure(['endtry'], 'E602:') 1061585fea7bSBram Moolenaar call CheckDefFailure(['while 1', 'endtry'], 'E170:') 1062585fea7bSBram Moolenaar call CheckDefFailure(['for i in range(5)', 'endtry'], 'E170:') 1063585fea7bSBram Moolenaar call CheckDefFailure(['if 2', 'endtry'], 'E171:') 1064585fea7bSBram Moolenaar call CheckDefFailure(['try', 'echo 1', 'endtry'], 'E1032:') 1065585fea7bSBram Moolenaar 1066a72cfb80SBram Moolenaar call CheckDefFailure(['throw'], 'E1015:') 1067585fea7bSBram Moolenaar call CheckDefFailure(['throw xxx'], 'E1001:') 1068e8c4abbbSBram Moolenaarenddef 1069e8c4abbbSBram Moolenaar 1070006ad48bSBram Moolenaardef Test_throw_vimscript() 1071f5be8cdbSBram Moolenaar # only checks line continuation 1072006ad48bSBram Moolenaar let lines =<< trim END 1073006ad48bSBram Moolenaar vim9script 1074006ad48bSBram Moolenaar try 1075006ad48bSBram Moolenaar throw 'one' 1076006ad48bSBram Moolenaar .. 'two' 1077006ad48bSBram Moolenaar catch 1078006ad48bSBram Moolenaar assert_equal('onetwo', v:exception) 1079006ad48bSBram Moolenaar endtry 1080006ad48bSBram Moolenaar END 1081006ad48bSBram Moolenaar CheckScriptSuccess(lines) 1082006ad48bSBram Moolenaarenddef 1083006ad48bSBram Moolenaar 1084ed677f55SBram Moolenaardef Test_error_in_nested_function() 1085ed677f55SBram Moolenaar # an error in a nested :function aborts executin in the calling :def function 1086ed677f55SBram Moolenaar let lines =<< trim END 1087ed677f55SBram Moolenaar vim9script 1088ed677f55SBram Moolenaar def Func() 1089ed677f55SBram Moolenaar Error() 1090ed677f55SBram Moolenaar g:test_var = 1 1091ed677f55SBram Moolenaar enddef 1092ed677f55SBram Moolenaar func Error() abort 1093ed677f55SBram Moolenaar eval [][0] 1094ed677f55SBram Moolenaar endfunc 1095ed677f55SBram Moolenaar Func() 1096ed677f55SBram Moolenaar END 1097ed677f55SBram Moolenaar g:test_var = 0 1098ed677f55SBram Moolenaar CheckScriptFailure(lines, 'E684:') 1099ed677f55SBram Moolenaar assert_equal(0, g:test_var) 1100ed677f55SBram Moolenaarenddef 1101ed677f55SBram Moolenaar 110237c83711SBram Moolenaardef Test_cexpr_vimscript() 1103f5be8cdbSBram Moolenaar # only checks line continuation 110437c83711SBram Moolenaar set errorformat=File\ %f\ line\ %l 110537c83711SBram Moolenaar let lines =<< trim END 110637c83711SBram Moolenaar vim9script 110737c83711SBram Moolenaar cexpr 'File' 110837c83711SBram Moolenaar .. ' someFile' .. 110937c83711SBram Moolenaar ' line 19' 111037c83711SBram Moolenaar assert_equal(19, getqflist()[0].lnum) 111137c83711SBram Moolenaar END 111237c83711SBram Moolenaar CheckScriptSuccess(lines) 111337c83711SBram Moolenaar set errorformat& 111437c83711SBram Moolenaarenddef 111537c83711SBram Moolenaar 1116c9edd6b5SBram Moolenaardef Test_statusline_syntax() 1117c9edd6b5SBram Moolenaar # legacy syntax is used for 'statusline' 1118c9edd6b5SBram Moolenaar let lines =<< trim END 1119c9edd6b5SBram Moolenaar vim9script 1120c9edd6b5SBram Moolenaar func g:Status() 1121c9edd6b5SBram Moolenaar return '%{"x" is# "x"}' 1122c9edd6b5SBram Moolenaar endfunc 1123c9edd6b5SBram Moolenaar set laststatus=2 statusline=%!Status() 1124c9edd6b5SBram Moolenaar redrawstatus 1125c9edd6b5SBram Moolenaar set laststatus statusline= 1126c9edd6b5SBram Moolenaar END 1127c9edd6b5SBram Moolenaar CheckScriptSuccess(lines) 1128c9edd6b5SBram Moolenaarenddef 1129c9edd6b5SBram Moolenaar 1130b209750bSBram Moolenaardef Test_list_vimscript() 1131b209750bSBram Moolenaar # checks line continuation and comments 1132b209750bSBram Moolenaar let lines =<< trim END 1133b209750bSBram Moolenaar vim9script 1134b209750bSBram Moolenaar let mylist = [ 1135b209750bSBram Moolenaar 'one', 1136b209750bSBram Moolenaar # comment 1137b209750bSBram Moolenaar 'two', # empty line follows 1138b209750bSBram Moolenaar 1139b209750bSBram Moolenaar 'three', 1140b209750bSBram Moolenaar ] 1141b209750bSBram Moolenaar assert_equal(['one', 'two', 'three'], mylist) 1142b209750bSBram Moolenaar END 1143b209750bSBram Moolenaar CheckScriptSuccess(lines) 1144b209750bSBram Moolenaarenddef 1145b209750bSBram Moolenaar 11462a1381c3SBram Moolenaarif has('channel') 114740ee466cSBram Moolenaar let someJob = test_null_job() 114840ee466cSBram Moolenaar 114940ee466cSBram Moolenaar def FuncWithError() 115040ee466cSBram Moolenaar echomsg g:someJob 115140ee466cSBram Moolenaar enddef 115240ee466cSBram Moolenaar 115340ee466cSBram Moolenaar func Test_convert_emsg_to_exception() 115440ee466cSBram Moolenaar try 115540ee466cSBram Moolenaar call FuncWithError() 115640ee466cSBram Moolenaar catch 115740ee466cSBram Moolenaar call assert_match('Vim:E908:', v:exception) 115840ee466cSBram Moolenaar endtry 115940ee466cSBram Moolenaar endfunc 11602a1381c3SBram Moolenaarendif 116140ee466cSBram Moolenaar 11628a7d6542SBram Moolenaarlet s:export_script_lines =<< trim END 11638a7d6542SBram Moolenaar vim9script 11648a7d6542SBram Moolenaar let name: string = 'bob' 11658a7d6542SBram Moolenaar def Concat(arg: string): string 11668a7d6542SBram Moolenaar return name .. arg 11678a7d6542SBram Moolenaar enddef 1168227a69deSBram Moolenaar g:result = Concat('bie') 1169227a69deSBram Moolenaar g:localname = name 11708a7d6542SBram Moolenaar 11718a7d6542SBram Moolenaar export const CONST = 1234 11728a7d6542SBram Moolenaar export let exported = 9876 11736e587dcbSBram Moolenaar export let exp_name = 'John' 11748a7d6542SBram Moolenaar export def Exported(): string 11758a7d6542SBram Moolenaar return 'Exported' 11768a7d6542SBram Moolenaar enddef 11778a7d6542SBram MoolenaarEND 11788a7d6542SBram Moolenaar 1179b3ca9824SBram Moolenaardef Undo_export_script_lines() 1180b3ca9824SBram Moolenaar unlet g:result 1181b3ca9824SBram Moolenaar unlet g:localname 1182b3ca9824SBram Moolenaarenddef 1183b3ca9824SBram Moolenaar 11845269bd2aSBram Moolenaardef Test_vim9_import_export() 11858a7d6542SBram Moolenaar let import_script_lines =<< trim END 11868a7d6542SBram Moolenaar vim9script 11878a7d6542SBram Moolenaar import {exported, Exported} from './Xexport.vim' 11888a7d6542SBram Moolenaar g:imported = exported 11896e587dcbSBram Moolenaar exported += 3 11906e587dcbSBram Moolenaar g:imported_added = exported 11918a7d6542SBram Moolenaar g:imported_func = Exported() 11926e587dcbSBram Moolenaar 119340f4f7a4SBram Moolenaar def GetExported(): string 119440f4f7a4SBram Moolenaar let local_dict = #{ref: Exported} 119540f4f7a4SBram Moolenaar return local_dict.ref() 119640f4f7a4SBram Moolenaar enddef 119740f4f7a4SBram Moolenaar g:funcref_result = GetExported() 119840f4f7a4SBram Moolenaar 11996e587dcbSBram Moolenaar import {exp_name} from './Xexport.vim' 12006e587dcbSBram Moolenaar g:imported_name = exp_name 12016e587dcbSBram Moolenaar exp_name ..= ' Doe' 12026e587dcbSBram Moolenaar g:imported_name_appended = exp_name 12035381c7a1SBram Moolenaar g:imported_later = exported 12048a7d6542SBram Moolenaar END 12058a7d6542SBram Moolenaar 12068a7d6542SBram Moolenaar writefile(import_script_lines, 'Ximport.vim') 12078a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport.vim') 12088a7d6542SBram Moolenaar 12098a7d6542SBram Moolenaar source Ximport.vim 12108a7d6542SBram Moolenaar 12118a7d6542SBram Moolenaar assert_equal('bobbie', g:result) 12128a7d6542SBram Moolenaar assert_equal('bob', g:localname) 12138a7d6542SBram Moolenaar assert_equal(9876, g:imported) 12146e587dcbSBram Moolenaar assert_equal(9879, g:imported_added) 12155381c7a1SBram Moolenaar assert_equal(9879, g:imported_later) 12168a7d6542SBram Moolenaar assert_equal('Exported', g:imported_func) 121740f4f7a4SBram Moolenaar assert_equal('Exported', g:funcref_result) 12186e587dcbSBram Moolenaar assert_equal('John', g:imported_name) 12196e587dcbSBram Moolenaar assert_equal('John Doe', g:imported_name_appended) 12208a7d6542SBram Moolenaar assert_false(exists('g:name')) 12218a7d6542SBram Moolenaar 1222b3ca9824SBram Moolenaar Undo_export_script_lines() 12238a7d6542SBram Moolenaar unlet g:imported 12246e587dcbSBram Moolenaar unlet g:imported_added 12255381c7a1SBram Moolenaar unlet g:imported_later 12268a7d6542SBram Moolenaar unlet g:imported_func 12276e587dcbSBram Moolenaar unlet g:imported_name g:imported_name_appended 12288a7d6542SBram Moolenaar delete('Ximport.vim') 1229f2d5c240SBram Moolenaar 12301c991144SBram Moolenaar # similar, with line breaks 12311c991144SBram Moolenaar let import_line_break_script_lines =<< trim END 12321c991144SBram Moolenaar vim9script 12331c991144SBram Moolenaar import { 12341c991144SBram Moolenaar exported, 12351c991144SBram Moolenaar Exported, 12361c991144SBram Moolenaar } 12371c991144SBram Moolenaar from 12381c991144SBram Moolenaar './Xexport.vim' 12391c991144SBram Moolenaar g:imported = exported 12401c991144SBram Moolenaar exported += 5 12411c991144SBram Moolenaar g:imported_added = exported 12421c991144SBram Moolenaar g:imported_func = Exported() 12431c991144SBram Moolenaar END 12441c991144SBram Moolenaar writefile(import_line_break_script_lines, 'Ximport_lbr.vim') 12451c991144SBram Moolenaar source Ximport_lbr.vim 12461c991144SBram Moolenaar 12471c991144SBram Moolenaar assert_equal(9876, g:imported) 12481c991144SBram Moolenaar assert_equal(9881, g:imported_added) 12491c991144SBram Moolenaar assert_equal('Exported', g:imported_func) 12501c991144SBram Moolenaar 12511c991144SBram Moolenaar # exported script not sourced again 12521c991144SBram Moolenaar assert_false(exists('g:result')) 12531c991144SBram Moolenaar unlet g:imported 12541c991144SBram Moolenaar unlet g:imported_added 12551c991144SBram Moolenaar unlet g:imported_func 12561c991144SBram Moolenaar delete('Ximport_lbr.vim') 12571c991144SBram Moolenaar 12581c991144SBram Moolenaar # import inside :def function 12595381c7a1SBram Moolenaar let import_in_def_lines =<< trim END 12605381c7a1SBram Moolenaar vim9script 12615381c7a1SBram Moolenaar def ImportInDef() 12625381c7a1SBram Moolenaar import exported from './Xexport.vim' 12635381c7a1SBram Moolenaar g:imported = exported 12645381c7a1SBram Moolenaar exported += 7 12655381c7a1SBram Moolenaar g:imported_added = exported 12665381c7a1SBram Moolenaar enddef 12675381c7a1SBram Moolenaar ImportInDef() 12685381c7a1SBram Moolenaar END 12695381c7a1SBram Moolenaar writefile(import_in_def_lines, 'Ximport2.vim') 12705381c7a1SBram Moolenaar source Ximport2.vim 1271f5be8cdbSBram Moolenaar # TODO: this should be 9879 12725381c7a1SBram Moolenaar assert_equal(9876, g:imported) 12735381c7a1SBram Moolenaar assert_equal(9883, g:imported_added) 12745381c7a1SBram Moolenaar unlet g:imported 12755381c7a1SBram Moolenaar unlet g:imported_added 12765381c7a1SBram Moolenaar delete('Ximport2.vim') 12775381c7a1SBram Moolenaar 1278f2d5c240SBram Moolenaar let import_star_as_lines =<< trim END 1279f2d5c240SBram Moolenaar vim9script 1280f2d5c240SBram Moolenaar import * as Export from './Xexport.vim' 1281f2d5c240SBram Moolenaar def UseExport() 1282f2d5c240SBram Moolenaar g:imported = Export.exported 1283f2d5c240SBram Moolenaar enddef 1284f2d5c240SBram Moolenaar UseExport() 1285f2d5c240SBram Moolenaar END 1286f2d5c240SBram Moolenaar writefile(import_star_as_lines, 'Ximport.vim') 1287f2d5c240SBram Moolenaar source Ximport.vim 12885381c7a1SBram Moolenaar assert_equal(9883, g:imported) 1289f2d5c240SBram Moolenaar 1290599c89c8SBram Moolenaar let import_star_as_lines_no_dot =<< trim END 1291599c89c8SBram Moolenaar vim9script 1292599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 1293599c89c8SBram Moolenaar def Func() 1294599c89c8SBram Moolenaar let dummy = 1 1295599c89c8SBram Moolenaar let imported = Export + dummy 1296599c89c8SBram Moolenaar enddef 1297822ba247SBram Moolenaar defcompile 1298599c89c8SBram Moolenaar END 1299599c89c8SBram Moolenaar writefile(import_star_as_lines_no_dot, 'Ximport.vim') 1300599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1060:') 1301599c89c8SBram Moolenaar 1302599c89c8SBram Moolenaar let import_star_as_lines_dot_space =<< trim END 1303599c89c8SBram Moolenaar vim9script 1304599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 1305599c89c8SBram Moolenaar def Func() 1306599c89c8SBram Moolenaar let imported = Export . exported 1307599c89c8SBram Moolenaar enddef 1308822ba247SBram Moolenaar defcompile 1309599c89c8SBram Moolenaar END 1310599c89c8SBram Moolenaar writefile(import_star_as_lines_dot_space, 'Ximport.vim') 1311599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1074:') 1312599c89c8SBram Moolenaar 1313599c89c8SBram Moolenaar let import_star_as_lines_missing_name =<< trim END 1314599c89c8SBram Moolenaar vim9script 1315599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 1316599c89c8SBram Moolenaar def Func() 1317599c89c8SBram Moolenaar let imported = Export. 1318599c89c8SBram Moolenaar enddef 1319822ba247SBram Moolenaar defcompile 1320599c89c8SBram Moolenaar END 1321599c89c8SBram Moolenaar writefile(import_star_as_lines_missing_name, 'Ximport.vim') 1322599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 1323599c89c8SBram Moolenaar 13241c991144SBram Moolenaar let import_star_as_lbr_lines =<< trim END 13251c991144SBram Moolenaar vim9script 13261c991144SBram Moolenaar import * 13271c991144SBram Moolenaar as Export 13281c991144SBram Moolenaar from 13291c991144SBram Moolenaar './Xexport.vim' 13301c991144SBram Moolenaar def UseExport() 13311c991144SBram Moolenaar g:imported = Export.exported 13321c991144SBram Moolenaar enddef 13331c991144SBram Moolenaar UseExport() 13341c991144SBram Moolenaar END 13351c991144SBram Moolenaar writefile(import_star_as_lbr_lines, 'Ximport.vim') 13361c991144SBram Moolenaar source Ximport.vim 13371c991144SBram Moolenaar assert_equal(9883, g:imported) 13381c991144SBram Moolenaar 1339f2d5c240SBram Moolenaar let import_star_lines =<< trim END 1340f2d5c240SBram Moolenaar vim9script 1341f2d5c240SBram Moolenaar import * from './Xexport.vim' 1342f2d5c240SBram Moolenaar END 1343f2d5c240SBram Moolenaar writefile(import_star_lines, 'Ximport.vim') 1344f2d5c240SBram Moolenaar assert_fails('source Ximport.vim', 'E1045:') 1345f2d5c240SBram Moolenaar 1346f5be8cdbSBram Moolenaar # try to import something that exists but is not exported 1347fa29c8abSBram Moolenaar let import_not_exported_lines =<< trim END 1348fa29c8abSBram Moolenaar vim9script 1349fa29c8abSBram Moolenaar import name from './Xexport.vim' 1350fa29c8abSBram Moolenaar END 1351fa29c8abSBram Moolenaar writefile(import_not_exported_lines, 'Ximport.vim') 1352fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1049:') 1353fa29c8abSBram Moolenaar 1354f5be8cdbSBram Moolenaar # try to import something that is already defined 13555269bd2aSBram Moolenaar let import_already_defined =<< trim END 13565269bd2aSBram Moolenaar vim9script 13575269bd2aSBram Moolenaar let exported = 'something' 13585269bd2aSBram Moolenaar import exported from './Xexport.vim' 13595269bd2aSBram Moolenaar END 13605269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 13615269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 13625269bd2aSBram Moolenaar 1363f5be8cdbSBram Moolenaar # try to import something that is already defined 13645269bd2aSBram Moolenaar import_already_defined =<< trim END 13655269bd2aSBram Moolenaar vim9script 13665269bd2aSBram Moolenaar let exported = 'something' 13675269bd2aSBram Moolenaar import * as exported from './Xexport.vim' 13685269bd2aSBram Moolenaar END 13695269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 13705269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 13715269bd2aSBram Moolenaar 1372f5be8cdbSBram Moolenaar # try to import something that is already defined 13735269bd2aSBram Moolenaar import_already_defined =<< trim END 13745269bd2aSBram Moolenaar vim9script 13755269bd2aSBram Moolenaar let exported = 'something' 13765269bd2aSBram Moolenaar import {exported} from './Xexport.vim' 13775269bd2aSBram Moolenaar END 13785269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 13795269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 13805269bd2aSBram Moolenaar 1381f5be8cdbSBram Moolenaar # import a very long name, requires making a copy 1382fa29c8abSBram Moolenaar let import_long_name_lines =<< trim END 1383fa29c8abSBram Moolenaar vim9script 1384fa29c8abSBram Moolenaar import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim' 1385fa29c8abSBram Moolenaar END 1386fa29c8abSBram Moolenaar writefile(import_long_name_lines, 'Ximport.vim') 1387fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 1388fa29c8abSBram Moolenaar 1389fa29c8abSBram Moolenaar let import_no_from_lines =<< trim END 1390fa29c8abSBram Moolenaar vim9script 1391fa29c8abSBram Moolenaar import name './Xexport.vim' 1392fa29c8abSBram Moolenaar END 1393fa29c8abSBram Moolenaar writefile(import_no_from_lines, 'Ximport.vim') 1394fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1070:') 1395fa29c8abSBram Moolenaar 1396fa29c8abSBram Moolenaar let import_invalid_string_lines =<< trim END 1397fa29c8abSBram Moolenaar vim9script 1398fa29c8abSBram Moolenaar import name from Xexport.vim 1399fa29c8abSBram Moolenaar END 1400fa29c8abSBram Moolenaar writefile(import_invalid_string_lines, 'Ximport.vim') 1401fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1071:') 1402fa29c8abSBram Moolenaar 1403fa29c8abSBram Moolenaar let import_wrong_name_lines =<< trim END 1404fa29c8abSBram Moolenaar vim9script 1405fa29c8abSBram Moolenaar import name from './XnoExport.vim' 1406fa29c8abSBram Moolenaar END 1407fa29c8abSBram Moolenaar writefile(import_wrong_name_lines, 'Ximport.vim') 1408fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1053:') 1409fa29c8abSBram Moolenaar 1410fa29c8abSBram Moolenaar let import_missing_comma_lines =<< trim END 1411fa29c8abSBram Moolenaar vim9script 1412fa29c8abSBram Moolenaar import {exported name} from './Xexport.vim' 1413fa29c8abSBram Moolenaar END 14145269bd2aSBram Moolenaar writefile(import_missing_comma_lines, 'Ximport3.vim') 14155269bd2aSBram Moolenaar assert_fails('source Ximport3.vim', 'E1046:') 1416fa29c8abSBram Moolenaar 1417f2d5c240SBram Moolenaar delete('Ximport.vim') 14185269bd2aSBram Moolenaar delete('Ximport3.vim') 14198a7d6542SBram Moolenaar delete('Xexport.vim') 14208a7d6542SBram Moolenaar 1421f5be8cdbSBram Moolenaar # Check that in a Vim9 script 'cpo' is set to the Vim default. 1422750802b5SBram Moolenaar set cpo&vi 1423750802b5SBram Moolenaar let cpo_before = &cpo 1424750802b5SBram Moolenaar let lines =<< trim END 1425750802b5SBram Moolenaar vim9script 1426750802b5SBram Moolenaar g:cpo_in_vim9script = &cpo 1427750802b5SBram Moolenaar END 1428750802b5SBram Moolenaar writefile(lines, 'Xvim9_script') 1429750802b5SBram Moolenaar source Xvim9_script 1430750802b5SBram Moolenaar assert_equal(cpo_before, &cpo) 1431750802b5SBram Moolenaar set cpo&vim 1432750802b5SBram Moolenaar assert_equal(&cpo, g:cpo_in_vim9script) 1433750802b5SBram Moolenaar delete('Xvim9_script') 1434750802b5SBram Moolenaarenddef 1435750802b5SBram Moolenaar 1436803af686SBram Moolenaarfunc g:Trigger() 1437803af686SBram Moolenaar source Ximport.vim 1438803af686SBram Moolenaar return "echo 'yes'\<CR>" 1439803af686SBram Moolenaarendfunc 1440803af686SBram Moolenaar 1441803af686SBram Moolenaardef Test_import_export_expr_map() 1442803af686SBram Moolenaar # check that :import and :export work when buffer is locked 1443803af686SBram Moolenaar let export_lines =<< trim END 1444803af686SBram Moolenaar vim9script 1445803af686SBram Moolenaar export def That(): string 1446803af686SBram Moolenaar return 'yes' 1447803af686SBram Moolenaar enddef 1448803af686SBram Moolenaar END 1449803af686SBram Moolenaar writefile(export_lines, 'Xexport_that.vim') 1450803af686SBram Moolenaar 1451803af686SBram Moolenaar let import_lines =<< trim END 1452803af686SBram Moolenaar vim9script 1453803af686SBram Moolenaar import That from './Xexport_that.vim' 1454803af686SBram Moolenaar assert_equal('yes', That()) 1455803af686SBram Moolenaar END 1456803af686SBram Moolenaar writefile(import_lines, 'Ximport.vim') 1457803af686SBram Moolenaar 1458803af686SBram Moolenaar nnoremap <expr> trigger g:Trigger() 1459803af686SBram Moolenaar feedkeys('trigger', "xt") 1460803af686SBram Moolenaar 1461730b2483SBram Moolenaar delete('Xexport_that.vim') 1462803af686SBram Moolenaar delete('Ximport.vim') 1463803af686SBram Moolenaar nunmap trigger 1464803af686SBram Moolenaarenddef 1465803af686SBram Moolenaar 14668e1986e3SBram Moolenaardef Test_import_in_filetype() 14678e1986e3SBram Moolenaar # check that :import works when the buffer is locked 14688e1986e3SBram Moolenaar mkdir('ftplugin', 'p') 14698e1986e3SBram Moolenaar let export_lines =<< trim END 14708e1986e3SBram Moolenaar vim9script 14718e1986e3SBram Moolenaar export let That = 'yes' 14728e1986e3SBram Moolenaar END 1473730b2483SBram Moolenaar writefile(export_lines, 'ftplugin/Xexport_ft.vim') 14748e1986e3SBram Moolenaar 14758e1986e3SBram Moolenaar let import_lines =<< trim END 14768e1986e3SBram Moolenaar vim9script 1477730b2483SBram Moolenaar import That from './Xexport_ft.vim' 14788e1986e3SBram Moolenaar assert_equal('yes', That) 14798e1986e3SBram Moolenaar g:did_load_mytpe = 1 14808e1986e3SBram Moolenaar END 14818e1986e3SBram Moolenaar writefile(import_lines, 'ftplugin/qf.vim') 14828e1986e3SBram Moolenaar 14838e1986e3SBram Moolenaar let save_rtp = &rtp 14848e1986e3SBram Moolenaar &rtp = getcwd() .. ',' .. &rtp 14858e1986e3SBram Moolenaar 14868e1986e3SBram Moolenaar filetype plugin on 14878e1986e3SBram Moolenaar copen 14888e1986e3SBram Moolenaar assert_equal(1, g:did_load_mytpe) 14898e1986e3SBram Moolenaar 14908e1986e3SBram Moolenaar quit! 1491730b2483SBram Moolenaar delete('Xexport_ft.vim') 14928e1986e3SBram Moolenaar delete('ftplugin', 'rf') 14938e1986e3SBram Moolenaar &rtp = save_rtp 14948e1986e3SBram Moolenaarenddef 14958e1986e3SBram Moolenaar 1496efa94447SBram Moolenaardef Test_use_import_in_mapping() 1497efa94447SBram Moolenaar let lines =<< trim END 1498efa94447SBram Moolenaar vim9script 1499efa94447SBram Moolenaar export def Funcx() 1500efa94447SBram Moolenaar g:result = 42 1501efa94447SBram Moolenaar enddef 1502efa94447SBram Moolenaar END 1503efa94447SBram Moolenaar writefile(lines, 'XsomeExport.vim') 1504efa94447SBram Moolenaar lines =<< trim END 1505efa94447SBram Moolenaar vim9script 1506efa94447SBram Moolenaar import Funcx from './XsomeExport.vim' 1507b3ca9824SBram Moolenaar nnoremap <F3> :call <sid>Funcx()<cr> 1508efa94447SBram Moolenaar END 1509efa94447SBram Moolenaar writefile(lines, 'Xmapscript.vim') 1510efa94447SBram Moolenaar 1511efa94447SBram Moolenaar source Xmapscript.vim 1512b3ca9824SBram Moolenaar feedkeys("\<F3>", "xt") 1513efa94447SBram Moolenaar assert_equal(42, g:result) 1514efa94447SBram Moolenaar 1515efa94447SBram Moolenaar unlet g:result 1516efa94447SBram Moolenaar delete('XsomeExport.vim') 1517efa94447SBram Moolenaar delete('Xmapscript.vim') 1518b3ca9824SBram Moolenaar nunmap <F3> 1519efa94447SBram Moolenaarenddef 1520efa94447SBram Moolenaar 1521750802b5SBram Moolenaardef Test_vim9script_fails() 15228a7d6542SBram Moolenaar CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:') 15238a7d6542SBram Moolenaar CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:') 1524750802b5SBram Moolenaar CheckScriptFailure(['export let some = 123'], 'E1042:') 15259721fb4eSBram Moolenaar CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1048:') 15269b7bf9e9SBram Moolenaar CheckScriptFailure(['vim9script', 'export let g:some'], 'E1022:') 1527750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:') 1528750802b5SBram Moolenaar 1529451c2e35SBram Moolenaar CheckScriptFailure(['vim9script', 'let str: string', 'str = 1234'], 'E1012:') 1530c785b9a7SBram Moolenaar CheckScriptFailure(['vim9script', 'const str = "asdf"', 'str = "xxx"'], 'E46:') 1531c785b9a7SBram Moolenaar 1532750802b5SBram Moolenaar assert_fails('vim9script', 'E1038') 1533a26b9700SBram Moolenaar assert_fails('export something', 'E1043') 15348a7d6542SBram Moolenaarenddef 15358a7d6542SBram Moolenaar 1536f7d267efSBram Moolenaarfunc Test_import_fails_without_script() 1537101f4810SBram Moolenaar CheckRunVimInTerminal 1538101f4810SBram Moolenaar 15399bb3eb3eSBram Moolenaar " call indirectly to avoid compilation error for missing functions 1540c620c055SBram Moolenaar call Run_Test_import_fails_on_command_line() 15419bb3eb3eSBram Moolenaarendfunc 15429bb3eb3eSBram Moolenaar 1543c620c055SBram Moolenaardef Run_Test_import_fails_on_command_line() 1544101f4810SBram Moolenaar let export =<< trim END 1545101f4810SBram Moolenaar vim9script 1546101f4810SBram Moolenaar export def Foo(): number 1547101f4810SBram Moolenaar return 0 1548101f4810SBram Moolenaar enddef 1549101f4810SBram Moolenaar END 1550730b2483SBram Moolenaar writefile(export, 'XexportCmd.vim') 1551101f4810SBram Moolenaar 1552730b2483SBram Moolenaar let buf = RunVimInTerminal('-c "import Foo from ''./XexportCmd.vim''"', #{ 15539bb3eb3eSBram Moolenaar rows: 6, wait_for_ruler: 0}) 15549bb3eb3eSBram Moolenaar WaitForAssert({-> assert_match('^E1094:', term_getline(buf, 5))}) 1555101f4810SBram Moolenaar 1556730b2483SBram Moolenaar delete('XexportCmd.vim') 15579bb3eb3eSBram Moolenaar StopVimInTerminal(buf) 15589bb3eb3eSBram Moolenaarenddef 1559101f4810SBram Moolenaar 15604c17ad94SBram Moolenaardef Test_vim9script_reload_import() 15618a7d6542SBram Moolenaar let lines =<< trim END 15628a7d6542SBram Moolenaar vim9script 15638a7d6542SBram Moolenaar const var = '' 15648a7d6542SBram Moolenaar let valone = 1234 15658a7d6542SBram Moolenaar def MyFunc(arg: string) 15668a7d6542SBram Moolenaar valone = 5678 15678a7d6542SBram Moolenaar enddef 15688a7d6542SBram Moolenaar END 15698a7d6542SBram Moolenaar let morelines =<< trim END 15708a7d6542SBram Moolenaar let valtwo = 222 15718a7d6542SBram Moolenaar export def GetValtwo(): number 15728a7d6542SBram Moolenaar return valtwo 15738a7d6542SBram Moolenaar enddef 15748a7d6542SBram Moolenaar END 157503afdcf1SBram Moolenaar writefile(lines + morelines, 'Xreload.vim') 15768a7d6542SBram Moolenaar source Xreload.vim 15778a7d6542SBram Moolenaar source Xreload.vim 15788a7d6542SBram Moolenaar source Xreload.vim 15798a7d6542SBram Moolenaar 15808a7d6542SBram Moolenaar let testlines =<< trim END 15818a7d6542SBram Moolenaar vim9script 15828a7d6542SBram Moolenaar def TheFunc() 15838a7d6542SBram Moolenaar import GetValtwo from './Xreload.vim' 15848a7d6542SBram Moolenaar assert_equal(222, GetValtwo()) 15858a7d6542SBram Moolenaar enddef 15868a7d6542SBram Moolenaar TheFunc() 15878a7d6542SBram Moolenaar END 15888a7d6542SBram Moolenaar writefile(testlines, 'Ximport.vim') 15898a7d6542SBram Moolenaar source Ximport.vim 15908a7d6542SBram Moolenaar 1591f5be8cdbSBram Moolenaar # Test that when not using "morelines" GetValtwo() and valtwo are still 1592f5be8cdbSBram Moolenaar # defined, because import doesn't reload a script. 15938a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 15948a7d6542SBram Moolenaar source Ximport.vim 15958a7d6542SBram Moolenaar 1596f5be8cdbSBram Moolenaar # cannot declare a var twice 15978a7d6542SBram Moolenaar lines =<< trim END 15988a7d6542SBram Moolenaar vim9script 15998a7d6542SBram Moolenaar let valone = 1234 16008a7d6542SBram Moolenaar let valone = 5678 16018a7d6542SBram Moolenaar END 16028a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 16038a7d6542SBram Moolenaar assert_fails('source Xreload.vim', 'E1041:') 16048a7d6542SBram Moolenaar 16058a7d6542SBram Moolenaar delete('Xreload.vim') 16068a7d6542SBram Moolenaar delete('Ximport.vim') 16078a7d6542SBram Moolenaarenddef 16088a7d6542SBram Moolenaar 1609fe465a01SBram Moolenaar" Not exported function that is referenced needs to be accessed by the 1610fe465a01SBram Moolenaar" script-local name. 1611fe465a01SBram Moolenaardef Test_vim9script_funcref() 1612fe465a01SBram Moolenaar let sortlines =<< trim END 1613fe465a01SBram Moolenaar vim9script 1614fe465a01SBram Moolenaar def Compare(i1: number, i2: number): number 1615bed36b93SBram Moolenaar return i2 - i1 1616fe465a01SBram Moolenaar enddef 1617fe465a01SBram Moolenaar 1618fe465a01SBram Moolenaar export def FastSort(): list<number> 1619fe465a01SBram Moolenaar return range(5)->sort(Compare) 1620fe465a01SBram Moolenaar enddef 1621fe465a01SBram Moolenaar END 1622fe465a01SBram Moolenaar writefile(sortlines, 'Xsort.vim') 1623fe465a01SBram Moolenaar 1624fe465a01SBram Moolenaar let lines =<< trim END 1625fe465a01SBram Moolenaar vim9script 1626fe465a01SBram Moolenaar import FastSort from './Xsort.vim' 1627fe465a01SBram Moolenaar def Test() 1628fe465a01SBram Moolenaar g:result = FastSort() 1629fe465a01SBram Moolenaar enddef 1630fe465a01SBram Moolenaar Test() 1631fe465a01SBram Moolenaar END 1632fe465a01SBram Moolenaar writefile(lines, 'Xscript.vim') 1633fe465a01SBram Moolenaar 1634fe465a01SBram Moolenaar source Xscript.vim 1635fe465a01SBram Moolenaar assert_equal([4, 3, 2, 1, 0], g:result) 1636fe465a01SBram Moolenaar 1637fe465a01SBram Moolenaar unlet g:result 1638fe465a01SBram Moolenaar delete('Xsort.vim') 1639fe465a01SBram Moolenaar delete('Xscript.vim') 1640fe465a01SBram Moolenaarenddef 1641fe465a01SBram Moolenaar 1642c620c055SBram Moolenaar" Check that when searcing for "FilterFunc" it doesn't find the import in the 1643c620c055SBram Moolenaar" script where FastFilter() is called from. 1644c620c055SBram Moolenaardef Test_vim9script_funcref_other_script() 1645c620c055SBram Moolenaar let filterLines =<< trim END 1646c620c055SBram Moolenaar vim9script 1647c620c055SBram Moolenaar export def FilterFunc(idx: number, val: number): bool 1648c620c055SBram Moolenaar return idx % 2 == 1 1649c620c055SBram Moolenaar enddef 1650c620c055SBram Moolenaar export def FastFilter(): list<number> 1651c620c055SBram Moolenaar return range(10)->filter('FilterFunc') 1652c620c055SBram Moolenaar enddef 1653c620c055SBram Moolenaar END 1654c620c055SBram Moolenaar writefile(filterLines, 'Xfilter.vim') 1655c620c055SBram Moolenaar 1656c620c055SBram Moolenaar let lines =<< trim END 1657c620c055SBram Moolenaar vim9script 1658c620c055SBram Moolenaar import {FilterFunc, FastFilter} from './Xfilter.vim' 1659c620c055SBram Moolenaar def Test() 1660c620c055SBram Moolenaar let x: list<number> = FastFilter() 1661c620c055SBram Moolenaar enddef 1662c620c055SBram Moolenaar Test() 1663c620c055SBram Moolenaar END 1664c620c055SBram Moolenaar writefile(lines, 'Ximport.vim') 1665c620c055SBram Moolenaar assert_fails('source Ximport.vim', 'E121:') 1666c620c055SBram Moolenaar 1667c620c055SBram Moolenaar delete('Xfilter.vim') 1668c620c055SBram Moolenaar delete('Ximport.vim') 1669c620c055SBram Moolenaarenddef 1670c620c055SBram Moolenaar 16714c17ad94SBram Moolenaardef Test_vim9script_reload_delfunc() 16724c17ad94SBram Moolenaar let first_lines =<< trim END 16734c17ad94SBram Moolenaar vim9script 16744c17ad94SBram Moolenaar def FuncYes(): string 16754c17ad94SBram Moolenaar return 'yes' 16764c17ad94SBram Moolenaar enddef 16774c17ad94SBram Moolenaar END 167803afdcf1SBram Moolenaar let withno_lines =<< trim END 16794c17ad94SBram Moolenaar def FuncNo(): string 16804c17ad94SBram Moolenaar return 'no' 16814c17ad94SBram Moolenaar enddef 16824c17ad94SBram Moolenaar def g:DoCheck(no_exists: bool) 16834c17ad94SBram Moolenaar assert_equal('yes', FuncYes()) 16844c17ad94SBram Moolenaar assert_equal('no', FuncNo()) 168503afdcf1SBram Moolenaar enddef 168603afdcf1SBram Moolenaar END 168703afdcf1SBram Moolenaar let nono_lines =<< trim END 168803afdcf1SBram Moolenaar def g:DoCheck(no_exists: bool) 168903afdcf1SBram Moolenaar assert_equal('yes', FuncYes()) 16904c17ad94SBram Moolenaar assert_fails('call FuncNo()', 'E117:') 16914c17ad94SBram Moolenaar enddef 16924c17ad94SBram Moolenaar END 16934c17ad94SBram Moolenaar 16944c17ad94SBram Moolenaar # FuncNo() is defined 169503afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 16964c17ad94SBram Moolenaar source Xreloaded.vim 16974c17ad94SBram Moolenaar g:DoCheck(true) 16984c17ad94SBram Moolenaar 16994c17ad94SBram Moolenaar # FuncNo() is not redefined 170003afdcf1SBram Moolenaar writefile(first_lines + nono_lines, 'Xreloaded.vim') 17014c17ad94SBram Moolenaar source Xreloaded.vim 170203afdcf1SBram Moolenaar g:DoCheck() 17034c17ad94SBram Moolenaar 17044c17ad94SBram Moolenaar # FuncNo() is back 170503afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 17064c17ad94SBram Moolenaar source Xreloaded.vim 170703afdcf1SBram Moolenaar g:DoCheck() 17084c17ad94SBram Moolenaar 17094c17ad94SBram Moolenaar delete('Xreloaded.vim') 17104c17ad94SBram Moolenaarenddef 17114c17ad94SBram Moolenaar 171289483d40SBram Moolenaardef Test_vim9script_reload_delvar() 171389483d40SBram Moolenaar # write the script with a script-local variable 171489483d40SBram Moolenaar let lines =<< trim END 171589483d40SBram Moolenaar vim9script 171689483d40SBram Moolenaar let var = 'string' 171789483d40SBram Moolenaar END 171889483d40SBram Moolenaar writefile(lines, 'XreloadVar.vim') 171989483d40SBram Moolenaar source XreloadVar.vim 172089483d40SBram Moolenaar 172189483d40SBram Moolenaar # now write the script using the same variable locally - works 172289483d40SBram Moolenaar lines =<< trim END 172389483d40SBram Moolenaar vim9script 172489483d40SBram Moolenaar def Func() 172589483d40SBram Moolenaar let var = 'string' 172689483d40SBram Moolenaar enddef 172789483d40SBram Moolenaar END 172889483d40SBram Moolenaar writefile(lines, 'XreloadVar.vim') 172989483d40SBram Moolenaar source XreloadVar.vim 173089483d40SBram Moolenaar 173189483d40SBram Moolenaar delete('XreloadVar.vim') 173289483d40SBram Moolenaarenddef 173389483d40SBram Moolenaar 17348a7d6542SBram Moolenaardef Test_import_absolute() 17358a7d6542SBram Moolenaar let import_lines = [ 1736e6085c53SBram Moolenaar 'vim9script', 1737e6085c53SBram Moolenaar 'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"', 1738e6085c53SBram Moolenaar 'def UseExported()', 1739e6085c53SBram Moolenaar ' g:imported_abs = exported', 1740e6085c53SBram Moolenaar ' exported = 8888', 1741e6085c53SBram Moolenaar ' g:imported_after = exported', 1742e6085c53SBram Moolenaar 'enddef', 1743e6085c53SBram Moolenaar 'UseExported()', 1744e6085c53SBram Moolenaar 'g:import_disassembled = execute("disass UseExported")', 1745e6085c53SBram Moolenaar ] 17468a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_abs.vim') 17478a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport_abs.vim') 17488a7d6542SBram Moolenaar 17498a7d6542SBram Moolenaar source Ximport_abs.vim 17508a7d6542SBram Moolenaar 17518a7d6542SBram Moolenaar assert_equal(9876, g:imported_abs) 17524e12a5dfSBram Moolenaar assert_equal(8888, g:imported_after) 1753675f716eSBram Moolenaar assert_match('<SNR>\d\+_UseExported.*' .. 1754675f716eSBram Moolenaar 'g:imported_abs = exported.*' .. 1755675f716eSBram Moolenaar '0 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 1756675f716eSBram Moolenaar '1 STOREG g:imported_abs.*' .. 1757675f716eSBram Moolenaar 'exported = 8888.*' .. 1758675f716eSBram Moolenaar '3 STORESCRIPT exported in .*Xexport_abs.vim.*' .. 1759675f716eSBram Moolenaar 'g:imported_after = exported.*' .. 1760675f716eSBram Moolenaar '4 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 1761675f716eSBram Moolenaar '5 STOREG g:imported_after.*', 1762e6085c53SBram Moolenaar g:import_disassembled) 1763b3ca9824SBram Moolenaar 1764b3ca9824SBram Moolenaar Undo_export_script_lines() 17658a7d6542SBram Moolenaar unlet g:imported_abs 17664e12a5dfSBram Moolenaar unlet g:import_disassembled 17678a7d6542SBram Moolenaar 17688a7d6542SBram Moolenaar delete('Ximport_abs.vim') 17698a7d6542SBram Moolenaar delete('Xexport_abs.vim') 17708a7d6542SBram Moolenaarenddef 17718a7d6542SBram Moolenaar 17728a7d6542SBram Moolenaardef Test_import_rtp() 17738a7d6542SBram Moolenaar let import_lines = [ 1774e6085c53SBram Moolenaar 'vim9script', 1775e6085c53SBram Moolenaar 'import exported from "Xexport_rtp.vim"', 1776e6085c53SBram Moolenaar 'g:imported_rtp = exported', 1777e6085c53SBram Moolenaar ] 17788a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_rtp.vim') 17798a7d6542SBram Moolenaar mkdir('import') 17808a7d6542SBram Moolenaar writefile(s:export_script_lines, 'import/Xexport_rtp.vim') 17818a7d6542SBram Moolenaar 17828a7d6542SBram Moolenaar let save_rtp = &rtp 17838a7d6542SBram Moolenaar &rtp = getcwd() 17848a7d6542SBram Moolenaar source Ximport_rtp.vim 17858a7d6542SBram Moolenaar &rtp = save_rtp 17868a7d6542SBram Moolenaar 17878a7d6542SBram Moolenaar assert_equal(9876, g:imported_rtp) 17888a7d6542SBram Moolenaar 1789b3ca9824SBram Moolenaar Undo_export_script_lines() 1790b3ca9824SBram Moolenaar unlet g:imported_rtp 17918a7d6542SBram Moolenaar delete('Ximport_rtp.vim') 179289483d40SBram Moolenaar delete('import', 'rf') 17938a7d6542SBram Moolenaarenddef 17948a7d6542SBram Moolenaar 179525e0f586SBram Moolenaardef Test_import_compile_error() 179625e0f586SBram Moolenaar let export_lines = [ 179725e0f586SBram Moolenaar 'vim9script', 179825e0f586SBram Moolenaar 'export def ExpFunc(): string', 179925e0f586SBram Moolenaar ' return notDefined', 180025e0f586SBram Moolenaar 'enddef', 180125e0f586SBram Moolenaar ] 180225e0f586SBram Moolenaar writefile(export_lines, 'Xexported.vim') 180325e0f586SBram Moolenaar 180425e0f586SBram Moolenaar let import_lines = [ 180525e0f586SBram Moolenaar 'vim9script', 180625e0f586SBram Moolenaar 'import ExpFunc from "./Xexported.vim"', 180725e0f586SBram Moolenaar 'def ImpFunc()', 180825e0f586SBram Moolenaar ' echo ExpFunc()', 180925e0f586SBram Moolenaar 'enddef', 181025e0f586SBram Moolenaar 'defcompile', 181125e0f586SBram Moolenaar ] 181225e0f586SBram Moolenaar writefile(import_lines, 'Ximport.vim') 181325e0f586SBram Moolenaar 181425e0f586SBram Moolenaar try 181525e0f586SBram Moolenaar source Ximport.vim 181625e0f586SBram Moolenaar catch /E1001/ 1817f5be8cdbSBram Moolenaar # Error should be fore the Xexported.vim file. 181825e0f586SBram Moolenaar assert_match('E1001: variable not found: notDefined', v:exception) 181925e0f586SBram Moolenaar assert_match('function <SNR>\d\+_ImpFunc\[1\]..<SNR>\d\+_ExpFunc, line 1', v:throwpoint) 182025e0f586SBram Moolenaar endtry 182125e0f586SBram Moolenaar 182225e0f586SBram Moolenaar delete('Xexported.vim') 182325e0f586SBram Moolenaar delete('Ximport.vim') 182425e0f586SBram Moolenaarenddef 182525e0f586SBram Moolenaar 1826c4ce36d4SBram Moolenaardef Test_func_redefine_error() 1827c4ce36d4SBram Moolenaar let lines = [ 1828c4ce36d4SBram Moolenaar 'vim9script', 1829c4ce36d4SBram Moolenaar 'def Func()', 1830c4ce36d4SBram Moolenaar ' eval [][0]', 1831c4ce36d4SBram Moolenaar 'enddef', 1832c4ce36d4SBram Moolenaar 'Func()', 1833c4ce36d4SBram Moolenaar ] 1834c4ce36d4SBram Moolenaar writefile(lines, 'Xtestscript.vim') 1835c4ce36d4SBram Moolenaar 1836c4ce36d4SBram Moolenaar for count in range(3) 1837c4ce36d4SBram Moolenaar try 1838c4ce36d4SBram Moolenaar source Xtestscript.vim 1839c4ce36d4SBram Moolenaar catch /E684/ 1840c4ce36d4SBram Moolenaar # function name should contain <SNR> every time 1841c4ce36d4SBram Moolenaar assert_match('E684: list index out of range', v:exception) 1842c4ce36d4SBram Moolenaar assert_match('function <SNR>\d\+_Func, line 1', v:throwpoint) 1843c4ce36d4SBram Moolenaar endtry 1844c4ce36d4SBram Moolenaar endfor 1845c4ce36d4SBram Moolenaar 1846c4ce36d4SBram Moolenaar delete('Xtestscript.vim') 1847c4ce36d4SBram Moolenaarenddef 1848c4ce36d4SBram Moolenaar 1849eef2102eSBram Moolenaardef Test_func_overrules_import_fails() 1850eef2102eSBram Moolenaar let export_lines =<< trim END 1851eef2102eSBram Moolenaar vim9script 1852eef2102eSBram Moolenaar export def Func() 1853eef2102eSBram Moolenaar echo 'imported' 1854eef2102eSBram Moolenaar enddef 1855eef2102eSBram Moolenaar END 1856eef2102eSBram Moolenaar writefile(export_lines, 'XexportedFunc.vim') 1857eef2102eSBram Moolenaar 1858eef2102eSBram Moolenaar let lines =<< trim END 1859eef2102eSBram Moolenaar vim9script 1860eef2102eSBram Moolenaar import Func from './XexportedFunc.vim' 1861eef2102eSBram Moolenaar def Func() 1862eef2102eSBram Moolenaar echo 'local to function' 1863eef2102eSBram Moolenaar enddef 1864eef2102eSBram Moolenaar END 1865eef2102eSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1866eef2102eSBram Moolenaar 1867eef2102eSBram Moolenaar lines =<< trim END 1868eef2102eSBram Moolenaar vim9script 1869eef2102eSBram Moolenaar import Func from './XexportedFunc.vim' 1870eef2102eSBram Moolenaar def Outer() 1871eef2102eSBram Moolenaar def Func() 1872eef2102eSBram Moolenaar echo 'local to function' 1873eef2102eSBram Moolenaar enddef 1874eef2102eSBram Moolenaar enddef 1875eef2102eSBram Moolenaar defcompile 1876eef2102eSBram Moolenaar END 1877eef2102eSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1878eef2102eSBram Moolenaar 1879eef2102eSBram Moolenaar delete('XexportedFunc.vim') 1880eef2102eSBram Moolenaarenddef 1881eef2102eSBram Moolenaar 1882b9a2cac3SBram Moolenaardef Test_func_redefine_fails() 1883b9a2cac3SBram Moolenaar let lines =<< trim END 1884b9a2cac3SBram Moolenaar vim9script 1885b9a2cac3SBram Moolenaar def Func() 1886b9a2cac3SBram Moolenaar echo 'one' 1887b9a2cac3SBram Moolenaar enddef 1888b9a2cac3SBram Moolenaar def Func() 1889b9a2cac3SBram Moolenaar echo 'two' 1890b9a2cac3SBram Moolenaar enddef 1891b9a2cac3SBram Moolenaar END 1892b9a2cac3SBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1893fa211f3cSBram Moolenaar 1894fa211f3cSBram Moolenaar lines =<< trim END 1895fa211f3cSBram Moolenaar vim9script 1896fa211f3cSBram Moolenaar def Foo(): string 1897fa211f3cSBram Moolenaar return 'foo' 1898fa211f3cSBram Moolenaar enddef 1899fa211f3cSBram Moolenaar def Func() 1900fa211f3cSBram Moolenaar let Foo = {-> 'lambda'} 1901fa211f3cSBram Moolenaar enddef 1902fa211f3cSBram Moolenaar defcompile 1903fa211f3cSBram Moolenaar END 1904fa211f3cSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1905b9a2cac3SBram Moolenaarenddef 1906b9a2cac3SBram Moolenaar 19078a7d6542SBram Moolenaardef Test_fixed_size_list() 1908f5be8cdbSBram Moolenaar # will be allocated as one piece of memory, check that changes work 19098a7d6542SBram Moolenaar let l = [1, 2, 3, 4] 19108a7d6542SBram Moolenaar l->remove(0) 19118a7d6542SBram Moolenaar l->add(5) 19128a7d6542SBram Moolenaar l->insert(99, 1) 19130f18b6d1SBram Moolenaar assert_equal([2, 99, 3, 4, 5], l) 19148a7d6542SBram Moolenaarenddef 19158a7d6542SBram Moolenaar 1916ae616494SBram Moolenaardef Test_no_insert_xit() 1917ae616494SBram Moolenaar call CheckDefExecFailure(['a = 1'], 'E1100:') 1918ae616494SBram Moolenaar call CheckDefExecFailure(['c = 1'], 'E1100:') 1919f5a48010SBram Moolenaar call CheckDefExecFailure(['i = 1'], 'E1100:') 1920f5a48010SBram Moolenaar call CheckDefExecFailure(['t = 1'], 'E1100:') 1921f5a48010SBram Moolenaar call CheckDefExecFailure(['x = 1'], 'E1100:') 1922ae616494SBram Moolenaar 1923ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'a = 1'], 'E488:') 1924ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'a'], 'E1100:') 1925ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'c = 1'], 'E488:') 1926ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'c'], 'E1100:') 1927f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'i = 1'], 'E488:') 1928f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'i'], 'E1100:') 1929f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 't'], 'E1100:') 1930f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 't = 1'], 'E1100:') 1931f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'x = 1'], 'E1100:') 1932ae616494SBram Moolenaarenddef 1933ae616494SBram Moolenaar 1934158906cfSBram Moolenaardef IfElse(what: number): string 1935158906cfSBram Moolenaar let res = '' 1936158906cfSBram Moolenaar if what == 1 1937158906cfSBram Moolenaar res = "one" 1938158906cfSBram Moolenaar elseif what == 2 1939158906cfSBram Moolenaar res = "two" 1940a259d8d3SBram Moolenaar else 1941158906cfSBram Moolenaar res = "three" 1942a259d8d3SBram Moolenaar endif 1943158906cfSBram Moolenaar return res 1944a259d8d3SBram Moolenaarenddef 1945a259d8d3SBram Moolenaar 1946158906cfSBram Moolenaardef Test_if_elseif_else() 1947158906cfSBram Moolenaar assert_equal('one', IfElse(1)) 1948158906cfSBram Moolenaar assert_equal('two', IfElse(2)) 1949158906cfSBram Moolenaar assert_equal('three', IfElse(3)) 19500f18b6d1SBram Moolenaarenddef 19510f18b6d1SBram Moolenaar 1952e8c4abbbSBram Moolenaardef Test_if_elseif_else_fails() 1953e8c4abbbSBram Moolenaar call CheckDefFailure(['elseif true'], 'E582:') 1954e8c4abbbSBram Moolenaar call CheckDefFailure(['else'], 'E581:') 1955e8c4abbbSBram Moolenaar call CheckDefFailure(['endif'], 'E580:') 1956e8c4abbbSBram Moolenaar call CheckDefFailure(['if true', 'elseif xxx'], 'E1001:') 1957585fea7bSBram Moolenaar call CheckDefFailure(['if true', 'echo 1'], 'E171:') 1958e8c4abbbSBram Moolenaarenddef 1959e8c4abbbSBram Moolenaar 19606d69bf60SBram Moolenaarlet g:bool_true = v:true 19616d69bf60SBram Moolenaarlet g:bool_false = v:false 19626d69bf60SBram Moolenaar 19636d69bf60SBram Moolenaardef Test_if_const_expr() 19646d69bf60SBram Moolenaar let res = false 19656d69bf60SBram Moolenaar if true ? true : false 19666d69bf60SBram Moolenaar res = true 19676d69bf60SBram Moolenaar endif 19686d69bf60SBram Moolenaar assert_equal(true, res) 19696d69bf60SBram Moolenaar 1970585fea7bSBram Moolenaar g:glob = 2 1971585fea7bSBram Moolenaar if false 19726797966dSBram Moolenaar execute('g:glob = 3') 1973585fea7bSBram Moolenaar endif 1974585fea7bSBram Moolenaar assert_equal(2, g:glob) 1975585fea7bSBram Moolenaar if true 19766797966dSBram Moolenaar execute('g:glob = 3') 1977585fea7bSBram Moolenaar endif 1978585fea7bSBram Moolenaar assert_equal(3, g:glob) 1979585fea7bSBram Moolenaar 19806d69bf60SBram Moolenaar res = false 19816d69bf60SBram Moolenaar if g:bool_true ? true : false 19826d69bf60SBram Moolenaar res = true 19836d69bf60SBram Moolenaar endif 19846d69bf60SBram Moolenaar assert_equal(true, res) 19856d69bf60SBram Moolenaar 19866d69bf60SBram Moolenaar res = false 19876d69bf60SBram Moolenaar if true ? g:bool_true : false 19886d69bf60SBram Moolenaar res = true 19896d69bf60SBram Moolenaar endif 19906d69bf60SBram Moolenaar assert_equal(true, res) 19916d69bf60SBram Moolenaar 19926d69bf60SBram Moolenaar res = false 19936d69bf60SBram Moolenaar if true ? true : g:bool_false 19946d69bf60SBram Moolenaar res = true 19956d69bf60SBram Moolenaar endif 19966d69bf60SBram Moolenaar assert_equal(true, res) 19976d69bf60SBram Moolenaar 19986d69bf60SBram Moolenaar res = false 19996d69bf60SBram Moolenaar if true ? false : true 20006d69bf60SBram Moolenaar res = true 20016d69bf60SBram Moolenaar endif 20026d69bf60SBram Moolenaar assert_equal(false, res) 20036d69bf60SBram Moolenaar 20046d69bf60SBram Moolenaar res = false 20056d69bf60SBram Moolenaar if false ? false : true 20066d69bf60SBram Moolenaar res = true 20076d69bf60SBram Moolenaar endif 20086d69bf60SBram Moolenaar assert_equal(true, res) 20096d69bf60SBram Moolenaar 20106d69bf60SBram Moolenaar res = false 20116d69bf60SBram Moolenaar if false ? true : false 20126d69bf60SBram Moolenaar res = true 20136d69bf60SBram Moolenaar endif 20146d69bf60SBram Moolenaar assert_equal(false, res) 20156d69bf60SBram Moolenaar 20166d69bf60SBram Moolenaar res = false 2017e8c4abbbSBram Moolenaar if has('xyz') ? true : false 2018e8c4abbbSBram Moolenaar res = true 2019e8c4abbbSBram Moolenaar endif 2020e8c4abbbSBram Moolenaar assert_equal(false, res) 2021e8c4abbbSBram Moolenaar 2022e8c4abbbSBram Moolenaar res = false 20236d69bf60SBram Moolenaar if true && true 20246d69bf60SBram Moolenaar res = true 20256d69bf60SBram Moolenaar endif 20266d69bf60SBram Moolenaar assert_equal(true, res) 20276d69bf60SBram Moolenaar 20286d69bf60SBram Moolenaar res = false 20296d69bf60SBram Moolenaar if true && false 20306d69bf60SBram Moolenaar res = true 20316d69bf60SBram Moolenaar endif 20326d69bf60SBram Moolenaar assert_equal(false, res) 20336d69bf60SBram Moolenaar 20346d69bf60SBram Moolenaar res = false 20356d69bf60SBram Moolenaar if g:bool_true && false 20366d69bf60SBram Moolenaar res = true 20376d69bf60SBram Moolenaar endif 20386d69bf60SBram Moolenaar assert_equal(false, res) 20396d69bf60SBram Moolenaar 20406d69bf60SBram Moolenaar res = false 20416d69bf60SBram Moolenaar if true && g:bool_false 20426d69bf60SBram Moolenaar res = true 20436d69bf60SBram Moolenaar endif 20446d69bf60SBram Moolenaar assert_equal(false, res) 20456d69bf60SBram Moolenaar 20466d69bf60SBram Moolenaar res = false 20476d69bf60SBram Moolenaar if false && false 20486d69bf60SBram Moolenaar res = true 20496d69bf60SBram Moolenaar endif 20506d69bf60SBram Moolenaar assert_equal(false, res) 20516d69bf60SBram Moolenaar 20526d69bf60SBram Moolenaar res = false 20536d69bf60SBram Moolenaar if true || false 20546d69bf60SBram Moolenaar res = true 20556d69bf60SBram Moolenaar endif 20566d69bf60SBram Moolenaar assert_equal(true, res) 20576d69bf60SBram Moolenaar 20586d69bf60SBram Moolenaar res = false 20596d69bf60SBram Moolenaar if g:bool_true || false 20606d69bf60SBram Moolenaar res = true 20616d69bf60SBram Moolenaar endif 20626d69bf60SBram Moolenaar assert_equal(true, res) 20636d69bf60SBram Moolenaar 20646d69bf60SBram Moolenaar res = false 20656d69bf60SBram Moolenaar if true || g:bool_false 20666d69bf60SBram Moolenaar res = true 20676d69bf60SBram Moolenaar endif 20686d69bf60SBram Moolenaar assert_equal(true, res) 20696d69bf60SBram Moolenaar 20706d69bf60SBram Moolenaar res = false 20716d69bf60SBram Moolenaar if false || false 20726d69bf60SBram Moolenaar res = true 20736d69bf60SBram Moolenaar endif 20746d69bf60SBram Moolenaar assert_equal(false, res) 207580c34ca3SBram Moolenaarenddef 20766d69bf60SBram Moolenaar 207780c34ca3SBram Moolenaardef Test_if_const_expr_fails() 207880c34ca3SBram Moolenaar call CheckDefFailure(['if "aaa" == "bbb'], 'E114:') 207980c34ca3SBram Moolenaar call CheckDefFailure(["if 'aaa' == 'bbb"], 'E115:') 2080e8c4abbbSBram Moolenaar call CheckDefFailure(["if has('aaa'"], 'E110:') 2081e8c4abbbSBram Moolenaar call CheckDefFailure(["if has('aaa') ? true false"], 'E109:') 20826d69bf60SBram Moolenaarenddef 20836d69bf60SBram Moolenaar 208472abcf42SBram Moolenaardef RunNested(i: number): number 208572abcf42SBram Moolenaar let x: number = 0 208672abcf42SBram Moolenaar if i % 2 208772abcf42SBram Moolenaar if 1 2088f5be8cdbSBram Moolenaar # comment 208972abcf42SBram Moolenaar else 2090f5be8cdbSBram Moolenaar # comment 209172abcf42SBram Moolenaar endif 209272abcf42SBram Moolenaar x += 1 209372abcf42SBram Moolenaar else 209472abcf42SBram Moolenaar x += 1000 209572abcf42SBram Moolenaar endif 209672abcf42SBram Moolenaar return x 209772abcf42SBram Moolenaarenddef 209872abcf42SBram Moolenaar 209972abcf42SBram Moolenaardef Test_nested_if() 210072abcf42SBram Moolenaar assert_equal(1, RunNested(1)) 210172abcf42SBram Moolenaar assert_equal(1000, RunNested(2)) 210272abcf42SBram Moolenaarenddef 210372abcf42SBram Moolenaar 2104ad39c094SBram Moolenaardef Test_execute_cmd() 2105ad39c094SBram Moolenaar new 2106ad39c094SBram Moolenaar setline(1, 'default') 2107ad39c094SBram Moolenaar execute 'call setline(1, "execute-string")' 2108ad39c094SBram Moolenaar assert_equal('execute-string', getline(1)) 2109a72cfb80SBram Moolenaar 2110a72cfb80SBram Moolenaar execute "call setline(1, 'execute-string')" 2111a72cfb80SBram Moolenaar assert_equal('execute-string', getline(1)) 2112a72cfb80SBram Moolenaar 2113ad39c094SBram Moolenaar let cmd1 = 'call setline(1,' 2114ad39c094SBram Moolenaar let cmd2 = '"execute-var")' 2115a72cfb80SBram Moolenaar execute cmd1 cmd2 # comment 2116ad39c094SBram Moolenaar assert_equal('execute-var', getline(1)) 2117a72cfb80SBram Moolenaar 2118ad39c094SBram Moolenaar execute cmd1 cmd2 '|call setline(1, "execute-var-string")' 2119ad39c094SBram Moolenaar assert_equal('execute-var-string', getline(1)) 2120a72cfb80SBram Moolenaar 2121ad39c094SBram Moolenaar let cmd_first = 'call ' 2122ad39c094SBram Moolenaar let cmd_last = 'setline(1, "execute-var-var")' 2123ad39c094SBram Moolenaar execute cmd_first .. cmd_last 2124ad39c094SBram Moolenaar assert_equal('execute-var-var', getline(1)) 2125ad39c094SBram Moolenaar bwipe! 2126585fea7bSBram Moolenaar 21272d6b20d6SBram Moolenaar let n = true 21282d6b20d6SBram Moolenaar execute 'echomsg' (n ? '"true"' : '"no"') 21292d6b20d6SBram Moolenaar assert_match('^true$', Screenline(&lines)) 21302d6b20d6SBram Moolenaar 2131e5abf7afSBram Moolenaar echomsg [1, 2, 3] #{a: 1, b: 2} 2132e5abf7afSBram Moolenaar assert_match('^\[1, 2, 3\] {''a'': 1, ''b'': 2}$', Screenline(&lines)) 2133e5abf7afSBram Moolenaar 2134585fea7bSBram Moolenaar call CheckDefFailure(['execute xxx'], 'E1001:') 2135a72cfb80SBram Moolenaar call CheckDefFailure(['execute "cmd"# comment'], 'E488:') 2136ad39c094SBram Moolenaarenddef 2137ad39c094SBram Moolenaar 213847e880d6SBram Moolenaardef Test_execute_cmd_vimscript() 2139f5be8cdbSBram Moolenaar # only checks line continuation 214047e880d6SBram Moolenaar let lines =<< trim END 214147e880d6SBram Moolenaar vim9script 214247e880d6SBram Moolenaar execute 'g:someVar' 214347e880d6SBram Moolenaar .. ' = ' .. 214447e880d6SBram Moolenaar '28' 214547e880d6SBram Moolenaar assert_equal(28, g:someVar) 214647e880d6SBram Moolenaar unlet g:someVar 214747e880d6SBram Moolenaar END 214847e880d6SBram Moolenaar CheckScriptSuccess(lines) 214947e880d6SBram Moolenaarenddef 215047e880d6SBram Moolenaar 2151ad39c094SBram Moolenaardef Test_echo_cmd() 2152a72cfb80SBram Moolenaar echo 'some' # comment 2153585fea7bSBram Moolenaar echon 'thing' 2154ad39c094SBram Moolenaar assert_match('^something$', Screenline(&lines)) 2155ad39c094SBram Moolenaar 2156a72cfb80SBram Moolenaar echo "some" # comment 2157a72cfb80SBram Moolenaar echon "thing" 2158a72cfb80SBram Moolenaar assert_match('^something$', Screenline(&lines)) 2159a72cfb80SBram Moolenaar 2160ad39c094SBram Moolenaar let str1 = 'some' 2161ad39c094SBram Moolenaar let str2 = 'more' 2162ad39c094SBram Moolenaar echo str1 str2 2163ad39c094SBram Moolenaar assert_match('^some more$', Screenline(&lines)) 2164a72cfb80SBram Moolenaar 2165a72cfb80SBram Moolenaar call CheckDefFailure(['echo "xxx"# comment'], 'E488:') 2166ad39c094SBram Moolenaarenddef 2167ad39c094SBram Moolenaar 2168f93c7feaSBram Moolenaardef Test_echomsg_cmd() 2169f93c7feaSBram Moolenaar echomsg 'some' 'more' # comment 2170f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 2171f93c7feaSBram Moolenaar echo 'clear' 2172df069eecSBram Moolenaar :1messages 2173f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 2174f93c7feaSBram Moolenaar 2175f93c7feaSBram Moolenaar call CheckDefFailure(['echomsg "xxx"# comment'], 'E488:') 2176f93c7feaSBram Moolenaarenddef 2177f93c7feaSBram Moolenaar 217847e880d6SBram Moolenaardef Test_echomsg_cmd_vimscript() 2179f5be8cdbSBram Moolenaar # only checks line continuation 218047e880d6SBram Moolenaar let lines =<< trim END 218147e880d6SBram Moolenaar vim9script 218247e880d6SBram Moolenaar echomsg 'here' 218347e880d6SBram Moolenaar .. ' is ' .. 218447e880d6SBram Moolenaar 'a message' 218547e880d6SBram Moolenaar assert_match('^here is a message$', Screenline(&lines)) 218647e880d6SBram Moolenaar END 218747e880d6SBram Moolenaar CheckScriptSuccess(lines) 218847e880d6SBram Moolenaarenddef 218947e880d6SBram Moolenaar 2190f93c7feaSBram Moolenaardef Test_echoerr_cmd() 219140ee466cSBram Moolenaar try 219240ee466cSBram Moolenaar echoerr 'something' 'wrong' # comment 219340ee466cSBram Moolenaar catch 219440ee466cSBram Moolenaar assert_match('something wrong', v:exception) 219540ee466cSBram Moolenaar endtry 2196f93c7feaSBram Moolenaarenddef 2197f93c7feaSBram Moolenaar 219847e880d6SBram Moolenaardef Test_echoerr_cmd_vimscript() 2199f5be8cdbSBram Moolenaar # only checks line continuation 220047e880d6SBram Moolenaar let lines =<< trim END 220147e880d6SBram Moolenaar vim9script 220247e880d6SBram Moolenaar try 220347e880d6SBram Moolenaar echoerr 'this' 220447e880d6SBram Moolenaar .. ' is ' .. 220547e880d6SBram Moolenaar 'wrong' 220647e880d6SBram Moolenaar catch 220747e880d6SBram Moolenaar assert_match('this is wrong', v:exception) 220847e880d6SBram Moolenaar endtry 220947e880d6SBram Moolenaar END 221047e880d6SBram Moolenaar CheckScriptSuccess(lines) 221147e880d6SBram Moolenaarenddef 221247e880d6SBram Moolenaar 221341fe0617SBram Moolenaardef Test_for_outside_of_function() 221441fe0617SBram Moolenaar let lines =<< trim END 221541fe0617SBram Moolenaar vim9script 221641fe0617SBram Moolenaar new 221741fe0617SBram Moolenaar for var in range(0, 3) 221841fe0617SBram Moolenaar append(line('$'), var) 221941fe0617SBram Moolenaar endfor 222041fe0617SBram Moolenaar assert_equal(['', '0', '1', '2', '3'], getline(1, '$')) 222141fe0617SBram Moolenaar bwipe! 222241fe0617SBram Moolenaar END 222341fe0617SBram Moolenaar writefile(lines, 'Xvim9for.vim') 222441fe0617SBram Moolenaar source Xvim9for.vim 222541fe0617SBram Moolenaar delete('Xvim9for.vim') 222641fe0617SBram Moolenaarenddef 22278a7d6542SBram Moolenaar 2228e8c4abbbSBram Moolenaardef Test_for_loop() 2229e8c4abbbSBram Moolenaar let result = '' 2230e8c4abbbSBram Moolenaar for cnt in range(7) 2231e8c4abbbSBram Moolenaar if cnt == 4 2232e8c4abbbSBram Moolenaar break 2233e8c4abbbSBram Moolenaar endif 2234e8c4abbbSBram Moolenaar if cnt == 2 2235e8c4abbbSBram Moolenaar continue 2236e8c4abbbSBram Moolenaar endif 2237e8c4abbbSBram Moolenaar result ..= cnt .. '_' 2238e8c4abbbSBram Moolenaar endfor 2239e8c4abbbSBram Moolenaar assert_equal('0_1_3_', result) 22400ad3e894SBram Moolenaar 22410ad3e894SBram Moolenaar let concat = '' 22420ad3e894SBram Moolenaar for str in eval('["one", "two"]') 22430ad3e894SBram Moolenaar concat ..= str 22440ad3e894SBram Moolenaar endfor 22450ad3e894SBram Moolenaar assert_equal('onetwo', concat) 2246e8c4abbbSBram Moolenaarenddef 2247e8c4abbbSBram Moolenaar 2248e8c4abbbSBram Moolenaardef Test_for_loop_fails() 2249675f716eSBram Moolenaar CheckDefFailure(['for # in range(5)'], 'E690:') 2250675f716eSBram Moolenaar CheckDefFailure(['for i In range(5)'], 'E690:') 2251451c2e35SBram Moolenaar CheckDefFailure(['let x = 5', 'for x in range(5)'], 'E1017:') 2252822ba247SBram Moolenaar CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef', 'defcompile'], 'E1006:') 2253451c2e35SBram Moolenaar CheckDefFailure(['for i in "text"'], 'E1012:') 2254675f716eSBram Moolenaar CheckDefFailure(['for i in xxx'], 'E1001:') 2255675f716eSBram Moolenaar CheckDefFailure(['endfor'], 'E588:') 2256675f716eSBram Moolenaar CheckDefFailure(['for i in range(3)', 'echo 3'], 'E170:') 2257e8c4abbbSBram Moolenaarenddef 2258e8c4abbbSBram Moolenaar 2259d0df1aacSBram Moolenaardef Test_while_loop() 2260d0df1aacSBram Moolenaar let result = '' 2261d0df1aacSBram Moolenaar let cnt = 0 2262d0df1aacSBram Moolenaar while cnt < 555 2263d0df1aacSBram Moolenaar if cnt == 3 2264d0df1aacSBram Moolenaar break 2265d0df1aacSBram Moolenaar endif 2266d0df1aacSBram Moolenaar cnt += 1 2267d0df1aacSBram Moolenaar if cnt == 2 2268d0df1aacSBram Moolenaar continue 2269d0df1aacSBram Moolenaar endif 2270d0df1aacSBram Moolenaar result ..= cnt .. '_' 2271d0df1aacSBram Moolenaar endwhile 2272d0df1aacSBram Moolenaar assert_equal('1_3_', result) 2273d0df1aacSBram Moolenaarenddef 2274d0df1aacSBram Moolenaar 2275e8c4abbbSBram Moolenaardef Test_while_loop_fails() 2276675f716eSBram Moolenaar CheckDefFailure(['while xxx'], 'E1001:') 2277675f716eSBram Moolenaar CheckDefFailure(['endwhile'], 'E588:') 2278675f716eSBram Moolenaar CheckDefFailure(['continue'], 'E586:') 2279675f716eSBram Moolenaar CheckDefFailure(['if true', 'continue'], 'E586:') 2280675f716eSBram Moolenaar CheckDefFailure(['break'], 'E587:') 2281675f716eSBram Moolenaar CheckDefFailure(['if true', 'break'], 'E587:') 2282675f716eSBram Moolenaar CheckDefFailure(['while 1', 'echo 3'], 'E170:') 2283bd5da371SBram Moolenaarenddef 2284bd5da371SBram Moolenaar 22859645e2d9SBram Moolenaardef Test_interrupt_loop() 228697acfc78SBram Moolenaar let caught = false 22879645e2d9SBram Moolenaar let x = 0 228897acfc78SBram Moolenaar try 22899645e2d9SBram Moolenaar while 1 22909645e2d9SBram Moolenaar x += 1 22919645e2d9SBram Moolenaar if x == 100 22929645e2d9SBram Moolenaar feedkeys("\<C-C>", 'Lt') 22939645e2d9SBram Moolenaar endif 22949645e2d9SBram Moolenaar endwhile 229597acfc78SBram Moolenaar catch 229697acfc78SBram Moolenaar caught = true 229797acfc78SBram Moolenaar assert_equal(100, x) 229897acfc78SBram Moolenaar endtry 229997acfc78SBram Moolenaar assert_true(caught, 'should have caught an exception') 23009645e2d9SBram Moolenaarenddef 230120431c9dSBram Moolenaar 23024fdae999SBram Moolenaardef Test_automatic_line_continuation() 23034fdae999SBram Moolenaar let mylist = [ 23044fdae999SBram Moolenaar 'one', 23054fdae999SBram Moolenaar 'two', 23064fdae999SBram Moolenaar 'three', 2307f5be8cdbSBram Moolenaar ] # comment 23084fdae999SBram Moolenaar assert_equal(['one', 'two', 'three'], mylist) 23094fdae999SBram Moolenaar 23104fdae999SBram Moolenaar let mydict = { 23114fdae999SBram Moolenaar 'one': 1, 23124fdae999SBram Moolenaar 'two': 2, 23134fdae999SBram Moolenaar 'three': 23144fdae999SBram Moolenaar 3, 2315f5be8cdbSBram Moolenaar } # comment 23164fdae999SBram Moolenaar assert_equal({'one': 1, 'two': 2, 'three': 3}, mydict) 23174fdae999SBram Moolenaar mydict = #{ 23182c330432SBram Moolenaar one: 1, # comment 23192c330432SBram Moolenaar two: # comment 23202c330432SBram Moolenaar 2, # comment 23212c330432SBram Moolenaar three: 3 # comment 23222c330432SBram Moolenaar } 23232c330432SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 23242c330432SBram Moolenaar mydict = #{ 23252c330432SBram Moolenaar one: 1, 23264fdae999SBram Moolenaar two: 23274fdae999SBram Moolenaar 2, 23282c330432SBram Moolenaar three: 3 23294fdae999SBram Moolenaar } 23304fdae999SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 2331e6085c53SBram Moolenaar 2332e6085c53SBram Moolenaar assert_equal( 2333e6085c53SBram Moolenaar ['one', 'two', 'three'], 2334e6085c53SBram Moolenaar split('one two three') 2335e6085c53SBram Moolenaar ) 23364fdae999SBram Moolenaarenddef 23374fdae999SBram Moolenaar 23387a092245SBram Moolenaardef Test_vim9_comment() 23397a092245SBram Moolenaar CheckScriptSuccess([ 23407a092245SBram Moolenaar 'vim9script', 23417a092245SBram Moolenaar '# something', 23427a092245SBram Moolenaar ]) 23437a092245SBram Moolenaar CheckScriptFailure([ 23447a092245SBram Moolenaar 'vim9script', 23457a092245SBram Moolenaar ':# something', 23467a092245SBram Moolenaar ], 'E488:') 23477a092245SBram Moolenaar CheckScriptFailure([ 23487a092245SBram Moolenaar '# something', 23497a092245SBram Moolenaar ], 'E488:') 23507a092245SBram Moolenaar CheckScriptFailure([ 23517a092245SBram Moolenaar ':# something', 23527a092245SBram Moolenaar ], 'E488:') 23537a092245SBram Moolenaar 23544a8d9f2eSBram Moolenaar { # block start 23554a8d9f2eSBram Moolenaar } # block end 23564a8d9f2eSBram Moolenaar CheckDefFailure([ 23574a8d9f2eSBram Moolenaar '{# comment', 23584a8d9f2eSBram Moolenaar ], 'E488:') 23594a8d9f2eSBram Moolenaar CheckDefFailure([ 23604a8d9f2eSBram Moolenaar '{', 23614a8d9f2eSBram Moolenaar '}# comment', 23624a8d9f2eSBram Moolenaar ], 'E488:') 23634a8d9f2eSBram Moolenaar 23644a8d9f2eSBram Moolenaar echo "yes" # comment 23654a8d9f2eSBram Moolenaar CheckDefFailure([ 23664a8d9f2eSBram Moolenaar 'echo "yes"# comment', 23674a8d9f2eSBram Moolenaar ], 'E488:') 23687a092245SBram Moolenaar CheckScriptSuccess([ 23697a092245SBram Moolenaar 'vim9script', 23707a092245SBram Moolenaar 'echo "yes" # something', 23717a092245SBram Moolenaar ]) 23727a092245SBram Moolenaar CheckScriptFailure([ 23737a092245SBram Moolenaar 'vim9script', 23747a092245SBram Moolenaar 'echo "yes"# something', 23757a092245SBram Moolenaar ], 'E121:') 23767a092245SBram Moolenaar CheckScriptFailure([ 23777a092245SBram Moolenaar 'vim9script', 23787a092245SBram Moolenaar 'echo# something', 23797a092245SBram Moolenaar ], 'E121:') 23807a092245SBram Moolenaar CheckScriptFailure([ 23817a092245SBram Moolenaar 'echo "yes" # something', 23827a092245SBram Moolenaar ], 'E121:') 23837a092245SBram Moolenaar 23844a8d9f2eSBram Moolenaar exe "echo" # comment 23854a8d9f2eSBram Moolenaar CheckDefFailure([ 23864a8d9f2eSBram Moolenaar 'exe "echo"# comment', 23874a8d9f2eSBram Moolenaar ], 'E488:') 23884a8d9f2eSBram Moolenaar CheckScriptSuccess([ 23894a8d9f2eSBram Moolenaar 'vim9script', 23904a8d9f2eSBram Moolenaar 'exe "echo" # something', 23914a8d9f2eSBram Moolenaar ]) 23924a8d9f2eSBram Moolenaar CheckScriptFailure([ 23934a8d9f2eSBram Moolenaar 'vim9script', 23944a8d9f2eSBram Moolenaar 'exe "echo"# something', 23954a8d9f2eSBram Moolenaar ], 'E121:') 23964a8d9f2eSBram Moolenaar CheckDefFailure([ 23974a8d9f2eSBram Moolenaar 'exe # comment', 23984a8d9f2eSBram Moolenaar ], 'E1015:') 23994a8d9f2eSBram Moolenaar CheckScriptFailure([ 24004a8d9f2eSBram Moolenaar 'vim9script', 24014a8d9f2eSBram Moolenaar 'exe# something', 24024a8d9f2eSBram Moolenaar ], 'E121:') 24034a8d9f2eSBram Moolenaar CheckScriptFailure([ 24044a8d9f2eSBram Moolenaar 'exe "echo" # something', 24054a8d9f2eSBram Moolenaar ], 'E121:') 24064a8d9f2eSBram Moolenaar 24077a092245SBram Moolenaar CheckDefFailure([ 24087a092245SBram Moolenaar 'try# comment', 24097a092245SBram Moolenaar ' echo "yes"', 24107a092245SBram Moolenaar 'catch', 24117a092245SBram Moolenaar 'endtry', 24127a092245SBram Moolenaar ], 'E488:') 24132c5ed4e3SBram Moolenaar CheckScriptFailure([ 24142c5ed4e3SBram Moolenaar 'vim9script', 24152c5ed4e3SBram Moolenaar 'try# comment', 24162c5ed4e3SBram Moolenaar 'echo "yes"', 24172c5ed4e3SBram Moolenaar ], 'E488:') 24187a092245SBram Moolenaar CheckDefFailure([ 24197a092245SBram Moolenaar 'try', 2420a72cfb80SBram Moolenaar ' throw#comment', 2421a72cfb80SBram Moolenaar 'catch', 2422a72cfb80SBram Moolenaar 'endtry', 2423a72cfb80SBram Moolenaar ], 'E1015:') 2424a72cfb80SBram Moolenaar CheckDefFailure([ 2425a72cfb80SBram Moolenaar 'try', 2426a72cfb80SBram Moolenaar ' throw "yes"#comment', 2427a72cfb80SBram Moolenaar 'catch', 2428a72cfb80SBram Moolenaar 'endtry', 2429a72cfb80SBram Moolenaar ], 'E488:') 2430a72cfb80SBram Moolenaar CheckDefFailure([ 2431a72cfb80SBram Moolenaar 'try', 24327a092245SBram Moolenaar ' echo "yes"', 24337a092245SBram Moolenaar 'catch# comment', 24347a092245SBram Moolenaar 'endtry', 24357a092245SBram Moolenaar ], 'E488:') 24362c5ed4e3SBram Moolenaar CheckScriptFailure([ 24372c5ed4e3SBram Moolenaar 'vim9script', 24382c5ed4e3SBram Moolenaar 'try', 24392c5ed4e3SBram Moolenaar ' echo "yes"', 24402c5ed4e3SBram Moolenaar 'catch# comment', 24412c5ed4e3SBram Moolenaar 'endtry', 24422c5ed4e3SBram Moolenaar ], 'E654:') 24432c5ed4e3SBram Moolenaar CheckDefFailure([ 24442c5ed4e3SBram Moolenaar 'try', 24452c5ed4e3SBram Moolenaar ' echo "yes"', 24462c5ed4e3SBram Moolenaar 'catch /pat/# comment', 24472c5ed4e3SBram Moolenaar 'endtry', 24482c5ed4e3SBram Moolenaar ], 'E488:') 24497a092245SBram Moolenaar CheckDefFailure([ 24507a092245SBram Moolenaar 'try', 24517a092245SBram Moolenaar 'echo "yes"', 24527a092245SBram Moolenaar 'catch', 24537a092245SBram Moolenaar 'endtry# comment', 24547a092245SBram Moolenaar ], 'E488:') 24552c5ed4e3SBram Moolenaar CheckScriptFailure([ 24562c5ed4e3SBram Moolenaar 'vim9script', 24572c5ed4e3SBram Moolenaar 'try', 24582c5ed4e3SBram Moolenaar ' echo "yes"', 24592c5ed4e3SBram Moolenaar 'catch', 24602c5ed4e3SBram Moolenaar 'endtry# comment', 24619b7bf9e9SBram Moolenaar ], 'E488:') 24622c5ed4e3SBram Moolenaar 24632c5ed4e3SBram Moolenaar CheckScriptSuccess([ 24642c5ed4e3SBram Moolenaar 'vim9script', 24652c5ed4e3SBram Moolenaar 'hi # comment', 24662c5ed4e3SBram Moolenaar ]) 24672c5ed4e3SBram Moolenaar CheckScriptFailure([ 24682c5ed4e3SBram Moolenaar 'vim9script', 24692c5ed4e3SBram Moolenaar 'hi# comment', 24702c5ed4e3SBram Moolenaar ], 'E416:') 24711966c248SBram Moolenaar CheckScriptSuccess([ 24721966c248SBram Moolenaar 'vim9script', 24731966c248SBram Moolenaar 'hi Search # comment', 24741966c248SBram Moolenaar ]) 24751966c248SBram Moolenaar CheckScriptFailure([ 24761966c248SBram Moolenaar 'vim9script', 24771966c248SBram Moolenaar 'hi Search# comment', 24781966c248SBram Moolenaar ], 'E416:') 24791966c248SBram Moolenaar CheckScriptSuccess([ 24801966c248SBram Moolenaar 'vim9script', 24811966c248SBram Moolenaar 'hi link This Search # comment', 24821966c248SBram Moolenaar ]) 24831966c248SBram Moolenaar CheckScriptFailure([ 24841966c248SBram Moolenaar 'vim9script', 24851966c248SBram Moolenaar 'hi link This That# comment', 24861966c248SBram Moolenaar ], 'E413:') 24871966c248SBram Moolenaar CheckScriptSuccess([ 24881966c248SBram Moolenaar 'vim9script', 24891966c248SBram Moolenaar 'hi clear This # comment', 24901966c248SBram Moolenaar 'hi clear # comment', 24911966c248SBram Moolenaar ]) 2492f5be8cdbSBram Moolenaar # not tested, because it doesn't give an error but a warning: 2493f5be8cdbSBram Moolenaar # hi clear This# comment', 24941966c248SBram Moolenaar CheckScriptFailure([ 24951966c248SBram Moolenaar 'vim9script', 24961966c248SBram Moolenaar 'hi clear# comment', 24971966c248SBram Moolenaar ], 'E416:') 24981966c248SBram Moolenaar 24991966c248SBram Moolenaar CheckScriptSuccess([ 25001966c248SBram Moolenaar 'vim9script', 25011966c248SBram Moolenaar 'hi Group term=bold', 25021966c248SBram Moolenaar 'match Group /todo/ # comment', 25031966c248SBram Moolenaar ]) 25041966c248SBram Moolenaar CheckScriptFailure([ 25051966c248SBram Moolenaar 'vim9script', 25061966c248SBram Moolenaar 'hi Group term=bold', 25071966c248SBram Moolenaar 'match Group /todo/# comment', 25081966c248SBram Moolenaar ], 'E488:') 25091966c248SBram Moolenaar CheckScriptSuccess([ 25101966c248SBram Moolenaar 'vim9script', 25111966c248SBram Moolenaar 'match # comment', 25121966c248SBram Moolenaar ]) 25131966c248SBram Moolenaar CheckScriptFailure([ 25141966c248SBram Moolenaar 'vim9script', 25151966c248SBram Moolenaar 'match# comment', 25161966c248SBram Moolenaar ], 'E475:') 25171966c248SBram Moolenaar CheckScriptSuccess([ 25181966c248SBram Moolenaar 'vim9script', 25191966c248SBram Moolenaar 'match none # comment', 25201966c248SBram Moolenaar ]) 25211966c248SBram Moolenaar CheckScriptFailure([ 25221966c248SBram Moolenaar 'vim9script', 25231966c248SBram Moolenaar 'match none# comment', 25241966c248SBram Moolenaar ], 'E475:') 25251966c248SBram Moolenaar 25261966c248SBram Moolenaar CheckScriptSuccess([ 25271966c248SBram Moolenaar 'vim9script', 25281966c248SBram Moolenaar 'menutrans clear # comment', 25291966c248SBram Moolenaar ]) 25301966c248SBram Moolenaar CheckScriptFailure([ 25311966c248SBram Moolenaar 'vim9script', 25321966c248SBram Moolenaar 'menutrans clear# comment text', 25331966c248SBram Moolenaar ], 'E474:') 25341966c248SBram Moolenaar 25351966c248SBram Moolenaar CheckScriptSuccess([ 25361966c248SBram Moolenaar 'vim9script', 25371966c248SBram Moolenaar 'syntax clear # comment', 25381966c248SBram Moolenaar ]) 25391966c248SBram Moolenaar CheckScriptFailure([ 25401966c248SBram Moolenaar 'vim9script', 25411966c248SBram Moolenaar 'syntax clear# comment text', 25421966c248SBram Moolenaar ], 'E28:') 25431966c248SBram Moolenaar CheckScriptSuccess([ 25441966c248SBram Moolenaar 'vim9script', 25451966c248SBram Moolenaar 'syntax keyword Word some', 25461966c248SBram Moolenaar 'syntax clear Word # comment', 25471966c248SBram Moolenaar ]) 25481966c248SBram Moolenaar CheckScriptFailure([ 25491966c248SBram Moolenaar 'vim9script', 25501966c248SBram Moolenaar 'syntax keyword Word some', 25511966c248SBram Moolenaar 'syntax clear Word# comment text', 25521966c248SBram Moolenaar ], 'E28:') 25531966c248SBram Moolenaar 25541966c248SBram Moolenaar CheckScriptSuccess([ 25551966c248SBram Moolenaar 'vim9script', 25561966c248SBram Moolenaar 'syntax list # comment', 25571966c248SBram Moolenaar ]) 25581966c248SBram Moolenaar CheckScriptFailure([ 25591966c248SBram Moolenaar 'vim9script', 25601966c248SBram Moolenaar 'syntax list# comment text', 25611966c248SBram Moolenaar ], 'E28:') 25621966c248SBram Moolenaar 25631966c248SBram Moolenaar CheckScriptSuccess([ 25641966c248SBram Moolenaar 'vim9script', 25651966c248SBram Moolenaar 'syntax match Word /pat/ oneline # comment', 25661966c248SBram Moolenaar ]) 25671966c248SBram Moolenaar CheckScriptFailure([ 25681966c248SBram Moolenaar 'vim9script', 25691966c248SBram Moolenaar 'syntax match Word /pat/ oneline# comment', 25701966c248SBram Moolenaar ], 'E475:') 25711966c248SBram Moolenaar 25721966c248SBram Moolenaar CheckScriptSuccess([ 25731966c248SBram Moolenaar 'vim9script', 25741966c248SBram Moolenaar 'syntax keyword Word word # comm[ent', 25751966c248SBram Moolenaar ]) 25761966c248SBram Moolenaar CheckScriptFailure([ 25771966c248SBram Moolenaar 'vim9script', 25781966c248SBram Moolenaar 'syntax keyword Word word# comm[ent', 25791966c248SBram Moolenaar ], 'E789:') 25801966c248SBram Moolenaar 25811966c248SBram Moolenaar CheckScriptSuccess([ 25821966c248SBram Moolenaar 'vim9script', 25831966c248SBram Moolenaar 'syntax match Word /pat/ # comment', 25841966c248SBram Moolenaar ]) 25851966c248SBram Moolenaar CheckScriptFailure([ 25861966c248SBram Moolenaar 'vim9script', 25871966c248SBram Moolenaar 'syntax match Word /pat/# comment', 25881966c248SBram Moolenaar ], 'E402:') 25891966c248SBram Moolenaar 25901966c248SBram Moolenaar CheckScriptSuccess([ 25911966c248SBram Moolenaar 'vim9script', 25921966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something # comment', 25931966c248SBram Moolenaar ]) 25941966c248SBram Moolenaar CheckScriptFailure([ 25951966c248SBram Moolenaar 'vim9script', 25961966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something# comment', 25971966c248SBram Moolenaar ], 'E475:') 25981966c248SBram Moolenaar CheckScriptFailure([ 25991966c248SBram Moolenaar 'vim9script', 26001966c248SBram Moolenaar 'syntax match Word /pat/ contains= # comment', 26011966c248SBram Moolenaar ], 'E406:') 26021966c248SBram Moolenaar CheckScriptFailure([ 26031966c248SBram Moolenaar 'vim9script', 26041966c248SBram Moolenaar 'syntax match Word /pat/ contains=# comment', 26051966c248SBram Moolenaar ], 'E475:') 26061966c248SBram Moolenaar 26071966c248SBram Moolenaar CheckScriptSuccess([ 26081966c248SBram Moolenaar 'vim9script', 26091966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/ # comment', 26101966c248SBram Moolenaar ]) 26111966c248SBram Moolenaar CheckScriptFailure([ 26121966c248SBram Moolenaar 'vim9script', 26131966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/# comment', 2614d032f34aSBram Moolenaar ], 'E402:') 26151966c248SBram Moolenaar 26161966c248SBram Moolenaar CheckScriptSuccess([ 26171966c248SBram Moolenaar 'vim9script', 26181966c248SBram Moolenaar 'syntax sync # comment', 26191966c248SBram Moolenaar ]) 26201966c248SBram Moolenaar CheckScriptFailure([ 26211966c248SBram Moolenaar 'vim9script', 26221966c248SBram Moolenaar 'syntax sync# comment', 26231966c248SBram Moolenaar ], 'E404:') 26241966c248SBram Moolenaar CheckScriptSuccess([ 26251966c248SBram Moolenaar 'vim9script', 26261966c248SBram Moolenaar 'syntax sync ccomment # comment', 26271966c248SBram Moolenaar ]) 26281966c248SBram Moolenaar CheckScriptFailure([ 26291966c248SBram Moolenaar 'vim9script', 26301966c248SBram Moolenaar 'syntax sync ccomment# comment', 26311966c248SBram Moolenaar ], 'E404:') 26321966c248SBram Moolenaar 26331966c248SBram Moolenaar CheckScriptSuccess([ 26341966c248SBram Moolenaar 'vim9script', 26351966c248SBram Moolenaar 'syntax cluster Some contains=Word # comment', 26361966c248SBram Moolenaar ]) 26371966c248SBram Moolenaar CheckScriptFailure([ 26381966c248SBram Moolenaar 'vim9script', 26391966c248SBram Moolenaar 'syntax cluster Some contains=Word# comment', 26401966c248SBram Moolenaar ], 'E475:') 2641a72cfb80SBram Moolenaar 2642a72cfb80SBram Moolenaar CheckScriptSuccess([ 2643a72cfb80SBram Moolenaar 'vim9script', 2644a72cfb80SBram Moolenaar 'command Echo echo # comment', 2645a72cfb80SBram Moolenaar 'command Echo # comment', 2646a72cfb80SBram Moolenaar ]) 2647a72cfb80SBram Moolenaar CheckScriptFailure([ 2648a72cfb80SBram Moolenaar 'vim9script', 2649a72cfb80SBram Moolenaar 'command Echo echo# comment', 2650a72cfb80SBram Moolenaar 'Echo', 2651a72cfb80SBram Moolenaar ], 'E121:') 2652a72cfb80SBram Moolenaar CheckScriptFailure([ 2653a72cfb80SBram Moolenaar 'vim9script', 2654a72cfb80SBram Moolenaar 'command Echo# comment', 2655a72cfb80SBram Moolenaar ], 'E182:') 2656a72cfb80SBram Moolenaar CheckScriptFailure([ 2657a72cfb80SBram Moolenaar 'vim9script', 2658a72cfb80SBram Moolenaar 'command Echo echo', 2659a72cfb80SBram Moolenaar 'command Echo# comment', 2660a72cfb80SBram Moolenaar ], 'E182:') 2661a72cfb80SBram Moolenaar 2662a72cfb80SBram Moolenaar CheckScriptSuccess([ 2663a72cfb80SBram Moolenaar 'vim9script', 2664a72cfb80SBram Moolenaar 'function # comment', 2665a72cfb80SBram Moolenaar ]) 2666a72cfb80SBram Moolenaar CheckScriptFailure([ 2667a72cfb80SBram Moolenaar 'vim9script', 26689898107fSBram Moolenaar 'function " comment', 26699898107fSBram Moolenaar ], 'E129:') 26709898107fSBram Moolenaar CheckScriptFailure([ 26719898107fSBram Moolenaar 'vim9script', 2672a72cfb80SBram Moolenaar 'function# comment', 2673a72cfb80SBram Moolenaar ], 'E129:') 2674a72cfb80SBram Moolenaar CheckScriptSuccess([ 2675a72cfb80SBram Moolenaar 'vim9script', 2676a72cfb80SBram Moolenaar 'function CheckScriptSuccess # comment', 2677a72cfb80SBram Moolenaar ]) 2678a72cfb80SBram Moolenaar CheckScriptFailure([ 2679a72cfb80SBram Moolenaar 'vim9script', 2680a72cfb80SBram Moolenaar 'function CheckScriptSuccess# comment', 2681a72cfb80SBram Moolenaar ], 'E488:') 2682a72cfb80SBram Moolenaar 2683a72cfb80SBram Moolenaar CheckScriptSuccess([ 2684a72cfb80SBram Moolenaar 'vim9script', 26854c17ad94SBram Moolenaar 'func g:DeleteMeA()', 2686a72cfb80SBram Moolenaar 'endfunc', 26874c17ad94SBram Moolenaar 'delfunction g:DeleteMeA # comment', 2688a72cfb80SBram Moolenaar ]) 2689a72cfb80SBram Moolenaar CheckScriptFailure([ 2690a72cfb80SBram Moolenaar 'vim9script', 26914c17ad94SBram Moolenaar 'func g:DeleteMeB()', 2692a72cfb80SBram Moolenaar 'endfunc', 26934c17ad94SBram Moolenaar 'delfunction g:DeleteMeB# comment', 2694a72cfb80SBram Moolenaar ], 'E488:') 2695a72cfb80SBram Moolenaar 2696a72cfb80SBram Moolenaar CheckScriptSuccess([ 2697a72cfb80SBram Moolenaar 'vim9script', 2698a72cfb80SBram Moolenaar 'call execute("ls") # comment', 2699a72cfb80SBram Moolenaar ]) 2700a72cfb80SBram Moolenaar CheckScriptFailure([ 2701a72cfb80SBram Moolenaar 'vim9script', 2702a72cfb80SBram Moolenaar 'call execute("ls")# comment', 2703a72cfb80SBram Moolenaar ], 'E488:') 2704e7e4838fSBram Moolenaar 2705e7e4838fSBram Moolenaar CheckScriptFailure([ 2706e7e4838fSBram Moolenaar 'def Test() " comment', 2707e7e4838fSBram Moolenaar 'enddef', 2708e7e4838fSBram Moolenaar ], 'E488:') 2709e7e4838fSBram Moolenaar CheckScriptFailure([ 2710e7e4838fSBram Moolenaar 'vim9script', 2711e7e4838fSBram Moolenaar 'def Test() " comment', 2712e7e4838fSBram Moolenaar 'enddef', 2713e7e4838fSBram Moolenaar ], 'E488:') 2714e7e4838fSBram Moolenaar 2715e7e4838fSBram Moolenaar CheckScriptSuccess([ 2716e7e4838fSBram Moolenaar 'func Test() " comment', 2717e7e4838fSBram Moolenaar 'endfunc', 2718e7e4838fSBram Moolenaar ]) 27199898107fSBram Moolenaar CheckScriptSuccess([ 2720e7e4838fSBram Moolenaar 'vim9script', 2721e7e4838fSBram Moolenaar 'func Test() " comment', 2722e7e4838fSBram Moolenaar 'endfunc', 27239898107fSBram Moolenaar ]) 2724e7e4838fSBram Moolenaar 2725e7e4838fSBram Moolenaar CheckScriptSuccess([ 2726e7e4838fSBram Moolenaar 'def Test() # comment', 2727e7e4838fSBram Moolenaar 'enddef', 2728e7e4838fSBram Moolenaar ]) 2729e7e4838fSBram Moolenaar CheckScriptFailure([ 2730e7e4838fSBram Moolenaar 'func Test() # comment', 2731e7e4838fSBram Moolenaar 'endfunc', 2732e7e4838fSBram Moolenaar ], 'E488:') 27332c5ed4e3SBram Moolenaarenddef 27342c5ed4e3SBram Moolenaar 27352c5ed4e3SBram Moolenaardef Test_vim9_comment_gui() 27362c5ed4e3SBram Moolenaar CheckCanRunGui 27372c5ed4e3SBram Moolenaar 27382c5ed4e3SBram Moolenaar CheckScriptFailure([ 27392c5ed4e3SBram Moolenaar 'vim9script', 27402c5ed4e3SBram Moolenaar 'gui#comment' 27412c5ed4e3SBram Moolenaar ], 'E499:') 27422c5ed4e3SBram Moolenaar CheckScriptFailure([ 27432c5ed4e3SBram Moolenaar 'vim9script', 27442c5ed4e3SBram Moolenaar 'gui -f#comment' 27452c5ed4e3SBram Moolenaar ], 'E499:') 27467a092245SBram Moolenaarenddef 27477a092245SBram Moolenaar 2748a26b9700SBram Moolenaardef Test_vim9_comment_not_compiled() 27496797966dSBram Moolenaar au TabEnter *.vim g:entered = 1 27506797966dSBram Moolenaar au TabEnter *.x g:entered = 2 2751a26b9700SBram Moolenaar 2752a26b9700SBram Moolenaar edit test.vim 2753a26b9700SBram Moolenaar doautocmd TabEnter #comment 2754a26b9700SBram Moolenaar assert_equal(1, g:entered) 2755a26b9700SBram Moolenaar 2756a26b9700SBram Moolenaar doautocmd TabEnter f.x 2757a26b9700SBram Moolenaar assert_equal(2, g:entered) 2758a26b9700SBram Moolenaar 2759a26b9700SBram Moolenaar g:entered = 0 2760a26b9700SBram Moolenaar doautocmd TabEnter f.x #comment 2761a26b9700SBram Moolenaar assert_equal(2, g:entered) 2762a26b9700SBram Moolenaar 2763a26b9700SBram Moolenaar assert_fails('doautocmd Syntax#comment', 'E216:') 2764a26b9700SBram Moolenaar 2765a26b9700SBram Moolenaar au! TabEnter 2766a26b9700SBram Moolenaar unlet g:entered 2767d72c1bf0SBram Moolenaar 2768d72c1bf0SBram Moolenaar CheckScriptSuccess([ 2769d72c1bf0SBram Moolenaar 'vim9script', 27706797966dSBram Moolenaar 'g:var = 123', 2771e55b1c09SBram Moolenaar 'b:var = 456', 2772e55b1c09SBram Moolenaar 'w:var = 777', 2773e55b1c09SBram Moolenaar 't:var = 888', 2774d72c1bf0SBram Moolenaar 'unlet g:var w:var # something', 2775d72c1bf0SBram Moolenaar ]) 2776d72c1bf0SBram Moolenaar 2777d72c1bf0SBram Moolenaar CheckScriptFailure([ 2778d72c1bf0SBram Moolenaar 'vim9script', 2779d72c1bf0SBram Moolenaar 'let g:var = 123', 2780e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a global variable:') 2781e55b1c09SBram Moolenaar 2782e55b1c09SBram Moolenaar CheckScriptFailure([ 2783e55b1c09SBram Moolenaar 'vim9script', 2784e55b1c09SBram Moolenaar 'let b:var = 123', 2785e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a buffer variable:') 2786e55b1c09SBram Moolenaar 2787e55b1c09SBram Moolenaar CheckScriptFailure([ 2788e55b1c09SBram Moolenaar 'vim9script', 2789e55b1c09SBram Moolenaar 'let w:var = 123', 2790e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a window variable:') 2791e55b1c09SBram Moolenaar 2792e55b1c09SBram Moolenaar CheckScriptFailure([ 2793e55b1c09SBram Moolenaar 'vim9script', 2794e55b1c09SBram Moolenaar 'let t:var = 123', 2795e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a tab variable:') 2796e55b1c09SBram Moolenaar 2797e55b1c09SBram Moolenaar CheckScriptFailure([ 2798e55b1c09SBram Moolenaar 'vim9script', 2799e55b1c09SBram Moolenaar 'let v:version = 123', 2800e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a v: variable:') 2801e55b1c09SBram Moolenaar 2802e55b1c09SBram Moolenaar CheckScriptFailure([ 2803e55b1c09SBram Moolenaar 'vim9script', 2804e55b1c09SBram Moolenaar 'let $VARIABLE = "text"', 2805e55b1c09SBram Moolenaar ], 'E1016: Cannot declare an environment variable:') 28066797966dSBram Moolenaar 28076797966dSBram Moolenaar CheckScriptFailure([ 28086797966dSBram Moolenaar 'vim9script', 28096797966dSBram Moolenaar 'g:var = 123', 281032e35117SBram Moolenaar 'unlet g:var# comment1', 2811d72c1bf0SBram Moolenaar ], 'E108:') 2812d72c1bf0SBram Moolenaar 2813d72c1bf0SBram Moolenaar CheckScriptFailure([ 2814d72c1bf0SBram Moolenaar 'let g:var = 123', 2815d72c1bf0SBram Moolenaar 'unlet g:var # something', 2816d72c1bf0SBram Moolenaar ], 'E488:') 2817faac4104SBram Moolenaar 2818faac4104SBram Moolenaar CheckScriptSuccess([ 2819faac4104SBram Moolenaar 'vim9script', 282032e35117SBram Moolenaar 'if 1 # comment2', 2821faac4104SBram Moolenaar ' echo "yes"', 2822faac4104SBram Moolenaar 'elseif 2 #comment', 2823faac4104SBram Moolenaar ' echo "no"', 2824faac4104SBram Moolenaar 'endif', 2825faac4104SBram Moolenaar ]) 2826faac4104SBram Moolenaar 2827faac4104SBram Moolenaar CheckScriptFailure([ 2828faac4104SBram Moolenaar 'vim9script', 282932e35117SBram Moolenaar 'if 1# comment3', 2830faac4104SBram Moolenaar ' echo "yes"', 2831faac4104SBram Moolenaar 'endif', 2832faac4104SBram Moolenaar ], 'E15:') 2833faac4104SBram Moolenaar 2834faac4104SBram Moolenaar CheckScriptFailure([ 2835faac4104SBram Moolenaar 'vim9script', 283632e35117SBram Moolenaar 'if 0 # comment4', 2837faac4104SBram Moolenaar ' echo "yes"', 2838faac4104SBram Moolenaar 'elseif 2#comment', 2839faac4104SBram Moolenaar ' echo "no"', 2840faac4104SBram Moolenaar 'endif', 2841faac4104SBram Moolenaar ], 'E15:') 2842faac4104SBram Moolenaar 2843faac4104SBram Moolenaar CheckScriptSuccess([ 2844faac4104SBram Moolenaar 'vim9script', 284532e35117SBram Moolenaar 'let v = 1 # comment5', 2846faac4104SBram Moolenaar ]) 2847faac4104SBram Moolenaar 2848faac4104SBram Moolenaar CheckScriptFailure([ 2849faac4104SBram Moolenaar 'vim9script', 285032e35117SBram Moolenaar 'let v = 1# comment6', 285132e35117SBram Moolenaar ], 'E15:') 2852faac4104SBram Moolenaar 2853faac4104SBram Moolenaar CheckScriptSuccess([ 2854faac4104SBram Moolenaar 'vim9script', 2855faac4104SBram Moolenaar 'new' 2856faac4104SBram Moolenaar 'call setline(1, ["# define pat", "last"])', 2857df069eecSBram Moolenaar ':$', 2858faac4104SBram Moolenaar 'dsearch /pat/ #comment', 2859faac4104SBram Moolenaar 'bwipe!', 2860faac4104SBram Moolenaar ]) 2861faac4104SBram Moolenaar 2862f5be8cdbSBram Moolenaar CheckScriptFailure([ 2863f5be8cdbSBram Moolenaar 'vim9script', 2864f5be8cdbSBram Moolenaar 'new' 2865f5be8cdbSBram Moolenaar 'call setline(1, ["# define pat", "last"])', 2866f5be8cdbSBram Moolenaar ':$', 2867f5be8cdbSBram Moolenaar 'dsearch /pat/#comment', 2868f5be8cdbSBram Moolenaar 'bwipe!', 2869f5be8cdbSBram Moolenaar ], 'E488:') 2870f5be8cdbSBram Moolenaar 2871f5be8cdbSBram Moolenaar CheckScriptFailure([ 2872f5be8cdbSBram Moolenaar 'vim9script', 2873f5be8cdbSBram Moolenaar 'func! SomeFunc()', 2874f5be8cdbSBram Moolenaar ], 'E477:') 2875a26b9700SBram Moolenaarenddef 2876a26b9700SBram Moolenaar 28777e5bd91dSBram Moolenaardef Test_finish() 28787e5bd91dSBram Moolenaar let lines =<< trim END 28797e5bd91dSBram Moolenaar vim9script 28806797966dSBram Moolenaar g:res = 'one' 28817e5bd91dSBram Moolenaar if v:false | finish | endif 28826797966dSBram Moolenaar g:res = 'two' 28837e5bd91dSBram Moolenaar finish 28846797966dSBram Moolenaar g:res = 'three' 28857e5bd91dSBram Moolenaar END 28867e5bd91dSBram Moolenaar writefile(lines, 'Xfinished') 28877e5bd91dSBram Moolenaar source Xfinished 28887e5bd91dSBram Moolenaar assert_equal('two', g:res) 28897e5bd91dSBram Moolenaar 28907e5bd91dSBram Moolenaar unlet g:res 28917e5bd91dSBram Moolenaar delete('Xfinished') 28927e5bd91dSBram Moolenaarenddef 28937e5bd91dSBram Moolenaar 289432e35117SBram Moolenaardef Test_let_func_call() 289532e35117SBram Moolenaar let lines =<< trim END 289632e35117SBram Moolenaar vim9script 289732e35117SBram Moolenaar func GetValue() 289832e35117SBram Moolenaar if exists('g:count') 289932e35117SBram Moolenaar let g:count += 1 290032e35117SBram Moolenaar else 290132e35117SBram Moolenaar let g:count = 1 290232e35117SBram Moolenaar endif 290332e35117SBram Moolenaar return 'this' 290432e35117SBram Moolenaar endfunc 290532e35117SBram Moolenaar let val: string = GetValue() 2906f5be8cdbSBram Moolenaar # env var is always a string 2907df671b46SBram Moolenaar let env = $TERM 290832e35117SBram Moolenaar END 290932e35117SBram Moolenaar writefile(lines, 'Xfinished') 291032e35117SBram Moolenaar source Xfinished 2911f5be8cdbSBram Moolenaar # GetValue() is not called during discovery phase 291232e35117SBram Moolenaar assert_equal(1, g:count) 291332e35117SBram Moolenaar 291432e35117SBram Moolenaar unlet g:count 291532e35117SBram Moolenaar delete('Xfinished') 291632e35117SBram Moolenaarenddef 291732e35117SBram Moolenaar 291832e35117SBram Moolenaardef Test_let_missing_type() 291932e35117SBram Moolenaar let lines =<< trim END 292032e35117SBram Moolenaar vim9script 2921df671b46SBram Moolenaar let var = g:unknown 2922227a69deSBram Moolenaar END 2923822ba247SBram Moolenaar CheckScriptFailure(lines, 'E121:') 2924227a69deSBram Moolenaar 2925227a69deSBram Moolenaar lines =<< trim END 2926227a69deSBram Moolenaar vim9script 2927227a69deSBram Moolenaar let nr: number = 123 2928227a69deSBram Moolenaar let var = nr 2929227a69deSBram Moolenaar END 2930822ba247SBram Moolenaar CheckScriptSuccess(lines) 293132e35117SBram Moolenaarenddef 293232e35117SBram Moolenaar 2933c82a5b5dSBram Moolenaardef Test_let_declaration() 2934c82a5b5dSBram Moolenaar let lines =<< trim END 2935c82a5b5dSBram Moolenaar vim9script 2936c82a5b5dSBram Moolenaar let var: string 2937c82a5b5dSBram Moolenaar g:var_uninit = var 2938c82a5b5dSBram Moolenaar var = 'text' 2939c82a5b5dSBram Moolenaar g:var_test = var 2940f5be8cdbSBram Moolenaar # prefixing s: is optional 2941984dddbeSBram Moolenaar s:var = 'prefixed' 2942984dddbeSBram Moolenaar g:var_prefixed = s:var 2943984dddbeSBram Moolenaar 2944984dddbeSBram Moolenaar let s:other: number 2945984dddbeSBram Moolenaar other = 1234 2946984dddbeSBram Moolenaar g:other_var = other 294753b29e48SBram Moolenaar 294853b29e48SBram Moolenaar # type is inferred 294953b29e48SBram Moolenaar s:dict = {'a': 222} 295053b29e48SBram Moolenaar def GetDictVal(key: any) 295153b29e48SBram Moolenaar g:dict_val = s:dict[key] 295253b29e48SBram Moolenaar enddef 295353b29e48SBram Moolenaar GetDictVal('a') 2954c82a5b5dSBram Moolenaar END 2955c82a5b5dSBram Moolenaar CheckScriptSuccess(lines) 2956c82a5b5dSBram Moolenaar assert_equal('', g:var_uninit) 2957c82a5b5dSBram Moolenaar assert_equal('text', g:var_test) 2958984dddbeSBram Moolenaar assert_equal('prefixed', g:var_prefixed) 2959984dddbeSBram Moolenaar assert_equal(1234, g:other_var) 296053b29e48SBram Moolenaar assert_equal(222, g:dict_val) 2961c82a5b5dSBram Moolenaar 2962c82a5b5dSBram Moolenaar unlet g:var_uninit 2963c82a5b5dSBram Moolenaar unlet g:var_test 2964984dddbeSBram Moolenaar unlet g:var_prefixed 2965984dddbeSBram Moolenaar unlet g:other_var 2966c82a5b5dSBram Moolenaarenddef 2967c82a5b5dSBram Moolenaar 2968c5b1c20bSBram Moolenaardef Test_let_declaration_fails() 2969c5b1c20bSBram Moolenaar let lines =<< trim END 2970c5b1c20bSBram Moolenaar vim9script 2971c5b1c20bSBram Moolenaar const var: string 2972c5b1c20bSBram Moolenaar END 2973c5b1c20bSBram Moolenaar CheckScriptFailure(lines, 'E1021:') 2974c5b1c20bSBram Moolenaar 2975c5b1c20bSBram Moolenaar lines =<< trim END 2976c5b1c20bSBram Moolenaar vim9script 2977c5b1c20bSBram Moolenaar let 9var: string 2978c5b1c20bSBram Moolenaar END 2979c5b1c20bSBram Moolenaar CheckScriptFailure(lines, 'E475:') 2980c5b1c20bSBram Moolenaarenddef 2981c5b1c20bSBram Moolenaar 298234db91f7SBram Moolenaardef Test_let_type_check() 298334db91f7SBram Moolenaar let lines =<< trim END 298434db91f7SBram Moolenaar vim9script 298534db91f7SBram Moolenaar let var: string 298634db91f7SBram Moolenaar var = 1234 298734db91f7SBram Moolenaar END 2988451c2e35SBram Moolenaar CheckScriptFailure(lines, 'E1012:') 2989984dddbeSBram Moolenaar 2990984dddbeSBram Moolenaar lines =<< trim END 2991984dddbeSBram Moolenaar vim9script 2992984dddbeSBram Moolenaar let var:string 2993984dddbeSBram Moolenaar END 2994984dddbeSBram Moolenaar CheckScriptFailure(lines, 'E1069:') 2995c5b1c20bSBram Moolenaar 2996c5b1c20bSBram Moolenaar lines =<< trim END 2997c5b1c20bSBram Moolenaar vim9script 2998c5b1c20bSBram Moolenaar let var: asdf 2999c5b1c20bSBram Moolenaar END 3000c5b1c20bSBram Moolenaar CheckScriptFailure(lines, 'E1010:') 3001a71e2633SBram Moolenaar 3002a71e2633SBram Moolenaar lines =<< trim END 3003a71e2633SBram Moolenaar vim9script 3004a71e2633SBram Moolenaar let s:l: list<number> 3005a71e2633SBram Moolenaar s:l = [] 3006a71e2633SBram Moolenaar END 3007a71e2633SBram Moolenaar CheckScriptSuccess(lines) 3008a71e2633SBram Moolenaar 3009a71e2633SBram Moolenaar lines =<< trim END 3010a71e2633SBram Moolenaar vim9script 3011a71e2633SBram Moolenaar let s:d: dict<number> 3012a71e2633SBram Moolenaar s:d = {} 3013a71e2633SBram Moolenaar END 3014a71e2633SBram Moolenaar CheckScriptSuccess(lines) 301534db91f7SBram Moolenaarenddef 301634db91f7SBram Moolenaar 3017a5d0077eSBram Moolenaardef Test_forward_declaration() 3018a5d0077eSBram Moolenaar let lines =<< trim END 3019a5d0077eSBram Moolenaar vim9script 3020a5d0077eSBram Moolenaar def GetValue(): string 3021a5d0077eSBram Moolenaar return theVal 3022a5d0077eSBram Moolenaar enddef 3023a5d0077eSBram Moolenaar let theVal = 'something' 3024822ba247SBram Moolenaar g:initVal = GetValue() 3025a5d0077eSBram Moolenaar theVal = 'else' 3026a5d0077eSBram Moolenaar g:laterVal = GetValue() 3027a5d0077eSBram Moolenaar END 3028a5d0077eSBram Moolenaar writefile(lines, 'Xforward') 3029a5d0077eSBram Moolenaar source Xforward 3030a5d0077eSBram Moolenaar assert_equal('something', g:initVal) 3031a5d0077eSBram Moolenaar assert_equal('else', g:laterVal) 3032a5d0077eSBram Moolenaar 3033a5d0077eSBram Moolenaar unlet g:initVal 3034a5d0077eSBram Moolenaar unlet g:laterVal 3035a5d0077eSBram Moolenaar delete('Xforward') 3036a5d0077eSBram Moolenaarenddef 3037a5d0077eSBram Moolenaar 30389721fb4eSBram Moolenaardef Test_source_vim9_from_legacy() 30399721fb4eSBram Moolenaar let legacy_lines =<< trim END 30409721fb4eSBram Moolenaar source Xvim9_script.vim 30419721fb4eSBram Moolenaar 30429721fb4eSBram Moolenaar call assert_false(exists('local')) 30439721fb4eSBram Moolenaar call assert_false(exists('exported')) 30449721fb4eSBram Moolenaar call assert_false(exists('s:exported')) 30459721fb4eSBram Moolenaar call assert_equal('global', global) 30469721fb4eSBram Moolenaar call assert_equal('global', g:global) 30479721fb4eSBram Moolenaar 30489721fb4eSBram Moolenaar " imported variable becomes script-local 30499721fb4eSBram Moolenaar import exported from './Xvim9_script.vim' 30509721fb4eSBram Moolenaar call assert_equal('exported', s:exported) 30519721fb4eSBram Moolenaar call assert_false(exists('exported')) 30529721fb4eSBram Moolenaar 30539721fb4eSBram Moolenaar " imported function becomes script-local 30549721fb4eSBram Moolenaar import GetText from './Xvim9_script.vim' 30559721fb4eSBram Moolenaar call assert_equal('text', s:GetText()) 30569721fb4eSBram Moolenaar call assert_false(exists('*GetText')) 30579721fb4eSBram Moolenaar END 30589721fb4eSBram Moolenaar writefile(legacy_lines, 'Xlegacy_script.vim') 30599721fb4eSBram Moolenaar 30609721fb4eSBram Moolenaar let vim9_lines =<< trim END 30619721fb4eSBram Moolenaar vim9script 30629721fb4eSBram Moolenaar let local = 'local' 30639721fb4eSBram Moolenaar g:global = 'global' 30649721fb4eSBram Moolenaar export let exported = 'exported' 30659721fb4eSBram Moolenaar export def GetText(): string 30669721fb4eSBram Moolenaar return 'text' 30679721fb4eSBram Moolenaar enddef 30689721fb4eSBram Moolenaar END 30699721fb4eSBram Moolenaar writefile(vim9_lines, 'Xvim9_script.vim') 30709721fb4eSBram Moolenaar 30719721fb4eSBram Moolenaar source Xlegacy_script.vim 30729721fb4eSBram Moolenaar 30739721fb4eSBram Moolenaar assert_equal('global', g:global) 3074f5be8cdbSBram Moolenaar unlet g:global 30759721fb4eSBram Moolenaar 30769721fb4eSBram Moolenaar delete('Xlegacy_script.vim') 30779721fb4eSBram Moolenaar delete('Xvim9_script.vim') 30789721fb4eSBram Moolenaarenddef 3079a5d0077eSBram Moolenaar 30807d699701SBram Moolenaarfunc Test_vim9script_not_global() 30817d699701SBram Moolenaar " check that items defined in Vim9 script are script-local, not global 30827d699701SBram Moolenaar let vim9lines =<< trim END 30837d699701SBram Moolenaar vim9script 30847d699701SBram Moolenaar let var = 'local' 30857d699701SBram Moolenaar func TheFunc() 30867d699701SBram Moolenaar echo 'local' 30877d699701SBram Moolenaar endfunc 30887d699701SBram Moolenaar def DefFunc() 30897d699701SBram Moolenaar echo 'local' 30907d699701SBram Moolenaar enddef 30917d699701SBram Moolenaar END 30927d699701SBram Moolenaar call writefile(vim9lines, 'Xvim9script.vim') 30937d699701SBram Moolenaar source Xvim9script.vim 30947d699701SBram Moolenaar try 30957d699701SBram Moolenaar echo g:var 30967d699701SBram Moolenaar assert_report('did not fail') 30977d699701SBram Moolenaar catch /E121:/ 30987d699701SBram Moolenaar " caught 30997d699701SBram Moolenaar endtry 31007d699701SBram Moolenaar try 31017d699701SBram Moolenaar call TheFunc() 31027d699701SBram Moolenaar assert_report('did not fail') 31037d699701SBram Moolenaar catch /E117:/ 31047d699701SBram Moolenaar " caught 31057d699701SBram Moolenaar endtry 31067d699701SBram Moolenaar try 31077d699701SBram Moolenaar call DefFunc() 31087d699701SBram Moolenaar assert_report('did not fail') 31097d699701SBram Moolenaar catch /E117:/ 31107d699701SBram Moolenaar " caught 31117d699701SBram Moolenaar endtry 31127d699701SBram Moolenaar 31137d699701SBram Moolenaar call delete('Xvim9script.vium') 31147d699701SBram Moolenaarendfunc 31157d699701SBram Moolenaar 3116eeb27bfeSBram Moolenaardef Test_vim9_copen() 3117eeb27bfeSBram Moolenaar # this was giving an error for setting w:quickfix_title 3118eeb27bfeSBram Moolenaar copen 3119eeb27bfeSBram Moolenaar quit 3120eeb27bfeSBram Moolenaarenddef 3121eeb27bfeSBram Moolenaar 31222d6b20d6SBram Moolenaar" test using a vim9script that is auto-loaded from an autocmd 31232d6b20d6SBram Moolenaardef Test_vim9_autoload() 31242d6b20d6SBram Moolenaar let lines =<< trim END 31252d6b20d6SBram Moolenaar vim9script 31262d6b20d6SBram Moolenaar def foo#test() 31272d6b20d6SBram Moolenaar echomsg getreg('"') 31282d6b20d6SBram Moolenaar enddef 31292d6b20d6SBram Moolenaar END 31302d6b20d6SBram Moolenaar 31312d6b20d6SBram Moolenaar mkdir('Xdir/autoload', 'p') 31322d6b20d6SBram Moolenaar writefile(lines, 'Xdir/autoload/foo.vim') 31332d6b20d6SBram Moolenaar let save_rtp = &rtp 31342d6b20d6SBram Moolenaar exe 'set rtp^=' .. getcwd() .. '/Xdir' 31352d6b20d6SBram Moolenaar augroup test 31362d6b20d6SBram Moolenaar autocmd TextYankPost * call foo#test() 31372d6b20d6SBram Moolenaar augroup END 31382d6b20d6SBram Moolenaar 31392d6b20d6SBram Moolenaar normal Y 31402d6b20d6SBram Moolenaar 31412d6b20d6SBram Moolenaar augroup test 31422d6b20d6SBram Moolenaar autocmd! 31432d6b20d6SBram Moolenaar augroup END 31442d6b20d6SBram Moolenaar delete('Xdir', 'rf') 31452d6b20d6SBram Moolenaar &rtp = save_rtp 31462d6b20d6SBram Moolenaarenddef 31472d6b20d6SBram Moolenaar 31483896a105SBram Moolenaardef Test_cmdline_win() 31493896a105SBram Moolenaar # if the Vim syntax highlighting uses Vim9 constructs they can be used from 31503896a105SBram Moolenaar # the command line window. 31513896a105SBram Moolenaar mkdir('rtp/syntax', 'p') 31523896a105SBram Moolenaar let export_lines =<< trim END 31533896a105SBram Moolenaar vim9script 31543896a105SBram Moolenaar export let That = 'yes' 31553896a105SBram Moolenaar END 31563896a105SBram Moolenaar writefile(export_lines, 'rtp/syntax/Xexport.vim') 31573896a105SBram Moolenaar let import_lines =<< trim END 31583896a105SBram Moolenaar vim9script 31593896a105SBram Moolenaar import That from './Xexport.vim' 31603896a105SBram Moolenaar END 31613896a105SBram Moolenaar writefile(import_lines, 'rtp/syntax/vim.vim') 31623896a105SBram Moolenaar let save_rtp = &rtp 31633896a105SBram Moolenaar &rtp = getcwd() .. '/rtp' .. ',' .. &rtp 31643896a105SBram Moolenaar syntax on 31653896a105SBram Moolenaar augroup CmdWin 31663896a105SBram Moolenaar autocmd CmdwinEnter * g:got_there = 'yes' 31673896a105SBram Moolenaar augroup END 31683896a105SBram Moolenaar # this will open and also close the cmdline window 31693896a105SBram Moolenaar feedkeys('q:', 'xt') 31703896a105SBram Moolenaar assert_equal('yes', g:got_there) 31713896a105SBram Moolenaar 31723896a105SBram Moolenaar augroup CmdWin 31733896a105SBram Moolenaar au! 31743896a105SBram Moolenaar augroup END 31753896a105SBram Moolenaar &rtp = save_rtp 31763896a105SBram Moolenaar delete('rtp', 'rf') 31773896a105SBram Moolenaarenddef 31783896a105SBram Moolenaar 3179585fea7bSBram Moolenaar" Keep this last, it messes up highlighting. 3180585fea7bSBram Moolenaardef Test_substitute_cmd() 3181585fea7bSBram Moolenaar new 3182585fea7bSBram Moolenaar setline(1, 'something') 3183585fea7bSBram Moolenaar :substitute(some(other( 3184585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 3185585fea7bSBram Moolenaar bwipe! 3186585fea7bSBram Moolenaar 3187f5be8cdbSBram Moolenaar # also when the context is Vim9 script 3188585fea7bSBram Moolenaar let lines =<< trim END 3189585fea7bSBram Moolenaar vim9script 3190585fea7bSBram Moolenaar new 3191585fea7bSBram Moolenaar setline(1, 'something') 3192585fea7bSBram Moolenaar :substitute(some(other( 3193585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 3194585fea7bSBram Moolenaar bwipe! 3195585fea7bSBram Moolenaar END 3196585fea7bSBram Moolenaar writefile(lines, 'Xvim9lines') 3197585fea7bSBram Moolenaar source Xvim9lines 3198585fea7bSBram Moolenaar 3199585fea7bSBram Moolenaar delete('Xvim9lines') 3200585fea7bSBram Moolenaarenddef 3201585fea7bSBram Moolenaar 32028a7d6542SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker 3203