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 135d72ce69SBram Moolenaardef Test_range_only() 145d72ce69SBram Moolenaar new 155d72ce69SBram Moolenaar setline(1, ['blah', 'Blah']) 165d72ce69SBram Moolenaar :/Blah/ 175d72ce69SBram Moolenaar assert_equal(2, getcurpos()[1]) 18*c2af0affSBram Moolenaar bwipe! 19*c2af0affSBram Moolenaar 20*c2af0affSBram Moolenaar # without range commands use current line 21*c2af0affSBram Moolenaar new 22*c2af0affSBram Moolenaar setline(1, ['one', 'two', 'three']) 23*c2af0affSBram Moolenaar :2 24*c2af0affSBram Moolenaar print 25*c2af0affSBram Moolenaar assert_equal('two', Screenline(&lines)) 26*c2af0affSBram Moolenaar :3 27*c2af0affSBram Moolenaar list 28*c2af0affSBram Moolenaar assert_equal('three$', Screenline(&lines)) 29*c2af0affSBram Moolenaar bwipe! 305d72ce69SBram Moolenaarenddef 315d72ce69SBram Moolenaar 326e587dcbSBram Moolenaarlet s:appendToMe = 'xxx' 336e587dcbSBram Moolenaarlet s:addToMe = 111 34401d9ffbSBram Moolenaarlet g:existing = 'yes' 35a8c17704SBram Moolenaarlet g:inc_counter = 1 36a8c17704SBram Moolenaarlet $SOME_ENV_VAR = 'some' 37a6e67e4fSBram Moolenaarlet g:alist = [7] 38a6e67e4fSBram Moolenaarlet g:astring = 'text' 39f0b9f43cSBram Moolenaarlet g:anumber = 123 406e587dcbSBram Moolenaar 418a7d6542SBram Moolenaardef Test_assignment() 428a7d6542SBram Moolenaar let bool1: bool = true 438a7d6542SBram Moolenaar assert_equal(v:true, bool1) 448a7d6542SBram Moolenaar let bool2: bool = false 458a7d6542SBram Moolenaar assert_equal(v:false, bool2) 468a7d6542SBram Moolenaar 47f93c7feaSBram Moolenaar call CheckDefFailure(['let x:string'], 'E1069:') 48f93c7feaSBram Moolenaar call CheckDefFailure(['let x:string = "x"'], 'E1069:') 491cc2a94fSBram Moolenaar call CheckDefFailure(['let a:string = "x"'], 'E1069:') 5098b4f145SBram Moolenaar call CheckDefFailure(['let lambda = {-> "lambda"}'], 'E704:') 51f93c7feaSBram Moolenaar 524cdb13ceSBram Moolenaar let nr: number = 1234 53451c2e35SBram Moolenaar call CheckDefFailure(['let nr: number = "asdf"'], 'E1012:') 544cdb13ceSBram Moolenaar 55b209750bSBram Moolenaar let a: number = 6 #comment 569be61bbbSBram Moolenaar assert_equal(6, a) 579be61bbbSBram Moolenaar 5842a480bfSBram Moolenaar if has('channel') 5942a480bfSBram Moolenaar let chan1: channel 60fbdd08edSBram Moolenaar let job1: job 61f51cb4e0SBram Moolenaar let job2: job = job_start('willfail') 6242a480bfSBram Moolenaar endif 63fbdd08edSBram Moolenaar if has('float') 64fbdd08edSBram Moolenaar let float1: float = 3.4 65fbdd08edSBram Moolenaar endif 665deeb3f1SBram Moolenaar let Funky1: func 675deeb3f1SBram Moolenaar let Funky2: func = function('len') 684c17ad94SBram Moolenaar let Party2: func = funcref('g:Test_syntax') 6942a480bfSBram Moolenaar 70b209750bSBram Moolenaar g:newvar = 'new' #comment 71401d9ffbSBram Moolenaar assert_equal('new', g:newvar) 72401d9ffbSBram Moolenaar 73401d9ffbSBram Moolenaar assert_equal('yes', g:existing) 74401d9ffbSBram Moolenaar g:existing = 'no' 75401d9ffbSBram Moolenaar assert_equal('no', g:existing) 76401d9ffbSBram Moolenaar 77b283a8a6SBram Moolenaar v:char = 'abc' 786e587dcbSBram Moolenaar assert_equal('abc', v:char) 79b283a8a6SBram Moolenaar 80b283a8a6SBram Moolenaar $ENVVAR = 'foobar' 816e587dcbSBram Moolenaar assert_equal('foobar', $ENVVAR) 82b283a8a6SBram Moolenaar $ENVVAR = '' 836e587dcbSBram Moolenaar 84b5ed2660SBram Moolenaar let lines =<< trim END 85b5ed2660SBram Moolenaar vim9script 86b5ed2660SBram Moolenaar $ENVVAR = 'barfoo' 87b5ed2660SBram Moolenaar assert_equal('barfoo', $ENVVAR) 88b5ed2660SBram Moolenaar $ENVVAR = '' 89b5ed2660SBram Moolenaar END 90b5ed2660SBram Moolenaar call CheckScriptSuccess(lines) 91b5ed2660SBram Moolenaar 92fd1823e0SBram Moolenaar s:appendToMe ..= 'yyy' 93fd1823e0SBram Moolenaar assert_equal('xxxyyy', s:appendToMe) 94fd1823e0SBram Moolenaar s:addToMe += 222 95fd1823e0SBram Moolenaar assert_equal(333, s:addToMe) 960bbf722aSBram Moolenaar s:newVar = 'new' 970bbf722aSBram Moolenaar assert_equal('new', s:newVar) 98a8c17704SBram Moolenaar 99a8c17704SBram Moolenaar set ts=7 100a8c17704SBram Moolenaar &ts += 1 101a8c17704SBram Moolenaar assert_equal(8, &ts) 10280c34ca3SBram Moolenaar &ts -= 3 10380c34ca3SBram Moolenaar assert_equal(5, &ts) 10480c34ca3SBram Moolenaar &ts *= 2 10580c34ca3SBram Moolenaar assert_equal(10, &ts) 10680c34ca3SBram Moolenaar &ts /= 3 10780c34ca3SBram Moolenaar assert_equal(3, &ts) 10880c34ca3SBram Moolenaar set ts=10 10980c34ca3SBram Moolenaar &ts %= 4 11080c34ca3SBram Moolenaar assert_equal(2, &ts) 111b5ed2660SBram Moolenaar 11293ad1471SBram Moolenaar if has('float') 11393ad1471SBram Moolenaar let f100: float = 100.0 11493ad1471SBram Moolenaar f100 /= 5 11593ad1471SBram Moolenaar assert_equal(20.0, f100) 11693ad1471SBram Moolenaar 11793ad1471SBram Moolenaar let f200: float = 200.0 11893ad1471SBram Moolenaar f200 /= 5.0 11993ad1471SBram Moolenaar assert_equal(40.0, f200) 12093ad1471SBram Moolenaar 12193ad1471SBram Moolenaar CheckDefFailure(['let nr: number = 200', 'nr /= 5.0'], 'E1012:') 12293ad1471SBram Moolenaar endif 12393ad1471SBram Moolenaar 124b5ed2660SBram Moolenaar lines =<< trim END 125b5ed2660SBram Moolenaar &ts = 6 126b5ed2660SBram Moolenaar &ts += 3 127b5ed2660SBram Moolenaar assert_equal(9, &ts) 1282e800955SBram Moolenaar 1292e800955SBram Moolenaar &l:ts = 6 1302e800955SBram Moolenaar assert_equal(6, &ts) 1312e800955SBram Moolenaar &l:ts += 2 1322e800955SBram Moolenaar assert_equal(8, &ts) 1332e800955SBram Moolenaar 1342e800955SBram Moolenaar &g:ts = 6 1352e800955SBram Moolenaar assert_equal(6, &g:ts) 1362e800955SBram Moolenaar &g:ts += 2 1372e800955SBram Moolenaar assert_equal(8, &g:ts) 138b5ed2660SBram Moolenaar END 1392e800955SBram Moolenaar CheckDefAndScriptSuccess(lines) 140b5ed2660SBram Moolenaar 1410aae4809SBram Moolenaar CheckDefFailure(['¬ex += 3'], 'E113:') 1420aae4809SBram Moolenaar CheckDefFailure(['&ts ..= "xxx"'], 'E1019:') 1430aae4809SBram Moolenaar CheckDefFailure(['&ts = [7]'], 'E1012:') 1440aae4809SBram Moolenaar CheckDefExecFailure(['&ts = g:alist'], 'E1029: Expected number but got list') 1450aae4809SBram Moolenaar CheckDefFailure(['&ts = "xx"'], 'E1012:') 1460aae4809SBram Moolenaar CheckDefExecFailure(['&ts = g:astring'], 'E1029: Expected number but got string') 1470aae4809SBram Moolenaar CheckDefFailure(['&path += 3'], 'E1012:') 1480aae4809SBram Moolenaar CheckDefExecFailure(['&bs = "asdf"'], 'E474:') 149cb711abfSBram Moolenaar # test freeing ISN_STOREOPT 1500aae4809SBram Moolenaar CheckDefFailure(['&ts = 3', 'let asdf'], 'E1022:') 15180c34ca3SBram Moolenaar &ts = 8 152a8c17704SBram Moolenaar 1530aae4809SBram Moolenaar lines =<< trim END 1540aae4809SBram Moolenaar let save_TI = &t_TI 1550aae4809SBram Moolenaar &t_TI = '' 1560aae4809SBram Moolenaar assert_equal('', &t_TI) 1570aae4809SBram Moolenaar &t_TI = 'xxx' 1580aae4809SBram Moolenaar assert_equal('xxx', &t_TI) 1590aae4809SBram Moolenaar &t_TI = save_TI 1600aae4809SBram Moolenaar END 1610aae4809SBram Moolenaar CheckDefSuccess(lines) 1620aae4809SBram Moolenaar CheckScriptSuccess(['vim9script'] + lines) 1630aae4809SBram Moolenaar 1640aae4809SBram Moolenaar CheckDefFailure(['&t_TI = 123'], 'E1012:') 1650aae4809SBram Moolenaar CheckScriptFailure(['vim9script', '&t_TI = 123'], 'E928:') 1660aae4809SBram Moolenaar 1670aae4809SBram Moolenaar CheckDefFailure(['let s:var = 123'], 'E1101:') 1680aae4809SBram Moolenaar CheckDefFailure(['let s:var: number'], 'E1101:') 16933afa244SBram Moolenaar 170f9b2b496SBram Moolenaar lines =<< trim END 171f9b2b496SBram Moolenaar vim9script 172f9b2b496SBram Moolenaar def SomeFunc() 173f9b2b496SBram Moolenaar s:var = 123 174f9b2b496SBram Moolenaar enddef 175f9b2b496SBram Moolenaar defcompile 176f9b2b496SBram Moolenaar END 177f9b2b496SBram Moolenaar call CheckScriptFailure(lines, 'E1089:') 178f9b2b496SBram Moolenaar 179a8c17704SBram Moolenaar g:inc_counter += 1 180a8c17704SBram Moolenaar assert_equal(2, g:inc_counter) 181a8c17704SBram Moolenaar 182a8c17704SBram Moolenaar $SOME_ENV_VAR ..= 'more' 183a8c17704SBram Moolenaar assert_equal('somemore', $SOME_ENV_VAR) 184dd29f1b0SBram Moolenaar call CheckDefFailure(['$SOME_ENV_VAR += "more"'], 'E1051:') 185451c2e35SBram Moolenaar call CheckDefFailure(['$SOME_ENV_VAR += 123'], 'E1012:') 186a8c17704SBram Moolenaar 187b5ed2660SBram Moolenaar lines =<< trim END 188b5ed2660SBram Moolenaar @c = 'areg' 189b5ed2660SBram Moolenaar @c ..= 'add' 190b5ed2660SBram Moolenaar assert_equal('aregadd', @c) 191b5ed2660SBram Moolenaar END 1922e800955SBram Moolenaar CheckDefAndScriptSuccess(lines) 1932e800955SBram Moolenaar 1942e800955SBram Moolenaar call CheckDefFailure(['@a += "more"'], 'E1051:') 1952e800955SBram Moolenaar call CheckDefFailure(['@a += 123'], 'E1012:') 196b5ed2660SBram Moolenaar 197e69f6d04SBram Moolenaar v:errmsg = 'none' 198e69f6d04SBram Moolenaar v:errmsg ..= 'again' 199e69f6d04SBram Moolenaar assert_equal('noneagain', v:errmsg) 200dd29f1b0SBram Moolenaar call CheckDefFailure(['v:errmsg += "more"'], 'E1051:') 201451c2e35SBram Moolenaar call CheckDefFailure(['v:errmsg += 123'], 'E1012:') 20233afa244SBram Moolenaar 20333afa244SBram Moolenaar # single letter variables 20433afa244SBram Moolenaar a = 123 20533afa244SBram Moolenaar assert_equal(123, a) 20633afa244SBram Moolenaar let b: number 20733afa244SBram Moolenaar b = 123 20833afa244SBram Moolenaar assert_equal(123, b) 20933afa244SBram Moolenaar let g: number 21033afa244SBram Moolenaar g = 123 21133afa244SBram Moolenaar assert_equal(123, g) 21233afa244SBram Moolenaar let s: number 21333afa244SBram Moolenaar s = 123 21433afa244SBram Moolenaar assert_equal(123, s) 21533afa244SBram Moolenaar let t: number 21633afa244SBram Moolenaar t = 123 21733afa244SBram Moolenaar assert_equal(123, t) 21833afa244SBram Moolenaar let v: number 21933afa244SBram Moolenaar v = 123 22033afa244SBram Moolenaar assert_equal(123, v) 22133afa244SBram Moolenaar let w: number 22233afa244SBram Moolenaar w = 123 22333afa244SBram Moolenaar assert_equal(123, w) 2245deeb3f1SBram Moolenaarenddef 2255deeb3f1SBram Moolenaar 2263b74b6b4SBram Moolenaardef Test_vim9_single_char_vars() 2273b74b6b4SBram Moolenaar let lines =<< trim END 2283b74b6b4SBram Moolenaar vim9script 2293b74b6b4SBram Moolenaar 230f5be8cdbSBram Moolenaar # single character variable declarations work 2313b74b6b4SBram Moolenaar let a: string 2323b74b6b4SBram Moolenaar let b: number 2333b74b6b4SBram Moolenaar let l: list<any> 2343b74b6b4SBram Moolenaar let s: string 2353b74b6b4SBram Moolenaar let t: number 2363b74b6b4SBram Moolenaar let v: number 2373b74b6b4SBram Moolenaar let w: number 2383b74b6b4SBram Moolenaar 239f5be8cdbSBram Moolenaar # script-local variables can be used without s: prefix 2403b74b6b4SBram Moolenaar a = 'script-a' 2413b74b6b4SBram Moolenaar b = 111 2423b74b6b4SBram Moolenaar l = [1, 2, 3] 2433b74b6b4SBram Moolenaar s = 'script-s' 2443b74b6b4SBram Moolenaar t = 222 2453b74b6b4SBram Moolenaar v = 333 2463b74b6b4SBram Moolenaar w = 444 2473b74b6b4SBram Moolenaar 2483b74b6b4SBram Moolenaar assert_equal('script-a', a) 2493b74b6b4SBram Moolenaar assert_equal(111, b) 2503b74b6b4SBram Moolenaar assert_equal([1, 2, 3], l) 2513b74b6b4SBram Moolenaar assert_equal('script-s', s) 2523b74b6b4SBram Moolenaar assert_equal(222, t) 2533b74b6b4SBram Moolenaar assert_equal(333, v) 2543b74b6b4SBram Moolenaar assert_equal(444, w) 2553b74b6b4SBram Moolenaar END 2563b74b6b4SBram Moolenaar writefile(lines, 'Xsinglechar') 2573b74b6b4SBram Moolenaar source Xsinglechar 2583b74b6b4SBram Moolenaar delete('Xsinglechar') 2593b74b6b4SBram Moolenaarenddef 2603b74b6b4SBram Moolenaar 26184370087SBram Moolenaardef Test_assignment_list() 26284370087SBram Moolenaar let list1: list<bool> = [false, true, false] 26384370087SBram Moolenaar let list2: list<number> = [1, 2, 3] 26484370087SBram Moolenaar let list3: list<string> = ['sdf', 'asdf'] 26584370087SBram Moolenaar let list4: list<any> = ['yes', true, 1234] 26684370087SBram Moolenaar let list5: list<blob> = [0z01, 0z02] 26784370087SBram Moolenaar 26884370087SBram Moolenaar let listS: list<string> = [] 26984370087SBram Moolenaar let listN: list<number> = [] 27084370087SBram Moolenaar 27184370087SBram Moolenaar assert_equal([1, 2, 3], list2) 27284370087SBram Moolenaar list2[-1] = 99 27384370087SBram Moolenaar assert_equal([1, 2, 99], list2) 27484370087SBram Moolenaar list2[-2] = 88 27584370087SBram Moolenaar assert_equal([1, 88, 99], list2) 27684370087SBram Moolenaar list2[-3] = 77 27784370087SBram Moolenaar assert_equal([77, 88, 99], list2) 278dd29f1b0SBram Moolenaar list2 += [100] 279dd29f1b0SBram Moolenaar assert_equal([77, 88, 99, 100], list2) 280dd29f1b0SBram Moolenaar 281dd29f1b0SBram Moolenaar list3 += ['end'] 282dd29f1b0SBram Moolenaar assert_equal(['sdf', 'asdf', 'end'], list3) 283dd29f1b0SBram Moolenaar 284dd29f1b0SBram Moolenaar 28584370087SBram Moolenaar call CheckDefExecFailure(['let ll = [1, 2, 3]', 'll[-4] = 6'], 'E684:') 286c5b1c20bSBram Moolenaar call CheckDefExecFailure(['let [v1, v2] = [1, 2]'], 'E1092:') 28784370087SBram Moolenaar 28884370087SBram Moolenaar # type becomes list<any> 28984370087SBram Moolenaar let somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c'] 29084370087SBram Moolenaarenddef 29184370087SBram Moolenaar 292b31be3f9SBram Moolenaardef Test_assignment_list_vim9script() 293b31be3f9SBram Moolenaar let lines =<< trim END 294b31be3f9SBram Moolenaar vim9script 295b31be3f9SBram Moolenaar let v1: number 296b31be3f9SBram Moolenaar let v2: number 297b31be3f9SBram Moolenaar let v3: number 298b31be3f9SBram Moolenaar [v1, v2, v3] = [1, 2, 3] 299b31be3f9SBram Moolenaar assert_equal([1, 2, 3], [v1, v2, v3]) 300b31be3f9SBram Moolenaar END 301b31be3f9SBram Moolenaar call CheckScriptSuccess(lines) 302b31be3f9SBram Moolenaarenddef 303b31be3f9SBram Moolenaar 30484370087SBram Moolenaardef Test_assignment_dict() 30584370087SBram Moolenaar let dict1: dict<bool> = #{one: false, two: true} 30684370087SBram Moolenaar let dict2: dict<number> = #{one: 1, two: 2} 30784370087SBram Moolenaar let dict3: dict<string> = #{key: 'value'} 30884370087SBram Moolenaar let dict4: dict<any> = #{one: 1, two: '2'} 30974fae513SBram Moolenaar let dict5: dict<blob> = #{one: 0z01, two: 0z02} 31084370087SBram Moolenaar 311f5be8cdbSBram Moolenaar # overwrite 312c785b9a7SBram Moolenaar dict3['key'] = 'another' 313c785b9a7SBram Moolenaar 31458626872SBram Moolenaar # empty key can be used 31558626872SBram Moolenaar let dd = {} 31658626872SBram Moolenaar dd[""] = 6 31758626872SBram Moolenaar assert_equal({'': 6}, dd) 31884370087SBram Moolenaar 31984370087SBram Moolenaar # type becomes dict<any> 32084370087SBram Moolenaar let somedict = rand() > 0 ? #{a: 1, b: 2} : #{a: 'a', b: 'b'} 3218e4c8c85SBram Moolenaar 3228e4c8c85SBram Moolenaar # assignment to script-local dict 3238e4c8c85SBram Moolenaar let lines =<< trim END 3248e4c8c85SBram Moolenaar vim9script 3258e4c8c85SBram Moolenaar let test: dict<any> = {} 3268e4c8c85SBram Moolenaar def FillDict(): dict<any> 3278e4c8c85SBram Moolenaar test['a'] = 43 3288e4c8c85SBram Moolenaar return test 3298e4c8c85SBram Moolenaar enddef 3308e4c8c85SBram Moolenaar assert_equal(#{a: 43}, FillDict()) 3318e4c8c85SBram Moolenaar END 3328e4c8c85SBram Moolenaar call CheckScriptSuccess(lines) 3338e4c8c85SBram Moolenaar 3348e4c8c85SBram Moolenaar lines =<< trim END 3358e4c8c85SBram Moolenaar vim9script 3368e4c8c85SBram Moolenaar let test: dict<any> 3378e4c8c85SBram Moolenaar def FillDict(): dict<any> 3388e4c8c85SBram Moolenaar test['a'] = 43 3398e4c8c85SBram Moolenaar return test 3408e4c8c85SBram Moolenaar enddef 3418e4c8c85SBram Moolenaar FillDict() 3428e4c8c85SBram Moolenaar END 3438e4c8c85SBram Moolenaar call CheckScriptFailure(lines, 'E1103:') 3442caa1594SBram Moolenaar 3452caa1594SBram Moolenaar # assignment to global dict 3462caa1594SBram Moolenaar lines =<< trim END 3472caa1594SBram Moolenaar vim9script 3482caa1594SBram Moolenaar g:test = {} 3492caa1594SBram Moolenaar def FillDict(): dict<any> 3502caa1594SBram Moolenaar g:test['a'] = 43 3512caa1594SBram Moolenaar return g:test 3522caa1594SBram Moolenaar enddef 3532caa1594SBram Moolenaar assert_equal(#{a: 43}, FillDict()) 3542caa1594SBram Moolenaar END 3552caa1594SBram Moolenaar call CheckScriptSuccess(lines) 3562caa1594SBram Moolenaar 3572caa1594SBram Moolenaar # assignment to buffer dict 3582caa1594SBram Moolenaar lines =<< trim END 3592caa1594SBram Moolenaar vim9script 3602caa1594SBram Moolenaar b:test = {} 3612caa1594SBram Moolenaar def FillDict(): dict<any> 3622caa1594SBram Moolenaar b:test['a'] = 43 3632caa1594SBram Moolenaar return b:test 3642caa1594SBram Moolenaar enddef 3652caa1594SBram Moolenaar assert_equal(#{a: 43}, FillDict()) 3662caa1594SBram Moolenaar END 3672caa1594SBram Moolenaar call CheckScriptSuccess(lines) 36884370087SBram Moolenaarenddef 36984370087SBram Moolenaar 370d3aac291SBram Moolenaardef Test_assignment_local() 371f5be8cdbSBram Moolenaar # Test in a separated file in order not to the current buffer/window/tab is 372f5be8cdbSBram Moolenaar # changed. 373d3aac291SBram Moolenaar let script_lines: list<string> =<< trim END 374d3aac291SBram Moolenaar let b:existing = 'yes' 375d3aac291SBram Moolenaar let w:existing = 'yes' 376d3aac291SBram Moolenaar let t:existing = 'yes' 377d3aac291SBram Moolenaar 378d3aac291SBram Moolenaar def Test_assignment_local_internal() 379d3aac291SBram Moolenaar b:newvar = 'new' 380d3aac291SBram Moolenaar assert_equal('new', b:newvar) 381d3aac291SBram Moolenaar assert_equal('yes', b:existing) 382d3aac291SBram Moolenaar b:existing = 'no' 383d3aac291SBram Moolenaar assert_equal('no', b:existing) 384396f3138SBram Moolenaar b:existing ..= 'NO' 385396f3138SBram Moolenaar assert_equal('noNO', b:existing) 386d3aac291SBram Moolenaar 387d3aac291SBram Moolenaar w:newvar = 'new' 388d3aac291SBram Moolenaar assert_equal('new', w:newvar) 389d3aac291SBram Moolenaar assert_equal('yes', w:existing) 390d3aac291SBram Moolenaar w:existing = 'no' 391d3aac291SBram Moolenaar assert_equal('no', w:existing) 392396f3138SBram Moolenaar w:existing ..= 'NO' 393396f3138SBram Moolenaar assert_equal('noNO', w:existing) 394d3aac291SBram Moolenaar 395d3aac291SBram Moolenaar t:newvar = 'new' 396d3aac291SBram Moolenaar assert_equal('new', t:newvar) 397d3aac291SBram Moolenaar assert_equal('yes', t:existing) 398d3aac291SBram Moolenaar t:existing = 'no' 399d3aac291SBram Moolenaar assert_equal('no', t:existing) 400396f3138SBram Moolenaar t:existing ..= 'NO' 401396f3138SBram Moolenaar assert_equal('noNO', t:existing) 402d3aac291SBram Moolenaar enddef 403d3aac291SBram Moolenaar call Test_assignment_local_internal() 404d3aac291SBram Moolenaar END 405d3aac291SBram Moolenaar call CheckScriptSuccess(script_lines) 406d3aac291SBram Moolenaarenddef 407d3aac291SBram Moolenaar 4085deeb3f1SBram Moolenaardef Test_assignment_default() 409e69f6d04SBram Moolenaar 410cb711abfSBram Moolenaar # Test default values. 411e69f6d04SBram Moolenaar let thebool: bool 412e69f6d04SBram Moolenaar assert_equal(v:false, thebool) 413e69f6d04SBram Moolenaar 414e69f6d04SBram Moolenaar let thenumber: number 415e69f6d04SBram Moolenaar assert_equal(0, thenumber) 416e69f6d04SBram Moolenaar 417e69f6d04SBram Moolenaar if has('float') 418e69f6d04SBram Moolenaar let thefloat: float 419e69f6d04SBram Moolenaar assert_equal(0.0, thefloat) 420e69f6d04SBram Moolenaar endif 421e69f6d04SBram Moolenaar 422e69f6d04SBram Moolenaar let thestring: string 423e69f6d04SBram Moolenaar assert_equal('', thestring) 424e69f6d04SBram Moolenaar 425e69f6d04SBram Moolenaar let theblob: blob 426e69f6d04SBram Moolenaar assert_equal(0z, theblob) 427e69f6d04SBram Moolenaar 4285deeb3f1SBram Moolenaar let Thefunc: func 4295deeb3f1SBram Moolenaar assert_equal(test_null_function(), Thefunc) 430e69f6d04SBram Moolenaar 431e69f6d04SBram Moolenaar let thelist: list<any> 432e69f6d04SBram Moolenaar assert_equal([], thelist) 433e69f6d04SBram Moolenaar 434e69f6d04SBram Moolenaar let thedict: dict<any> 435e69f6d04SBram Moolenaar assert_equal({}, thedict) 436e69f6d04SBram Moolenaar 4372c869deeSBram Moolenaar if has('channel') 438e69f6d04SBram Moolenaar let thejob: job 439e69f6d04SBram Moolenaar assert_equal(test_null_job(), thejob) 440e69f6d04SBram Moolenaar 441e69f6d04SBram Moolenaar let thechannel: channel 442e69f6d04SBram Moolenaar assert_equal(test_null_channel(), thechannel) 443c785b9a7SBram Moolenaar 444c785b9a7SBram Moolenaar if has('unix') && executable('cat') 445f5be8cdbSBram Moolenaar # check with non-null job and channel, types must match 446c785b9a7SBram Moolenaar thejob = job_start("cat ", #{}) 447c785b9a7SBram Moolenaar thechannel = job_getchannel(thejob) 448c785b9a7SBram Moolenaar job_stop(thejob, 'kill') 449c785b9a7SBram Moolenaar endif 4502c869deeSBram Moolenaar endif 451585fea7bSBram Moolenaar 452585fea7bSBram Moolenaar let nr = 1234 | nr = 5678 453585fea7bSBram Moolenaar assert_equal(5678, nr) 4548a7d6542SBram Moolenaarenddef 4558a7d6542SBram Moolenaar 45647a519a9SBram Moolenaardef Test_assignment_var_list() 45747a519a9SBram Moolenaar let v1: string 45847a519a9SBram Moolenaar let v2: string 4599af78769SBram Moolenaar let vrem: list<string> 4609af78769SBram Moolenaar [v1] = ['aaa'] 4619af78769SBram Moolenaar assert_equal('aaa', v1) 4629af78769SBram Moolenaar 46347a519a9SBram Moolenaar [v1, v2] = ['one', 'two'] 46447a519a9SBram Moolenaar assert_equal('one', v1) 46547a519a9SBram Moolenaar assert_equal('two', v2) 4669af78769SBram Moolenaar 4679af78769SBram Moolenaar [v1, v2; vrem] = ['one', 'two'] 4689af78769SBram Moolenaar assert_equal('one', v1) 4699af78769SBram Moolenaar assert_equal('two', v2) 4709af78769SBram Moolenaar assert_equal([], vrem) 4719af78769SBram Moolenaar 4729af78769SBram Moolenaar [v1, v2; vrem] = ['one', 'two', 'three'] 4739af78769SBram Moolenaar assert_equal('one', v1) 4749af78769SBram Moolenaar assert_equal('two', v2) 4759af78769SBram Moolenaar assert_equal(['three'], vrem) 4761c199f9cSBram Moolenaar 4771c199f9cSBram Moolenaar [&ts, &sw] = [3, 4] 4781c199f9cSBram Moolenaar assert_equal(3, &ts) 4791c199f9cSBram Moolenaar assert_equal(4, &sw) 4801c199f9cSBram Moolenaar set ts=8 sw=4 48147a519a9SBram Moolenaarenddef 48247a519a9SBram Moolenaar 483c7e44a7eSBram Moolenaardef Test_assignment_vim9script() 484c7e44a7eSBram Moolenaar let lines =<< trim END 485c7e44a7eSBram Moolenaar vim9script 486c7e44a7eSBram Moolenaar def Func(): list<number> 487c7e44a7eSBram Moolenaar return [1, 2] 488c7e44a7eSBram Moolenaar enddef 489c7e44a7eSBram Moolenaar let var1: number 490c7e44a7eSBram Moolenaar let var2: number 491c7e44a7eSBram Moolenaar [var1, var2] = 492c7e44a7eSBram Moolenaar Func() 493c7e44a7eSBram Moolenaar assert_equal(1, var1) 494c7e44a7eSBram Moolenaar assert_equal(2, var2) 495c7e44a7eSBram Moolenaar let ll = 496c7e44a7eSBram Moolenaar Func() 497c7e44a7eSBram Moolenaar assert_equal([1, 2], ll) 49883144546SBram Moolenaar 49983144546SBram Moolenaar @/ = 'text' 50083144546SBram Moolenaar assert_equal('text', @/) 50183144546SBram Moolenaar @0 = 'zero' 50283144546SBram Moolenaar assert_equal('zero', @0) 50383144546SBram Moolenaar @1 = 'one' 50483144546SBram Moolenaar assert_equal('one', @1) 50583144546SBram Moolenaar @9 = 'nine' 50683144546SBram Moolenaar assert_equal('nine', @9) 50783144546SBram Moolenaar @- = 'minus' 50883144546SBram Moolenaar assert_equal('minus', @-) 50983144546SBram Moolenaar if has('clipboard_working') 51083144546SBram Moolenaar @* = 'star' 51183144546SBram Moolenaar assert_equal('star', @*) 51283144546SBram Moolenaar @+ = 'plus' 51383144546SBram Moolenaar assert_equal('plus', @+) 51483144546SBram Moolenaar endif 51595dd9f25SBram Moolenaar 51695dd9f25SBram Moolenaar let a: number = 123 51795dd9f25SBram Moolenaar assert_equal(123, a) 51895dd9f25SBram Moolenaar let s: string = 'yes' 51995dd9f25SBram Moolenaar assert_equal('yes', s) 52095dd9f25SBram Moolenaar let b: number = 42 52195dd9f25SBram Moolenaar assert_equal(42, b) 52295dd9f25SBram Moolenaar let w: number = 43 52395dd9f25SBram Moolenaar assert_equal(43, w) 52495dd9f25SBram Moolenaar let t: number = 44 52595dd9f25SBram Moolenaar assert_equal(44, t) 526c7e44a7eSBram Moolenaar END 527c7e44a7eSBram Moolenaar CheckScriptSuccess(lines) 528c7e44a7eSBram Moolenaarenddef 529c7e44a7eSBram Moolenaar 530cab27678SBram Moolenaardef Mess(): string 531cab27678SBram Moolenaar v:foldstart = 123 532cab27678SBram Moolenaar return 'xxx' 533cab27678SBram Moolenaarenddef 534cab27678SBram Moolenaar 535d72c1bf0SBram Moolenaardef Test_assignment_failure() 5368a7d6542SBram Moolenaar call CheckDefFailure(['let var=234'], 'E1004:') 5378a7d6542SBram Moolenaar call CheckDefFailure(['let var =234'], 'E1004:') 5388a7d6542SBram Moolenaar call CheckDefFailure(['let var= 234'], 'E1004:') 5398a7d6542SBram Moolenaar 54063be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var=234'], 'E1004:') 54163be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var=234'], "before and after '='") 54263be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var =234'], 'E1004:') 54363be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var= 234'], 'E1004:') 54463be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var = 234', 'var+=234'], 'E1004:') 54563be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var = 234', 'var+=234'], "before and after '+='") 54663be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var = "x"', 'var..="y"'], 'E1004:') 54763be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var = "x"', 'var..="y"'], "before and after '..='") 54863be3d4bSBram Moolenaar 5498a7d6542SBram Moolenaar call CheckDefFailure(['let true = 1'], 'E1034:') 5508a7d6542SBram Moolenaar call CheckDefFailure(['let false = 1'], 'E1034:') 5518a7d6542SBram Moolenaar 5529b7bf9e9SBram Moolenaar call CheckDefFailure(['[a; b; c] = g:list'], 'E452:') 5539af78769SBram Moolenaar call CheckDefExecFailure(['let a: number', 5549af78769SBram Moolenaar '[a] = test_null_list()'], 'E1093:') 5559af78769SBram Moolenaar call CheckDefExecFailure(['let a: number', 5569af78769SBram Moolenaar '[a] = []'], 'E1093:') 5579af78769SBram Moolenaar call CheckDefExecFailure(['let x: number', 5589af78769SBram Moolenaar 'let y: number', 5599af78769SBram Moolenaar '[x, y] = [1]'], 'E1093:') 5609af78769SBram Moolenaar call CheckDefExecFailure(['let x: number', 5619af78769SBram Moolenaar 'let y: number', 5629af78769SBram Moolenaar 'let z: list<number>', 5639af78769SBram Moolenaar '[x, y; z] = [1]'], 'E1093:') 5649be61bbbSBram Moolenaar 565e69f6d04SBram Moolenaar call CheckDefFailure(['let somevar'], "E1022:") 566c2ee44ccSBram Moolenaar call CheckDefFailure(['let &tabstop = 4'], 'E1052:') 5679be61bbbSBram Moolenaar call CheckDefFailure(['&g:option = 5'], 'E113:') 568c2ee44ccSBram Moolenaar call CheckScriptFailure(['vim9script', 'let &tabstop = 4'], 'E1052:') 5699be61bbbSBram Moolenaar 570e55b1c09SBram Moolenaar call CheckDefFailure(['let $VAR = 5'], 'E1016: Cannot declare an environment variable:') 571c2ee44ccSBram Moolenaar call CheckScriptFailure(['vim9script', 'let $ENV = "xxx"'], 'E1016:') 5729be61bbbSBram Moolenaar 573434d72cbSBram Moolenaar if has('dnd') 57465821727SBram Moolenaar call CheckDefFailure(['let @~ = 5'], 'E1066:') 575434d72cbSBram Moolenaar else 576434d72cbSBram Moolenaar call CheckDefFailure(['let @~ = 5'], 'E354:') 577434d72cbSBram Moolenaar call CheckDefFailure(['@~ = 5'], 'E354:') 578434d72cbSBram Moolenaar endif 5799be61bbbSBram Moolenaar call CheckDefFailure(['let @a = 5'], 'E1066:') 58065821727SBram Moolenaar call CheckDefFailure(['let @/ = "x"'], 'E1066:') 581c2ee44ccSBram Moolenaar call CheckScriptFailure(['vim9script', 'let @a = "abc"'], 'E1066:') 5829be61bbbSBram Moolenaar 583e55b1c09SBram Moolenaar call CheckDefFailure(['let g:var = 5'], 'E1016: Cannot declare a global variable:') 584e55b1c09SBram Moolenaar call CheckDefFailure(['let w:var = 5'], 'E1016: Cannot declare a window variable:') 585e55b1c09SBram Moolenaar call CheckDefFailure(['let b:var = 5'], 'E1016: Cannot declare a buffer variable:') 586e55b1c09SBram Moolenaar call CheckDefFailure(['let t:var = 5'], 'E1016: Cannot declare a tab variable:') 5879be61bbbSBram Moolenaar 5889be61bbbSBram Moolenaar call CheckDefFailure(['let anr = 4', 'anr ..= "text"'], 'E1019:') 589122616d9SBram Moolenaar call CheckDefFailure(['let xnr += 4'], 'E1020:', 1) 590122616d9SBram Moolenaar call CheckScriptFailure(['vim9script', 'let xnr += 4'], 'E1020:') 591122616d9SBram Moolenaar call CheckDefFailure(["let xnr = xnr + 1"], 'E1001:', 1) 592122616d9SBram Moolenaar call CheckScriptFailure(['vim9script', 'let xnr = xnr + 4'], 'E121:') 5939be61bbbSBram Moolenaar 594451c2e35SBram Moolenaar call CheckScriptFailure(['vim9script', 'def Func()', 'let dummy = s:notfound', 'enddef', 'defcompile'], 'E1108:') 59533fa29cfSBram Moolenaar 5968a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<string> = [123]'], 'expected list<string> but got list<number>') 5978a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<number> = ["xx"]'], 'expected list<number> but got list<string>') 5988a7d6542SBram Moolenaar 5998a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<string> = #{key: 123}'], 'expected dict<string> but got dict<number>') 6008a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<number> = #{key: "xx"}'], 'expected dict<number> but got dict<string>') 6018a7d6542SBram Moolenaar 6028a7d6542SBram Moolenaar call CheckDefFailure(['let var = feedkeys("0")'], 'E1031:') 6038a7d6542SBram Moolenaar call CheckDefFailure(['let var: number = feedkeys("0")'], 'expected number but got void') 60442a480bfSBram Moolenaar 605d77a8525SBram Moolenaar call CheckDefFailure(['let var: dict <number>'], 'E1068:') 60642a480bfSBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 607cab27678SBram Moolenaar 608cab27678SBram Moolenaar call assert_fails('s/^/\=Mess()/n', 'E794:') 609cab27678SBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 61043e969d3SBram Moolenaar 61143e969d3SBram Moolenaar call CheckDefFailure(['w:foo: number = 10'], 61243e969d3SBram Moolenaar 'E488: Trailing characters: : number = 1') 61343e969d3SBram Moolenaar call CheckDefFailure(['t:foo: bool = true'], 61443e969d3SBram Moolenaar 'E488: Trailing characters: : bool = true') 61543e969d3SBram Moolenaar call CheckDefFailure(['b:foo: string = "x"'], 61643e969d3SBram Moolenaar 'E488: Trailing characters: : string = "x"') 61743e969d3SBram Moolenaar call CheckDefFailure(['g:foo: number = 123'], 61843e969d3SBram Moolenaar 'E488: Trailing characters: : number = 123') 619d72c1bf0SBram Moolenaarenddef 620d72c1bf0SBram Moolenaar 621d72c1bf0SBram Moolenaardef Test_unlet() 622d72c1bf0SBram Moolenaar g:somevar = 'yes' 623d72c1bf0SBram Moolenaar assert_true(exists('g:somevar')) 624d72c1bf0SBram Moolenaar unlet g:somevar 625d72c1bf0SBram Moolenaar assert_false(exists('g:somevar')) 626d72c1bf0SBram Moolenaar unlet! g:somevar 627d72c1bf0SBram Moolenaar 6288436773fSBram Moolenaar # also works for script-local variable in legacy Vim script 6298436773fSBram Moolenaar s:somevar = 'legacy' 6308436773fSBram Moolenaar assert_true(exists('s:somevar')) 6318436773fSBram Moolenaar unlet s:somevar 6328436773fSBram Moolenaar assert_false(exists('s:somevar')) 6338436773fSBram Moolenaar unlet! s:somevar 6348436773fSBram Moolenaar 635d72c1bf0SBram Moolenaar call CheckScriptFailure([ 636d72c1bf0SBram Moolenaar 'vim9script', 637d72c1bf0SBram Moolenaar 'let svar = 123', 638d72c1bf0SBram Moolenaar 'unlet svar', 639d72c1bf0SBram Moolenaar ], 'E1081:') 640d72c1bf0SBram Moolenaar call CheckScriptFailure([ 641d72c1bf0SBram Moolenaar 'vim9script', 642d72c1bf0SBram Moolenaar 'let svar = 123', 643d72c1bf0SBram Moolenaar 'unlet s:svar', 644d72c1bf0SBram Moolenaar ], 'E1081:') 645d72c1bf0SBram Moolenaar call CheckScriptFailure([ 646d72c1bf0SBram Moolenaar 'vim9script', 647d72c1bf0SBram Moolenaar 'let svar = 123', 648d72c1bf0SBram Moolenaar 'def Func()', 649d72c1bf0SBram Moolenaar ' unlet svar', 650d72c1bf0SBram Moolenaar 'enddef', 651822ba247SBram Moolenaar 'defcompile', 652d72c1bf0SBram Moolenaar ], 'E1081:') 653d72c1bf0SBram Moolenaar call CheckScriptFailure([ 654d72c1bf0SBram Moolenaar 'vim9script', 655d72c1bf0SBram Moolenaar 'let svar = 123', 656d72c1bf0SBram Moolenaar 'def Func()', 657d72c1bf0SBram Moolenaar ' unlet s:svar', 658d72c1bf0SBram Moolenaar 'enddef', 659822ba247SBram Moolenaar 'defcompile', 660d72c1bf0SBram Moolenaar ], 'E1081:') 6617bdaea6eSBram Moolenaar 6627bdaea6eSBram Moolenaar $ENVVAR = 'foobar' 6637bdaea6eSBram Moolenaar assert_equal('foobar', $ENVVAR) 6647bdaea6eSBram Moolenaar unlet $ENVVAR 6657bdaea6eSBram Moolenaar assert_equal('', $ENVVAR) 666d72c1bf0SBram Moolenaarenddef 667599c89c8SBram Moolenaar 6684c17ad94SBram Moolenaardef Test_delfunction() 669f5be8cdbSBram Moolenaar # Check function is defined in script namespace 6704c17ad94SBram Moolenaar CheckScriptSuccess([ 6714c17ad94SBram Moolenaar 'vim9script', 6724c17ad94SBram Moolenaar 'func CheckMe()', 6734c17ad94SBram Moolenaar ' return 123', 6744c17ad94SBram Moolenaar 'endfunc', 6754c17ad94SBram Moolenaar 'assert_equal(123, s:CheckMe())', 6764c17ad94SBram Moolenaar ]) 6774c17ad94SBram Moolenaar 678f5be8cdbSBram Moolenaar # Check function in script namespace cannot be deleted 6794c17ad94SBram Moolenaar CheckScriptFailure([ 6804c17ad94SBram Moolenaar 'vim9script', 6814c17ad94SBram Moolenaar 'func DeleteMe1()', 6824c17ad94SBram Moolenaar 'endfunc', 6834c17ad94SBram Moolenaar 'delfunction DeleteMe1', 6844c17ad94SBram Moolenaar ], 'E1084:') 6854c17ad94SBram Moolenaar CheckScriptFailure([ 6864c17ad94SBram Moolenaar 'vim9script', 6874c17ad94SBram Moolenaar 'func DeleteMe2()', 6884c17ad94SBram Moolenaar 'endfunc', 6894c17ad94SBram Moolenaar 'def DoThat()', 6904c17ad94SBram Moolenaar ' delfunction DeleteMe2', 6914c17ad94SBram Moolenaar 'enddef', 6924c17ad94SBram Moolenaar 'DoThat()', 6934c17ad94SBram Moolenaar ], 'E1084:') 6944c17ad94SBram Moolenaar CheckScriptFailure([ 6954c17ad94SBram Moolenaar 'vim9script', 6964c17ad94SBram Moolenaar 'def DeleteMe3()', 6974c17ad94SBram Moolenaar 'enddef', 6984c17ad94SBram Moolenaar 'delfunction DeleteMe3', 6994c17ad94SBram Moolenaar ], 'E1084:') 7004c17ad94SBram Moolenaar CheckScriptFailure([ 7014c17ad94SBram Moolenaar 'vim9script', 7024c17ad94SBram Moolenaar 'def DeleteMe4()', 7034c17ad94SBram Moolenaar 'enddef', 7044c17ad94SBram Moolenaar 'def DoThat()', 7054c17ad94SBram Moolenaar ' delfunction DeleteMe4', 7064c17ad94SBram Moolenaar 'enddef', 7074c17ad94SBram Moolenaar 'DoThat()', 7084c17ad94SBram Moolenaar ], 'E1084:') 709925e9fd6SBram Moolenaar 710925e9fd6SBram Moolenaar # Check that global :def function can be replaced and deleted 711925e9fd6SBram Moolenaar let lines =<< trim END 712925e9fd6SBram Moolenaar vim9script 713925e9fd6SBram Moolenaar def g:Global(): string 714925e9fd6SBram Moolenaar return "yes" 715925e9fd6SBram Moolenaar enddef 716925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 717925e9fd6SBram Moolenaar def! g:Global(): string 718925e9fd6SBram Moolenaar return "no" 719925e9fd6SBram Moolenaar enddef 720925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 721925e9fd6SBram Moolenaar delfunc g:Global 722925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 723925e9fd6SBram Moolenaar END 724925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 725925e9fd6SBram Moolenaar 726925e9fd6SBram Moolenaar # Check that global function can be replaced by a :def function and deleted 727925e9fd6SBram Moolenaar lines =<< trim END 728925e9fd6SBram Moolenaar vim9script 729925e9fd6SBram Moolenaar func g:Global() 730925e9fd6SBram Moolenaar return "yes" 731925e9fd6SBram Moolenaar endfunc 732925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 733925e9fd6SBram Moolenaar def! g:Global(): string 734925e9fd6SBram Moolenaar return "no" 735925e9fd6SBram Moolenaar enddef 736925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 737925e9fd6SBram Moolenaar delfunc g:Global 738925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 739925e9fd6SBram Moolenaar END 740925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 741925e9fd6SBram Moolenaar 742925e9fd6SBram Moolenaar # Check that global :def function can be replaced by a function and deleted 743925e9fd6SBram Moolenaar lines =<< trim END 744925e9fd6SBram Moolenaar vim9script 745925e9fd6SBram Moolenaar def g:Global(): string 746925e9fd6SBram Moolenaar return "yes" 747925e9fd6SBram Moolenaar enddef 748925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 749925e9fd6SBram Moolenaar func! g:Global() 750925e9fd6SBram Moolenaar return "no" 751925e9fd6SBram Moolenaar endfunc 752925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 753925e9fd6SBram Moolenaar delfunc g:Global 754925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 755925e9fd6SBram Moolenaar END 756925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 7574c17ad94SBram Moolenaarenddef 7584c17ad94SBram Moolenaar 759599c89c8SBram Moolenaarfunc Test_wrong_type() 760599c89c8SBram Moolenaar call CheckDefFailure(['let var: list<nothing>'], 'E1010:') 761599c89c8SBram Moolenaar call CheckDefFailure(['let var: list<list<nothing>>'], 'E1010:') 762599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<nothing>'], 'E1010:') 763599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<dict<nothing>>'], 'E1010:') 764599c89c8SBram Moolenaar 765599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 766599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<list<number>'], 'E1009:') 76742a480bfSBram Moolenaar 76842a480bfSBram Moolenaar call CheckDefFailure(['let var: ally'], 'E1010:') 76942a480bfSBram Moolenaar call CheckDefFailure(['let var: bram'], 'E1010:') 77042a480bfSBram Moolenaar call CheckDefFailure(['let var: cathy'], 'E1010:') 77142a480bfSBram Moolenaar call CheckDefFailure(['let var: dom'], 'E1010:') 77242a480bfSBram Moolenaar call CheckDefFailure(['let var: freddy'], 'E1010:') 77342a480bfSBram Moolenaar call CheckDefFailure(['let var: john'], 'E1010:') 77442a480bfSBram Moolenaar call CheckDefFailure(['let var: larry'], 'E1010:') 77542a480bfSBram Moolenaar call CheckDefFailure(['let var: ned'], 'E1010:') 77642a480bfSBram Moolenaar call CheckDefFailure(['let var: pam'], 'E1010:') 77742a480bfSBram Moolenaar call CheckDefFailure(['let var: sam'], 'E1010:') 77842a480bfSBram Moolenaar call CheckDefFailure(['let var: vim'], 'E1010:') 779a0a9f43aSBram Moolenaar 780a0a9f43aSBram Moolenaar call CheckDefFailure(['let Ref: number', 'Ref()'], 'E1085:') 781a0a9f43aSBram Moolenaar call CheckDefFailure(['let Ref: string', 'let res = Ref()'], 'E1085:') 7828a7d6542SBram Moolenaarendfunc 7838a7d6542SBram Moolenaar 7848a7d6542SBram Moolenaarfunc Test_const() 7858a7d6542SBram Moolenaar call CheckDefFailure(['const var = 234', 'var = 99'], 'E1018:') 7868a7d6542SBram Moolenaar call CheckDefFailure(['const one = 234', 'let one = 99'], 'E1017:') 7878a7d6542SBram Moolenaar call CheckDefFailure(['const two'], 'E1021:') 7889be61bbbSBram Moolenaar call CheckDefFailure(['const &option'], 'E996:') 7898a7d6542SBram Moolenaarendfunc 7908a7d6542SBram Moolenaar 791df069eecSBram Moolenaardef Test_range_no_colon() 792df069eecSBram Moolenaar call CheckDefFailure(['%s/a/b/'], 'E1050:') 793df069eecSBram Moolenaar call CheckDefFailure(['+ s/a/b/'], 'E1050:') 794df069eecSBram Moolenaar call CheckDefFailure(['- s/a/b/'], 'E1050:') 795df069eecSBram Moolenaar call CheckDefFailure(['. s/a/b/'], 'E1050:') 796df069eecSBram Moolenaarenddef 797df069eecSBram Moolenaar 798df069eecSBram Moolenaar 7998a7d6542SBram Moolenaardef Test_block() 8008a7d6542SBram Moolenaar let outer = 1 8018a7d6542SBram Moolenaar { 8028a7d6542SBram Moolenaar let inner = 2 8038a7d6542SBram Moolenaar assert_equal(1, outer) 8048a7d6542SBram Moolenaar assert_equal(2, inner) 8058a7d6542SBram Moolenaar } 8068a7d6542SBram Moolenaar assert_equal(1, outer) 8078a7d6542SBram Moolenaarenddef 8088a7d6542SBram Moolenaar 8098a7d6542SBram Moolenaarfunc Test_block_failure() 8108a7d6542SBram Moolenaar call CheckDefFailure(['{', 'let inner = 1', '}', 'echo inner'], 'E1001:') 811585fea7bSBram Moolenaar call CheckDefFailure(['}'], 'E1025:') 812585fea7bSBram Moolenaar call CheckDefFailure(['{', 'echo 1'], 'E1026:') 8138a7d6542SBram Moolenaarendfunc 8148a7d6542SBram Moolenaar 815d032f34aSBram Moolenaarfunc g:NoSuchFunc() 816d032f34aSBram Moolenaar echo 'none' 817d032f34aSBram Moolenaarendfunc 818d032f34aSBram Moolenaar 8198a7d6542SBram Moolenaardef Test_try_catch() 8208a7d6542SBram Moolenaar let l = [] 8217a092245SBram Moolenaar try # comment 8228a7d6542SBram Moolenaar add(l, '1') 8238a7d6542SBram Moolenaar throw 'wrong' 8248a7d6542SBram Moolenaar add(l, '2') 8257a092245SBram Moolenaar catch # comment 8268a7d6542SBram Moolenaar add(l, v:exception) 8277a092245SBram Moolenaar finally # comment 8288a7d6542SBram Moolenaar add(l, '3') 8297a092245SBram Moolenaar endtry # comment 8308a7d6542SBram Moolenaar assert_equal(['1', 'wrong', '3'], l) 83168d130c6SBram Moolenaar 832e859312eSBram Moolenaar l = [] 833e859312eSBram Moolenaar try 834e859312eSBram Moolenaar try 835e859312eSBram Moolenaar add(l, '1') 836e859312eSBram Moolenaar throw 'wrong' 837e859312eSBram Moolenaar add(l, '2') 838e859312eSBram Moolenaar catch /right/ 839e859312eSBram Moolenaar add(l, v:exception) 840e859312eSBram Moolenaar endtry 841e859312eSBram Moolenaar catch /wrong/ 842e859312eSBram Moolenaar add(l, 'caught') 843e859312eSBram Moolenaar finally 844e859312eSBram Moolenaar add(l, 'finally') 845e859312eSBram Moolenaar endtry 846e859312eSBram Moolenaar assert_equal(['1', 'caught', 'finally'], l) 847e859312eSBram Moolenaar 84868d130c6SBram Moolenaar let n: number 84968d130c6SBram Moolenaar try 85068d130c6SBram Moolenaar n = l[3] 85168d130c6SBram Moolenaar catch /E684:/ 85268d130c6SBram Moolenaar n = 99 85368d130c6SBram Moolenaar endtry 85468d130c6SBram Moolenaar assert_equal(99, n) 85568d130c6SBram Moolenaar 85668d130c6SBram Moolenaar try 857cc673e74SBram Moolenaar # string slice returns a string, not a number 85868d130c6SBram Moolenaar n = g:astring[3] 85956acb094SBram Moolenaar catch /E1029:/ 86068d130c6SBram Moolenaar n = 77 86168d130c6SBram Moolenaar endtry 86268d130c6SBram Moolenaar assert_equal(77, n) 86368d130c6SBram Moolenaar 86468d130c6SBram Moolenaar try 86568d130c6SBram Moolenaar n = l[g:astring] 86656acb094SBram Moolenaar catch /E1029:/ 86756acb094SBram Moolenaar n = 88 86868d130c6SBram Moolenaar endtry 86956acb094SBram Moolenaar assert_equal(88, n) 87068d130c6SBram Moolenaar 87168d130c6SBram Moolenaar try 87268d130c6SBram Moolenaar n = s:does_not_exist 87368d130c6SBram Moolenaar catch /E121:/ 874f0b9f43cSBram Moolenaar n = 111 875f0b9f43cSBram Moolenaar endtry 876f0b9f43cSBram Moolenaar assert_equal(111, n) 877f0b9f43cSBram Moolenaar 878f0b9f43cSBram Moolenaar try 879f0b9f43cSBram Moolenaar n = g:does_not_exist 880f0b9f43cSBram Moolenaar catch /E121:/ 88168d130c6SBram Moolenaar n = 121 88268d130c6SBram Moolenaar endtry 88368d130c6SBram Moolenaar assert_equal(121, n) 88468d130c6SBram Moolenaar 88568d130c6SBram Moolenaar let d = #{one: 1} 88668d130c6SBram Moolenaar try 88768d130c6SBram Moolenaar n = d[g:astring] 88868d130c6SBram Moolenaar catch /E716:/ 88968d130c6SBram Moolenaar n = 222 89068d130c6SBram Moolenaar endtry 89168d130c6SBram Moolenaar assert_equal(222, n) 892f0b9f43cSBram Moolenaar 893f0b9f43cSBram Moolenaar try 894f0b9f43cSBram Moolenaar n = -g:astring 895f0b9f43cSBram Moolenaar catch /E39:/ 896f0b9f43cSBram Moolenaar n = 233 897f0b9f43cSBram Moolenaar endtry 898f0b9f43cSBram Moolenaar assert_equal(233, n) 899f0b9f43cSBram Moolenaar 900f0b9f43cSBram Moolenaar try 901f0b9f43cSBram Moolenaar n = +g:astring 902f0b9f43cSBram Moolenaar catch /E1030:/ 903f0b9f43cSBram Moolenaar n = 244 904f0b9f43cSBram Moolenaar endtry 905f0b9f43cSBram Moolenaar assert_equal(244, n) 906f0b9f43cSBram Moolenaar 907f0b9f43cSBram Moolenaar try 908f0b9f43cSBram Moolenaar n = +g:alist 909f0b9f43cSBram Moolenaar catch /E745:/ 910f0b9f43cSBram Moolenaar n = 255 911f0b9f43cSBram Moolenaar endtry 912f0b9f43cSBram Moolenaar assert_equal(255, n) 913f0b9f43cSBram Moolenaar 914f0b9f43cSBram Moolenaar let nd: dict<any> 915f0b9f43cSBram Moolenaar try 916f0b9f43cSBram Moolenaar nd = {g:anumber: 1} 917f0b9f43cSBram Moolenaar catch /E1029:/ 918f0b9f43cSBram Moolenaar n = 266 919f0b9f43cSBram Moolenaar endtry 920f0b9f43cSBram Moolenaar assert_equal(266, n) 921f0b9f43cSBram Moolenaar 922f0b9f43cSBram Moolenaar try 923f0b9f43cSBram Moolenaar [n] = [1, 2, 3] 924f0b9f43cSBram Moolenaar catch /E1093:/ 925f0b9f43cSBram Moolenaar n = 277 926f0b9f43cSBram Moolenaar endtry 927f0b9f43cSBram Moolenaar assert_equal(277, n) 928f0b9f43cSBram Moolenaar 929e859312eSBram Moolenaar try 930e859312eSBram Moolenaar &ts = g:astring 931e859312eSBram Moolenaar catch /E1029:/ 932e859312eSBram Moolenaar n = 288 933e859312eSBram Moolenaar endtry 934e859312eSBram Moolenaar assert_equal(288, n) 935e859312eSBram Moolenaar 936e859312eSBram Moolenaar try 937e859312eSBram Moolenaar &backspace = 'asdf' 938e859312eSBram Moolenaar catch /E474:/ 939e859312eSBram Moolenaar n = 299 940e859312eSBram Moolenaar endtry 941e859312eSBram Moolenaar assert_equal(299, n) 942e859312eSBram Moolenaar 943e859312eSBram Moolenaar l = [1] 944e859312eSBram Moolenaar try 945e859312eSBram Moolenaar l[3] = 3 946e859312eSBram Moolenaar catch /E684:/ 947e859312eSBram Moolenaar n = 300 948e859312eSBram Moolenaar endtry 949e859312eSBram Moolenaar assert_equal(300, n) 950e859312eSBram Moolenaar 951e859312eSBram Moolenaar try 952e859312eSBram Moolenaar unlet g:does_not_exist 953e859312eSBram Moolenaar catch /E108:/ 954e859312eSBram Moolenaar n = 322 955e859312eSBram Moolenaar endtry 956e859312eSBram Moolenaar assert_equal(322, n) 957e859312eSBram Moolenaar 958e859312eSBram Moolenaar try 959e859312eSBram Moolenaar d = {'text': 1, g:astring: 2} 960e859312eSBram Moolenaar catch /E721:/ 961e859312eSBram Moolenaar n = 333 962e859312eSBram Moolenaar endtry 963e859312eSBram Moolenaar assert_equal(333, n) 964e859312eSBram Moolenaar 965e859312eSBram Moolenaar try 966e859312eSBram Moolenaar l = DeletedFunc() 967e859312eSBram Moolenaar catch /E933:/ 968e859312eSBram Moolenaar n = 344 969e859312eSBram Moolenaar endtry 970e859312eSBram Moolenaar assert_equal(344, n) 971d032f34aSBram Moolenaar 972d032f34aSBram Moolenaar try 973d032f34aSBram Moolenaar echo len(v:true) 974d032f34aSBram Moolenaar catch /E701:/ 975d032f34aSBram Moolenaar n = 355 976d032f34aSBram Moolenaar endtry 977d032f34aSBram Moolenaar assert_equal(355, n) 978d032f34aSBram Moolenaar 979d032f34aSBram Moolenaar let P = function('g:NoSuchFunc') 980d032f34aSBram Moolenaar delfunc g:NoSuchFunc 981d032f34aSBram Moolenaar try 982d032f34aSBram Moolenaar echo P() 983d032f34aSBram Moolenaar catch /E117:/ 984d032f34aSBram Moolenaar n = 366 985d032f34aSBram Moolenaar endtry 986d032f34aSBram Moolenaar assert_equal(366, n) 987d032f34aSBram Moolenaar 988d032f34aSBram Moolenaar try 989d032f34aSBram Moolenaar echo g:NoSuchFunc() 990d032f34aSBram Moolenaar catch /E117:/ 991d032f34aSBram Moolenaar n = 377 992d032f34aSBram Moolenaar endtry 993d032f34aSBram Moolenaar assert_equal(377, n) 994d032f34aSBram Moolenaar 995d032f34aSBram Moolenaar try 996d032f34aSBram Moolenaar echo g:alist + 4 997d032f34aSBram Moolenaar catch /E745:/ 998d032f34aSBram Moolenaar n = 388 999d032f34aSBram Moolenaar endtry 1000d032f34aSBram Moolenaar assert_equal(388, n) 1001d032f34aSBram Moolenaar 1002d032f34aSBram Moolenaar try 1003d032f34aSBram Moolenaar echo 4 + g:alist 1004d032f34aSBram Moolenaar catch /E745:/ 1005d032f34aSBram Moolenaar n = 399 1006d032f34aSBram Moolenaar endtry 1007d032f34aSBram Moolenaar assert_equal(399, n) 1008d032f34aSBram Moolenaar 1009d032f34aSBram Moolenaar try 1010d032f34aSBram Moolenaar echo g:alist.member 1011d032f34aSBram Moolenaar catch /E715:/ 1012d032f34aSBram Moolenaar n = 400 1013d032f34aSBram Moolenaar endtry 1014d032f34aSBram Moolenaar assert_equal(400, n) 1015d032f34aSBram Moolenaar 1016d032f34aSBram Moolenaar try 1017d032f34aSBram Moolenaar echo d.member 1018d032f34aSBram Moolenaar catch /E716:/ 1019d032f34aSBram Moolenaar n = 411 1020d032f34aSBram Moolenaar endtry 1021d032f34aSBram Moolenaar assert_equal(411, n) 10228a7d6542SBram Moolenaarenddef 10238a7d6542SBram Moolenaar 1024e859312eSBram Moolenaardef DeletedFunc(): list<any> 1025e859312eSBram Moolenaar return ['delete me'] 1026e859312eSBram Moolenaarenddef 1027e859312eSBram Moolenaardefcompile 1028e859312eSBram Moolenaardelfunc DeletedFunc 1029e859312eSBram Moolenaar 1030257cc5eeSBram Moolenaardef ThrowFromDef() 1031a72cfb80SBram Moolenaar throw "getout" # comment 1032257cc5eeSBram Moolenaarenddef 1033257cc5eeSBram Moolenaar 1034257cc5eeSBram Moolenaarfunc CatchInFunc() 1035257cc5eeSBram Moolenaar try 1036257cc5eeSBram Moolenaar call ThrowFromDef() 1037257cc5eeSBram Moolenaar catch 1038257cc5eeSBram Moolenaar let g:thrown_func = v:exception 1039257cc5eeSBram Moolenaar endtry 1040257cc5eeSBram Moolenaarendfunc 1041257cc5eeSBram Moolenaar 1042257cc5eeSBram Moolenaardef CatchInDef() 1043257cc5eeSBram Moolenaar try 1044257cc5eeSBram Moolenaar ThrowFromDef() 1045257cc5eeSBram Moolenaar catch 1046257cc5eeSBram Moolenaar g:thrown_def = v:exception 1047257cc5eeSBram Moolenaar endtry 1048257cc5eeSBram Moolenaarenddef 1049257cc5eeSBram Moolenaar 1050f575adffSBram Moolenaardef ReturnFinally(): string 1051f575adffSBram Moolenaar try 1052f575adffSBram Moolenaar return 'intry' 1053f575adffSBram Moolenaar finally 1054f575adffSBram Moolenaar g:in_finally = 'finally' 1055f575adffSBram Moolenaar endtry 1056f575adffSBram Moolenaar return 'end' 1057f575adffSBram Moolenaarenddef 1058f575adffSBram Moolenaar 1059257cc5eeSBram Moolenaardef Test_try_catch_nested() 1060257cc5eeSBram Moolenaar CatchInFunc() 1061257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_func) 1062257cc5eeSBram Moolenaar 1063257cc5eeSBram Moolenaar CatchInDef() 1064257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_def) 1065f575adffSBram Moolenaar 1066f575adffSBram Moolenaar assert_equal('intry', ReturnFinally()) 1067f575adffSBram Moolenaar assert_equal('finally', g:in_finally) 1068f575adffSBram Moolenaarenddef 1069f575adffSBram Moolenaar 1070f575adffSBram Moolenaardef Test_try_catch_match() 1071f575adffSBram Moolenaar let seq = 'a' 1072f575adffSBram Moolenaar try 1073f575adffSBram Moolenaar throw 'something' 1074f575adffSBram Moolenaar catch /nothing/ 1075f575adffSBram Moolenaar seq ..= 'x' 1076f575adffSBram Moolenaar catch /some/ 1077f575adffSBram Moolenaar seq ..= 'b' 1078f575adffSBram Moolenaar catch /asdf/ 1079f575adffSBram Moolenaar seq ..= 'x' 1080e8c4abbbSBram Moolenaar catch ?a\?sdf? 1081e8c4abbbSBram Moolenaar seq ..= 'y' 1082f575adffSBram Moolenaar finally 1083f575adffSBram Moolenaar seq ..= 'c' 1084f575adffSBram Moolenaar endtry 1085f575adffSBram Moolenaar assert_equal('abc', seq) 1086257cc5eeSBram Moolenaarenddef 1087257cc5eeSBram Moolenaar 1088e8c4abbbSBram Moolenaardef Test_try_catch_fails() 1089e8c4abbbSBram Moolenaar call CheckDefFailure(['catch'], 'E603:') 1090e8c4abbbSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'catch', 'catch'], 'E1033:') 1091e8c4abbbSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'catch /pat'], 'E1067:') 1092585fea7bSBram Moolenaar call CheckDefFailure(['finally'], 'E606:') 1093585fea7bSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'finally', 'echo 1', 'finally'], 'E607:') 1094585fea7bSBram Moolenaar call CheckDefFailure(['endtry'], 'E602:') 1095585fea7bSBram Moolenaar call CheckDefFailure(['while 1', 'endtry'], 'E170:') 1096585fea7bSBram Moolenaar call CheckDefFailure(['for i in range(5)', 'endtry'], 'E170:') 1097585fea7bSBram Moolenaar call CheckDefFailure(['if 2', 'endtry'], 'E171:') 1098585fea7bSBram Moolenaar call CheckDefFailure(['try', 'echo 1', 'endtry'], 'E1032:') 1099585fea7bSBram Moolenaar 1100a72cfb80SBram Moolenaar call CheckDefFailure(['throw'], 'E1015:') 1101585fea7bSBram Moolenaar call CheckDefFailure(['throw xxx'], 'E1001:') 1102e8c4abbbSBram Moolenaarenddef 1103e8c4abbbSBram Moolenaar 1104006ad48bSBram Moolenaardef Test_throw_vimscript() 1105f5be8cdbSBram Moolenaar # only checks line continuation 1106006ad48bSBram Moolenaar let lines =<< trim END 1107006ad48bSBram Moolenaar vim9script 1108006ad48bSBram Moolenaar try 1109006ad48bSBram Moolenaar throw 'one' 1110006ad48bSBram Moolenaar .. 'two' 1111006ad48bSBram Moolenaar catch 1112006ad48bSBram Moolenaar assert_equal('onetwo', v:exception) 1113006ad48bSBram Moolenaar endtry 1114006ad48bSBram Moolenaar END 1115006ad48bSBram Moolenaar CheckScriptSuccess(lines) 1116006ad48bSBram Moolenaarenddef 1117006ad48bSBram Moolenaar 1118ed677f55SBram Moolenaardef Test_error_in_nested_function() 1119ed677f55SBram Moolenaar # an error in a nested :function aborts executin in the calling :def function 1120ed677f55SBram Moolenaar let lines =<< trim END 1121ed677f55SBram Moolenaar vim9script 1122ed677f55SBram Moolenaar def Func() 1123ed677f55SBram Moolenaar Error() 1124ed677f55SBram Moolenaar g:test_var = 1 1125ed677f55SBram Moolenaar enddef 1126ed677f55SBram Moolenaar func Error() abort 1127ed677f55SBram Moolenaar eval [][0] 1128ed677f55SBram Moolenaar endfunc 1129ed677f55SBram Moolenaar Func() 1130ed677f55SBram Moolenaar END 1131ed677f55SBram Moolenaar g:test_var = 0 1132ed677f55SBram Moolenaar CheckScriptFailure(lines, 'E684:') 1133ed677f55SBram Moolenaar assert_equal(0, g:test_var) 1134ed677f55SBram Moolenaarenddef 1135ed677f55SBram Moolenaar 113637c83711SBram Moolenaardef Test_cexpr_vimscript() 1137f5be8cdbSBram Moolenaar # only checks line continuation 113837c83711SBram Moolenaar set errorformat=File\ %f\ line\ %l 113937c83711SBram Moolenaar let lines =<< trim END 114037c83711SBram Moolenaar vim9script 114137c83711SBram Moolenaar cexpr 'File' 114237c83711SBram Moolenaar .. ' someFile' .. 114337c83711SBram Moolenaar ' line 19' 114437c83711SBram Moolenaar assert_equal(19, getqflist()[0].lnum) 114537c83711SBram Moolenaar END 114637c83711SBram Moolenaar CheckScriptSuccess(lines) 114737c83711SBram Moolenaar set errorformat& 114837c83711SBram Moolenaarenddef 114937c83711SBram Moolenaar 1150c9edd6b5SBram Moolenaardef Test_statusline_syntax() 1151c9edd6b5SBram Moolenaar # legacy syntax is used for 'statusline' 1152c9edd6b5SBram Moolenaar let lines =<< trim END 1153c9edd6b5SBram Moolenaar vim9script 1154c9edd6b5SBram Moolenaar func g:Status() 1155c9edd6b5SBram Moolenaar return '%{"x" is# "x"}' 1156c9edd6b5SBram Moolenaar endfunc 1157c9edd6b5SBram Moolenaar set laststatus=2 statusline=%!Status() 1158c9edd6b5SBram Moolenaar redrawstatus 1159c9edd6b5SBram Moolenaar set laststatus statusline= 1160c9edd6b5SBram Moolenaar END 1161c9edd6b5SBram Moolenaar CheckScriptSuccess(lines) 1162c9edd6b5SBram Moolenaarenddef 1163c9edd6b5SBram Moolenaar 1164b209750bSBram Moolenaardef Test_list_vimscript() 1165b209750bSBram Moolenaar # checks line continuation and comments 1166b209750bSBram Moolenaar let lines =<< trim END 1167b209750bSBram Moolenaar vim9script 1168b209750bSBram Moolenaar let mylist = [ 1169b209750bSBram Moolenaar 'one', 1170b209750bSBram Moolenaar # comment 1171b209750bSBram Moolenaar 'two', # empty line follows 1172b209750bSBram Moolenaar 1173b209750bSBram Moolenaar 'three', 1174b209750bSBram Moolenaar ] 1175b209750bSBram Moolenaar assert_equal(['one', 'two', 'three'], mylist) 1176b209750bSBram Moolenaar END 1177b209750bSBram Moolenaar CheckScriptSuccess(lines) 117866250c93SBram Moolenaar 117966250c93SBram Moolenaar # check all lines from heredoc are kept 118066250c93SBram Moolenaar lines =<< trim END 118166250c93SBram Moolenaar # comment 1 118266250c93SBram Moolenaar two 118366250c93SBram Moolenaar # comment 3 118466250c93SBram Moolenaar 118566250c93SBram Moolenaar five 118666250c93SBram Moolenaar # comment 6 118766250c93SBram Moolenaar END 118866250c93SBram Moolenaar assert_equal(['# comment 1', 'two', '# comment 3', '', 'five', '# comment 6'], lines) 1189b209750bSBram Moolenaarenddef 1190b209750bSBram Moolenaar 11912a1381c3SBram Moolenaarif has('channel') 119240ee466cSBram Moolenaar let someJob = test_null_job() 119340ee466cSBram Moolenaar 119440ee466cSBram Moolenaar def FuncWithError() 119540ee466cSBram Moolenaar echomsg g:someJob 119640ee466cSBram Moolenaar enddef 119740ee466cSBram Moolenaar 119840ee466cSBram Moolenaar func Test_convert_emsg_to_exception() 119940ee466cSBram Moolenaar try 120040ee466cSBram Moolenaar call FuncWithError() 120140ee466cSBram Moolenaar catch 120240ee466cSBram Moolenaar call assert_match('Vim:E908:', v:exception) 120340ee466cSBram Moolenaar endtry 120440ee466cSBram Moolenaar endfunc 12052a1381c3SBram Moolenaarendif 120640ee466cSBram Moolenaar 12078a7d6542SBram Moolenaarlet s:export_script_lines =<< trim END 12088a7d6542SBram Moolenaar vim9script 12098a7d6542SBram Moolenaar let name: string = 'bob' 12108a7d6542SBram Moolenaar def Concat(arg: string): string 12118a7d6542SBram Moolenaar return name .. arg 12128a7d6542SBram Moolenaar enddef 1213227a69deSBram Moolenaar g:result = Concat('bie') 1214227a69deSBram Moolenaar g:localname = name 12158a7d6542SBram Moolenaar 12168a7d6542SBram Moolenaar export const CONST = 1234 12178a7d6542SBram Moolenaar export let exported = 9876 12186e587dcbSBram Moolenaar export let exp_name = 'John' 12198a7d6542SBram Moolenaar export def Exported(): string 12208a7d6542SBram Moolenaar return 'Exported' 12218a7d6542SBram Moolenaar enddef 12228a7d6542SBram MoolenaarEND 12238a7d6542SBram Moolenaar 1224b3ca9824SBram Moolenaardef Undo_export_script_lines() 1225b3ca9824SBram Moolenaar unlet g:result 1226b3ca9824SBram Moolenaar unlet g:localname 1227b3ca9824SBram Moolenaarenddef 1228b3ca9824SBram Moolenaar 12295269bd2aSBram Moolenaardef Test_vim9_import_export() 12308a7d6542SBram Moolenaar let import_script_lines =<< trim END 12318a7d6542SBram Moolenaar vim9script 12328a7d6542SBram Moolenaar import {exported, Exported} from './Xexport.vim' 12338a7d6542SBram Moolenaar g:imported = exported 12346e587dcbSBram Moolenaar exported += 3 12356e587dcbSBram Moolenaar g:imported_added = exported 12368a7d6542SBram Moolenaar g:imported_func = Exported() 12376e587dcbSBram Moolenaar 123840f4f7a4SBram Moolenaar def GetExported(): string 123940f4f7a4SBram Moolenaar let local_dict = #{ref: Exported} 124040f4f7a4SBram Moolenaar return local_dict.ref() 124140f4f7a4SBram Moolenaar enddef 124240f4f7a4SBram Moolenaar g:funcref_result = GetExported() 124340f4f7a4SBram Moolenaar 12446e587dcbSBram Moolenaar import {exp_name} from './Xexport.vim' 12456e587dcbSBram Moolenaar g:imported_name = exp_name 12466e587dcbSBram Moolenaar exp_name ..= ' Doe' 12476e587dcbSBram Moolenaar g:imported_name_appended = exp_name 12485381c7a1SBram Moolenaar g:imported_later = exported 12498a7d6542SBram Moolenaar END 12508a7d6542SBram Moolenaar 12518a7d6542SBram Moolenaar writefile(import_script_lines, 'Ximport.vim') 12528a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport.vim') 12538a7d6542SBram Moolenaar 12548a7d6542SBram Moolenaar source Ximport.vim 12558a7d6542SBram Moolenaar 12568a7d6542SBram Moolenaar assert_equal('bobbie', g:result) 12578a7d6542SBram Moolenaar assert_equal('bob', g:localname) 12588a7d6542SBram Moolenaar assert_equal(9876, g:imported) 12596e587dcbSBram Moolenaar assert_equal(9879, g:imported_added) 12605381c7a1SBram Moolenaar assert_equal(9879, g:imported_later) 12618a7d6542SBram Moolenaar assert_equal('Exported', g:imported_func) 126240f4f7a4SBram Moolenaar assert_equal('Exported', g:funcref_result) 12636e587dcbSBram Moolenaar assert_equal('John', g:imported_name) 12646e587dcbSBram Moolenaar assert_equal('John Doe', g:imported_name_appended) 12658a7d6542SBram Moolenaar assert_false(exists('g:name')) 12668a7d6542SBram Moolenaar 1267b3ca9824SBram Moolenaar Undo_export_script_lines() 12688a7d6542SBram Moolenaar unlet g:imported 12696e587dcbSBram Moolenaar unlet g:imported_added 12705381c7a1SBram Moolenaar unlet g:imported_later 12718a7d6542SBram Moolenaar unlet g:imported_func 12726e587dcbSBram Moolenaar unlet g:imported_name g:imported_name_appended 12738a7d6542SBram Moolenaar delete('Ximport.vim') 1274f2d5c240SBram Moolenaar 12751c991144SBram Moolenaar # similar, with line breaks 12761c991144SBram Moolenaar let import_line_break_script_lines =<< trim END 12771c991144SBram Moolenaar vim9script 12781c991144SBram Moolenaar import { 12791c991144SBram Moolenaar exported, 12801c991144SBram Moolenaar Exported, 12811c991144SBram Moolenaar } 12821c991144SBram Moolenaar from 12831c991144SBram Moolenaar './Xexport.vim' 12841c991144SBram Moolenaar g:imported = exported 12851c991144SBram Moolenaar exported += 5 12861c991144SBram Moolenaar g:imported_added = exported 12871c991144SBram Moolenaar g:imported_func = Exported() 12881c991144SBram Moolenaar END 12891c991144SBram Moolenaar writefile(import_line_break_script_lines, 'Ximport_lbr.vim') 12901c991144SBram Moolenaar source Ximport_lbr.vim 12911c991144SBram Moolenaar 12921c991144SBram Moolenaar assert_equal(9876, g:imported) 12931c991144SBram Moolenaar assert_equal(9881, g:imported_added) 12941c991144SBram Moolenaar assert_equal('Exported', g:imported_func) 12951c991144SBram Moolenaar 12961c991144SBram Moolenaar # exported script not sourced again 12971c991144SBram Moolenaar assert_false(exists('g:result')) 12981c991144SBram Moolenaar unlet g:imported 12991c991144SBram Moolenaar unlet g:imported_added 13001c991144SBram Moolenaar unlet g:imported_func 13011c991144SBram Moolenaar delete('Ximport_lbr.vim') 13021c991144SBram Moolenaar 13031c991144SBram Moolenaar # import inside :def function 13045381c7a1SBram Moolenaar let import_in_def_lines =<< trim END 13055381c7a1SBram Moolenaar vim9script 13065381c7a1SBram Moolenaar def ImportInDef() 13075381c7a1SBram Moolenaar import exported from './Xexport.vim' 13085381c7a1SBram Moolenaar g:imported = exported 13095381c7a1SBram Moolenaar exported += 7 13105381c7a1SBram Moolenaar g:imported_added = exported 13115381c7a1SBram Moolenaar enddef 13125381c7a1SBram Moolenaar ImportInDef() 13135381c7a1SBram Moolenaar END 13145381c7a1SBram Moolenaar writefile(import_in_def_lines, 'Ximport2.vim') 13155381c7a1SBram Moolenaar source Ximport2.vim 1316f5be8cdbSBram Moolenaar # TODO: this should be 9879 13175381c7a1SBram Moolenaar assert_equal(9876, g:imported) 13185381c7a1SBram Moolenaar assert_equal(9883, g:imported_added) 13195381c7a1SBram Moolenaar unlet g:imported 13205381c7a1SBram Moolenaar unlet g:imported_added 13215381c7a1SBram Moolenaar delete('Ximport2.vim') 13225381c7a1SBram Moolenaar 1323f2d5c240SBram Moolenaar let import_star_as_lines =<< trim END 1324f2d5c240SBram Moolenaar vim9script 1325f2d5c240SBram Moolenaar import * as Export from './Xexport.vim' 1326f2d5c240SBram Moolenaar def UseExport() 1327f2d5c240SBram Moolenaar g:imported = Export.exported 1328f2d5c240SBram Moolenaar enddef 1329f2d5c240SBram Moolenaar UseExport() 1330f2d5c240SBram Moolenaar END 1331f2d5c240SBram Moolenaar writefile(import_star_as_lines, 'Ximport.vim') 1332f2d5c240SBram Moolenaar source Ximport.vim 13335381c7a1SBram Moolenaar assert_equal(9883, g:imported) 1334f2d5c240SBram Moolenaar 1335599c89c8SBram Moolenaar let import_star_as_lines_no_dot =<< trim END 1336599c89c8SBram Moolenaar vim9script 1337599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 1338599c89c8SBram Moolenaar def Func() 1339599c89c8SBram Moolenaar let dummy = 1 1340599c89c8SBram Moolenaar let imported = Export + dummy 1341599c89c8SBram Moolenaar enddef 1342822ba247SBram Moolenaar defcompile 1343599c89c8SBram Moolenaar END 1344599c89c8SBram Moolenaar writefile(import_star_as_lines_no_dot, 'Ximport.vim') 1345599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1060:') 1346599c89c8SBram Moolenaar 1347599c89c8SBram Moolenaar let import_star_as_lines_dot_space =<< trim END 1348599c89c8SBram Moolenaar vim9script 1349599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 1350599c89c8SBram Moolenaar def Func() 1351599c89c8SBram Moolenaar let imported = Export . exported 1352599c89c8SBram Moolenaar enddef 1353822ba247SBram Moolenaar defcompile 1354599c89c8SBram Moolenaar END 1355599c89c8SBram Moolenaar writefile(import_star_as_lines_dot_space, 'Ximport.vim') 1356599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1074:') 1357599c89c8SBram Moolenaar 1358599c89c8SBram Moolenaar let import_star_as_lines_missing_name =<< trim END 1359599c89c8SBram Moolenaar vim9script 1360599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 1361599c89c8SBram Moolenaar def Func() 1362599c89c8SBram Moolenaar let imported = Export. 1363599c89c8SBram Moolenaar enddef 1364822ba247SBram Moolenaar defcompile 1365599c89c8SBram Moolenaar END 1366599c89c8SBram Moolenaar writefile(import_star_as_lines_missing_name, 'Ximport.vim') 1367599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 1368599c89c8SBram Moolenaar 13691c991144SBram Moolenaar let import_star_as_lbr_lines =<< trim END 13701c991144SBram Moolenaar vim9script 13711c991144SBram Moolenaar import * 13721c991144SBram Moolenaar as Export 13731c991144SBram Moolenaar from 13741c991144SBram Moolenaar './Xexport.vim' 13751c991144SBram Moolenaar def UseExport() 13761c991144SBram Moolenaar g:imported = Export.exported 13771c991144SBram Moolenaar enddef 13781c991144SBram Moolenaar UseExport() 13791c991144SBram Moolenaar END 13801c991144SBram Moolenaar writefile(import_star_as_lbr_lines, 'Ximport.vim') 13811c991144SBram Moolenaar source Ximport.vim 13821c991144SBram Moolenaar assert_equal(9883, g:imported) 13831c991144SBram Moolenaar 1384f2d5c240SBram Moolenaar let import_star_lines =<< trim END 1385f2d5c240SBram Moolenaar vim9script 1386f2d5c240SBram Moolenaar import * from './Xexport.vim' 1387f2d5c240SBram Moolenaar END 1388f2d5c240SBram Moolenaar writefile(import_star_lines, 'Ximport.vim') 1389f2d5c240SBram Moolenaar assert_fails('source Ximport.vim', 'E1045:') 1390f2d5c240SBram Moolenaar 1391f5be8cdbSBram Moolenaar # try to import something that exists but is not exported 1392fa29c8abSBram Moolenaar let import_not_exported_lines =<< trim END 1393fa29c8abSBram Moolenaar vim9script 1394fa29c8abSBram Moolenaar import name from './Xexport.vim' 1395fa29c8abSBram Moolenaar END 1396fa29c8abSBram Moolenaar writefile(import_not_exported_lines, 'Ximport.vim') 1397fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1049:') 1398fa29c8abSBram Moolenaar 1399f5be8cdbSBram Moolenaar # try to import something that is already defined 14005269bd2aSBram Moolenaar let import_already_defined =<< trim END 14015269bd2aSBram Moolenaar vim9script 14025269bd2aSBram Moolenaar let exported = 'something' 14035269bd2aSBram Moolenaar import exported from './Xexport.vim' 14045269bd2aSBram Moolenaar END 14055269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 14065269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 14075269bd2aSBram Moolenaar 1408f5be8cdbSBram Moolenaar # try to import something that is already defined 14095269bd2aSBram Moolenaar import_already_defined =<< trim END 14105269bd2aSBram Moolenaar vim9script 14115269bd2aSBram Moolenaar let exported = 'something' 14125269bd2aSBram Moolenaar import * as exported from './Xexport.vim' 14135269bd2aSBram Moolenaar END 14145269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 14155269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 14165269bd2aSBram Moolenaar 1417f5be8cdbSBram Moolenaar # try to import something that is already defined 14185269bd2aSBram Moolenaar import_already_defined =<< trim END 14195269bd2aSBram Moolenaar vim9script 14205269bd2aSBram Moolenaar let exported = 'something' 14215269bd2aSBram Moolenaar import {exported} from './Xexport.vim' 14225269bd2aSBram Moolenaar END 14235269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 14245269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 14255269bd2aSBram Moolenaar 1426f5be8cdbSBram Moolenaar # import a very long name, requires making a copy 1427fa29c8abSBram Moolenaar let import_long_name_lines =<< trim END 1428fa29c8abSBram Moolenaar vim9script 1429fa29c8abSBram Moolenaar import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim' 1430fa29c8abSBram Moolenaar END 1431fa29c8abSBram Moolenaar writefile(import_long_name_lines, 'Ximport.vim') 1432fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 1433fa29c8abSBram Moolenaar 1434fa29c8abSBram Moolenaar let import_no_from_lines =<< trim END 1435fa29c8abSBram Moolenaar vim9script 1436fa29c8abSBram Moolenaar import name './Xexport.vim' 1437fa29c8abSBram Moolenaar END 1438fa29c8abSBram Moolenaar writefile(import_no_from_lines, 'Ximport.vim') 1439fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1070:') 1440fa29c8abSBram Moolenaar 1441fa29c8abSBram Moolenaar let import_invalid_string_lines =<< trim END 1442fa29c8abSBram Moolenaar vim9script 1443fa29c8abSBram Moolenaar import name from Xexport.vim 1444fa29c8abSBram Moolenaar END 1445fa29c8abSBram Moolenaar writefile(import_invalid_string_lines, 'Ximport.vim') 1446fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1071:') 1447fa29c8abSBram Moolenaar 1448fa29c8abSBram Moolenaar let import_wrong_name_lines =<< trim END 1449fa29c8abSBram Moolenaar vim9script 1450fa29c8abSBram Moolenaar import name from './XnoExport.vim' 1451fa29c8abSBram Moolenaar END 1452fa29c8abSBram Moolenaar writefile(import_wrong_name_lines, 'Ximport.vim') 1453fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1053:') 1454fa29c8abSBram Moolenaar 1455fa29c8abSBram Moolenaar let import_missing_comma_lines =<< trim END 1456fa29c8abSBram Moolenaar vim9script 1457fa29c8abSBram Moolenaar import {exported name} from './Xexport.vim' 1458fa29c8abSBram Moolenaar END 14595269bd2aSBram Moolenaar writefile(import_missing_comma_lines, 'Ximport3.vim') 14605269bd2aSBram Moolenaar assert_fails('source Ximport3.vim', 'E1046:') 1461fa29c8abSBram Moolenaar 1462f2d5c240SBram Moolenaar delete('Ximport.vim') 14635269bd2aSBram Moolenaar delete('Ximport3.vim') 14648a7d6542SBram Moolenaar delete('Xexport.vim') 14658a7d6542SBram Moolenaar 1466f5be8cdbSBram Moolenaar # Check that in a Vim9 script 'cpo' is set to the Vim default. 1467750802b5SBram Moolenaar set cpo&vi 1468750802b5SBram Moolenaar let cpo_before = &cpo 1469750802b5SBram Moolenaar let lines =<< trim END 1470750802b5SBram Moolenaar vim9script 1471750802b5SBram Moolenaar g:cpo_in_vim9script = &cpo 1472750802b5SBram Moolenaar END 1473750802b5SBram Moolenaar writefile(lines, 'Xvim9_script') 1474750802b5SBram Moolenaar source Xvim9_script 1475750802b5SBram Moolenaar assert_equal(cpo_before, &cpo) 1476750802b5SBram Moolenaar set cpo&vim 1477750802b5SBram Moolenaar assert_equal(&cpo, g:cpo_in_vim9script) 1478750802b5SBram Moolenaar delete('Xvim9_script') 1479750802b5SBram Moolenaarenddef 1480750802b5SBram Moolenaar 1481803af686SBram Moolenaarfunc g:Trigger() 1482803af686SBram Moolenaar source Ximport.vim 1483803af686SBram Moolenaar return "echo 'yes'\<CR>" 1484803af686SBram Moolenaarendfunc 1485803af686SBram Moolenaar 1486803af686SBram Moolenaardef Test_import_export_expr_map() 1487803af686SBram Moolenaar # check that :import and :export work when buffer is locked 1488803af686SBram Moolenaar let export_lines =<< trim END 1489803af686SBram Moolenaar vim9script 1490803af686SBram Moolenaar export def That(): string 1491803af686SBram Moolenaar return 'yes' 1492803af686SBram Moolenaar enddef 1493803af686SBram Moolenaar END 1494803af686SBram Moolenaar writefile(export_lines, 'Xexport_that.vim') 1495803af686SBram Moolenaar 1496803af686SBram Moolenaar let import_lines =<< trim END 1497803af686SBram Moolenaar vim9script 1498803af686SBram Moolenaar import That from './Xexport_that.vim' 1499803af686SBram Moolenaar assert_equal('yes', That()) 1500803af686SBram Moolenaar END 1501803af686SBram Moolenaar writefile(import_lines, 'Ximport.vim') 1502803af686SBram Moolenaar 1503803af686SBram Moolenaar nnoremap <expr> trigger g:Trigger() 1504803af686SBram Moolenaar feedkeys('trigger', "xt") 1505803af686SBram Moolenaar 1506730b2483SBram Moolenaar delete('Xexport_that.vim') 1507803af686SBram Moolenaar delete('Ximport.vim') 1508803af686SBram Moolenaar nunmap trigger 1509803af686SBram Moolenaarenddef 1510803af686SBram Moolenaar 15118e1986e3SBram Moolenaardef Test_import_in_filetype() 15128e1986e3SBram Moolenaar # check that :import works when the buffer is locked 15138e1986e3SBram Moolenaar mkdir('ftplugin', 'p') 15148e1986e3SBram Moolenaar let export_lines =<< trim END 15158e1986e3SBram Moolenaar vim9script 15168e1986e3SBram Moolenaar export let That = 'yes' 15178e1986e3SBram Moolenaar END 1518730b2483SBram Moolenaar writefile(export_lines, 'ftplugin/Xexport_ft.vim') 15198e1986e3SBram Moolenaar 15208e1986e3SBram Moolenaar let import_lines =<< trim END 15218e1986e3SBram Moolenaar vim9script 1522730b2483SBram Moolenaar import That from './Xexport_ft.vim' 15238e1986e3SBram Moolenaar assert_equal('yes', That) 15248e1986e3SBram Moolenaar g:did_load_mytpe = 1 15258e1986e3SBram Moolenaar END 15268e1986e3SBram Moolenaar writefile(import_lines, 'ftplugin/qf.vim') 15278e1986e3SBram Moolenaar 15288e1986e3SBram Moolenaar let save_rtp = &rtp 15298e1986e3SBram Moolenaar &rtp = getcwd() .. ',' .. &rtp 15308e1986e3SBram Moolenaar 15318e1986e3SBram Moolenaar filetype plugin on 15328e1986e3SBram Moolenaar copen 15338e1986e3SBram Moolenaar assert_equal(1, g:did_load_mytpe) 15348e1986e3SBram Moolenaar 15358e1986e3SBram Moolenaar quit! 1536730b2483SBram Moolenaar delete('Xexport_ft.vim') 15378e1986e3SBram Moolenaar delete('ftplugin', 'rf') 15388e1986e3SBram Moolenaar &rtp = save_rtp 15398e1986e3SBram Moolenaarenddef 15408e1986e3SBram Moolenaar 1541efa94447SBram Moolenaardef Test_use_import_in_mapping() 1542efa94447SBram Moolenaar let lines =<< trim END 1543efa94447SBram Moolenaar vim9script 1544efa94447SBram Moolenaar export def Funcx() 1545efa94447SBram Moolenaar g:result = 42 1546efa94447SBram Moolenaar enddef 1547efa94447SBram Moolenaar END 1548efa94447SBram Moolenaar writefile(lines, 'XsomeExport.vim') 1549efa94447SBram Moolenaar lines =<< trim END 1550efa94447SBram Moolenaar vim9script 1551efa94447SBram Moolenaar import Funcx from './XsomeExport.vim' 1552b3ca9824SBram Moolenaar nnoremap <F3> :call <sid>Funcx()<cr> 1553efa94447SBram Moolenaar END 1554efa94447SBram Moolenaar writefile(lines, 'Xmapscript.vim') 1555efa94447SBram Moolenaar 1556efa94447SBram Moolenaar source Xmapscript.vim 1557b3ca9824SBram Moolenaar feedkeys("\<F3>", "xt") 1558efa94447SBram Moolenaar assert_equal(42, g:result) 1559efa94447SBram Moolenaar 1560efa94447SBram Moolenaar unlet g:result 1561efa94447SBram Moolenaar delete('XsomeExport.vim') 1562efa94447SBram Moolenaar delete('Xmapscript.vim') 1563b3ca9824SBram Moolenaar nunmap <F3> 1564efa94447SBram Moolenaarenddef 1565efa94447SBram Moolenaar 1566750802b5SBram Moolenaardef Test_vim9script_fails() 15678a7d6542SBram Moolenaar CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:') 15688a7d6542SBram Moolenaar CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:') 1569750802b5SBram Moolenaar CheckScriptFailure(['export let some = 123'], 'E1042:') 15709721fb4eSBram Moolenaar CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1048:') 15719b7bf9e9SBram Moolenaar CheckScriptFailure(['vim9script', 'export let g:some'], 'E1022:') 1572750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:') 1573750802b5SBram Moolenaar 1574451c2e35SBram Moolenaar CheckScriptFailure(['vim9script', 'let str: string', 'str = 1234'], 'E1012:') 1575c785b9a7SBram Moolenaar CheckScriptFailure(['vim9script', 'const str = "asdf"', 'str = "xxx"'], 'E46:') 1576c785b9a7SBram Moolenaar 1577750802b5SBram Moolenaar assert_fails('vim9script', 'E1038') 1578a26b9700SBram Moolenaar assert_fails('export something', 'E1043') 15798a7d6542SBram Moolenaarenddef 15808a7d6542SBram Moolenaar 1581f7d267efSBram Moolenaarfunc Test_import_fails_without_script() 1582101f4810SBram Moolenaar CheckRunVimInTerminal 1583101f4810SBram Moolenaar 15849bb3eb3eSBram Moolenaar " call indirectly to avoid compilation error for missing functions 1585c620c055SBram Moolenaar call Run_Test_import_fails_on_command_line() 15869bb3eb3eSBram Moolenaarendfunc 15879bb3eb3eSBram Moolenaar 1588c620c055SBram Moolenaardef Run_Test_import_fails_on_command_line() 1589101f4810SBram Moolenaar let export =<< trim END 1590101f4810SBram Moolenaar vim9script 1591101f4810SBram Moolenaar export def Foo(): number 1592101f4810SBram Moolenaar return 0 1593101f4810SBram Moolenaar enddef 1594101f4810SBram Moolenaar END 1595730b2483SBram Moolenaar writefile(export, 'XexportCmd.vim') 1596101f4810SBram Moolenaar 1597730b2483SBram Moolenaar let buf = RunVimInTerminal('-c "import Foo from ''./XexportCmd.vim''"', #{ 15989bb3eb3eSBram Moolenaar rows: 6, wait_for_ruler: 0}) 15999bb3eb3eSBram Moolenaar WaitForAssert({-> assert_match('^E1094:', term_getline(buf, 5))}) 1600101f4810SBram Moolenaar 1601730b2483SBram Moolenaar delete('XexportCmd.vim') 16029bb3eb3eSBram Moolenaar StopVimInTerminal(buf) 16039bb3eb3eSBram Moolenaarenddef 1604101f4810SBram Moolenaar 16054c17ad94SBram Moolenaardef Test_vim9script_reload_import() 16068a7d6542SBram Moolenaar let lines =<< trim END 16078a7d6542SBram Moolenaar vim9script 16088a7d6542SBram Moolenaar const var = '' 16098a7d6542SBram Moolenaar let valone = 1234 16108a7d6542SBram Moolenaar def MyFunc(arg: string) 16118a7d6542SBram Moolenaar valone = 5678 16128a7d6542SBram Moolenaar enddef 16138a7d6542SBram Moolenaar END 16148a7d6542SBram Moolenaar let morelines =<< trim END 16158a7d6542SBram Moolenaar let valtwo = 222 16168a7d6542SBram Moolenaar export def GetValtwo(): number 16178a7d6542SBram Moolenaar return valtwo 16188a7d6542SBram Moolenaar enddef 16198a7d6542SBram Moolenaar END 162003afdcf1SBram Moolenaar writefile(lines + morelines, 'Xreload.vim') 16218a7d6542SBram Moolenaar source Xreload.vim 16228a7d6542SBram Moolenaar source Xreload.vim 16238a7d6542SBram Moolenaar source Xreload.vim 16248a7d6542SBram Moolenaar 16258a7d6542SBram Moolenaar let testlines =<< trim END 16268a7d6542SBram Moolenaar vim9script 16278a7d6542SBram Moolenaar def TheFunc() 16288a7d6542SBram Moolenaar import GetValtwo from './Xreload.vim' 16298a7d6542SBram Moolenaar assert_equal(222, GetValtwo()) 16308a7d6542SBram Moolenaar enddef 16318a7d6542SBram Moolenaar TheFunc() 16328a7d6542SBram Moolenaar END 16338a7d6542SBram Moolenaar writefile(testlines, 'Ximport.vim') 16348a7d6542SBram Moolenaar source Ximport.vim 16358a7d6542SBram Moolenaar 1636f5be8cdbSBram Moolenaar # Test that when not using "morelines" GetValtwo() and valtwo are still 1637f5be8cdbSBram Moolenaar # defined, because import doesn't reload a script. 16388a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 16398a7d6542SBram Moolenaar source Ximport.vim 16408a7d6542SBram Moolenaar 1641f5be8cdbSBram Moolenaar # cannot declare a var twice 16428a7d6542SBram Moolenaar lines =<< trim END 16438a7d6542SBram Moolenaar vim9script 16448a7d6542SBram Moolenaar let valone = 1234 16458a7d6542SBram Moolenaar let valone = 5678 16468a7d6542SBram Moolenaar END 16478a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 16488a7d6542SBram Moolenaar assert_fails('source Xreload.vim', 'E1041:') 16498a7d6542SBram Moolenaar 16508a7d6542SBram Moolenaar delete('Xreload.vim') 16518a7d6542SBram Moolenaar delete('Ximport.vim') 16528a7d6542SBram Moolenaarenddef 16538a7d6542SBram Moolenaar 1654fe465a01SBram Moolenaar" Not exported function that is referenced needs to be accessed by the 1655fe465a01SBram Moolenaar" script-local name. 1656fe465a01SBram Moolenaardef Test_vim9script_funcref() 1657fe465a01SBram Moolenaar let sortlines =<< trim END 1658fe465a01SBram Moolenaar vim9script 1659fe465a01SBram Moolenaar def Compare(i1: number, i2: number): number 1660bed36b93SBram Moolenaar return i2 - i1 1661fe465a01SBram Moolenaar enddef 1662fe465a01SBram Moolenaar 1663fe465a01SBram Moolenaar export def FastSort(): list<number> 1664fe465a01SBram Moolenaar return range(5)->sort(Compare) 1665fe465a01SBram Moolenaar enddef 1666fe465a01SBram Moolenaar END 1667fe465a01SBram Moolenaar writefile(sortlines, 'Xsort.vim') 1668fe465a01SBram Moolenaar 1669fe465a01SBram Moolenaar let lines =<< trim END 1670fe465a01SBram Moolenaar vim9script 1671fe465a01SBram Moolenaar import FastSort from './Xsort.vim' 1672fe465a01SBram Moolenaar def Test() 1673fe465a01SBram Moolenaar g:result = FastSort() 1674fe465a01SBram Moolenaar enddef 1675fe465a01SBram Moolenaar Test() 1676fe465a01SBram Moolenaar END 1677fe465a01SBram Moolenaar writefile(lines, 'Xscript.vim') 1678fe465a01SBram Moolenaar 1679fe465a01SBram Moolenaar source Xscript.vim 1680fe465a01SBram Moolenaar assert_equal([4, 3, 2, 1, 0], g:result) 1681fe465a01SBram Moolenaar 1682fe465a01SBram Moolenaar unlet g:result 1683fe465a01SBram Moolenaar delete('Xsort.vim') 1684fe465a01SBram Moolenaar delete('Xscript.vim') 1685fe465a01SBram Moolenaarenddef 1686fe465a01SBram Moolenaar 1687c620c055SBram Moolenaar" Check that when searcing for "FilterFunc" it doesn't find the import in the 1688c620c055SBram Moolenaar" script where FastFilter() is called from. 1689c620c055SBram Moolenaardef Test_vim9script_funcref_other_script() 1690c620c055SBram Moolenaar let filterLines =<< trim END 1691c620c055SBram Moolenaar vim9script 1692c620c055SBram Moolenaar export def FilterFunc(idx: number, val: number): bool 1693c620c055SBram Moolenaar return idx % 2 == 1 1694c620c055SBram Moolenaar enddef 1695c620c055SBram Moolenaar export def FastFilter(): list<number> 1696c620c055SBram Moolenaar return range(10)->filter('FilterFunc') 1697c620c055SBram Moolenaar enddef 1698c620c055SBram Moolenaar END 1699c620c055SBram Moolenaar writefile(filterLines, 'Xfilter.vim') 1700c620c055SBram Moolenaar 1701c620c055SBram Moolenaar let lines =<< trim END 1702c620c055SBram Moolenaar vim9script 1703c620c055SBram Moolenaar import {FilterFunc, FastFilter} from './Xfilter.vim' 1704c620c055SBram Moolenaar def Test() 1705c620c055SBram Moolenaar let x: list<number> = FastFilter() 1706c620c055SBram Moolenaar enddef 1707c620c055SBram Moolenaar Test() 1708c620c055SBram Moolenaar END 1709c620c055SBram Moolenaar writefile(lines, 'Ximport.vim') 1710c620c055SBram Moolenaar assert_fails('source Ximport.vim', 'E121:') 1711c620c055SBram Moolenaar 1712c620c055SBram Moolenaar delete('Xfilter.vim') 1713c620c055SBram Moolenaar delete('Ximport.vim') 1714c620c055SBram Moolenaarenddef 1715c620c055SBram Moolenaar 17164c17ad94SBram Moolenaardef Test_vim9script_reload_delfunc() 17174c17ad94SBram Moolenaar let first_lines =<< trim END 17184c17ad94SBram Moolenaar vim9script 17194c17ad94SBram Moolenaar def FuncYes(): string 17204c17ad94SBram Moolenaar return 'yes' 17214c17ad94SBram Moolenaar enddef 17224c17ad94SBram Moolenaar END 172303afdcf1SBram Moolenaar let withno_lines =<< trim END 17244c17ad94SBram Moolenaar def FuncNo(): string 17254c17ad94SBram Moolenaar return 'no' 17264c17ad94SBram Moolenaar enddef 17274c17ad94SBram Moolenaar def g:DoCheck(no_exists: bool) 17284c17ad94SBram Moolenaar assert_equal('yes', FuncYes()) 17294c17ad94SBram Moolenaar assert_equal('no', FuncNo()) 173003afdcf1SBram Moolenaar enddef 173103afdcf1SBram Moolenaar END 173203afdcf1SBram Moolenaar let nono_lines =<< trim END 173303afdcf1SBram Moolenaar def g:DoCheck(no_exists: bool) 173403afdcf1SBram Moolenaar assert_equal('yes', FuncYes()) 17354c17ad94SBram Moolenaar assert_fails('call FuncNo()', 'E117:') 17364c17ad94SBram Moolenaar enddef 17374c17ad94SBram Moolenaar END 17384c17ad94SBram Moolenaar 17394c17ad94SBram Moolenaar # FuncNo() is defined 174003afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 17414c17ad94SBram Moolenaar source Xreloaded.vim 17424c17ad94SBram Moolenaar g:DoCheck(true) 17434c17ad94SBram Moolenaar 17444c17ad94SBram Moolenaar # FuncNo() is not redefined 174503afdcf1SBram Moolenaar writefile(first_lines + nono_lines, 'Xreloaded.vim') 17464c17ad94SBram Moolenaar source Xreloaded.vim 174703afdcf1SBram Moolenaar g:DoCheck() 17484c17ad94SBram Moolenaar 17494c17ad94SBram Moolenaar # FuncNo() is back 175003afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 17514c17ad94SBram Moolenaar source Xreloaded.vim 175203afdcf1SBram Moolenaar g:DoCheck() 17534c17ad94SBram Moolenaar 17544c17ad94SBram Moolenaar delete('Xreloaded.vim') 17554c17ad94SBram Moolenaarenddef 17564c17ad94SBram Moolenaar 175789483d40SBram Moolenaardef Test_vim9script_reload_delvar() 175889483d40SBram Moolenaar # write the script with a script-local variable 175989483d40SBram Moolenaar let lines =<< trim END 176089483d40SBram Moolenaar vim9script 176189483d40SBram Moolenaar let var = 'string' 176289483d40SBram Moolenaar END 176389483d40SBram Moolenaar writefile(lines, 'XreloadVar.vim') 176489483d40SBram Moolenaar source XreloadVar.vim 176589483d40SBram Moolenaar 176689483d40SBram Moolenaar # now write the script using the same variable locally - works 176789483d40SBram Moolenaar lines =<< trim END 176889483d40SBram Moolenaar vim9script 176989483d40SBram Moolenaar def Func() 177089483d40SBram Moolenaar let var = 'string' 177189483d40SBram Moolenaar enddef 177289483d40SBram Moolenaar END 177389483d40SBram Moolenaar writefile(lines, 'XreloadVar.vim') 177489483d40SBram Moolenaar source XreloadVar.vim 177589483d40SBram Moolenaar 177689483d40SBram Moolenaar delete('XreloadVar.vim') 177789483d40SBram Moolenaarenddef 177889483d40SBram Moolenaar 17798a7d6542SBram Moolenaardef Test_import_absolute() 17808a7d6542SBram Moolenaar let import_lines = [ 1781e6085c53SBram Moolenaar 'vim9script', 1782e6085c53SBram Moolenaar 'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"', 1783e6085c53SBram Moolenaar 'def UseExported()', 1784e6085c53SBram Moolenaar ' g:imported_abs = exported', 1785e6085c53SBram Moolenaar ' exported = 8888', 1786e6085c53SBram Moolenaar ' g:imported_after = exported', 1787e6085c53SBram Moolenaar 'enddef', 1788e6085c53SBram Moolenaar 'UseExported()', 1789e6085c53SBram Moolenaar 'g:import_disassembled = execute("disass UseExported")', 1790e6085c53SBram Moolenaar ] 17918a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_abs.vim') 17928a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport_abs.vim') 17938a7d6542SBram Moolenaar 17948a7d6542SBram Moolenaar source Ximport_abs.vim 17958a7d6542SBram Moolenaar 17968a7d6542SBram Moolenaar assert_equal(9876, g:imported_abs) 17974e12a5dfSBram Moolenaar assert_equal(8888, g:imported_after) 1798675f716eSBram Moolenaar assert_match('<SNR>\d\+_UseExported.*' .. 1799675f716eSBram Moolenaar 'g:imported_abs = exported.*' .. 1800675f716eSBram Moolenaar '0 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 1801675f716eSBram Moolenaar '1 STOREG g:imported_abs.*' .. 1802675f716eSBram Moolenaar 'exported = 8888.*' .. 1803675f716eSBram Moolenaar '3 STORESCRIPT exported in .*Xexport_abs.vim.*' .. 1804675f716eSBram Moolenaar 'g:imported_after = exported.*' .. 1805675f716eSBram Moolenaar '4 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 1806675f716eSBram Moolenaar '5 STOREG g:imported_after.*', 1807e6085c53SBram Moolenaar g:import_disassembled) 1808b3ca9824SBram Moolenaar 1809b3ca9824SBram Moolenaar Undo_export_script_lines() 18108a7d6542SBram Moolenaar unlet g:imported_abs 18114e12a5dfSBram Moolenaar unlet g:import_disassembled 18128a7d6542SBram Moolenaar 18138a7d6542SBram Moolenaar delete('Ximport_abs.vim') 18148a7d6542SBram Moolenaar delete('Xexport_abs.vim') 18158a7d6542SBram Moolenaarenddef 18168a7d6542SBram Moolenaar 18178a7d6542SBram Moolenaardef Test_import_rtp() 18188a7d6542SBram Moolenaar let import_lines = [ 1819e6085c53SBram Moolenaar 'vim9script', 1820e6085c53SBram Moolenaar 'import exported from "Xexport_rtp.vim"', 1821e6085c53SBram Moolenaar 'g:imported_rtp = exported', 1822e6085c53SBram Moolenaar ] 18238a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_rtp.vim') 18248a7d6542SBram Moolenaar mkdir('import') 18258a7d6542SBram Moolenaar writefile(s:export_script_lines, 'import/Xexport_rtp.vim') 18268a7d6542SBram Moolenaar 18278a7d6542SBram Moolenaar let save_rtp = &rtp 18288a7d6542SBram Moolenaar &rtp = getcwd() 18298a7d6542SBram Moolenaar source Ximport_rtp.vim 18308a7d6542SBram Moolenaar &rtp = save_rtp 18318a7d6542SBram Moolenaar 18328a7d6542SBram Moolenaar assert_equal(9876, g:imported_rtp) 18338a7d6542SBram Moolenaar 1834b3ca9824SBram Moolenaar Undo_export_script_lines() 1835b3ca9824SBram Moolenaar unlet g:imported_rtp 18368a7d6542SBram Moolenaar delete('Ximport_rtp.vim') 183789483d40SBram Moolenaar delete('import', 'rf') 18388a7d6542SBram Moolenaarenddef 18398a7d6542SBram Moolenaar 184025e0f586SBram Moolenaardef Test_import_compile_error() 184125e0f586SBram Moolenaar let export_lines = [ 184225e0f586SBram Moolenaar 'vim9script', 184325e0f586SBram Moolenaar 'export def ExpFunc(): string', 184425e0f586SBram Moolenaar ' return notDefined', 184525e0f586SBram Moolenaar 'enddef', 184625e0f586SBram Moolenaar ] 184725e0f586SBram Moolenaar writefile(export_lines, 'Xexported.vim') 184825e0f586SBram Moolenaar 184925e0f586SBram Moolenaar let import_lines = [ 185025e0f586SBram Moolenaar 'vim9script', 185125e0f586SBram Moolenaar 'import ExpFunc from "./Xexported.vim"', 185225e0f586SBram Moolenaar 'def ImpFunc()', 185325e0f586SBram Moolenaar ' echo ExpFunc()', 185425e0f586SBram Moolenaar 'enddef', 185525e0f586SBram Moolenaar 'defcompile', 185625e0f586SBram Moolenaar ] 185725e0f586SBram Moolenaar writefile(import_lines, 'Ximport.vim') 185825e0f586SBram Moolenaar 185925e0f586SBram Moolenaar try 186025e0f586SBram Moolenaar source Ximport.vim 186125e0f586SBram Moolenaar catch /E1001/ 1862f5be8cdbSBram Moolenaar # Error should be fore the Xexported.vim file. 186325e0f586SBram Moolenaar assert_match('E1001: variable not found: notDefined', v:exception) 186425e0f586SBram Moolenaar assert_match('function <SNR>\d\+_ImpFunc\[1\]..<SNR>\d\+_ExpFunc, line 1', v:throwpoint) 186525e0f586SBram Moolenaar endtry 186625e0f586SBram Moolenaar 186725e0f586SBram Moolenaar delete('Xexported.vim') 186825e0f586SBram Moolenaar delete('Ximport.vim') 186925e0f586SBram Moolenaarenddef 187025e0f586SBram Moolenaar 1871c4ce36d4SBram Moolenaardef Test_func_redefine_error() 1872c4ce36d4SBram Moolenaar let lines = [ 1873c4ce36d4SBram Moolenaar 'vim9script', 1874c4ce36d4SBram Moolenaar 'def Func()', 1875c4ce36d4SBram Moolenaar ' eval [][0]', 1876c4ce36d4SBram Moolenaar 'enddef', 1877c4ce36d4SBram Moolenaar 'Func()', 1878c4ce36d4SBram Moolenaar ] 1879c4ce36d4SBram Moolenaar writefile(lines, 'Xtestscript.vim') 1880c4ce36d4SBram Moolenaar 1881c4ce36d4SBram Moolenaar for count in range(3) 1882c4ce36d4SBram Moolenaar try 1883c4ce36d4SBram Moolenaar source Xtestscript.vim 1884c4ce36d4SBram Moolenaar catch /E684/ 1885c4ce36d4SBram Moolenaar # function name should contain <SNR> every time 1886c4ce36d4SBram Moolenaar assert_match('E684: list index out of range', v:exception) 1887c4ce36d4SBram Moolenaar assert_match('function <SNR>\d\+_Func, line 1', v:throwpoint) 1888c4ce36d4SBram Moolenaar endtry 1889c4ce36d4SBram Moolenaar endfor 1890c4ce36d4SBram Moolenaar 1891c4ce36d4SBram Moolenaar delete('Xtestscript.vim') 1892c4ce36d4SBram Moolenaarenddef 1893c4ce36d4SBram Moolenaar 1894eef2102eSBram Moolenaardef Test_func_overrules_import_fails() 1895eef2102eSBram Moolenaar let export_lines =<< trim END 1896eef2102eSBram Moolenaar vim9script 1897eef2102eSBram Moolenaar export def Func() 1898eef2102eSBram Moolenaar echo 'imported' 1899eef2102eSBram Moolenaar enddef 1900eef2102eSBram Moolenaar END 1901eef2102eSBram Moolenaar writefile(export_lines, 'XexportedFunc.vim') 1902eef2102eSBram Moolenaar 1903eef2102eSBram Moolenaar let lines =<< trim END 1904eef2102eSBram Moolenaar vim9script 1905eef2102eSBram Moolenaar import Func from './XexportedFunc.vim' 1906eef2102eSBram Moolenaar def Func() 1907eef2102eSBram Moolenaar echo 'local to function' 1908eef2102eSBram Moolenaar enddef 1909eef2102eSBram Moolenaar END 1910eef2102eSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1911eef2102eSBram Moolenaar 1912eef2102eSBram Moolenaar lines =<< trim END 1913eef2102eSBram Moolenaar vim9script 1914eef2102eSBram Moolenaar import Func from './XexportedFunc.vim' 1915eef2102eSBram Moolenaar def Outer() 1916eef2102eSBram Moolenaar def Func() 1917eef2102eSBram Moolenaar echo 'local to function' 1918eef2102eSBram Moolenaar enddef 1919eef2102eSBram Moolenaar enddef 1920eef2102eSBram Moolenaar defcompile 1921eef2102eSBram Moolenaar END 1922eef2102eSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1923eef2102eSBram Moolenaar 1924eef2102eSBram Moolenaar delete('XexportedFunc.vim') 1925eef2102eSBram Moolenaarenddef 1926eef2102eSBram Moolenaar 1927b9a2cac3SBram Moolenaardef Test_func_redefine_fails() 1928b9a2cac3SBram Moolenaar let lines =<< trim END 1929b9a2cac3SBram Moolenaar vim9script 1930b9a2cac3SBram Moolenaar def Func() 1931b9a2cac3SBram Moolenaar echo 'one' 1932b9a2cac3SBram Moolenaar enddef 1933b9a2cac3SBram Moolenaar def Func() 1934b9a2cac3SBram Moolenaar echo 'two' 1935b9a2cac3SBram Moolenaar enddef 1936b9a2cac3SBram Moolenaar END 1937b9a2cac3SBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1938fa211f3cSBram Moolenaar 1939fa211f3cSBram Moolenaar lines =<< trim END 1940fa211f3cSBram Moolenaar vim9script 1941fa211f3cSBram Moolenaar def Foo(): string 1942fa211f3cSBram Moolenaar return 'foo' 1943fa211f3cSBram Moolenaar enddef 1944fa211f3cSBram Moolenaar def Func() 1945fa211f3cSBram Moolenaar let Foo = {-> 'lambda'} 1946fa211f3cSBram Moolenaar enddef 1947fa211f3cSBram Moolenaar defcompile 1948fa211f3cSBram Moolenaar END 1949fa211f3cSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1950b9a2cac3SBram Moolenaarenddef 1951b9a2cac3SBram Moolenaar 19528a7d6542SBram Moolenaardef Test_fixed_size_list() 1953f5be8cdbSBram Moolenaar # will be allocated as one piece of memory, check that changes work 19548a7d6542SBram Moolenaar let l = [1, 2, 3, 4] 19558a7d6542SBram Moolenaar l->remove(0) 19568a7d6542SBram Moolenaar l->add(5) 19578a7d6542SBram Moolenaar l->insert(99, 1) 19580f18b6d1SBram Moolenaar assert_equal([2, 99, 3, 4, 5], l) 19598a7d6542SBram Moolenaarenddef 19608a7d6542SBram Moolenaar 1961ae616494SBram Moolenaardef Test_no_insert_xit() 1962ae616494SBram Moolenaar call CheckDefExecFailure(['a = 1'], 'E1100:') 1963ae616494SBram Moolenaar call CheckDefExecFailure(['c = 1'], 'E1100:') 1964f5a48010SBram Moolenaar call CheckDefExecFailure(['i = 1'], 'E1100:') 1965f5a48010SBram Moolenaar call CheckDefExecFailure(['t = 1'], 'E1100:') 1966f5a48010SBram Moolenaar call CheckDefExecFailure(['x = 1'], 'E1100:') 1967ae616494SBram Moolenaar 1968ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'a = 1'], 'E488:') 1969ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'a'], 'E1100:') 1970ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'c = 1'], 'E488:') 1971ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'c'], 'E1100:') 1972f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'i = 1'], 'E488:') 1973f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'i'], 'E1100:') 1974f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 't'], 'E1100:') 1975f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 't = 1'], 'E1100:') 1976f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'x = 1'], 'E1100:') 1977ae616494SBram Moolenaarenddef 1978ae616494SBram Moolenaar 1979158906cfSBram Moolenaardef IfElse(what: number): string 1980158906cfSBram Moolenaar let res = '' 1981158906cfSBram Moolenaar if what == 1 1982158906cfSBram Moolenaar res = "one" 1983158906cfSBram Moolenaar elseif what == 2 1984158906cfSBram Moolenaar res = "two" 1985a259d8d3SBram Moolenaar else 1986158906cfSBram Moolenaar res = "three" 1987a259d8d3SBram Moolenaar endif 1988158906cfSBram Moolenaar return res 1989a259d8d3SBram Moolenaarenddef 1990a259d8d3SBram Moolenaar 1991158906cfSBram Moolenaardef Test_if_elseif_else() 1992158906cfSBram Moolenaar assert_equal('one', IfElse(1)) 1993158906cfSBram Moolenaar assert_equal('two', IfElse(2)) 1994158906cfSBram Moolenaar assert_equal('three', IfElse(3)) 19950f18b6d1SBram Moolenaarenddef 19960f18b6d1SBram Moolenaar 1997e8c4abbbSBram Moolenaardef Test_if_elseif_else_fails() 1998e8c4abbbSBram Moolenaar call CheckDefFailure(['elseif true'], 'E582:') 1999e8c4abbbSBram Moolenaar call CheckDefFailure(['else'], 'E581:') 2000e8c4abbbSBram Moolenaar call CheckDefFailure(['endif'], 'E580:') 2001e8c4abbbSBram Moolenaar call CheckDefFailure(['if true', 'elseif xxx'], 'E1001:') 2002585fea7bSBram Moolenaar call CheckDefFailure(['if true', 'echo 1'], 'E171:') 2003e8c4abbbSBram Moolenaarenddef 2004e8c4abbbSBram Moolenaar 20056d69bf60SBram Moolenaarlet g:bool_true = v:true 20066d69bf60SBram Moolenaarlet g:bool_false = v:false 20076d69bf60SBram Moolenaar 20086d69bf60SBram Moolenaardef Test_if_const_expr() 20096d69bf60SBram Moolenaar let res = false 20106d69bf60SBram Moolenaar if true ? true : false 20116d69bf60SBram Moolenaar res = true 20126d69bf60SBram Moolenaar endif 20136d69bf60SBram Moolenaar assert_equal(true, res) 20146d69bf60SBram Moolenaar 2015585fea7bSBram Moolenaar g:glob = 2 2016585fea7bSBram Moolenaar if false 20176797966dSBram Moolenaar execute('g:glob = 3') 2018585fea7bSBram Moolenaar endif 2019585fea7bSBram Moolenaar assert_equal(2, g:glob) 2020585fea7bSBram Moolenaar if true 20216797966dSBram Moolenaar execute('g:glob = 3') 2022585fea7bSBram Moolenaar endif 2023585fea7bSBram Moolenaar assert_equal(3, g:glob) 2024585fea7bSBram Moolenaar 20256d69bf60SBram Moolenaar res = false 20266d69bf60SBram Moolenaar if g:bool_true ? true : false 20276d69bf60SBram Moolenaar res = true 20286d69bf60SBram Moolenaar endif 20296d69bf60SBram Moolenaar assert_equal(true, res) 20306d69bf60SBram Moolenaar 20316d69bf60SBram Moolenaar res = false 20326d69bf60SBram Moolenaar if true ? g:bool_true : false 20336d69bf60SBram Moolenaar res = true 20346d69bf60SBram Moolenaar endif 20356d69bf60SBram Moolenaar assert_equal(true, res) 20366d69bf60SBram Moolenaar 20376d69bf60SBram Moolenaar res = false 20386d69bf60SBram Moolenaar if true ? true : g:bool_false 20396d69bf60SBram Moolenaar res = true 20406d69bf60SBram Moolenaar endif 20416d69bf60SBram Moolenaar assert_equal(true, res) 20426d69bf60SBram Moolenaar 20436d69bf60SBram Moolenaar res = false 20446d69bf60SBram Moolenaar if true ? false : true 20456d69bf60SBram Moolenaar res = true 20466d69bf60SBram Moolenaar endif 20476d69bf60SBram Moolenaar assert_equal(false, res) 20486d69bf60SBram Moolenaar 20496d69bf60SBram Moolenaar res = false 20506d69bf60SBram Moolenaar if false ? false : true 20516d69bf60SBram Moolenaar res = true 20526d69bf60SBram Moolenaar endif 20536d69bf60SBram Moolenaar assert_equal(true, res) 20546d69bf60SBram Moolenaar 20556d69bf60SBram Moolenaar res = false 20566d69bf60SBram Moolenaar if false ? true : false 20576d69bf60SBram Moolenaar res = true 20586d69bf60SBram Moolenaar endif 20596d69bf60SBram Moolenaar assert_equal(false, res) 20606d69bf60SBram Moolenaar 20616d69bf60SBram Moolenaar res = false 2062e8c4abbbSBram Moolenaar if has('xyz') ? true : false 2063e8c4abbbSBram Moolenaar res = true 2064e8c4abbbSBram Moolenaar endif 2065e8c4abbbSBram Moolenaar assert_equal(false, res) 2066e8c4abbbSBram Moolenaar 2067e8c4abbbSBram Moolenaar res = false 20686d69bf60SBram Moolenaar if true && true 20696d69bf60SBram Moolenaar res = true 20706d69bf60SBram Moolenaar endif 20716d69bf60SBram Moolenaar assert_equal(true, res) 20726d69bf60SBram Moolenaar 20736d69bf60SBram Moolenaar res = false 20746d69bf60SBram Moolenaar if true && false 20756d69bf60SBram Moolenaar res = true 20766d69bf60SBram Moolenaar endif 20776d69bf60SBram Moolenaar assert_equal(false, res) 20786d69bf60SBram Moolenaar 20796d69bf60SBram Moolenaar res = false 20806d69bf60SBram Moolenaar if g:bool_true && false 20816d69bf60SBram Moolenaar res = true 20826d69bf60SBram Moolenaar endif 20836d69bf60SBram Moolenaar assert_equal(false, res) 20846d69bf60SBram Moolenaar 20856d69bf60SBram Moolenaar res = false 20866d69bf60SBram Moolenaar if true && g:bool_false 20876d69bf60SBram Moolenaar res = true 20886d69bf60SBram Moolenaar endif 20896d69bf60SBram Moolenaar assert_equal(false, res) 20906d69bf60SBram Moolenaar 20916d69bf60SBram Moolenaar res = false 20926d69bf60SBram Moolenaar if false && false 20936d69bf60SBram Moolenaar res = true 20946d69bf60SBram Moolenaar endif 20956d69bf60SBram Moolenaar assert_equal(false, res) 20966d69bf60SBram Moolenaar 20976d69bf60SBram Moolenaar res = false 20986d69bf60SBram Moolenaar if true || false 20996d69bf60SBram Moolenaar res = true 21006d69bf60SBram Moolenaar endif 21016d69bf60SBram Moolenaar assert_equal(true, res) 21026d69bf60SBram Moolenaar 21036d69bf60SBram Moolenaar res = false 21046d69bf60SBram Moolenaar if g:bool_true || false 21056d69bf60SBram Moolenaar res = true 21066d69bf60SBram Moolenaar endif 21076d69bf60SBram Moolenaar assert_equal(true, res) 21086d69bf60SBram Moolenaar 21096d69bf60SBram Moolenaar res = false 21106d69bf60SBram Moolenaar if true || g:bool_false 21116d69bf60SBram Moolenaar res = true 21126d69bf60SBram Moolenaar endif 21136d69bf60SBram Moolenaar assert_equal(true, res) 21146d69bf60SBram Moolenaar 21156d69bf60SBram Moolenaar res = false 21166d69bf60SBram Moolenaar if false || false 21176d69bf60SBram Moolenaar res = true 21186d69bf60SBram Moolenaar endif 21196d69bf60SBram Moolenaar assert_equal(false, res) 212080c34ca3SBram Moolenaarenddef 21216d69bf60SBram Moolenaar 212280c34ca3SBram Moolenaardef Test_if_const_expr_fails() 212380c34ca3SBram Moolenaar call CheckDefFailure(['if "aaa" == "bbb'], 'E114:') 212480c34ca3SBram Moolenaar call CheckDefFailure(["if 'aaa' == 'bbb"], 'E115:') 2125e8c4abbbSBram Moolenaar call CheckDefFailure(["if has('aaa'"], 'E110:') 2126e8c4abbbSBram Moolenaar call CheckDefFailure(["if has('aaa') ? true false"], 'E109:') 21276d69bf60SBram Moolenaarenddef 21286d69bf60SBram Moolenaar 212972abcf42SBram Moolenaardef RunNested(i: number): number 213072abcf42SBram Moolenaar let x: number = 0 213172abcf42SBram Moolenaar if i % 2 213272abcf42SBram Moolenaar if 1 2133f5be8cdbSBram Moolenaar # comment 213472abcf42SBram Moolenaar else 2135f5be8cdbSBram Moolenaar # comment 213672abcf42SBram Moolenaar endif 213772abcf42SBram Moolenaar x += 1 213872abcf42SBram Moolenaar else 213972abcf42SBram Moolenaar x += 1000 214072abcf42SBram Moolenaar endif 214172abcf42SBram Moolenaar return x 214272abcf42SBram Moolenaarenddef 214372abcf42SBram Moolenaar 214472abcf42SBram Moolenaardef Test_nested_if() 214572abcf42SBram Moolenaar assert_equal(1, RunNested(1)) 214672abcf42SBram Moolenaar assert_equal(1000, RunNested(2)) 214772abcf42SBram Moolenaarenddef 214872abcf42SBram Moolenaar 2149ad39c094SBram Moolenaardef Test_execute_cmd() 2150ad39c094SBram Moolenaar new 2151ad39c094SBram Moolenaar setline(1, 'default') 2152ad39c094SBram Moolenaar execute 'call setline(1, "execute-string")' 2153ad39c094SBram Moolenaar assert_equal('execute-string', getline(1)) 2154a72cfb80SBram Moolenaar 2155a72cfb80SBram Moolenaar execute "call setline(1, 'execute-string')" 2156a72cfb80SBram Moolenaar assert_equal('execute-string', getline(1)) 2157a72cfb80SBram Moolenaar 2158ad39c094SBram Moolenaar let cmd1 = 'call setline(1,' 2159ad39c094SBram Moolenaar let cmd2 = '"execute-var")' 2160a72cfb80SBram Moolenaar execute cmd1 cmd2 # comment 2161ad39c094SBram Moolenaar assert_equal('execute-var', getline(1)) 2162a72cfb80SBram Moolenaar 2163ad39c094SBram Moolenaar execute cmd1 cmd2 '|call setline(1, "execute-var-string")' 2164ad39c094SBram Moolenaar assert_equal('execute-var-string', getline(1)) 2165a72cfb80SBram Moolenaar 2166ad39c094SBram Moolenaar let cmd_first = 'call ' 2167ad39c094SBram Moolenaar let cmd_last = 'setline(1, "execute-var-var")' 2168ad39c094SBram Moolenaar execute cmd_first .. cmd_last 2169ad39c094SBram Moolenaar assert_equal('execute-var-var', getline(1)) 2170ad39c094SBram Moolenaar bwipe! 2171585fea7bSBram Moolenaar 21722d6b20d6SBram Moolenaar let n = true 21732d6b20d6SBram Moolenaar execute 'echomsg' (n ? '"true"' : '"no"') 21742d6b20d6SBram Moolenaar assert_match('^true$', Screenline(&lines)) 21752d6b20d6SBram Moolenaar 2176e5abf7afSBram Moolenaar echomsg [1, 2, 3] #{a: 1, b: 2} 2177e5abf7afSBram Moolenaar assert_match('^\[1, 2, 3\] {''a'': 1, ''b'': 2}$', Screenline(&lines)) 2178e5abf7afSBram Moolenaar 2179430deb19SBram Moolenaar call CheckDefFailure(['execute xxx'], 'E1001:', 1) 2180430deb19SBram Moolenaar call CheckDefExecFailure(['execute "tabnext " .. 8'], 'E475:', 1) 2181430deb19SBram Moolenaar call CheckDefFailure(['execute "cmd"# comment'], 'E488:', 1) 2182ad39c094SBram Moolenaarenddef 2183ad39c094SBram Moolenaar 218447e880d6SBram Moolenaardef Test_execute_cmd_vimscript() 2185f5be8cdbSBram Moolenaar # only checks line continuation 218647e880d6SBram Moolenaar let lines =<< trim END 218747e880d6SBram Moolenaar vim9script 218847e880d6SBram Moolenaar execute 'g:someVar' 218947e880d6SBram Moolenaar .. ' = ' .. 219047e880d6SBram Moolenaar '28' 219147e880d6SBram Moolenaar assert_equal(28, g:someVar) 219247e880d6SBram Moolenaar unlet g:someVar 219347e880d6SBram Moolenaar END 219447e880d6SBram Moolenaar CheckScriptSuccess(lines) 219547e880d6SBram Moolenaarenddef 219647e880d6SBram Moolenaar 2197ad39c094SBram Moolenaardef Test_echo_cmd() 2198a72cfb80SBram Moolenaar echo 'some' # comment 2199585fea7bSBram Moolenaar echon 'thing' 2200ad39c094SBram Moolenaar assert_match('^something$', Screenline(&lines)) 2201ad39c094SBram Moolenaar 2202a72cfb80SBram Moolenaar echo "some" # comment 2203a72cfb80SBram Moolenaar echon "thing" 2204a72cfb80SBram Moolenaar assert_match('^something$', Screenline(&lines)) 2205a72cfb80SBram Moolenaar 2206ad39c094SBram Moolenaar let str1 = 'some' 2207ad39c094SBram Moolenaar let str2 = 'more' 2208ad39c094SBram Moolenaar echo str1 str2 2209ad39c094SBram Moolenaar assert_match('^some more$', Screenline(&lines)) 2210a72cfb80SBram Moolenaar 2211a72cfb80SBram Moolenaar call CheckDefFailure(['echo "xxx"# comment'], 'E488:') 2212ad39c094SBram Moolenaarenddef 2213ad39c094SBram Moolenaar 2214f93c7feaSBram Moolenaardef Test_echomsg_cmd() 2215f93c7feaSBram Moolenaar echomsg 'some' 'more' # comment 2216f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 2217f93c7feaSBram Moolenaar echo 'clear' 2218df069eecSBram Moolenaar :1messages 2219f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 2220f93c7feaSBram Moolenaar 2221f93c7feaSBram Moolenaar call CheckDefFailure(['echomsg "xxx"# comment'], 'E488:') 2222f93c7feaSBram Moolenaarenddef 2223f93c7feaSBram Moolenaar 222447e880d6SBram Moolenaardef Test_echomsg_cmd_vimscript() 2225f5be8cdbSBram Moolenaar # only checks line continuation 222647e880d6SBram Moolenaar let lines =<< trim END 222747e880d6SBram Moolenaar vim9script 222847e880d6SBram Moolenaar echomsg 'here' 222947e880d6SBram Moolenaar .. ' is ' .. 223047e880d6SBram Moolenaar 'a message' 223147e880d6SBram Moolenaar assert_match('^here is a message$', Screenline(&lines)) 223247e880d6SBram Moolenaar END 223347e880d6SBram Moolenaar CheckScriptSuccess(lines) 223447e880d6SBram Moolenaarenddef 223547e880d6SBram Moolenaar 2236f93c7feaSBram Moolenaardef Test_echoerr_cmd() 223740ee466cSBram Moolenaar try 223840ee466cSBram Moolenaar echoerr 'something' 'wrong' # comment 223940ee466cSBram Moolenaar catch 224040ee466cSBram Moolenaar assert_match('something wrong', v:exception) 224140ee466cSBram Moolenaar endtry 2242f93c7feaSBram Moolenaarenddef 2243f93c7feaSBram Moolenaar 224447e880d6SBram Moolenaardef Test_echoerr_cmd_vimscript() 2245f5be8cdbSBram Moolenaar # only checks line continuation 224647e880d6SBram Moolenaar let lines =<< trim END 224747e880d6SBram Moolenaar vim9script 224847e880d6SBram Moolenaar try 224947e880d6SBram Moolenaar echoerr 'this' 225047e880d6SBram Moolenaar .. ' is ' .. 225147e880d6SBram Moolenaar 'wrong' 225247e880d6SBram Moolenaar catch 225347e880d6SBram Moolenaar assert_match('this is wrong', v:exception) 225447e880d6SBram Moolenaar endtry 225547e880d6SBram Moolenaar END 225647e880d6SBram Moolenaar CheckScriptSuccess(lines) 225747e880d6SBram Moolenaarenddef 225847e880d6SBram Moolenaar 225941fe0617SBram Moolenaardef Test_for_outside_of_function() 226041fe0617SBram Moolenaar let lines =<< trim END 226141fe0617SBram Moolenaar vim9script 226241fe0617SBram Moolenaar new 226341fe0617SBram Moolenaar for var in range(0, 3) 226441fe0617SBram Moolenaar append(line('$'), var) 226541fe0617SBram Moolenaar endfor 226641fe0617SBram Moolenaar assert_equal(['', '0', '1', '2', '3'], getline(1, '$')) 226741fe0617SBram Moolenaar bwipe! 226841fe0617SBram Moolenaar END 226941fe0617SBram Moolenaar writefile(lines, 'Xvim9for.vim') 227041fe0617SBram Moolenaar source Xvim9for.vim 227141fe0617SBram Moolenaar delete('Xvim9for.vim') 227241fe0617SBram Moolenaarenddef 22738a7d6542SBram Moolenaar 2274e8c4abbbSBram Moolenaardef Test_for_loop() 2275e8c4abbbSBram Moolenaar let result = '' 2276e8c4abbbSBram Moolenaar for cnt in range(7) 2277e8c4abbbSBram Moolenaar if cnt == 4 2278e8c4abbbSBram Moolenaar break 2279e8c4abbbSBram Moolenaar endif 2280e8c4abbbSBram Moolenaar if cnt == 2 2281e8c4abbbSBram Moolenaar continue 2282e8c4abbbSBram Moolenaar endif 2283e8c4abbbSBram Moolenaar result ..= cnt .. '_' 2284e8c4abbbSBram Moolenaar endfor 2285e8c4abbbSBram Moolenaar assert_equal('0_1_3_', result) 22860ad3e894SBram Moolenaar 22870ad3e894SBram Moolenaar let concat = '' 22880ad3e894SBram Moolenaar for str in eval('["one", "two"]') 22890ad3e894SBram Moolenaar concat ..= str 22900ad3e894SBram Moolenaar endfor 22910ad3e894SBram Moolenaar assert_equal('onetwo', concat) 2292e8c4abbbSBram Moolenaarenddef 2293e8c4abbbSBram Moolenaar 2294e8c4abbbSBram Moolenaardef Test_for_loop_fails() 2295675f716eSBram Moolenaar CheckDefFailure(['for # in range(5)'], 'E690:') 2296675f716eSBram Moolenaar CheckDefFailure(['for i In range(5)'], 'E690:') 2297451c2e35SBram Moolenaar CheckDefFailure(['let x = 5', 'for x in range(5)'], 'E1017:') 2298822ba247SBram Moolenaar CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef', 'defcompile'], 'E1006:') 2299451c2e35SBram Moolenaar CheckDefFailure(['for i in "text"'], 'E1012:') 2300675f716eSBram Moolenaar CheckDefFailure(['for i in xxx'], 'E1001:') 2301675f716eSBram Moolenaar CheckDefFailure(['endfor'], 'E588:') 2302675f716eSBram Moolenaar CheckDefFailure(['for i in range(3)', 'echo 3'], 'E170:') 2303e8c4abbbSBram Moolenaarenddef 2304e8c4abbbSBram Moolenaar 2305d0df1aacSBram Moolenaardef Test_while_loop() 2306d0df1aacSBram Moolenaar let result = '' 2307d0df1aacSBram Moolenaar let cnt = 0 2308d0df1aacSBram Moolenaar while cnt < 555 2309d0df1aacSBram Moolenaar if cnt == 3 2310d0df1aacSBram Moolenaar break 2311d0df1aacSBram Moolenaar endif 2312d0df1aacSBram Moolenaar cnt += 1 2313d0df1aacSBram Moolenaar if cnt == 2 2314d0df1aacSBram Moolenaar continue 2315d0df1aacSBram Moolenaar endif 2316d0df1aacSBram Moolenaar result ..= cnt .. '_' 2317d0df1aacSBram Moolenaar endwhile 2318d0df1aacSBram Moolenaar assert_equal('1_3_', result) 2319d0df1aacSBram Moolenaarenddef 2320d0df1aacSBram Moolenaar 2321e8c4abbbSBram Moolenaardef Test_while_loop_fails() 2322675f716eSBram Moolenaar CheckDefFailure(['while xxx'], 'E1001:') 2323675f716eSBram Moolenaar CheckDefFailure(['endwhile'], 'E588:') 2324675f716eSBram Moolenaar CheckDefFailure(['continue'], 'E586:') 2325675f716eSBram Moolenaar CheckDefFailure(['if true', 'continue'], 'E586:') 2326675f716eSBram Moolenaar CheckDefFailure(['break'], 'E587:') 2327675f716eSBram Moolenaar CheckDefFailure(['if true', 'break'], 'E587:') 2328675f716eSBram Moolenaar CheckDefFailure(['while 1', 'echo 3'], 'E170:') 2329bd5da371SBram Moolenaarenddef 2330bd5da371SBram Moolenaar 23319645e2d9SBram Moolenaardef Test_interrupt_loop() 233297acfc78SBram Moolenaar let caught = false 23339645e2d9SBram Moolenaar let x = 0 233497acfc78SBram Moolenaar try 23359645e2d9SBram Moolenaar while 1 23369645e2d9SBram Moolenaar x += 1 23379645e2d9SBram Moolenaar if x == 100 23389645e2d9SBram Moolenaar feedkeys("\<C-C>", 'Lt') 23399645e2d9SBram Moolenaar endif 23409645e2d9SBram Moolenaar endwhile 234197acfc78SBram Moolenaar catch 234297acfc78SBram Moolenaar caught = true 234397acfc78SBram Moolenaar assert_equal(100, x) 234497acfc78SBram Moolenaar endtry 234597acfc78SBram Moolenaar assert_true(caught, 'should have caught an exception') 23469645e2d9SBram Moolenaarenddef 234720431c9dSBram Moolenaar 23484fdae999SBram Moolenaardef Test_automatic_line_continuation() 23494fdae999SBram Moolenaar let mylist = [ 23504fdae999SBram Moolenaar 'one', 23514fdae999SBram Moolenaar 'two', 23524fdae999SBram Moolenaar 'three', 2353f5be8cdbSBram Moolenaar ] # comment 23544fdae999SBram Moolenaar assert_equal(['one', 'two', 'three'], mylist) 23554fdae999SBram Moolenaar 23564fdae999SBram Moolenaar let mydict = { 23574fdae999SBram Moolenaar 'one': 1, 23584fdae999SBram Moolenaar 'two': 2, 23594fdae999SBram Moolenaar 'three': 23604fdae999SBram Moolenaar 3, 2361f5be8cdbSBram Moolenaar } # comment 23624fdae999SBram Moolenaar assert_equal({'one': 1, 'two': 2, 'three': 3}, mydict) 23634fdae999SBram Moolenaar mydict = #{ 23642c330432SBram Moolenaar one: 1, # comment 23652c330432SBram Moolenaar two: # comment 23662c330432SBram Moolenaar 2, # comment 23672c330432SBram Moolenaar three: 3 # comment 23682c330432SBram Moolenaar } 23692c330432SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 23702c330432SBram Moolenaar mydict = #{ 23712c330432SBram Moolenaar one: 1, 23724fdae999SBram Moolenaar two: 23734fdae999SBram Moolenaar 2, 23742c330432SBram Moolenaar three: 3 23754fdae999SBram Moolenaar } 23764fdae999SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 2377e6085c53SBram Moolenaar 2378e6085c53SBram Moolenaar assert_equal( 2379e6085c53SBram Moolenaar ['one', 'two', 'three'], 2380e6085c53SBram Moolenaar split('one two three') 2381e6085c53SBram Moolenaar ) 23824fdae999SBram Moolenaarenddef 23834fdae999SBram Moolenaar 23847a092245SBram Moolenaardef Test_vim9_comment() 23857a092245SBram Moolenaar CheckScriptSuccess([ 23867a092245SBram Moolenaar 'vim9script', 23877a092245SBram Moolenaar '# something', 23887a092245SBram Moolenaar ]) 23897a092245SBram Moolenaar CheckScriptFailure([ 23907a092245SBram Moolenaar 'vim9script', 23917a092245SBram Moolenaar ':# something', 23927a092245SBram Moolenaar ], 'E488:') 23937a092245SBram Moolenaar CheckScriptFailure([ 23947a092245SBram Moolenaar '# something', 23957a092245SBram Moolenaar ], 'E488:') 23967a092245SBram Moolenaar CheckScriptFailure([ 23977a092245SBram Moolenaar ':# something', 23987a092245SBram Moolenaar ], 'E488:') 23997a092245SBram Moolenaar 24004a8d9f2eSBram Moolenaar { # block start 24014a8d9f2eSBram Moolenaar } # block end 24024a8d9f2eSBram Moolenaar CheckDefFailure([ 24034a8d9f2eSBram Moolenaar '{# comment', 24044a8d9f2eSBram Moolenaar ], 'E488:') 24054a8d9f2eSBram Moolenaar CheckDefFailure([ 24064a8d9f2eSBram Moolenaar '{', 24074a8d9f2eSBram Moolenaar '}# comment', 24084a8d9f2eSBram Moolenaar ], 'E488:') 24094a8d9f2eSBram Moolenaar 24104a8d9f2eSBram Moolenaar echo "yes" # comment 24114a8d9f2eSBram Moolenaar CheckDefFailure([ 24124a8d9f2eSBram Moolenaar 'echo "yes"# comment', 24134a8d9f2eSBram Moolenaar ], 'E488:') 24147a092245SBram Moolenaar CheckScriptSuccess([ 24157a092245SBram Moolenaar 'vim9script', 24167a092245SBram Moolenaar 'echo "yes" # something', 24177a092245SBram Moolenaar ]) 24187a092245SBram Moolenaar CheckScriptFailure([ 24197a092245SBram Moolenaar 'vim9script', 24207a092245SBram Moolenaar 'echo "yes"# something', 24217a092245SBram Moolenaar ], 'E121:') 24227a092245SBram Moolenaar CheckScriptFailure([ 24237a092245SBram Moolenaar 'vim9script', 24247a092245SBram Moolenaar 'echo# something', 24257a092245SBram Moolenaar ], 'E121:') 24267a092245SBram Moolenaar CheckScriptFailure([ 24277a092245SBram Moolenaar 'echo "yes" # something', 24287a092245SBram Moolenaar ], 'E121:') 24297a092245SBram Moolenaar 24304a8d9f2eSBram Moolenaar exe "echo" # comment 24314a8d9f2eSBram Moolenaar CheckDefFailure([ 24324a8d9f2eSBram Moolenaar 'exe "echo"# comment', 24334a8d9f2eSBram Moolenaar ], 'E488:') 24344a8d9f2eSBram Moolenaar CheckScriptSuccess([ 24354a8d9f2eSBram Moolenaar 'vim9script', 24364a8d9f2eSBram Moolenaar 'exe "echo" # something', 24374a8d9f2eSBram Moolenaar ]) 24384a8d9f2eSBram Moolenaar CheckScriptFailure([ 24394a8d9f2eSBram Moolenaar 'vim9script', 24404a8d9f2eSBram Moolenaar 'exe "echo"# something', 24414a8d9f2eSBram Moolenaar ], 'E121:') 24424a8d9f2eSBram Moolenaar CheckDefFailure([ 24434a8d9f2eSBram Moolenaar 'exe # comment', 24444a8d9f2eSBram Moolenaar ], 'E1015:') 24454a8d9f2eSBram Moolenaar CheckScriptFailure([ 24464a8d9f2eSBram Moolenaar 'vim9script', 24474a8d9f2eSBram Moolenaar 'exe# something', 24484a8d9f2eSBram Moolenaar ], 'E121:') 24494a8d9f2eSBram Moolenaar CheckScriptFailure([ 24504a8d9f2eSBram Moolenaar 'exe "echo" # something', 24514a8d9f2eSBram Moolenaar ], 'E121:') 24524a8d9f2eSBram Moolenaar 24537a092245SBram Moolenaar CheckDefFailure([ 24547a092245SBram Moolenaar 'try# comment', 24557a092245SBram Moolenaar ' echo "yes"', 24567a092245SBram Moolenaar 'catch', 24577a092245SBram Moolenaar 'endtry', 24587a092245SBram Moolenaar ], 'E488:') 24592c5ed4e3SBram Moolenaar CheckScriptFailure([ 24602c5ed4e3SBram Moolenaar 'vim9script', 24612c5ed4e3SBram Moolenaar 'try# comment', 24622c5ed4e3SBram Moolenaar 'echo "yes"', 24632c5ed4e3SBram Moolenaar ], 'E488:') 24647a092245SBram Moolenaar CheckDefFailure([ 24657a092245SBram Moolenaar 'try', 2466a72cfb80SBram Moolenaar ' throw#comment', 2467a72cfb80SBram Moolenaar 'catch', 2468a72cfb80SBram Moolenaar 'endtry', 2469a72cfb80SBram Moolenaar ], 'E1015:') 2470a72cfb80SBram Moolenaar CheckDefFailure([ 2471a72cfb80SBram Moolenaar 'try', 2472a72cfb80SBram Moolenaar ' throw "yes"#comment', 2473a72cfb80SBram Moolenaar 'catch', 2474a72cfb80SBram Moolenaar 'endtry', 2475a72cfb80SBram Moolenaar ], 'E488:') 2476a72cfb80SBram Moolenaar CheckDefFailure([ 2477a72cfb80SBram Moolenaar 'try', 24787a092245SBram Moolenaar ' echo "yes"', 24797a092245SBram Moolenaar 'catch# comment', 24807a092245SBram Moolenaar 'endtry', 24817a092245SBram Moolenaar ], 'E488:') 24822c5ed4e3SBram Moolenaar CheckScriptFailure([ 24832c5ed4e3SBram Moolenaar 'vim9script', 24842c5ed4e3SBram Moolenaar 'try', 24852c5ed4e3SBram Moolenaar ' echo "yes"', 24862c5ed4e3SBram Moolenaar 'catch# comment', 24872c5ed4e3SBram Moolenaar 'endtry', 24882c5ed4e3SBram Moolenaar ], 'E654:') 24892c5ed4e3SBram Moolenaar CheckDefFailure([ 24902c5ed4e3SBram Moolenaar 'try', 24912c5ed4e3SBram Moolenaar ' echo "yes"', 24922c5ed4e3SBram Moolenaar 'catch /pat/# comment', 24932c5ed4e3SBram Moolenaar 'endtry', 24942c5ed4e3SBram Moolenaar ], 'E488:') 24957a092245SBram Moolenaar CheckDefFailure([ 24967a092245SBram Moolenaar 'try', 24977a092245SBram Moolenaar 'echo "yes"', 24987a092245SBram Moolenaar 'catch', 24997a092245SBram Moolenaar 'endtry# comment', 25007a092245SBram Moolenaar ], 'E488:') 25012c5ed4e3SBram Moolenaar CheckScriptFailure([ 25022c5ed4e3SBram Moolenaar 'vim9script', 25032c5ed4e3SBram Moolenaar 'try', 25042c5ed4e3SBram Moolenaar ' echo "yes"', 25052c5ed4e3SBram Moolenaar 'catch', 25062c5ed4e3SBram Moolenaar 'endtry# comment', 25079b7bf9e9SBram Moolenaar ], 'E488:') 25082c5ed4e3SBram Moolenaar 25092c5ed4e3SBram Moolenaar CheckScriptSuccess([ 25102c5ed4e3SBram Moolenaar 'vim9script', 25112c5ed4e3SBram Moolenaar 'hi # comment', 25122c5ed4e3SBram Moolenaar ]) 25132c5ed4e3SBram Moolenaar CheckScriptFailure([ 25142c5ed4e3SBram Moolenaar 'vim9script', 25152c5ed4e3SBram Moolenaar 'hi# comment', 25162c5ed4e3SBram Moolenaar ], 'E416:') 25171966c248SBram Moolenaar CheckScriptSuccess([ 25181966c248SBram Moolenaar 'vim9script', 25191966c248SBram Moolenaar 'hi Search # comment', 25201966c248SBram Moolenaar ]) 25211966c248SBram Moolenaar CheckScriptFailure([ 25221966c248SBram Moolenaar 'vim9script', 25231966c248SBram Moolenaar 'hi Search# comment', 25241966c248SBram Moolenaar ], 'E416:') 25251966c248SBram Moolenaar CheckScriptSuccess([ 25261966c248SBram Moolenaar 'vim9script', 25271966c248SBram Moolenaar 'hi link This Search # comment', 25281966c248SBram Moolenaar ]) 25291966c248SBram Moolenaar CheckScriptFailure([ 25301966c248SBram Moolenaar 'vim9script', 25311966c248SBram Moolenaar 'hi link This That# comment', 25321966c248SBram Moolenaar ], 'E413:') 25331966c248SBram Moolenaar CheckScriptSuccess([ 25341966c248SBram Moolenaar 'vim9script', 25351966c248SBram Moolenaar 'hi clear This # comment', 25361966c248SBram Moolenaar 'hi clear # comment', 25371966c248SBram Moolenaar ]) 2538f5be8cdbSBram Moolenaar # not tested, because it doesn't give an error but a warning: 2539f5be8cdbSBram Moolenaar # hi clear This# comment', 25401966c248SBram Moolenaar CheckScriptFailure([ 25411966c248SBram Moolenaar 'vim9script', 25421966c248SBram Moolenaar 'hi clear# comment', 25431966c248SBram Moolenaar ], 'E416:') 25441966c248SBram Moolenaar 25451966c248SBram Moolenaar CheckScriptSuccess([ 25461966c248SBram Moolenaar 'vim9script', 25471966c248SBram Moolenaar 'hi Group term=bold', 25481966c248SBram Moolenaar 'match Group /todo/ # comment', 25491966c248SBram Moolenaar ]) 25501966c248SBram Moolenaar CheckScriptFailure([ 25511966c248SBram Moolenaar 'vim9script', 25521966c248SBram Moolenaar 'hi Group term=bold', 25531966c248SBram Moolenaar 'match Group /todo/# comment', 25541966c248SBram Moolenaar ], 'E488:') 25551966c248SBram Moolenaar CheckScriptSuccess([ 25561966c248SBram Moolenaar 'vim9script', 25571966c248SBram Moolenaar 'match # comment', 25581966c248SBram Moolenaar ]) 25591966c248SBram Moolenaar CheckScriptFailure([ 25601966c248SBram Moolenaar 'vim9script', 25611966c248SBram Moolenaar 'match# comment', 25621966c248SBram Moolenaar ], 'E475:') 25631966c248SBram Moolenaar CheckScriptSuccess([ 25641966c248SBram Moolenaar 'vim9script', 25651966c248SBram Moolenaar 'match none # comment', 25661966c248SBram Moolenaar ]) 25671966c248SBram Moolenaar CheckScriptFailure([ 25681966c248SBram Moolenaar 'vim9script', 25691966c248SBram Moolenaar 'match none# comment', 25701966c248SBram Moolenaar ], 'E475:') 25711966c248SBram Moolenaar 25721966c248SBram Moolenaar CheckScriptSuccess([ 25731966c248SBram Moolenaar 'vim9script', 25741966c248SBram Moolenaar 'menutrans clear # comment', 25751966c248SBram Moolenaar ]) 25761966c248SBram Moolenaar CheckScriptFailure([ 25771966c248SBram Moolenaar 'vim9script', 25781966c248SBram Moolenaar 'menutrans clear# comment text', 25791966c248SBram Moolenaar ], 'E474:') 25801966c248SBram Moolenaar 25811966c248SBram Moolenaar CheckScriptSuccess([ 25821966c248SBram Moolenaar 'vim9script', 25831966c248SBram Moolenaar 'syntax clear # comment', 25841966c248SBram Moolenaar ]) 25851966c248SBram Moolenaar CheckScriptFailure([ 25861966c248SBram Moolenaar 'vim9script', 25871966c248SBram Moolenaar 'syntax clear# comment text', 25881966c248SBram Moolenaar ], 'E28:') 25891966c248SBram Moolenaar CheckScriptSuccess([ 25901966c248SBram Moolenaar 'vim9script', 25911966c248SBram Moolenaar 'syntax keyword Word some', 25921966c248SBram Moolenaar 'syntax clear Word # comment', 25931966c248SBram Moolenaar ]) 25941966c248SBram Moolenaar CheckScriptFailure([ 25951966c248SBram Moolenaar 'vim9script', 25961966c248SBram Moolenaar 'syntax keyword Word some', 25971966c248SBram Moolenaar 'syntax clear Word# comment text', 25981966c248SBram Moolenaar ], 'E28:') 25991966c248SBram Moolenaar 26001966c248SBram Moolenaar CheckScriptSuccess([ 26011966c248SBram Moolenaar 'vim9script', 26021966c248SBram Moolenaar 'syntax list # comment', 26031966c248SBram Moolenaar ]) 26041966c248SBram Moolenaar CheckScriptFailure([ 26051966c248SBram Moolenaar 'vim9script', 26061966c248SBram Moolenaar 'syntax list# comment text', 26071966c248SBram Moolenaar ], 'E28:') 26081966c248SBram Moolenaar 26091966c248SBram Moolenaar CheckScriptSuccess([ 26101966c248SBram Moolenaar 'vim9script', 26111966c248SBram Moolenaar 'syntax match Word /pat/ oneline # comment', 26121966c248SBram Moolenaar ]) 26131966c248SBram Moolenaar CheckScriptFailure([ 26141966c248SBram Moolenaar 'vim9script', 26151966c248SBram Moolenaar 'syntax match Word /pat/ oneline# comment', 26161966c248SBram Moolenaar ], 'E475:') 26171966c248SBram Moolenaar 26181966c248SBram Moolenaar CheckScriptSuccess([ 26191966c248SBram Moolenaar 'vim9script', 26201966c248SBram Moolenaar 'syntax keyword Word word # comm[ent', 26211966c248SBram Moolenaar ]) 26221966c248SBram Moolenaar CheckScriptFailure([ 26231966c248SBram Moolenaar 'vim9script', 26241966c248SBram Moolenaar 'syntax keyword Word word# comm[ent', 26251966c248SBram Moolenaar ], 'E789:') 26261966c248SBram Moolenaar 26271966c248SBram Moolenaar CheckScriptSuccess([ 26281966c248SBram Moolenaar 'vim9script', 26291966c248SBram Moolenaar 'syntax match Word /pat/ # comment', 26301966c248SBram Moolenaar ]) 26311966c248SBram Moolenaar CheckScriptFailure([ 26321966c248SBram Moolenaar 'vim9script', 26331966c248SBram Moolenaar 'syntax match Word /pat/# comment', 26341966c248SBram Moolenaar ], 'E402:') 26351966c248SBram Moolenaar 26361966c248SBram Moolenaar CheckScriptSuccess([ 26371966c248SBram Moolenaar 'vim9script', 26381966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something # comment', 26391966c248SBram Moolenaar ]) 26401966c248SBram Moolenaar CheckScriptFailure([ 26411966c248SBram Moolenaar 'vim9script', 26421966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something# comment', 26431966c248SBram Moolenaar ], 'E475:') 26441966c248SBram Moolenaar CheckScriptFailure([ 26451966c248SBram Moolenaar 'vim9script', 26461966c248SBram Moolenaar 'syntax match Word /pat/ contains= # comment', 26471966c248SBram Moolenaar ], 'E406:') 26481966c248SBram Moolenaar CheckScriptFailure([ 26491966c248SBram Moolenaar 'vim9script', 26501966c248SBram Moolenaar 'syntax match Word /pat/ contains=# comment', 26511966c248SBram Moolenaar ], 'E475:') 26521966c248SBram Moolenaar 26531966c248SBram Moolenaar CheckScriptSuccess([ 26541966c248SBram Moolenaar 'vim9script', 26551966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/ # comment', 26561966c248SBram Moolenaar ]) 26571966c248SBram Moolenaar CheckScriptFailure([ 26581966c248SBram Moolenaar 'vim9script', 26591966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/# comment', 2660d032f34aSBram Moolenaar ], 'E402:') 26611966c248SBram Moolenaar 26621966c248SBram Moolenaar CheckScriptSuccess([ 26631966c248SBram Moolenaar 'vim9script', 26641966c248SBram Moolenaar 'syntax sync # comment', 26651966c248SBram Moolenaar ]) 26661966c248SBram Moolenaar CheckScriptFailure([ 26671966c248SBram Moolenaar 'vim9script', 26681966c248SBram Moolenaar 'syntax sync# comment', 26691966c248SBram Moolenaar ], 'E404:') 26701966c248SBram Moolenaar CheckScriptSuccess([ 26711966c248SBram Moolenaar 'vim9script', 26721966c248SBram Moolenaar 'syntax sync ccomment # comment', 26731966c248SBram Moolenaar ]) 26741966c248SBram Moolenaar CheckScriptFailure([ 26751966c248SBram Moolenaar 'vim9script', 26761966c248SBram Moolenaar 'syntax sync ccomment# comment', 26771966c248SBram Moolenaar ], 'E404:') 26781966c248SBram Moolenaar 26791966c248SBram Moolenaar CheckScriptSuccess([ 26801966c248SBram Moolenaar 'vim9script', 26811966c248SBram Moolenaar 'syntax cluster Some contains=Word # comment', 26821966c248SBram Moolenaar ]) 26831966c248SBram Moolenaar CheckScriptFailure([ 26841966c248SBram Moolenaar 'vim9script', 26851966c248SBram Moolenaar 'syntax cluster Some contains=Word# comment', 26861966c248SBram Moolenaar ], 'E475:') 2687a72cfb80SBram Moolenaar 2688a72cfb80SBram Moolenaar CheckScriptSuccess([ 2689a72cfb80SBram Moolenaar 'vim9script', 2690a72cfb80SBram Moolenaar 'command Echo echo # comment', 2691a72cfb80SBram Moolenaar 'command Echo # comment', 2692a72cfb80SBram Moolenaar ]) 2693a72cfb80SBram Moolenaar CheckScriptFailure([ 2694a72cfb80SBram Moolenaar 'vim9script', 2695a72cfb80SBram Moolenaar 'command Echo echo# comment', 2696a72cfb80SBram Moolenaar 'Echo', 2697a72cfb80SBram Moolenaar ], 'E121:') 2698a72cfb80SBram Moolenaar CheckScriptFailure([ 2699a72cfb80SBram Moolenaar 'vim9script', 2700a72cfb80SBram Moolenaar 'command Echo# comment', 2701a72cfb80SBram Moolenaar ], 'E182:') 2702a72cfb80SBram Moolenaar CheckScriptFailure([ 2703a72cfb80SBram Moolenaar 'vim9script', 2704a72cfb80SBram Moolenaar 'command Echo echo', 2705a72cfb80SBram Moolenaar 'command Echo# comment', 2706a72cfb80SBram Moolenaar ], 'E182:') 2707a72cfb80SBram Moolenaar 2708a72cfb80SBram Moolenaar CheckScriptSuccess([ 2709a72cfb80SBram Moolenaar 'vim9script', 2710a72cfb80SBram Moolenaar 'function # comment', 2711a72cfb80SBram Moolenaar ]) 2712a72cfb80SBram Moolenaar CheckScriptFailure([ 2713a72cfb80SBram Moolenaar 'vim9script', 27149898107fSBram Moolenaar 'function " comment', 27159898107fSBram Moolenaar ], 'E129:') 27169898107fSBram Moolenaar CheckScriptFailure([ 27179898107fSBram Moolenaar 'vim9script', 2718a72cfb80SBram Moolenaar 'function# comment', 2719a72cfb80SBram Moolenaar ], 'E129:') 2720a72cfb80SBram Moolenaar CheckScriptSuccess([ 2721a72cfb80SBram Moolenaar 'vim9script', 2722a72cfb80SBram Moolenaar 'function CheckScriptSuccess # comment', 2723a72cfb80SBram Moolenaar ]) 2724a72cfb80SBram Moolenaar CheckScriptFailure([ 2725a72cfb80SBram Moolenaar 'vim9script', 2726a72cfb80SBram Moolenaar 'function CheckScriptSuccess# comment', 2727a72cfb80SBram Moolenaar ], 'E488:') 2728a72cfb80SBram Moolenaar 2729a72cfb80SBram Moolenaar CheckScriptSuccess([ 2730a72cfb80SBram Moolenaar 'vim9script', 27314c17ad94SBram Moolenaar 'func g:DeleteMeA()', 2732a72cfb80SBram Moolenaar 'endfunc', 27334c17ad94SBram Moolenaar 'delfunction g:DeleteMeA # comment', 2734a72cfb80SBram Moolenaar ]) 2735a72cfb80SBram Moolenaar CheckScriptFailure([ 2736a72cfb80SBram Moolenaar 'vim9script', 27374c17ad94SBram Moolenaar 'func g:DeleteMeB()', 2738a72cfb80SBram Moolenaar 'endfunc', 27394c17ad94SBram Moolenaar 'delfunction g:DeleteMeB# comment', 2740a72cfb80SBram Moolenaar ], 'E488:') 2741a72cfb80SBram Moolenaar 2742a72cfb80SBram Moolenaar CheckScriptSuccess([ 2743a72cfb80SBram Moolenaar 'vim9script', 2744a72cfb80SBram Moolenaar 'call execute("ls") # comment', 2745a72cfb80SBram Moolenaar ]) 2746a72cfb80SBram Moolenaar CheckScriptFailure([ 2747a72cfb80SBram Moolenaar 'vim9script', 2748a72cfb80SBram Moolenaar 'call execute("ls")# comment', 2749a72cfb80SBram Moolenaar ], 'E488:') 2750e7e4838fSBram Moolenaar 2751e7e4838fSBram Moolenaar CheckScriptFailure([ 2752e7e4838fSBram Moolenaar 'def Test() " comment', 2753e7e4838fSBram Moolenaar 'enddef', 2754e7e4838fSBram Moolenaar ], 'E488:') 2755e7e4838fSBram Moolenaar CheckScriptFailure([ 2756e7e4838fSBram Moolenaar 'vim9script', 2757e7e4838fSBram Moolenaar 'def Test() " comment', 2758e7e4838fSBram Moolenaar 'enddef', 2759e7e4838fSBram Moolenaar ], 'E488:') 2760e7e4838fSBram Moolenaar 2761e7e4838fSBram Moolenaar CheckScriptSuccess([ 2762e7e4838fSBram Moolenaar 'func Test() " comment', 2763e7e4838fSBram Moolenaar 'endfunc', 2764e7e4838fSBram Moolenaar ]) 27659898107fSBram Moolenaar CheckScriptSuccess([ 2766e7e4838fSBram Moolenaar 'vim9script', 2767e7e4838fSBram Moolenaar 'func Test() " comment', 2768e7e4838fSBram Moolenaar 'endfunc', 27699898107fSBram Moolenaar ]) 2770e7e4838fSBram Moolenaar 2771e7e4838fSBram Moolenaar CheckScriptSuccess([ 2772e7e4838fSBram Moolenaar 'def Test() # comment', 2773e7e4838fSBram Moolenaar 'enddef', 2774e7e4838fSBram Moolenaar ]) 2775e7e4838fSBram Moolenaar CheckScriptFailure([ 2776e7e4838fSBram Moolenaar 'func Test() # comment', 2777e7e4838fSBram Moolenaar 'endfunc', 2778e7e4838fSBram Moolenaar ], 'E488:') 27792c5ed4e3SBram Moolenaarenddef 27802c5ed4e3SBram Moolenaar 27812c5ed4e3SBram Moolenaardef Test_vim9_comment_gui() 27822c5ed4e3SBram Moolenaar CheckCanRunGui 27832c5ed4e3SBram Moolenaar 27842c5ed4e3SBram Moolenaar CheckScriptFailure([ 27852c5ed4e3SBram Moolenaar 'vim9script', 27862c5ed4e3SBram Moolenaar 'gui#comment' 27872c5ed4e3SBram Moolenaar ], 'E499:') 27882c5ed4e3SBram Moolenaar CheckScriptFailure([ 27892c5ed4e3SBram Moolenaar 'vim9script', 27902c5ed4e3SBram Moolenaar 'gui -f#comment' 27912c5ed4e3SBram Moolenaar ], 'E499:') 27927a092245SBram Moolenaarenddef 27937a092245SBram Moolenaar 2794a26b9700SBram Moolenaardef Test_vim9_comment_not_compiled() 27956797966dSBram Moolenaar au TabEnter *.vim g:entered = 1 27966797966dSBram Moolenaar au TabEnter *.x g:entered = 2 2797a26b9700SBram Moolenaar 2798a26b9700SBram Moolenaar edit test.vim 2799a26b9700SBram Moolenaar doautocmd TabEnter #comment 2800a26b9700SBram Moolenaar assert_equal(1, g:entered) 2801a26b9700SBram Moolenaar 2802a26b9700SBram Moolenaar doautocmd TabEnter f.x 2803a26b9700SBram Moolenaar assert_equal(2, g:entered) 2804a26b9700SBram Moolenaar 2805a26b9700SBram Moolenaar g:entered = 0 2806a26b9700SBram Moolenaar doautocmd TabEnter f.x #comment 2807a26b9700SBram Moolenaar assert_equal(2, g:entered) 2808a26b9700SBram Moolenaar 2809a26b9700SBram Moolenaar assert_fails('doautocmd Syntax#comment', 'E216:') 2810a26b9700SBram Moolenaar 2811a26b9700SBram Moolenaar au! TabEnter 2812a26b9700SBram Moolenaar unlet g:entered 2813d72c1bf0SBram Moolenaar 2814d72c1bf0SBram Moolenaar CheckScriptSuccess([ 2815d72c1bf0SBram Moolenaar 'vim9script', 28166797966dSBram Moolenaar 'g:var = 123', 2817e55b1c09SBram Moolenaar 'b:var = 456', 2818e55b1c09SBram Moolenaar 'w:var = 777', 2819e55b1c09SBram Moolenaar 't:var = 888', 2820d72c1bf0SBram Moolenaar 'unlet g:var w:var # something', 2821d72c1bf0SBram Moolenaar ]) 2822d72c1bf0SBram Moolenaar 2823d72c1bf0SBram Moolenaar CheckScriptFailure([ 2824d72c1bf0SBram Moolenaar 'vim9script', 2825d72c1bf0SBram Moolenaar 'let g:var = 123', 2826e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a global variable:') 2827e55b1c09SBram Moolenaar 2828e55b1c09SBram Moolenaar CheckScriptFailure([ 2829e55b1c09SBram Moolenaar 'vim9script', 2830e55b1c09SBram Moolenaar 'let b:var = 123', 2831e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a buffer variable:') 2832e55b1c09SBram Moolenaar 2833e55b1c09SBram Moolenaar CheckScriptFailure([ 2834e55b1c09SBram Moolenaar 'vim9script', 2835e55b1c09SBram Moolenaar 'let w:var = 123', 2836e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a window variable:') 2837e55b1c09SBram Moolenaar 2838e55b1c09SBram Moolenaar CheckScriptFailure([ 2839e55b1c09SBram Moolenaar 'vim9script', 2840e55b1c09SBram Moolenaar 'let t:var = 123', 2841e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a tab variable:') 2842e55b1c09SBram Moolenaar 2843e55b1c09SBram Moolenaar CheckScriptFailure([ 2844e55b1c09SBram Moolenaar 'vim9script', 2845e55b1c09SBram Moolenaar 'let v:version = 123', 2846e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a v: variable:') 2847e55b1c09SBram Moolenaar 2848e55b1c09SBram Moolenaar CheckScriptFailure([ 2849e55b1c09SBram Moolenaar 'vim9script', 2850e55b1c09SBram Moolenaar 'let $VARIABLE = "text"', 2851e55b1c09SBram Moolenaar ], 'E1016: Cannot declare an environment variable:') 28526797966dSBram Moolenaar 28536797966dSBram Moolenaar CheckScriptFailure([ 28546797966dSBram Moolenaar 'vim9script', 28556797966dSBram Moolenaar 'g:var = 123', 285632e35117SBram Moolenaar 'unlet g:var# comment1', 2857d72c1bf0SBram Moolenaar ], 'E108:') 2858d72c1bf0SBram Moolenaar 2859d72c1bf0SBram Moolenaar CheckScriptFailure([ 2860d72c1bf0SBram Moolenaar 'let g:var = 123', 2861d72c1bf0SBram Moolenaar 'unlet g:var # something', 2862d72c1bf0SBram Moolenaar ], 'E488:') 2863faac4104SBram Moolenaar 2864faac4104SBram Moolenaar CheckScriptSuccess([ 2865faac4104SBram Moolenaar 'vim9script', 286632e35117SBram Moolenaar 'if 1 # comment2', 2867faac4104SBram Moolenaar ' echo "yes"', 2868faac4104SBram Moolenaar 'elseif 2 #comment', 2869faac4104SBram Moolenaar ' echo "no"', 2870faac4104SBram Moolenaar 'endif', 2871faac4104SBram Moolenaar ]) 2872faac4104SBram Moolenaar 2873faac4104SBram Moolenaar CheckScriptFailure([ 2874faac4104SBram Moolenaar 'vim9script', 287532e35117SBram Moolenaar 'if 1# comment3', 2876faac4104SBram Moolenaar ' echo "yes"', 2877faac4104SBram Moolenaar 'endif', 2878faac4104SBram Moolenaar ], 'E15:') 2879faac4104SBram Moolenaar 2880faac4104SBram Moolenaar CheckScriptFailure([ 2881faac4104SBram Moolenaar 'vim9script', 288232e35117SBram Moolenaar 'if 0 # comment4', 2883faac4104SBram Moolenaar ' echo "yes"', 2884faac4104SBram Moolenaar 'elseif 2#comment', 2885faac4104SBram Moolenaar ' echo "no"', 2886faac4104SBram Moolenaar 'endif', 2887faac4104SBram Moolenaar ], 'E15:') 2888faac4104SBram Moolenaar 2889faac4104SBram Moolenaar CheckScriptSuccess([ 2890faac4104SBram Moolenaar 'vim9script', 289132e35117SBram Moolenaar 'let v = 1 # comment5', 2892faac4104SBram Moolenaar ]) 2893faac4104SBram Moolenaar 2894faac4104SBram Moolenaar CheckScriptFailure([ 2895faac4104SBram Moolenaar 'vim9script', 289632e35117SBram Moolenaar 'let v = 1# comment6', 289732e35117SBram Moolenaar ], 'E15:') 2898faac4104SBram Moolenaar 2899faac4104SBram Moolenaar CheckScriptSuccess([ 2900faac4104SBram Moolenaar 'vim9script', 2901faac4104SBram Moolenaar 'new' 2902faac4104SBram Moolenaar 'call setline(1, ["# define pat", "last"])', 2903df069eecSBram Moolenaar ':$', 2904faac4104SBram Moolenaar 'dsearch /pat/ #comment', 2905faac4104SBram Moolenaar 'bwipe!', 2906faac4104SBram Moolenaar ]) 2907faac4104SBram Moolenaar 2908f5be8cdbSBram Moolenaar CheckScriptFailure([ 2909f5be8cdbSBram Moolenaar 'vim9script', 2910f5be8cdbSBram Moolenaar 'new' 2911f5be8cdbSBram Moolenaar 'call setline(1, ["# define pat", "last"])', 2912f5be8cdbSBram Moolenaar ':$', 2913f5be8cdbSBram Moolenaar 'dsearch /pat/#comment', 2914f5be8cdbSBram Moolenaar 'bwipe!', 2915f5be8cdbSBram Moolenaar ], 'E488:') 2916f5be8cdbSBram Moolenaar 2917f5be8cdbSBram Moolenaar CheckScriptFailure([ 2918f5be8cdbSBram Moolenaar 'vim9script', 2919f5be8cdbSBram Moolenaar 'func! SomeFunc()', 2920f5be8cdbSBram Moolenaar ], 'E477:') 2921a26b9700SBram Moolenaarenddef 2922a26b9700SBram Moolenaar 29237e5bd91dSBram Moolenaardef Test_finish() 29247e5bd91dSBram Moolenaar let lines =<< trim END 29257e5bd91dSBram Moolenaar vim9script 29266797966dSBram Moolenaar g:res = 'one' 29277e5bd91dSBram Moolenaar if v:false | finish | endif 29286797966dSBram Moolenaar g:res = 'two' 29297e5bd91dSBram Moolenaar finish 29306797966dSBram Moolenaar g:res = 'three' 29317e5bd91dSBram Moolenaar END 29327e5bd91dSBram Moolenaar writefile(lines, 'Xfinished') 29337e5bd91dSBram Moolenaar source Xfinished 29347e5bd91dSBram Moolenaar assert_equal('two', g:res) 29357e5bd91dSBram Moolenaar 29367e5bd91dSBram Moolenaar unlet g:res 29377e5bd91dSBram Moolenaar delete('Xfinished') 29387e5bd91dSBram Moolenaarenddef 29397e5bd91dSBram Moolenaar 294032e35117SBram Moolenaardef Test_let_func_call() 294132e35117SBram Moolenaar let lines =<< trim END 294232e35117SBram Moolenaar vim9script 294332e35117SBram Moolenaar func GetValue() 294432e35117SBram Moolenaar if exists('g:count') 294532e35117SBram Moolenaar let g:count += 1 294632e35117SBram Moolenaar else 294732e35117SBram Moolenaar let g:count = 1 294832e35117SBram Moolenaar endif 294932e35117SBram Moolenaar return 'this' 295032e35117SBram Moolenaar endfunc 295132e35117SBram Moolenaar let val: string = GetValue() 2952f5be8cdbSBram Moolenaar # env var is always a string 2953df671b46SBram Moolenaar let env = $TERM 295432e35117SBram Moolenaar END 295532e35117SBram Moolenaar writefile(lines, 'Xfinished') 295632e35117SBram Moolenaar source Xfinished 2957f5be8cdbSBram Moolenaar # GetValue() is not called during discovery phase 295832e35117SBram Moolenaar assert_equal(1, g:count) 295932e35117SBram Moolenaar 296032e35117SBram Moolenaar unlet g:count 296132e35117SBram Moolenaar delete('Xfinished') 296232e35117SBram Moolenaarenddef 296332e35117SBram Moolenaar 296432e35117SBram Moolenaardef Test_let_missing_type() 296532e35117SBram Moolenaar let lines =<< trim END 296632e35117SBram Moolenaar vim9script 2967df671b46SBram Moolenaar let var = g:unknown 2968227a69deSBram Moolenaar END 2969822ba247SBram Moolenaar CheckScriptFailure(lines, 'E121:') 2970227a69deSBram Moolenaar 2971227a69deSBram Moolenaar lines =<< trim END 2972227a69deSBram Moolenaar vim9script 2973227a69deSBram Moolenaar let nr: number = 123 2974227a69deSBram Moolenaar let var = nr 2975227a69deSBram Moolenaar END 2976822ba247SBram Moolenaar CheckScriptSuccess(lines) 297732e35117SBram Moolenaarenddef 297832e35117SBram Moolenaar 2979c82a5b5dSBram Moolenaardef Test_let_declaration() 2980c82a5b5dSBram Moolenaar let lines =<< trim END 2981c82a5b5dSBram Moolenaar vim9script 2982c82a5b5dSBram Moolenaar let var: string 2983c82a5b5dSBram Moolenaar g:var_uninit = var 2984c82a5b5dSBram Moolenaar var = 'text' 2985c82a5b5dSBram Moolenaar g:var_test = var 2986f5be8cdbSBram Moolenaar # prefixing s: is optional 2987984dddbeSBram Moolenaar s:var = 'prefixed' 2988984dddbeSBram Moolenaar g:var_prefixed = s:var 2989984dddbeSBram Moolenaar 2990984dddbeSBram Moolenaar let s:other: number 2991984dddbeSBram Moolenaar other = 1234 2992984dddbeSBram Moolenaar g:other_var = other 299353b29e48SBram Moolenaar 299453b29e48SBram Moolenaar # type is inferred 299553b29e48SBram Moolenaar s:dict = {'a': 222} 299653b29e48SBram Moolenaar def GetDictVal(key: any) 299753b29e48SBram Moolenaar g:dict_val = s:dict[key] 299853b29e48SBram Moolenaar enddef 299953b29e48SBram Moolenaar GetDictVal('a') 3000c82a5b5dSBram Moolenaar END 3001c82a5b5dSBram Moolenaar CheckScriptSuccess(lines) 3002c82a5b5dSBram Moolenaar assert_equal('', g:var_uninit) 3003c82a5b5dSBram Moolenaar assert_equal('text', g:var_test) 3004984dddbeSBram Moolenaar assert_equal('prefixed', g:var_prefixed) 3005984dddbeSBram Moolenaar assert_equal(1234, g:other_var) 300653b29e48SBram Moolenaar assert_equal(222, g:dict_val) 3007c82a5b5dSBram Moolenaar 3008c82a5b5dSBram Moolenaar unlet g:var_uninit 3009c82a5b5dSBram Moolenaar unlet g:var_test 3010984dddbeSBram Moolenaar unlet g:var_prefixed 3011984dddbeSBram Moolenaar unlet g:other_var 3012c82a5b5dSBram Moolenaarenddef 3013c82a5b5dSBram Moolenaar 3014c5b1c20bSBram Moolenaardef Test_let_declaration_fails() 3015c5b1c20bSBram Moolenaar let lines =<< trim END 3016c5b1c20bSBram Moolenaar vim9script 3017c5b1c20bSBram Moolenaar const var: string 3018c5b1c20bSBram Moolenaar END 3019c5b1c20bSBram Moolenaar CheckScriptFailure(lines, 'E1021:') 3020c5b1c20bSBram Moolenaar 3021c5b1c20bSBram Moolenaar lines =<< trim END 3022c5b1c20bSBram Moolenaar vim9script 3023c5b1c20bSBram Moolenaar let 9var: string 3024c5b1c20bSBram Moolenaar END 3025c5b1c20bSBram Moolenaar CheckScriptFailure(lines, 'E475:') 3026c5b1c20bSBram Moolenaarenddef 3027c5b1c20bSBram Moolenaar 302834db91f7SBram Moolenaardef Test_let_type_check() 302934db91f7SBram Moolenaar let lines =<< trim END 303034db91f7SBram Moolenaar vim9script 303134db91f7SBram Moolenaar let var: string 303234db91f7SBram Moolenaar var = 1234 303334db91f7SBram Moolenaar END 3034451c2e35SBram Moolenaar CheckScriptFailure(lines, 'E1012:') 3035984dddbeSBram Moolenaar 3036984dddbeSBram Moolenaar lines =<< trim END 3037984dddbeSBram Moolenaar vim9script 3038984dddbeSBram Moolenaar let var:string 3039984dddbeSBram Moolenaar END 3040984dddbeSBram Moolenaar CheckScriptFailure(lines, 'E1069:') 3041c5b1c20bSBram Moolenaar 3042c5b1c20bSBram Moolenaar lines =<< trim END 3043c5b1c20bSBram Moolenaar vim9script 3044c5b1c20bSBram Moolenaar let var: asdf 3045c5b1c20bSBram Moolenaar END 3046c5b1c20bSBram Moolenaar CheckScriptFailure(lines, 'E1010:') 3047a71e2633SBram Moolenaar 3048a71e2633SBram Moolenaar lines =<< trim END 3049a71e2633SBram Moolenaar vim9script 3050a71e2633SBram Moolenaar let s:l: list<number> 3051a71e2633SBram Moolenaar s:l = [] 3052a71e2633SBram Moolenaar END 3053a71e2633SBram Moolenaar CheckScriptSuccess(lines) 3054a71e2633SBram Moolenaar 3055a71e2633SBram Moolenaar lines =<< trim END 3056a71e2633SBram Moolenaar vim9script 3057a71e2633SBram Moolenaar let s:d: dict<number> 3058a71e2633SBram Moolenaar s:d = {} 3059a71e2633SBram Moolenaar END 3060a71e2633SBram Moolenaar CheckScriptSuccess(lines) 306134db91f7SBram Moolenaarenddef 306234db91f7SBram Moolenaar 3063a5d0077eSBram Moolenaardef Test_forward_declaration() 3064a5d0077eSBram Moolenaar let lines =<< trim END 3065a5d0077eSBram Moolenaar vim9script 3066a5d0077eSBram Moolenaar def GetValue(): string 3067a5d0077eSBram Moolenaar return theVal 3068a5d0077eSBram Moolenaar enddef 3069a5d0077eSBram Moolenaar let theVal = 'something' 3070822ba247SBram Moolenaar g:initVal = GetValue() 3071a5d0077eSBram Moolenaar theVal = 'else' 3072a5d0077eSBram Moolenaar g:laterVal = GetValue() 3073a5d0077eSBram Moolenaar END 3074a5d0077eSBram Moolenaar writefile(lines, 'Xforward') 3075a5d0077eSBram Moolenaar source Xforward 3076a5d0077eSBram Moolenaar assert_equal('something', g:initVal) 3077a5d0077eSBram Moolenaar assert_equal('else', g:laterVal) 3078a5d0077eSBram Moolenaar 3079a5d0077eSBram Moolenaar unlet g:initVal 3080a5d0077eSBram Moolenaar unlet g:laterVal 3081a5d0077eSBram Moolenaar delete('Xforward') 3082a5d0077eSBram Moolenaarenddef 3083a5d0077eSBram Moolenaar 30849721fb4eSBram Moolenaardef Test_source_vim9_from_legacy() 30859721fb4eSBram Moolenaar let legacy_lines =<< trim END 30869721fb4eSBram Moolenaar source Xvim9_script.vim 30879721fb4eSBram Moolenaar 30889721fb4eSBram Moolenaar call assert_false(exists('local')) 30899721fb4eSBram Moolenaar call assert_false(exists('exported')) 30909721fb4eSBram Moolenaar call assert_false(exists('s:exported')) 30919721fb4eSBram Moolenaar call assert_equal('global', global) 30929721fb4eSBram Moolenaar call assert_equal('global', g:global) 30939721fb4eSBram Moolenaar 30949721fb4eSBram Moolenaar " imported variable becomes script-local 30959721fb4eSBram Moolenaar import exported from './Xvim9_script.vim' 30969721fb4eSBram Moolenaar call assert_equal('exported', s:exported) 30979721fb4eSBram Moolenaar call assert_false(exists('exported')) 30989721fb4eSBram Moolenaar 30999721fb4eSBram Moolenaar " imported function becomes script-local 31009721fb4eSBram Moolenaar import GetText from './Xvim9_script.vim' 31019721fb4eSBram Moolenaar call assert_equal('text', s:GetText()) 31029721fb4eSBram Moolenaar call assert_false(exists('*GetText')) 31039721fb4eSBram Moolenaar END 31049721fb4eSBram Moolenaar writefile(legacy_lines, 'Xlegacy_script.vim') 31059721fb4eSBram Moolenaar 31069721fb4eSBram Moolenaar let vim9_lines =<< trim END 31079721fb4eSBram Moolenaar vim9script 31089721fb4eSBram Moolenaar let local = 'local' 31099721fb4eSBram Moolenaar g:global = 'global' 31109721fb4eSBram Moolenaar export let exported = 'exported' 31119721fb4eSBram Moolenaar export def GetText(): string 31129721fb4eSBram Moolenaar return 'text' 31139721fb4eSBram Moolenaar enddef 31149721fb4eSBram Moolenaar END 31159721fb4eSBram Moolenaar writefile(vim9_lines, 'Xvim9_script.vim') 31169721fb4eSBram Moolenaar 31179721fb4eSBram Moolenaar source Xlegacy_script.vim 31189721fb4eSBram Moolenaar 31199721fb4eSBram Moolenaar assert_equal('global', g:global) 3120f5be8cdbSBram Moolenaar unlet g:global 31219721fb4eSBram Moolenaar 31229721fb4eSBram Moolenaar delete('Xlegacy_script.vim') 31239721fb4eSBram Moolenaar delete('Xvim9_script.vim') 31249721fb4eSBram Moolenaarenddef 3125a5d0077eSBram Moolenaar 31267d699701SBram Moolenaarfunc Test_vim9script_not_global() 31277d699701SBram Moolenaar " check that items defined in Vim9 script are script-local, not global 31287d699701SBram Moolenaar let vim9lines =<< trim END 31297d699701SBram Moolenaar vim9script 31307d699701SBram Moolenaar let var = 'local' 31317d699701SBram Moolenaar func TheFunc() 31327d699701SBram Moolenaar echo 'local' 31337d699701SBram Moolenaar endfunc 31347d699701SBram Moolenaar def DefFunc() 31357d699701SBram Moolenaar echo 'local' 31367d699701SBram Moolenaar enddef 31377d699701SBram Moolenaar END 31387d699701SBram Moolenaar call writefile(vim9lines, 'Xvim9script.vim') 31397d699701SBram Moolenaar source Xvim9script.vim 31407d699701SBram Moolenaar try 31417d699701SBram Moolenaar echo g:var 31427d699701SBram Moolenaar assert_report('did not fail') 31437d699701SBram Moolenaar catch /E121:/ 31447d699701SBram Moolenaar " caught 31457d699701SBram Moolenaar endtry 31467d699701SBram Moolenaar try 31477d699701SBram Moolenaar call TheFunc() 31487d699701SBram Moolenaar assert_report('did not fail') 31497d699701SBram Moolenaar catch /E117:/ 31507d699701SBram Moolenaar " caught 31517d699701SBram Moolenaar endtry 31527d699701SBram Moolenaar try 31537d699701SBram Moolenaar call DefFunc() 31547d699701SBram Moolenaar assert_report('did not fail') 31557d699701SBram Moolenaar catch /E117:/ 31567d699701SBram Moolenaar " caught 31577d699701SBram Moolenaar endtry 31587d699701SBram Moolenaar 31597d699701SBram Moolenaar call delete('Xvim9script.vium') 31607d699701SBram Moolenaarendfunc 31617d699701SBram Moolenaar 3162eeb27bfeSBram Moolenaardef Test_vim9_copen() 3163eeb27bfeSBram Moolenaar # this was giving an error for setting w:quickfix_title 3164eeb27bfeSBram Moolenaar copen 3165eeb27bfeSBram Moolenaar quit 3166eeb27bfeSBram Moolenaarenddef 3167eeb27bfeSBram Moolenaar 31682d6b20d6SBram Moolenaar" test using a vim9script that is auto-loaded from an autocmd 31692d6b20d6SBram Moolenaardef Test_vim9_autoload() 31702d6b20d6SBram Moolenaar let lines =<< trim END 31712d6b20d6SBram Moolenaar vim9script 31722d6b20d6SBram Moolenaar def foo#test() 31732d6b20d6SBram Moolenaar echomsg getreg('"') 31742d6b20d6SBram Moolenaar enddef 31752d6b20d6SBram Moolenaar END 31762d6b20d6SBram Moolenaar 31772d6b20d6SBram Moolenaar mkdir('Xdir/autoload', 'p') 31782d6b20d6SBram Moolenaar writefile(lines, 'Xdir/autoload/foo.vim') 31792d6b20d6SBram Moolenaar let save_rtp = &rtp 31802d6b20d6SBram Moolenaar exe 'set rtp^=' .. getcwd() .. '/Xdir' 31812d6b20d6SBram Moolenaar augroup test 31822d6b20d6SBram Moolenaar autocmd TextYankPost * call foo#test() 31832d6b20d6SBram Moolenaar augroup END 31842d6b20d6SBram Moolenaar 31852d6b20d6SBram Moolenaar normal Y 31862d6b20d6SBram Moolenaar 31872d6b20d6SBram Moolenaar augroup test 31882d6b20d6SBram Moolenaar autocmd! 31892d6b20d6SBram Moolenaar augroup END 31902d6b20d6SBram Moolenaar delete('Xdir', 'rf') 31912d6b20d6SBram Moolenaar &rtp = save_rtp 31922d6b20d6SBram Moolenaarenddef 31932d6b20d6SBram Moolenaar 319481e17fbeSBram Moolenaardef Test_script_var_in_autocmd() 319581e17fbeSBram Moolenaar # using a script variable from an autocommand, defined in a :def function in a 319681e17fbeSBram Moolenaar # legacy Vim script, cannot check the variable type. 319781e17fbeSBram Moolenaar let lines =<< trim END 319881e17fbeSBram Moolenaar let s:counter = 1 319981e17fbeSBram Moolenaar def s:Func() 320081e17fbeSBram Moolenaar au! CursorHold 320181e17fbeSBram Moolenaar au CursorHold * s:counter += 1 320281e17fbeSBram Moolenaar enddef 320381e17fbeSBram Moolenaar call s:Func() 320481e17fbeSBram Moolenaar doau CursorHold 320581e17fbeSBram Moolenaar call assert_equal(2, s:counter) 320681e17fbeSBram Moolenaar au! CursorHold 320781e17fbeSBram Moolenaar END 320881e17fbeSBram Moolenaar CheckScriptSuccess(lines) 320981e17fbeSBram Moolenaarenddef 321081e17fbeSBram Moolenaar 32113896a105SBram Moolenaardef Test_cmdline_win() 32123896a105SBram Moolenaar # if the Vim syntax highlighting uses Vim9 constructs they can be used from 32133896a105SBram Moolenaar # the command line window. 32143896a105SBram Moolenaar mkdir('rtp/syntax', 'p') 32153896a105SBram Moolenaar let export_lines =<< trim END 32163896a105SBram Moolenaar vim9script 32173896a105SBram Moolenaar export let That = 'yes' 32183896a105SBram Moolenaar END 32193896a105SBram Moolenaar writefile(export_lines, 'rtp/syntax/Xexport.vim') 32203896a105SBram Moolenaar let import_lines =<< trim END 32213896a105SBram Moolenaar vim9script 32223896a105SBram Moolenaar import That from './Xexport.vim' 32233896a105SBram Moolenaar END 32243896a105SBram Moolenaar writefile(import_lines, 'rtp/syntax/vim.vim') 32253896a105SBram Moolenaar let save_rtp = &rtp 32263896a105SBram Moolenaar &rtp = getcwd() .. '/rtp' .. ',' .. &rtp 32273896a105SBram Moolenaar syntax on 32283896a105SBram Moolenaar augroup CmdWin 32293896a105SBram Moolenaar autocmd CmdwinEnter * g:got_there = 'yes' 32303896a105SBram Moolenaar augroup END 32313896a105SBram Moolenaar # this will open and also close the cmdline window 32323896a105SBram Moolenaar feedkeys('q:', 'xt') 32333896a105SBram Moolenaar assert_equal('yes', g:got_there) 32343896a105SBram Moolenaar 32353896a105SBram Moolenaar augroup CmdWin 32363896a105SBram Moolenaar au! 32373896a105SBram Moolenaar augroup END 32383896a105SBram Moolenaar &rtp = save_rtp 32393896a105SBram Moolenaar delete('rtp', 'rf') 32403896a105SBram Moolenaarenddef 32413896a105SBram Moolenaar 3242585fea7bSBram Moolenaar" Keep this last, it messes up highlighting. 3243585fea7bSBram Moolenaardef Test_substitute_cmd() 3244585fea7bSBram Moolenaar new 3245585fea7bSBram Moolenaar setline(1, 'something') 3246585fea7bSBram Moolenaar :substitute(some(other( 3247585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 3248585fea7bSBram Moolenaar bwipe! 3249585fea7bSBram Moolenaar 3250f5be8cdbSBram Moolenaar # also when the context is Vim9 script 3251585fea7bSBram Moolenaar let lines =<< trim END 3252585fea7bSBram Moolenaar vim9script 3253585fea7bSBram Moolenaar new 3254585fea7bSBram Moolenaar setline(1, 'something') 3255585fea7bSBram Moolenaar :substitute(some(other( 3256585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 3257585fea7bSBram Moolenaar bwipe! 3258585fea7bSBram Moolenaar END 3259585fea7bSBram Moolenaar writefile(lines, 'Xvim9lines') 3260585fea7bSBram Moolenaar source Xvim9lines 3261585fea7bSBram Moolenaar 3262585fea7bSBram Moolenaar delete('Xvim9lines') 3263585fea7bSBram Moolenaarenddef 3264585fea7bSBram Moolenaar 32658a7d6542SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker 3266