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 13*5d72ce69SBram Moolenaardef Test_range_only() 14*5d72ce69SBram Moolenaar new 15*5d72ce69SBram Moolenaar setline(1, ['blah', 'Blah']) 16*5d72ce69SBram Moolenaar :/Blah/ 17*5d72ce69SBram Moolenaar assert_equal(2, getcurpos()[1]) 18*5d72ce69SBram Moolenaarenddef 19*5d72ce69SBram Moolenaar 206e587dcbSBram Moolenaarlet s:appendToMe = 'xxx' 216e587dcbSBram Moolenaarlet s:addToMe = 111 22401d9ffbSBram Moolenaarlet g:existing = 'yes' 23a8c17704SBram Moolenaarlet g:inc_counter = 1 24a8c17704SBram Moolenaarlet $SOME_ENV_VAR = 'some' 25a6e67e4fSBram Moolenaarlet g:alist = [7] 26a6e67e4fSBram Moolenaarlet g:astring = 'text' 27f0b9f43cSBram Moolenaarlet g:anumber = 123 286e587dcbSBram Moolenaar 298a7d6542SBram Moolenaardef Test_assignment() 308a7d6542SBram Moolenaar let bool1: bool = true 318a7d6542SBram Moolenaar assert_equal(v:true, bool1) 328a7d6542SBram Moolenaar let bool2: bool = false 338a7d6542SBram Moolenaar assert_equal(v:false, bool2) 348a7d6542SBram Moolenaar 35f93c7feaSBram Moolenaar call CheckDefFailure(['let x:string'], 'E1069:') 36f93c7feaSBram Moolenaar call CheckDefFailure(['let x:string = "x"'], 'E1069:') 371cc2a94fSBram Moolenaar call CheckDefFailure(['let a:string = "x"'], 'E1069:') 3898b4f145SBram Moolenaar call CheckDefFailure(['let lambda = {-> "lambda"}'], 'E704:') 39f93c7feaSBram Moolenaar 404cdb13ceSBram Moolenaar let nr: number = 1234 41451c2e35SBram Moolenaar call CheckDefFailure(['let nr: number = "asdf"'], 'E1012:') 424cdb13ceSBram Moolenaar 43b209750bSBram Moolenaar let a: number = 6 #comment 449be61bbbSBram Moolenaar assert_equal(6, a) 459be61bbbSBram Moolenaar 4642a480bfSBram Moolenaar if has('channel') 4742a480bfSBram Moolenaar let chan1: channel 48fbdd08edSBram Moolenaar let job1: job 49f51cb4e0SBram Moolenaar let job2: job = job_start('willfail') 5042a480bfSBram Moolenaar endif 51fbdd08edSBram Moolenaar if has('float') 52fbdd08edSBram Moolenaar let float1: float = 3.4 53fbdd08edSBram Moolenaar endif 545deeb3f1SBram Moolenaar let Funky1: func 555deeb3f1SBram Moolenaar let Funky2: func = function('len') 564c17ad94SBram Moolenaar let Party2: func = funcref('g:Test_syntax') 5742a480bfSBram Moolenaar 58b209750bSBram Moolenaar g:newvar = 'new' #comment 59401d9ffbSBram Moolenaar assert_equal('new', g:newvar) 60401d9ffbSBram Moolenaar 61401d9ffbSBram Moolenaar assert_equal('yes', g:existing) 62401d9ffbSBram Moolenaar g:existing = 'no' 63401d9ffbSBram Moolenaar assert_equal('no', g:existing) 64401d9ffbSBram Moolenaar 65b283a8a6SBram Moolenaar v:char = 'abc' 666e587dcbSBram Moolenaar assert_equal('abc', v:char) 67b283a8a6SBram Moolenaar 68b283a8a6SBram Moolenaar $ENVVAR = 'foobar' 696e587dcbSBram Moolenaar assert_equal('foobar', $ENVVAR) 70b283a8a6SBram Moolenaar $ENVVAR = '' 716e587dcbSBram Moolenaar 72b5ed2660SBram Moolenaar let lines =<< trim END 73b5ed2660SBram Moolenaar vim9script 74b5ed2660SBram Moolenaar $ENVVAR = 'barfoo' 75b5ed2660SBram Moolenaar assert_equal('barfoo', $ENVVAR) 76b5ed2660SBram Moolenaar $ENVVAR = '' 77b5ed2660SBram Moolenaar END 78b5ed2660SBram Moolenaar call CheckScriptSuccess(lines) 79b5ed2660SBram Moolenaar 80fd1823e0SBram Moolenaar s:appendToMe ..= 'yyy' 81fd1823e0SBram Moolenaar assert_equal('xxxyyy', s:appendToMe) 82fd1823e0SBram Moolenaar s:addToMe += 222 83fd1823e0SBram Moolenaar assert_equal(333, s:addToMe) 840bbf722aSBram Moolenaar s:newVar = 'new' 850bbf722aSBram Moolenaar assert_equal('new', s:newVar) 86a8c17704SBram Moolenaar 87a8c17704SBram Moolenaar set ts=7 88a8c17704SBram Moolenaar &ts += 1 89a8c17704SBram Moolenaar assert_equal(8, &ts) 9080c34ca3SBram Moolenaar &ts -= 3 9180c34ca3SBram Moolenaar assert_equal(5, &ts) 9280c34ca3SBram Moolenaar &ts *= 2 9380c34ca3SBram Moolenaar assert_equal(10, &ts) 9480c34ca3SBram Moolenaar &ts /= 3 9580c34ca3SBram Moolenaar assert_equal(3, &ts) 9680c34ca3SBram Moolenaar set ts=10 9780c34ca3SBram Moolenaar &ts %= 4 9880c34ca3SBram Moolenaar assert_equal(2, &ts) 99b5ed2660SBram Moolenaar 10093ad1471SBram Moolenaar if has('float') 10193ad1471SBram Moolenaar let f100: float = 100.0 10293ad1471SBram Moolenaar f100 /= 5 10393ad1471SBram Moolenaar assert_equal(20.0, f100) 10493ad1471SBram Moolenaar 10593ad1471SBram Moolenaar let f200: float = 200.0 10693ad1471SBram Moolenaar f200 /= 5.0 10793ad1471SBram Moolenaar assert_equal(40.0, f200) 10893ad1471SBram Moolenaar 10993ad1471SBram Moolenaar CheckDefFailure(['let nr: number = 200', 'nr /= 5.0'], 'E1012:') 11093ad1471SBram Moolenaar endif 11193ad1471SBram Moolenaar 112b5ed2660SBram Moolenaar lines =<< trim END 113b5ed2660SBram Moolenaar vim9script 114b5ed2660SBram Moolenaar &ts = 6 115b5ed2660SBram Moolenaar &ts += 3 116b5ed2660SBram Moolenaar assert_equal(9, &ts) 117b5ed2660SBram Moolenaar END 1180aae4809SBram Moolenaar CheckScriptSuccess(lines) 119b5ed2660SBram Moolenaar 1200aae4809SBram Moolenaar CheckDefFailure(['¬ex += 3'], 'E113:') 1210aae4809SBram Moolenaar CheckDefFailure(['&ts ..= "xxx"'], 'E1019:') 1220aae4809SBram Moolenaar CheckDefFailure(['&ts = [7]'], 'E1012:') 1230aae4809SBram Moolenaar CheckDefExecFailure(['&ts = g:alist'], 'E1029: Expected number but got list') 1240aae4809SBram Moolenaar CheckDefFailure(['&ts = "xx"'], 'E1012:') 1250aae4809SBram Moolenaar CheckDefExecFailure(['&ts = g:astring'], 'E1029: Expected number but got string') 1260aae4809SBram Moolenaar CheckDefFailure(['&path += 3'], 'E1012:') 1270aae4809SBram Moolenaar CheckDefExecFailure(['&bs = "asdf"'], 'E474:') 128cb711abfSBram Moolenaar # test freeing ISN_STOREOPT 1290aae4809SBram Moolenaar CheckDefFailure(['&ts = 3', 'let asdf'], 'E1022:') 13080c34ca3SBram Moolenaar &ts = 8 131a8c17704SBram Moolenaar 1320aae4809SBram Moolenaar lines =<< trim END 1330aae4809SBram Moolenaar let save_TI = &t_TI 1340aae4809SBram Moolenaar &t_TI = '' 1350aae4809SBram Moolenaar assert_equal('', &t_TI) 1360aae4809SBram Moolenaar &t_TI = 'xxx' 1370aae4809SBram Moolenaar assert_equal('xxx', &t_TI) 1380aae4809SBram Moolenaar &t_TI = save_TI 1390aae4809SBram Moolenaar END 1400aae4809SBram Moolenaar CheckDefSuccess(lines) 1410aae4809SBram Moolenaar CheckScriptSuccess(['vim9script'] + lines) 1420aae4809SBram Moolenaar 1430aae4809SBram Moolenaar CheckDefFailure(['&t_TI = 123'], 'E1012:') 1440aae4809SBram Moolenaar CheckScriptFailure(['vim9script', '&t_TI = 123'], 'E928:') 1450aae4809SBram Moolenaar 1460aae4809SBram Moolenaar CheckDefFailure(['let s:var = 123'], 'E1101:') 1470aae4809SBram Moolenaar CheckDefFailure(['let s:var: number'], 'E1101:') 14833afa244SBram Moolenaar 149f9b2b496SBram Moolenaar lines =<< trim END 150f9b2b496SBram Moolenaar vim9script 151f9b2b496SBram Moolenaar def SomeFunc() 152f9b2b496SBram Moolenaar s:var = 123 153f9b2b496SBram Moolenaar enddef 154f9b2b496SBram Moolenaar defcompile 155f9b2b496SBram Moolenaar END 156f9b2b496SBram Moolenaar call CheckScriptFailure(lines, 'E1089:') 157f9b2b496SBram Moolenaar 158a8c17704SBram Moolenaar g:inc_counter += 1 159a8c17704SBram Moolenaar assert_equal(2, g:inc_counter) 160a8c17704SBram Moolenaar 161a8c17704SBram Moolenaar $SOME_ENV_VAR ..= 'more' 162a8c17704SBram Moolenaar assert_equal('somemore', $SOME_ENV_VAR) 163dd29f1b0SBram Moolenaar call CheckDefFailure(['$SOME_ENV_VAR += "more"'], 'E1051:') 164451c2e35SBram Moolenaar call CheckDefFailure(['$SOME_ENV_VAR += 123'], 'E1012:') 165a8c17704SBram Moolenaar 166a8c17704SBram Moolenaar @a = 'areg' 167a8c17704SBram Moolenaar @a ..= 'add' 168a8c17704SBram Moolenaar assert_equal('aregadd', @a) 169dd29f1b0SBram Moolenaar call CheckDefFailure(['@a += "more"'], 'E1051:') 170451c2e35SBram Moolenaar call CheckDefFailure(['@a += 123'], 'E1012:') 171e69f6d04SBram Moolenaar 172b5ed2660SBram Moolenaar lines =<< trim END 173b5ed2660SBram Moolenaar vim9script 174b5ed2660SBram Moolenaar @c = 'areg' 175b5ed2660SBram Moolenaar @c ..= 'add' 176b5ed2660SBram Moolenaar assert_equal('aregadd', @c) 177b5ed2660SBram Moolenaar END 178b5ed2660SBram Moolenaar call CheckScriptSuccess(lines) 179b5ed2660SBram Moolenaar 180e69f6d04SBram Moolenaar v:errmsg = 'none' 181e69f6d04SBram Moolenaar v:errmsg ..= 'again' 182e69f6d04SBram Moolenaar assert_equal('noneagain', v:errmsg) 183dd29f1b0SBram Moolenaar call CheckDefFailure(['v:errmsg += "more"'], 'E1051:') 184451c2e35SBram Moolenaar call CheckDefFailure(['v:errmsg += 123'], 'E1012:') 18533afa244SBram Moolenaar 18633afa244SBram Moolenaar # single letter variables 18733afa244SBram Moolenaar a = 123 18833afa244SBram Moolenaar assert_equal(123, a) 18933afa244SBram Moolenaar let b: number 19033afa244SBram Moolenaar b = 123 19133afa244SBram Moolenaar assert_equal(123, b) 19233afa244SBram Moolenaar let g: number 19333afa244SBram Moolenaar g = 123 19433afa244SBram Moolenaar assert_equal(123, g) 19533afa244SBram Moolenaar let s: number 19633afa244SBram Moolenaar s = 123 19733afa244SBram Moolenaar assert_equal(123, s) 19833afa244SBram Moolenaar let t: number 19933afa244SBram Moolenaar t = 123 20033afa244SBram Moolenaar assert_equal(123, t) 20133afa244SBram Moolenaar let v: number 20233afa244SBram Moolenaar v = 123 20333afa244SBram Moolenaar assert_equal(123, v) 20433afa244SBram Moolenaar let w: number 20533afa244SBram Moolenaar w = 123 20633afa244SBram Moolenaar assert_equal(123, w) 2075deeb3f1SBram Moolenaarenddef 2085deeb3f1SBram Moolenaar 2093b74b6b4SBram Moolenaardef Test_vim9_single_char_vars() 2103b74b6b4SBram Moolenaar let lines =<< trim END 2113b74b6b4SBram Moolenaar vim9script 2123b74b6b4SBram Moolenaar 213f5be8cdbSBram Moolenaar # single character variable declarations work 2143b74b6b4SBram Moolenaar let a: string 2153b74b6b4SBram Moolenaar let b: number 2163b74b6b4SBram Moolenaar let l: list<any> 2173b74b6b4SBram Moolenaar let s: string 2183b74b6b4SBram Moolenaar let t: number 2193b74b6b4SBram Moolenaar let v: number 2203b74b6b4SBram Moolenaar let w: number 2213b74b6b4SBram Moolenaar 222f5be8cdbSBram Moolenaar # script-local variables can be used without s: prefix 2233b74b6b4SBram Moolenaar a = 'script-a' 2243b74b6b4SBram Moolenaar b = 111 2253b74b6b4SBram Moolenaar l = [1, 2, 3] 2263b74b6b4SBram Moolenaar s = 'script-s' 2273b74b6b4SBram Moolenaar t = 222 2283b74b6b4SBram Moolenaar v = 333 2293b74b6b4SBram Moolenaar w = 444 2303b74b6b4SBram Moolenaar 2313b74b6b4SBram Moolenaar assert_equal('script-a', a) 2323b74b6b4SBram Moolenaar assert_equal(111, b) 2333b74b6b4SBram Moolenaar assert_equal([1, 2, 3], l) 2343b74b6b4SBram Moolenaar assert_equal('script-s', s) 2353b74b6b4SBram Moolenaar assert_equal(222, t) 2363b74b6b4SBram Moolenaar assert_equal(333, v) 2373b74b6b4SBram Moolenaar assert_equal(444, w) 2383b74b6b4SBram Moolenaar END 2393b74b6b4SBram Moolenaar writefile(lines, 'Xsinglechar') 2403b74b6b4SBram Moolenaar source Xsinglechar 2413b74b6b4SBram Moolenaar delete('Xsinglechar') 2423b74b6b4SBram Moolenaarenddef 2433b74b6b4SBram Moolenaar 24484370087SBram Moolenaardef Test_assignment_list() 24584370087SBram Moolenaar let list1: list<bool> = [false, true, false] 24684370087SBram Moolenaar let list2: list<number> = [1, 2, 3] 24784370087SBram Moolenaar let list3: list<string> = ['sdf', 'asdf'] 24884370087SBram Moolenaar let list4: list<any> = ['yes', true, 1234] 24984370087SBram Moolenaar let list5: list<blob> = [0z01, 0z02] 25084370087SBram Moolenaar 25184370087SBram Moolenaar let listS: list<string> = [] 25284370087SBram Moolenaar let listN: list<number> = [] 25384370087SBram Moolenaar 25484370087SBram Moolenaar assert_equal([1, 2, 3], list2) 25584370087SBram Moolenaar list2[-1] = 99 25684370087SBram Moolenaar assert_equal([1, 2, 99], list2) 25784370087SBram Moolenaar list2[-2] = 88 25884370087SBram Moolenaar assert_equal([1, 88, 99], list2) 25984370087SBram Moolenaar list2[-3] = 77 26084370087SBram Moolenaar assert_equal([77, 88, 99], list2) 261dd29f1b0SBram Moolenaar list2 += [100] 262dd29f1b0SBram Moolenaar assert_equal([77, 88, 99, 100], list2) 263dd29f1b0SBram Moolenaar 264dd29f1b0SBram Moolenaar list3 += ['end'] 265dd29f1b0SBram Moolenaar assert_equal(['sdf', 'asdf', 'end'], list3) 266dd29f1b0SBram Moolenaar 267dd29f1b0SBram Moolenaar 26884370087SBram Moolenaar call CheckDefExecFailure(['let ll = [1, 2, 3]', 'll[-4] = 6'], 'E684:') 269c5b1c20bSBram Moolenaar call CheckDefExecFailure(['let [v1, v2] = [1, 2]'], 'E1092:') 27084370087SBram Moolenaar 27184370087SBram Moolenaar # type becomes list<any> 27284370087SBram Moolenaar let somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c'] 27384370087SBram Moolenaarenddef 27484370087SBram Moolenaar 275b31be3f9SBram Moolenaardef Test_assignment_list_vim9script() 276b31be3f9SBram Moolenaar let lines =<< trim END 277b31be3f9SBram Moolenaar vim9script 278b31be3f9SBram Moolenaar let v1: number 279b31be3f9SBram Moolenaar let v2: number 280b31be3f9SBram Moolenaar let v3: number 281b31be3f9SBram Moolenaar [v1, v2, v3] = [1, 2, 3] 282b31be3f9SBram Moolenaar assert_equal([1, 2, 3], [v1, v2, v3]) 283b31be3f9SBram Moolenaar END 284b31be3f9SBram Moolenaar call CheckScriptSuccess(lines) 285b31be3f9SBram Moolenaarenddef 286b31be3f9SBram Moolenaar 28784370087SBram Moolenaardef Test_assignment_dict() 28884370087SBram Moolenaar let dict1: dict<bool> = #{one: false, two: true} 28984370087SBram Moolenaar let dict2: dict<number> = #{one: 1, two: 2} 29084370087SBram Moolenaar let dict3: dict<string> = #{key: 'value'} 29184370087SBram Moolenaar let dict4: dict<any> = #{one: 1, two: '2'} 29274fae513SBram Moolenaar let dict5: dict<blob> = #{one: 0z01, two: 0z02} 29384370087SBram Moolenaar 294f5be8cdbSBram Moolenaar # overwrite 295c785b9a7SBram Moolenaar dict3['key'] = 'another' 296c785b9a7SBram Moolenaar 29758626872SBram Moolenaar # empty key can be used 29858626872SBram Moolenaar let dd = {} 29958626872SBram Moolenaar dd[""] = 6 30058626872SBram Moolenaar assert_equal({'': 6}, dd) 30184370087SBram Moolenaar 30284370087SBram Moolenaar # type becomes dict<any> 30384370087SBram Moolenaar let somedict = rand() > 0 ? #{a: 1, b: 2} : #{a: 'a', b: 'b'} 3048e4c8c85SBram Moolenaar 3058e4c8c85SBram Moolenaar # assignment to script-local dict 3068e4c8c85SBram Moolenaar let lines =<< trim END 3078e4c8c85SBram Moolenaar vim9script 3088e4c8c85SBram Moolenaar let test: dict<any> = {} 3098e4c8c85SBram Moolenaar def FillDict(): dict<any> 3108e4c8c85SBram Moolenaar test['a'] = 43 3118e4c8c85SBram Moolenaar return test 3128e4c8c85SBram Moolenaar enddef 3138e4c8c85SBram Moolenaar assert_equal(#{a: 43}, FillDict()) 3148e4c8c85SBram Moolenaar END 3158e4c8c85SBram Moolenaar call CheckScriptSuccess(lines) 3168e4c8c85SBram Moolenaar 3178e4c8c85SBram Moolenaar lines =<< trim END 3188e4c8c85SBram Moolenaar vim9script 3198e4c8c85SBram Moolenaar let test: dict<any> 3208e4c8c85SBram Moolenaar def FillDict(): dict<any> 3218e4c8c85SBram Moolenaar test['a'] = 43 3228e4c8c85SBram Moolenaar return test 3238e4c8c85SBram Moolenaar enddef 3248e4c8c85SBram Moolenaar FillDict() 3258e4c8c85SBram Moolenaar END 3268e4c8c85SBram Moolenaar call CheckScriptFailure(lines, 'E1103:') 3272caa1594SBram Moolenaar 3282caa1594SBram Moolenaar # assignment to global dict 3292caa1594SBram Moolenaar lines =<< trim END 3302caa1594SBram Moolenaar vim9script 3312caa1594SBram Moolenaar g:test = {} 3322caa1594SBram Moolenaar def FillDict(): dict<any> 3332caa1594SBram Moolenaar g:test['a'] = 43 3342caa1594SBram Moolenaar return g:test 3352caa1594SBram Moolenaar enddef 3362caa1594SBram Moolenaar assert_equal(#{a: 43}, FillDict()) 3372caa1594SBram Moolenaar END 3382caa1594SBram Moolenaar call CheckScriptSuccess(lines) 3392caa1594SBram Moolenaar 3402caa1594SBram Moolenaar # assignment to buffer dict 3412caa1594SBram Moolenaar lines =<< trim END 3422caa1594SBram Moolenaar vim9script 3432caa1594SBram Moolenaar b:test = {} 3442caa1594SBram Moolenaar def FillDict(): dict<any> 3452caa1594SBram Moolenaar b:test['a'] = 43 3462caa1594SBram Moolenaar return b:test 3472caa1594SBram Moolenaar enddef 3482caa1594SBram Moolenaar assert_equal(#{a: 43}, FillDict()) 3492caa1594SBram Moolenaar END 3502caa1594SBram Moolenaar call CheckScriptSuccess(lines) 35184370087SBram Moolenaarenddef 35284370087SBram Moolenaar 353d3aac291SBram Moolenaardef Test_assignment_local() 354f5be8cdbSBram Moolenaar # Test in a separated file in order not to the current buffer/window/tab is 355f5be8cdbSBram Moolenaar # changed. 356d3aac291SBram Moolenaar let script_lines: list<string> =<< trim END 357d3aac291SBram Moolenaar let b:existing = 'yes' 358d3aac291SBram Moolenaar let w:existing = 'yes' 359d3aac291SBram Moolenaar let t:existing = 'yes' 360d3aac291SBram Moolenaar 361d3aac291SBram Moolenaar def Test_assignment_local_internal() 362d3aac291SBram Moolenaar b:newvar = 'new' 363d3aac291SBram Moolenaar assert_equal('new', b:newvar) 364d3aac291SBram Moolenaar assert_equal('yes', b:existing) 365d3aac291SBram Moolenaar b:existing = 'no' 366d3aac291SBram Moolenaar assert_equal('no', b:existing) 367396f3138SBram Moolenaar b:existing ..= 'NO' 368396f3138SBram Moolenaar assert_equal('noNO', b:existing) 369d3aac291SBram Moolenaar 370d3aac291SBram Moolenaar w:newvar = 'new' 371d3aac291SBram Moolenaar assert_equal('new', w:newvar) 372d3aac291SBram Moolenaar assert_equal('yes', w:existing) 373d3aac291SBram Moolenaar w:existing = 'no' 374d3aac291SBram Moolenaar assert_equal('no', w:existing) 375396f3138SBram Moolenaar w:existing ..= 'NO' 376396f3138SBram Moolenaar assert_equal('noNO', w:existing) 377d3aac291SBram Moolenaar 378d3aac291SBram Moolenaar t:newvar = 'new' 379d3aac291SBram Moolenaar assert_equal('new', t:newvar) 380d3aac291SBram Moolenaar assert_equal('yes', t:existing) 381d3aac291SBram Moolenaar t:existing = 'no' 382d3aac291SBram Moolenaar assert_equal('no', t:existing) 383396f3138SBram Moolenaar t:existing ..= 'NO' 384396f3138SBram Moolenaar assert_equal('noNO', t:existing) 385d3aac291SBram Moolenaar enddef 386d3aac291SBram Moolenaar call Test_assignment_local_internal() 387d3aac291SBram Moolenaar END 388d3aac291SBram Moolenaar call CheckScriptSuccess(script_lines) 389d3aac291SBram Moolenaarenddef 390d3aac291SBram Moolenaar 3915deeb3f1SBram Moolenaardef Test_assignment_default() 392e69f6d04SBram Moolenaar 393cb711abfSBram Moolenaar # Test default values. 394e69f6d04SBram Moolenaar let thebool: bool 395e69f6d04SBram Moolenaar assert_equal(v:false, thebool) 396e69f6d04SBram Moolenaar 397e69f6d04SBram Moolenaar let thenumber: number 398e69f6d04SBram Moolenaar assert_equal(0, thenumber) 399e69f6d04SBram Moolenaar 400e69f6d04SBram Moolenaar if has('float') 401e69f6d04SBram Moolenaar let thefloat: float 402e69f6d04SBram Moolenaar assert_equal(0.0, thefloat) 403e69f6d04SBram Moolenaar endif 404e69f6d04SBram Moolenaar 405e69f6d04SBram Moolenaar let thestring: string 406e69f6d04SBram Moolenaar assert_equal('', thestring) 407e69f6d04SBram Moolenaar 408e69f6d04SBram Moolenaar let theblob: blob 409e69f6d04SBram Moolenaar assert_equal(0z, theblob) 410e69f6d04SBram Moolenaar 4115deeb3f1SBram Moolenaar let Thefunc: func 4125deeb3f1SBram Moolenaar assert_equal(test_null_function(), Thefunc) 413e69f6d04SBram Moolenaar 414e69f6d04SBram Moolenaar let thelist: list<any> 415e69f6d04SBram Moolenaar assert_equal([], thelist) 416e69f6d04SBram Moolenaar 417e69f6d04SBram Moolenaar let thedict: dict<any> 418e69f6d04SBram Moolenaar assert_equal({}, thedict) 419e69f6d04SBram Moolenaar 4202c869deeSBram Moolenaar if has('channel') 421e69f6d04SBram Moolenaar let thejob: job 422e69f6d04SBram Moolenaar assert_equal(test_null_job(), thejob) 423e69f6d04SBram Moolenaar 424e69f6d04SBram Moolenaar let thechannel: channel 425e69f6d04SBram Moolenaar assert_equal(test_null_channel(), thechannel) 426c785b9a7SBram Moolenaar 427c785b9a7SBram Moolenaar if has('unix') && executable('cat') 428f5be8cdbSBram Moolenaar # check with non-null job and channel, types must match 429c785b9a7SBram Moolenaar thejob = job_start("cat ", #{}) 430c785b9a7SBram Moolenaar thechannel = job_getchannel(thejob) 431c785b9a7SBram Moolenaar job_stop(thejob, 'kill') 432c785b9a7SBram Moolenaar endif 4332c869deeSBram Moolenaar endif 434585fea7bSBram Moolenaar 435585fea7bSBram Moolenaar let nr = 1234 | nr = 5678 436585fea7bSBram Moolenaar assert_equal(5678, nr) 4378a7d6542SBram Moolenaarenddef 4388a7d6542SBram Moolenaar 43947a519a9SBram Moolenaardef Test_assignment_var_list() 44047a519a9SBram Moolenaar let v1: string 44147a519a9SBram Moolenaar let v2: string 4429af78769SBram Moolenaar let vrem: list<string> 4439af78769SBram Moolenaar [v1] = ['aaa'] 4449af78769SBram Moolenaar assert_equal('aaa', v1) 4459af78769SBram Moolenaar 44647a519a9SBram Moolenaar [v1, v2] = ['one', 'two'] 44747a519a9SBram Moolenaar assert_equal('one', v1) 44847a519a9SBram Moolenaar assert_equal('two', v2) 4499af78769SBram Moolenaar 4509af78769SBram Moolenaar [v1, v2; vrem] = ['one', 'two'] 4519af78769SBram Moolenaar assert_equal('one', v1) 4529af78769SBram Moolenaar assert_equal('two', v2) 4539af78769SBram Moolenaar assert_equal([], vrem) 4549af78769SBram Moolenaar 4559af78769SBram Moolenaar [v1, v2; vrem] = ['one', 'two', 'three'] 4569af78769SBram Moolenaar assert_equal('one', v1) 4579af78769SBram Moolenaar assert_equal('two', v2) 4589af78769SBram Moolenaar assert_equal(['three'], vrem) 4591c199f9cSBram Moolenaar 4601c199f9cSBram Moolenaar [&ts, &sw] = [3, 4] 4611c199f9cSBram Moolenaar assert_equal(3, &ts) 4621c199f9cSBram Moolenaar assert_equal(4, &sw) 4631c199f9cSBram Moolenaar set ts=8 sw=4 46447a519a9SBram Moolenaarenddef 46547a519a9SBram Moolenaar 466c7e44a7eSBram Moolenaardef Test_assignment_vim9script() 467c7e44a7eSBram Moolenaar let lines =<< trim END 468c7e44a7eSBram Moolenaar vim9script 469c7e44a7eSBram Moolenaar def Func(): list<number> 470c7e44a7eSBram Moolenaar return [1, 2] 471c7e44a7eSBram Moolenaar enddef 472c7e44a7eSBram Moolenaar let var1: number 473c7e44a7eSBram Moolenaar let var2: number 474c7e44a7eSBram Moolenaar [var1, var2] = 475c7e44a7eSBram Moolenaar Func() 476c7e44a7eSBram Moolenaar assert_equal(1, var1) 477c7e44a7eSBram Moolenaar assert_equal(2, var2) 478c7e44a7eSBram Moolenaar let ll = 479c7e44a7eSBram Moolenaar Func() 480c7e44a7eSBram Moolenaar assert_equal([1, 2], ll) 48183144546SBram Moolenaar 48283144546SBram Moolenaar @/ = 'text' 48383144546SBram Moolenaar assert_equal('text', @/) 48483144546SBram Moolenaar @0 = 'zero' 48583144546SBram Moolenaar assert_equal('zero', @0) 48683144546SBram Moolenaar @1 = 'one' 48783144546SBram Moolenaar assert_equal('one', @1) 48883144546SBram Moolenaar @9 = 'nine' 48983144546SBram Moolenaar assert_equal('nine', @9) 49083144546SBram Moolenaar @- = 'minus' 49183144546SBram Moolenaar assert_equal('minus', @-) 49283144546SBram Moolenaar if has('clipboard_working') 49383144546SBram Moolenaar @* = 'star' 49483144546SBram Moolenaar assert_equal('star', @*) 49583144546SBram Moolenaar @+ = 'plus' 49683144546SBram Moolenaar assert_equal('plus', @+) 49783144546SBram Moolenaar endif 49895dd9f25SBram Moolenaar 49995dd9f25SBram Moolenaar let a: number = 123 50095dd9f25SBram Moolenaar assert_equal(123, a) 50195dd9f25SBram Moolenaar let s: string = 'yes' 50295dd9f25SBram Moolenaar assert_equal('yes', s) 50395dd9f25SBram Moolenaar let b: number = 42 50495dd9f25SBram Moolenaar assert_equal(42, b) 50595dd9f25SBram Moolenaar let w: number = 43 50695dd9f25SBram Moolenaar assert_equal(43, w) 50795dd9f25SBram Moolenaar let t: number = 44 50895dd9f25SBram Moolenaar assert_equal(44, t) 509c7e44a7eSBram Moolenaar END 510c7e44a7eSBram Moolenaar CheckScriptSuccess(lines) 511c7e44a7eSBram Moolenaarenddef 512c7e44a7eSBram Moolenaar 513cab27678SBram Moolenaardef Mess(): string 514cab27678SBram Moolenaar v:foldstart = 123 515cab27678SBram Moolenaar return 'xxx' 516cab27678SBram Moolenaarenddef 517cab27678SBram Moolenaar 518d72c1bf0SBram Moolenaardef Test_assignment_failure() 5198a7d6542SBram Moolenaar call CheckDefFailure(['let var=234'], 'E1004:') 5208a7d6542SBram Moolenaar call CheckDefFailure(['let var =234'], 'E1004:') 5218a7d6542SBram Moolenaar call CheckDefFailure(['let var= 234'], 'E1004:') 5228a7d6542SBram Moolenaar 52363be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var=234'], 'E1004:') 52463be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var=234'], "before and after '='") 52563be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var =234'], 'E1004:') 52663be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var= 234'], 'E1004:') 52763be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var = 234', 'var+=234'], 'E1004:') 52863be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var = 234', 'var+=234'], "before and after '+='") 52963be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var = "x"', 'var..="y"'], 'E1004:') 53063be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var = "x"', 'var..="y"'], "before and after '..='") 53163be3d4bSBram Moolenaar 5328a7d6542SBram Moolenaar call CheckDefFailure(['let true = 1'], 'E1034:') 5338a7d6542SBram Moolenaar call CheckDefFailure(['let false = 1'], 'E1034:') 5348a7d6542SBram Moolenaar 5359b7bf9e9SBram Moolenaar call CheckDefFailure(['[a; b; c] = g:list'], 'E452:') 5369af78769SBram Moolenaar call CheckDefExecFailure(['let a: number', 5379af78769SBram Moolenaar '[a] = test_null_list()'], 'E1093:') 5389af78769SBram Moolenaar call CheckDefExecFailure(['let a: number', 5399af78769SBram Moolenaar '[a] = []'], 'E1093:') 5409af78769SBram Moolenaar call CheckDefExecFailure(['let x: number', 5419af78769SBram Moolenaar 'let y: number', 5429af78769SBram Moolenaar '[x, y] = [1]'], 'E1093:') 5439af78769SBram Moolenaar call CheckDefExecFailure(['let x: number', 5449af78769SBram Moolenaar 'let y: number', 5459af78769SBram Moolenaar 'let z: list<number>', 5469af78769SBram Moolenaar '[x, y; z] = [1]'], 'E1093:') 5479be61bbbSBram Moolenaar 548e69f6d04SBram Moolenaar call CheckDefFailure(['let somevar'], "E1022:") 549c2ee44ccSBram Moolenaar call CheckDefFailure(['let &tabstop = 4'], 'E1052:') 5509be61bbbSBram Moolenaar call CheckDefFailure(['&g:option = 5'], 'E113:') 551c2ee44ccSBram Moolenaar call CheckScriptFailure(['vim9script', 'let &tabstop = 4'], 'E1052:') 5529be61bbbSBram Moolenaar 553e55b1c09SBram Moolenaar call CheckDefFailure(['let $VAR = 5'], 'E1016: Cannot declare an environment variable:') 554c2ee44ccSBram Moolenaar call CheckScriptFailure(['vim9script', 'let $ENV = "xxx"'], 'E1016:') 5559be61bbbSBram Moolenaar 556434d72cbSBram Moolenaar if has('dnd') 55765821727SBram Moolenaar call CheckDefFailure(['let @~ = 5'], 'E1066:') 558434d72cbSBram Moolenaar else 559434d72cbSBram Moolenaar call CheckDefFailure(['let @~ = 5'], 'E354:') 560434d72cbSBram Moolenaar call CheckDefFailure(['@~ = 5'], 'E354:') 561434d72cbSBram Moolenaar endif 5629be61bbbSBram Moolenaar call CheckDefFailure(['let @a = 5'], 'E1066:') 56365821727SBram Moolenaar call CheckDefFailure(['let @/ = "x"'], 'E1066:') 564c2ee44ccSBram Moolenaar call CheckScriptFailure(['vim9script', 'let @a = "abc"'], 'E1066:') 5659be61bbbSBram Moolenaar 566e55b1c09SBram Moolenaar call CheckDefFailure(['let g:var = 5'], 'E1016: Cannot declare a global variable:') 567e55b1c09SBram Moolenaar call CheckDefFailure(['let w:var = 5'], 'E1016: Cannot declare a window variable:') 568e55b1c09SBram Moolenaar call CheckDefFailure(['let b:var = 5'], 'E1016: Cannot declare a buffer variable:') 569e55b1c09SBram Moolenaar call CheckDefFailure(['let t:var = 5'], 'E1016: Cannot declare a tab variable:') 5709be61bbbSBram Moolenaar 5719be61bbbSBram Moolenaar call CheckDefFailure(['let anr = 4', 'anr ..= "text"'], 'E1019:') 5729be61bbbSBram Moolenaar call CheckDefFailure(['let xnr += 4'], 'E1020:') 5739be61bbbSBram Moolenaar 574451c2e35SBram Moolenaar call CheckScriptFailure(['vim9script', 'def Func()', 'let dummy = s:notfound', 'enddef', 'defcompile'], 'E1108:') 57533fa29cfSBram Moolenaar 5768a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<string> = [123]'], 'expected list<string> but got list<number>') 5778a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<number> = ["xx"]'], 'expected list<number> but got list<string>') 5788a7d6542SBram Moolenaar 5798a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<string> = #{key: 123}'], 'expected dict<string> but got dict<number>') 5808a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<number> = #{key: "xx"}'], 'expected dict<number> but got dict<string>') 5818a7d6542SBram Moolenaar 5828a7d6542SBram Moolenaar call CheckDefFailure(['let var = feedkeys("0")'], 'E1031:') 5838a7d6542SBram Moolenaar call CheckDefFailure(['let var: number = feedkeys("0")'], 'expected number but got void') 58442a480bfSBram Moolenaar 585d77a8525SBram Moolenaar call CheckDefFailure(['let var: dict <number>'], 'E1068:') 58642a480bfSBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 587cab27678SBram Moolenaar 588cab27678SBram Moolenaar call assert_fails('s/^/\=Mess()/n', 'E794:') 589cab27678SBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 59043e969d3SBram Moolenaar 59143e969d3SBram Moolenaar call CheckDefFailure(['w:foo: number = 10'], 59243e969d3SBram Moolenaar 'E488: Trailing characters: : number = 1') 59343e969d3SBram Moolenaar call CheckDefFailure(['t:foo: bool = true'], 59443e969d3SBram Moolenaar 'E488: Trailing characters: : bool = true') 59543e969d3SBram Moolenaar call CheckDefFailure(['b:foo: string = "x"'], 59643e969d3SBram Moolenaar 'E488: Trailing characters: : string = "x"') 59743e969d3SBram Moolenaar call CheckDefFailure(['g:foo: number = 123'], 59843e969d3SBram Moolenaar 'E488: Trailing characters: : number = 123') 599d72c1bf0SBram Moolenaarenddef 600d72c1bf0SBram Moolenaar 601d72c1bf0SBram Moolenaardef Test_unlet() 602d72c1bf0SBram Moolenaar g:somevar = 'yes' 603d72c1bf0SBram Moolenaar assert_true(exists('g:somevar')) 604d72c1bf0SBram Moolenaar unlet g:somevar 605d72c1bf0SBram Moolenaar assert_false(exists('g:somevar')) 606d72c1bf0SBram Moolenaar unlet! g:somevar 607d72c1bf0SBram Moolenaar 608d72c1bf0SBram Moolenaar call CheckScriptFailure([ 609d72c1bf0SBram Moolenaar 'vim9script', 610d72c1bf0SBram Moolenaar 'let svar = 123', 611d72c1bf0SBram Moolenaar 'unlet svar', 612d72c1bf0SBram Moolenaar ], 'E1081:') 613d72c1bf0SBram Moolenaar call CheckScriptFailure([ 614d72c1bf0SBram Moolenaar 'vim9script', 615d72c1bf0SBram Moolenaar 'let svar = 123', 616d72c1bf0SBram Moolenaar 'unlet s:svar', 617d72c1bf0SBram Moolenaar ], 'E1081:') 618d72c1bf0SBram Moolenaar call CheckScriptFailure([ 619d72c1bf0SBram Moolenaar 'vim9script', 620d72c1bf0SBram Moolenaar 'let svar = 123', 621d72c1bf0SBram Moolenaar 'def Func()', 622d72c1bf0SBram Moolenaar ' unlet svar', 623d72c1bf0SBram Moolenaar 'enddef', 624822ba247SBram Moolenaar 'defcompile', 625d72c1bf0SBram Moolenaar ], 'E1081:') 626d72c1bf0SBram Moolenaar call CheckScriptFailure([ 627d72c1bf0SBram Moolenaar 'vim9script', 628d72c1bf0SBram Moolenaar 'let svar = 123', 629d72c1bf0SBram Moolenaar 'def Func()', 630d72c1bf0SBram Moolenaar ' unlet s:svar', 631d72c1bf0SBram Moolenaar 'enddef', 632822ba247SBram Moolenaar 'defcompile', 633d72c1bf0SBram Moolenaar ], 'E1081:') 6347bdaea6eSBram Moolenaar 6357bdaea6eSBram Moolenaar $ENVVAR = 'foobar' 6367bdaea6eSBram Moolenaar assert_equal('foobar', $ENVVAR) 6377bdaea6eSBram Moolenaar unlet $ENVVAR 6387bdaea6eSBram Moolenaar assert_equal('', $ENVVAR) 639d72c1bf0SBram Moolenaarenddef 640599c89c8SBram Moolenaar 6414c17ad94SBram Moolenaardef Test_delfunction() 642f5be8cdbSBram Moolenaar # Check function is defined in script namespace 6434c17ad94SBram Moolenaar CheckScriptSuccess([ 6444c17ad94SBram Moolenaar 'vim9script', 6454c17ad94SBram Moolenaar 'func CheckMe()', 6464c17ad94SBram Moolenaar ' return 123', 6474c17ad94SBram Moolenaar 'endfunc', 6484c17ad94SBram Moolenaar 'assert_equal(123, s:CheckMe())', 6494c17ad94SBram Moolenaar ]) 6504c17ad94SBram Moolenaar 651f5be8cdbSBram Moolenaar # Check function in script namespace cannot be deleted 6524c17ad94SBram Moolenaar CheckScriptFailure([ 6534c17ad94SBram Moolenaar 'vim9script', 6544c17ad94SBram Moolenaar 'func DeleteMe1()', 6554c17ad94SBram Moolenaar 'endfunc', 6564c17ad94SBram Moolenaar 'delfunction DeleteMe1', 6574c17ad94SBram Moolenaar ], 'E1084:') 6584c17ad94SBram Moolenaar CheckScriptFailure([ 6594c17ad94SBram Moolenaar 'vim9script', 6604c17ad94SBram Moolenaar 'func DeleteMe2()', 6614c17ad94SBram Moolenaar 'endfunc', 6624c17ad94SBram Moolenaar 'def DoThat()', 6634c17ad94SBram Moolenaar ' delfunction DeleteMe2', 6644c17ad94SBram Moolenaar 'enddef', 6654c17ad94SBram Moolenaar 'DoThat()', 6664c17ad94SBram Moolenaar ], 'E1084:') 6674c17ad94SBram Moolenaar CheckScriptFailure([ 6684c17ad94SBram Moolenaar 'vim9script', 6694c17ad94SBram Moolenaar 'def DeleteMe3()', 6704c17ad94SBram Moolenaar 'enddef', 6714c17ad94SBram Moolenaar 'delfunction DeleteMe3', 6724c17ad94SBram Moolenaar ], 'E1084:') 6734c17ad94SBram Moolenaar CheckScriptFailure([ 6744c17ad94SBram Moolenaar 'vim9script', 6754c17ad94SBram Moolenaar 'def DeleteMe4()', 6764c17ad94SBram Moolenaar 'enddef', 6774c17ad94SBram Moolenaar 'def DoThat()', 6784c17ad94SBram Moolenaar ' delfunction DeleteMe4', 6794c17ad94SBram Moolenaar 'enddef', 6804c17ad94SBram Moolenaar 'DoThat()', 6814c17ad94SBram Moolenaar ], 'E1084:') 682925e9fd6SBram Moolenaar 683925e9fd6SBram Moolenaar # Check that global :def function can be replaced and deleted 684925e9fd6SBram Moolenaar let lines =<< trim END 685925e9fd6SBram Moolenaar vim9script 686925e9fd6SBram Moolenaar def g:Global(): string 687925e9fd6SBram Moolenaar return "yes" 688925e9fd6SBram Moolenaar enddef 689925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 690925e9fd6SBram Moolenaar def! g:Global(): string 691925e9fd6SBram Moolenaar return "no" 692925e9fd6SBram Moolenaar enddef 693925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 694925e9fd6SBram Moolenaar delfunc g:Global 695925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 696925e9fd6SBram Moolenaar END 697925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 698925e9fd6SBram Moolenaar 699925e9fd6SBram Moolenaar # Check that global function can be replaced by a :def function and deleted 700925e9fd6SBram Moolenaar lines =<< trim END 701925e9fd6SBram Moolenaar vim9script 702925e9fd6SBram Moolenaar func g:Global() 703925e9fd6SBram Moolenaar return "yes" 704925e9fd6SBram Moolenaar endfunc 705925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 706925e9fd6SBram Moolenaar def! g:Global(): string 707925e9fd6SBram Moolenaar return "no" 708925e9fd6SBram Moolenaar enddef 709925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 710925e9fd6SBram Moolenaar delfunc g:Global 711925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 712925e9fd6SBram Moolenaar END 713925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 714925e9fd6SBram Moolenaar 715925e9fd6SBram Moolenaar # Check that global :def function can be replaced by a function and deleted 716925e9fd6SBram Moolenaar lines =<< trim END 717925e9fd6SBram Moolenaar vim9script 718925e9fd6SBram Moolenaar def g:Global(): string 719925e9fd6SBram Moolenaar return "yes" 720925e9fd6SBram Moolenaar enddef 721925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 722925e9fd6SBram Moolenaar func! g:Global() 723925e9fd6SBram Moolenaar return "no" 724925e9fd6SBram Moolenaar endfunc 725925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 726925e9fd6SBram Moolenaar delfunc g:Global 727925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 728925e9fd6SBram Moolenaar END 729925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 7304c17ad94SBram Moolenaarenddef 7314c17ad94SBram Moolenaar 732599c89c8SBram Moolenaarfunc Test_wrong_type() 733599c89c8SBram Moolenaar call CheckDefFailure(['let var: list<nothing>'], 'E1010:') 734599c89c8SBram Moolenaar call CheckDefFailure(['let var: list<list<nothing>>'], 'E1010:') 735599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<nothing>'], 'E1010:') 736599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<dict<nothing>>'], 'E1010:') 737599c89c8SBram Moolenaar 738599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 739599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<list<number>'], 'E1009:') 74042a480bfSBram Moolenaar 74142a480bfSBram Moolenaar call CheckDefFailure(['let var: ally'], 'E1010:') 74242a480bfSBram Moolenaar call CheckDefFailure(['let var: bram'], 'E1010:') 74342a480bfSBram Moolenaar call CheckDefFailure(['let var: cathy'], 'E1010:') 74442a480bfSBram Moolenaar call CheckDefFailure(['let var: dom'], 'E1010:') 74542a480bfSBram Moolenaar call CheckDefFailure(['let var: freddy'], 'E1010:') 74642a480bfSBram Moolenaar call CheckDefFailure(['let var: john'], 'E1010:') 74742a480bfSBram Moolenaar call CheckDefFailure(['let var: larry'], 'E1010:') 74842a480bfSBram Moolenaar call CheckDefFailure(['let var: ned'], 'E1010:') 74942a480bfSBram Moolenaar call CheckDefFailure(['let var: pam'], 'E1010:') 75042a480bfSBram Moolenaar call CheckDefFailure(['let var: sam'], 'E1010:') 75142a480bfSBram Moolenaar call CheckDefFailure(['let var: vim'], 'E1010:') 752a0a9f43aSBram Moolenaar 753a0a9f43aSBram Moolenaar call CheckDefFailure(['let Ref: number', 'Ref()'], 'E1085:') 754a0a9f43aSBram Moolenaar call CheckDefFailure(['let Ref: string', 'let res = Ref()'], 'E1085:') 7558a7d6542SBram Moolenaarendfunc 7568a7d6542SBram Moolenaar 7578a7d6542SBram Moolenaarfunc Test_const() 7588a7d6542SBram Moolenaar call CheckDefFailure(['const var = 234', 'var = 99'], 'E1018:') 7598a7d6542SBram Moolenaar call CheckDefFailure(['const one = 234', 'let one = 99'], 'E1017:') 7608a7d6542SBram Moolenaar call CheckDefFailure(['const two'], 'E1021:') 7619be61bbbSBram Moolenaar call CheckDefFailure(['const &option'], 'E996:') 7628a7d6542SBram Moolenaarendfunc 7638a7d6542SBram Moolenaar 764df069eecSBram Moolenaardef Test_range_no_colon() 765df069eecSBram Moolenaar call CheckDefFailure(['%s/a/b/'], 'E1050:') 766df069eecSBram Moolenaar call CheckDefFailure(['+ s/a/b/'], 'E1050:') 767df069eecSBram Moolenaar call CheckDefFailure(['- s/a/b/'], 'E1050:') 768df069eecSBram Moolenaar call CheckDefFailure(['. s/a/b/'], 'E1050:') 769df069eecSBram Moolenaarenddef 770df069eecSBram Moolenaar 771df069eecSBram Moolenaar 7728a7d6542SBram Moolenaardef Test_block() 7738a7d6542SBram Moolenaar let outer = 1 7748a7d6542SBram Moolenaar { 7758a7d6542SBram Moolenaar let inner = 2 7768a7d6542SBram Moolenaar assert_equal(1, outer) 7778a7d6542SBram Moolenaar assert_equal(2, inner) 7788a7d6542SBram Moolenaar } 7798a7d6542SBram Moolenaar assert_equal(1, outer) 7808a7d6542SBram Moolenaarenddef 7818a7d6542SBram Moolenaar 7828a7d6542SBram Moolenaarfunc Test_block_failure() 7838a7d6542SBram Moolenaar call CheckDefFailure(['{', 'let inner = 1', '}', 'echo inner'], 'E1001:') 784585fea7bSBram Moolenaar call CheckDefFailure(['}'], 'E1025:') 785585fea7bSBram Moolenaar call CheckDefFailure(['{', 'echo 1'], 'E1026:') 7868a7d6542SBram Moolenaarendfunc 7878a7d6542SBram Moolenaar 788d032f34aSBram Moolenaarfunc g:NoSuchFunc() 789d032f34aSBram Moolenaar echo 'none' 790d032f34aSBram Moolenaarendfunc 791d032f34aSBram Moolenaar 7928a7d6542SBram Moolenaardef Test_try_catch() 7938a7d6542SBram Moolenaar let l = [] 7947a092245SBram Moolenaar try # comment 7958a7d6542SBram Moolenaar add(l, '1') 7968a7d6542SBram Moolenaar throw 'wrong' 7978a7d6542SBram Moolenaar add(l, '2') 7987a092245SBram Moolenaar catch # comment 7998a7d6542SBram Moolenaar add(l, v:exception) 8007a092245SBram Moolenaar finally # comment 8018a7d6542SBram Moolenaar add(l, '3') 8027a092245SBram Moolenaar endtry # comment 8038a7d6542SBram Moolenaar assert_equal(['1', 'wrong', '3'], l) 80468d130c6SBram Moolenaar 805e859312eSBram Moolenaar l = [] 806e859312eSBram Moolenaar try 807e859312eSBram Moolenaar try 808e859312eSBram Moolenaar add(l, '1') 809e859312eSBram Moolenaar throw 'wrong' 810e859312eSBram Moolenaar add(l, '2') 811e859312eSBram Moolenaar catch /right/ 812e859312eSBram Moolenaar add(l, v:exception) 813e859312eSBram Moolenaar endtry 814e859312eSBram Moolenaar catch /wrong/ 815e859312eSBram Moolenaar add(l, 'caught') 816e859312eSBram Moolenaar finally 817e859312eSBram Moolenaar add(l, 'finally') 818e859312eSBram Moolenaar endtry 819e859312eSBram Moolenaar assert_equal(['1', 'caught', 'finally'], l) 820e859312eSBram Moolenaar 82168d130c6SBram Moolenaar let n: number 82268d130c6SBram Moolenaar try 82368d130c6SBram Moolenaar n = l[3] 82468d130c6SBram Moolenaar catch /E684:/ 82568d130c6SBram Moolenaar n = 99 82668d130c6SBram Moolenaar endtry 82768d130c6SBram Moolenaar assert_equal(99, n) 82868d130c6SBram Moolenaar 82968d130c6SBram Moolenaar try 830cc673e74SBram Moolenaar # string slice returns a string, not a number 83168d130c6SBram Moolenaar n = g:astring[3] 83256acb094SBram Moolenaar catch /E1029:/ 83368d130c6SBram Moolenaar n = 77 83468d130c6SBram Moolenaar endtry 83568d130c6SBram Moolenaar assert_equal(77, n) 83668d130c6SBram Moolenaar 83768d130c6SBram Moolenaar try 83868d130c6SBram Moolenaar n = l[g:astring] 83956acb094SBram Moolenaar catch /E1029:/ 84056acb094SBram Moolenaar n = 88 84168d130c6SBram Moolenaar endtry 84256acb094SBram Moolenaar assert_equal(88, n) 84368d130c6SBram Moolenaar 84468d130c6SBram Moolenaar try 84568d130c6SBram Moolenaar n = s:does_not_exist 84668d130c6SBram Moolenaar catch /E121:/ 847f0b9f43cSBram Moolenaar n = 111 848f0b9f43cSBram Moolenaar endtry 849f0b9f43cSBram Moolenaar assert_equal(111, n) 850f0b9f43cSBram Moolenaar 851f0b9f43cSBram Moolenaar try 852f0b9f43cSBram Moolenaar n = g:does_not_exist 853f0b9f43cSBram Moolenaar catch /E121:/ 85468d130c6SBram Moolenaar n = 121 85568d130c6SBram Moolenaar endtry 85668d130c6SBram Moolenaar assert_equal(121, n) 85768d130c6SBram Moolenaar 85868d130c6SBram Moolenaar let d = #{one: 1} 85968d130c6SBram Moolenaar try 86068d130c6SBram Moolenaar n = d[g:astring] 86168d130c6SBram Moolenaar catch /E716:/ 86268d130c6SBram Moolenaar n = 222 86368d130c6SBram Moolenaar endtry 86468d130c6SBram Moolenaar assert_equal(222, n) 865f0b9f43cSBram Moolenaar 866f0b9f43cSBram Moolenaar try 867f0b9f43cSBram Moolenaar n = -g:astring 868f0b9f43cSBram Moolenaar catch /E39:/ 869f0b9f43cSBram Moolenaar n = 233 870f0b9f43cSBram Moolenaar endtry 871f0b9f43cSBram Moolenaar assert_equal(233, n) 872f0b9f43cSBram Moolenaar 873f0b9f43cSBram Moolenaar try 874f0b9f43cSBram Moolenaar n = +g:astring 875f0b9f43cSBram Moolenaar catch /E1030:/ 876f0b9f43cSBram Moolenaar n = 244 877f0b9f43cSBram Moolenaar endtry 878f0b9f43cSBram Moolenaar assert_equal(244, n) 879f0b9f43cSBram Moolenaar 880f0b9f43cSBram Moolenaar try 881f0b9f43cSBram Moolenaar n = +g:alist 882f0b9f43cSBram Moolenaar catch /E745:/ 883f0b9f43cSBram Moolenaar n = 255 884f0b9f43cSBram Moolenaar endtry 885f0b9f43cSBram Moolenaar assert_equal(255, n) 886f0b9f43cSBram Moolenaar 887f0b9f43cSBram Moolenaar let nd: dict<any> 888f0b9f43cSBram Moolenaar try 889f0b9f43cSBram Moolenaar nd = {g:anumber: 1} 890f0b9f43cSBram Moolenaar catch /E1029:/ 891f0b9f43cSBram Moolenaar n = 266 892f0b9f43cSBram Moolenaar endtry 893f0b9f43cSBram Moolenaar assert_equal(266, n) 894f0b9f43cSBram Moolenaar 895f0b9f43cSBram Moolenaar try 896f0b9f43cSBram Moolenaar [n] = [1, 2, 3] 897f0b9f43cSBram Moolenaar catch /E1093:/ 898f0b9f43cSBram Moolenaar n = 277 899f0b9f43cSBram Moolenaar endtry 900f0b9f43cSBram Moolenaar assert_equal(277, n) 901f0b9f43cSBram Moolenaar 902e859312eSBram Moolenaar try 903e859312eSBram Moolenaar &ts = g:astring 904e859312eSBram Moolenaar catch /E1029:/ 905e859312eSBram Moolenaar n = 288 906e859312eSBram Moolenaar endtry 907e859312eSBram Moolenaar assert_equal(288, n) 908e859312eSBram Moolenaar 909e859312eSBram Moolenaar try 910e859312eSBram Moolenaar &backspace = 'asdf' 911e859312eSBram Moolenaar catch /E474:/ 912e859312eSBram Moolenaar n = 299 913e859312eSBram Moolenaar endtry 914e859312eSBram Moolenaar assert_equal(299, n) 915e859312eSBram Moolenaar 916e859312eSBram Moolenaar l = [1] 917e859312eSBram Moolenaar try 918e859312eSBram Moolenaar l[3] = 3 919e859312eSBram Moolenaar catch /E684:/ 920e859312eSBram Moolenaar n = 300 921e859312eSBram Moolenaar endtry 922e859312eSBram Moolenaar assert_equal(300, n) 923e859312eSBram Moolenaar 924e859312eSBram Moolenaar try 925e859312eSBram Moolenaar unlet g:does_not_exist 926e859312eSBram Moolenaar catch /E108:/ 927e859312eSBram Moolenaar n = 322 928e859312eSBram Moolenaar endtry 929e859312eSBram Moolenaar assert_equal(322, n) 930e859312eSBram Moolenaar 931e859312eSBram Moolenaar try 932e859312eSBram Moolenaar d = {'text': 1, g:astring: 2} 933e859312eSBram Moolenaar catch /E721:/ 934e859312eSBram Moolenaar n = 333 935e859312eSBram Moolenaar endtry 936e859312eSBram Moolenaar assert_equal(333, n) 937e859312eSBram Moolenaar 938e859312eSBram Moolenaar try 939e859312eSBram Moolenaar l = DeletedFunc() 940e859312eSBram Moolenaar catch /E933:/ 941e859312eSBram Moolenaar n = 344 942e859312eSBram Moolenaar endtry 943e859312eSBram Moolenaar assert_equal(344, n) 944d032f34aSBram Moolenaar 945d032f34aSBram Moolenaar try 946d032f34aSBram Moolenaar echo len(v:true) 947d032f34aSBram Moolenaar catch /E701:/ 948d032f34aSBram Moolenaar n = 355 949d032f34aSBram Moolenaar endtry 950d032f34aSBram Moolenaar assert_equal(355, n) 951d032f34aSBram Moolenaar 952d032f34aSBram Moolenaar let P = function('g:NoSuchFunc') 953d032f34aSBram Moolenaar delfunc g:NoSuchFunc 954d032f34aSBram Moolenaar try 955d032f34aSBram Moolenaar echo P() 956d032f34aSBram Moolenaar catch /E117:/ 957d032f34aSBram Moolenaar n = 366 958d032f34aSBram Moolenaar endtry 959d032f34aSBram Moolenaar assert_equal(366, n) 960d032f34aSBram Moolenaar 961d032f34aSBram Moolenaar try 962d032f34aSBram Moolenaar echo g:NoSuchFunc() 963d032f34aSBram Moolenaar catch /E117:/ 964d032f34aSBram Moolenaar n = 377 965d032f34aSBram Moolenaar endtry 966d032f34aSBram Moolenaar assert_equal(377, n) 967d032f34aSBram Moolenaar 968d032f34aSBram Moolenaar try 969d032f34aSBram Moolenaar echo g:alist + 4 970d032f34aSBram Moolenaar catch /E745:/ 971d032f34aSBram Moolenaar n = 388 972d032f34aSBram Moolenaar endtry 973d032f34aSBram Moolenaar assert_equal(388, n) 974d032f34aSBram Moolenaar 975d032f34aSBram Moolenaar try 976d032f34aSBram Moolenaar echo 4 + g:alist 977d032f34aSBram Moolenaar catch /E745:/ 978d032f34aSBram Moolenaar n = 399 979d032f34aSBram Moolenaar endtry 980d032f34aSBram Moolenaar assert_equal(399, n) 981d032f34aSBram Moolenaar 982d032f34aSBram Moolenaar try 983d032f34aSBram Moolenaar echo g:alist.member 984d032f34aSBram Moolenaar catch /E715:/ 985d032f34aSBram Moolenaar n = 400 986d032f34aSBram Moolenaar endtry 987d032f34aSBram Moolenaar assert_equal(400, n) 988d032f34aSBram Moolenaar 989d032f34aSBram Moolenaar try 990d032f34aSBram Moolenaar echo d.member 991d032f34aSBram Moolenaar catch /E716:/ 992d032f34aSBram Moolenaar n = 411 993d032f34aSBram Moolenaar endtry 994d032f34aSBram Moolenaar assert_equal(411, n) 9958a7d6542SBram Moolenaarenddef 9968a7d6542SBram Moolenaar 997e859312eSBram Moolenaardef DeletedFunc(): list<any> 998e859312eSBram Moolenaar return ['delete me'] 999e859312eSBram Moolenaarenddef 1000e859312eSBram Moolenaardefcompile 1001e859312eSBram Moolenaardelfunc DeletedFunc 1002e859312eSBram Moolenaar 1003257cc5eeSBram Moolenaardef ThrowFromDef() 1004a72cfb80SBram Moolenaar throw "getout" # comment 1005257cc5eeSBram Moolenaarenddef 1006257cc5eeSBram Moolenaar 1007257cc5eeSBram Moolenaarfunc CatchInFunc() 1008257cc5eeSBram Moolenaar try 1009257cc5eeSBram Moolenaar call ThrowFromDef() 1010257cc5eeSBram Moolenaar catch 1011257cc5eeSBram Moolenaar let g:thrown_func = v:exception 1012257cc5eeSBram Moolenaar endtry 1013257cc5eeSBram Moolenaarendfunc 1014257cc5eeSBram Moolenaar 1015257cc5eeSBram Moolenaardef CatchInDef() 1016257cc5eeSBram Moolenaar try 1017257cc5eeSBram Moolenaar ThrowFromDef() 1018257cc5eeSBram Moolenaar catch 1019257cc5eeSBram Moolenaar g:thrown_def = v:exception 1020257cc5eeSBram Moolenaar endtry 1021257cc5eeSBram Moolenaarenddef 1022257cc5eeSBram Moolenaar 1023f575adffSBram Moolenaardef ReturnFinally(): string 1024f575adffSBram Moolenaar try 1025f575adffSBram Moolenaar return 'intry' 1026f575adffSBram Moolenaar finally 1027f575adffSBram Moolenaar g:in_finally = 'finally' 1028f575adffSBram Moolenaar endtry 1029f575adffSBram Moolenaar return 'end' 1030f575adffSBram Moolenaarenddef 1031f575adffSBram Moolenaar 1032257cc5eeSBram Moolenaardef Test_try_catch_nested() 1033257cc5eeSBram Moolenaar CatchInFunc() 1034257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_func) 1035257cc5eeSBram Moolenaar 1036257cc5eeSBram Moolenaar CatchInDef() 1037257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_def) 1038f575adffSBram Moolenaar 1039f575adffSBram Moolenaar assert_equal('intry', ReturnFinally()) 1040f575adffSBram Moolenaar assert_equal('finally', g:in_finally) 1041f575adffSBram Moolenaarenddef 1042f575adffSBram Moolenaar 1043f575adffSBram Moolenaardef Test_try_catch_match() 1044f575adffSBram Moolenaar let seq = 'a' 1045f575adffSBram Moolenaar try 1046f575adffSBram Moolenaar throw 'something' 1047f575adffSBram Moolenaar catch /nothing/ 1048f575adffSBram Moolenaar seq ..= 'x' 1049f575adffSBram Moolenaar catch /some/ 1050f575adffSBram Moolenaar seq ..= 'b' 1051f575adffSBram Moolenaar catch /asdf/ 1052f575adffSBram Moolenaar seq ..= 'x' 1053e8c4abbbSBram Moolenaar catch ?a\?sdf? 1054e8c4abbbSBram Moolenaar seq ..= 'y' 1055f575adffSBram Moolenaar finally 1056f575adffSBram Moolenaar seq ..= 'c' 1057f575adffSBram Moolenaar endtry 1058f575adffSBram Moolenaar assert_equal('abc', seq) 1059257cc5eeSBram Moolenaarenddef 1060257cc5eeSBram Moolenaar 1061e8c4abbbSBram Moolenaardef Test_try_catch_fails() 1062e8c4abbbSBram Moolenaar call CheckDefFailure(['catch'], 'E603:') 1063e8c4abbbSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'catch', 'catch'], 'E1033:') 1064e8c4abbbSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'catch /pat'], 'E1067:') 1065585fea7bSBram Moolenaar call CheckDefFailure(['finally'], 'E606:') 1066585fea7bSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'finally', 'echo 1', 'finally'], 'E607:') 1067585fea7bSBram Moolenaar call CheckDefFailure(['endtry'], 'E602:') 1068585fea7bSBram Moolenaar call CheckDefFailure(['while 1', 'endtry'], 'E170:') 1069585fea7bSBram Moolenaar call CheckDefFailure(['for i in range(5)', 'endtry'], 'E170:') 1070585fea7bSBram Moolenaar call CheckDefFailure(['if 2', 'endtry'], 'E171:') 1071585fea7bSBram Moolenaar call CheckDefFailure(['try', 'echo 1', 'endtry'], 'E1032:') 1072585fea7bSBram Moolenaar 1073a72cfb80SBram Moolenaar call CheckDefFailure(['throw'], 'E1015:') 1074585fea7bSBram Moolenaar call CheckDefFailure(['throw xxx'], 'E1001:') 1075e8c4abbbSBram Moolenaarenddef 1076e8c4abbbSBram Moolenaar 1077006ad48bSBram Moolenaardef Test_throw_vimscript() 1078f5be8cdbSBram Moolenaar # only checks line continuation 1079006ad48bSBram Moolenaar let lines =<< trim END 1080006ad48bSBram Moolenaar vim9script 1081006ad48bSBram Moolenaar try 1082006ad48bSBram Moolenaar throw 'one' 1083006ad48bSBram Moolenaar .. 'two' 1084006ad48bSBram Moolenaar catch 1085006ad48bSBram Moolenaar assert_equal('onetwo', v:exception) 1086006ad48bSBram Moolenaar endtry 1087006ad48bSBram Moolenaar END 1088006ad48bSBram Moolenaar CheckScriptSuccess(lines) 1089006ad48bSBram Moolenaarenddef 1090006ad48bSBram Moolenaar 1091ed677f55SBram Moolenaardef Test_error_in_nested_function() 1092ed677f55SBram Moolenaar # an error in a nested :function aborts executin in the calling :def function 1093ed677f55SBram Moolenaar let lines =<< trim END 1094ed677f55SBram Moolenaar vim9script 1095ed677f55SBram Moolenaar def Func() 1096ed677f55SBram Moolenaar Error() 1097ed677f55SBram Moolenaar g:test_var = 1 1098ed677f55SBram Moolenaar enddef 1099ed677f55SBram Moolenaar func Error() abort 1100ed677f55SBram Moolenaar eval [][0] 1101ed677f55SBram Moolenaar endfunc 1102ed677f55SBram Moolenaar Func() 1103ed677f55SBram Moolenaar END 1104ed677f55SBram Moolenaar g:test_var = 0 1105ed677f55SBram Moolenaar CheckScriptFailure(lines, 'E684:') 1106ed677f55SBram Moolenaar assert_equal(0, g:test_var) 1107ed677f55SBram Moolenaarenddef 1108ed677f55SBram Moolenaar 110937c83711SBram Moolenaardef Test_cexpr_vimscript() 1110f5be8cdbSBram Moolenaar # only checks line continuation 111137c83711SBram Moolenaar set errorformat=File\ %f\ line\ %l 111237c83711SBram Moolenaar let lines =<< trim END 111337c83711SBram Moolenaar vim9script 111437c83711SBram Moolenaar cexpr 'File' 111537c83711SBram Moolenaar .. ' someFile' .. 111637c83711SBram Moolenaar ' line 19' 111737c83711SBram Moolenaar assert_equal(19, getqflist()[0].lnum) 111837c83711SBram Moolenaar END 111937c83711SBram Moolenaar CheckScriptSuccess(lines) 112037c83711SBram Moolenaar set errorformat& 112137c83711SBram Moolenaarenddef 112237c83711SBram Moolenaar 1123c9edd6b5SBram Moolenaardef Test_statusline_syntax() 1124c9edd6b5SBram Moolenaar # legacy syntax is used for 'statusline' 1125c9edd6b5SBram Moolenaar let lines =<< trim END 1126c9edd6b5SBram Moolenaar vim9script 1127c9edd6b5SBram Moolenaar func g:Status() 1128c9edd6b5SBram Moolenaar return '%{"x" is# "x"}' 1129c9edd6b5SBram Moolenaar endfunc 1130c9edd6b5SBram Moolenaar set laststatus=2 statusline=%!Status() 1131c9edd6b5SBram Moolenaar redrawstatus 1132c9edd6b5SBram Moolenaar set laststatus statusline= 1133c9edd6b5SBram Moolenaar END 1134c9edd6b5SBram Moolenaar CheckScriptSuccess(lines) 1135c9edd6b5SBram Moolenaarenddef 1136c9edd6b5SBram Moolenaar 1137b209750bSBram Moolenaardef Test_list_vimscript() 1138b209750bSBram Moolenaar # checks line continuation and comments 1139b209750bSBram Moolenaar let lines =<< trim END 1140b209750bSBram Moolenaar vim9script 1141b209750bSBram Moolenaar let mylist = [ 1142b209750bSBram Moolenaar 'one', 1143b209750bSBram Moolenaar # comment 1144b209750bSBram Moolenaar 'two', # empty line follows 1145b209750bSBram Moolenaar 1146b209750bSBram Moolenaar 'three', 1147b209750bSBram Moolenaar ] 1148b209750bSBram Moolenaar assert_equal(['one', 'two', 'three'], mylist) 1149b209750bSBram Moolenaar END 1150b209750bSBram Moolenaar CheckScriptSuccess(lines) 115166250c93SBram Moolenaar 115266250c93SBram Moolenaar # check all lines from heredoc are kept 115366250c93SBram Moolenaar lines =<< trim END 115466250c93SBram Moolenaar # comment 1 115566250c93SBram Moolenaar two 115666250c93SBram Moolenaar # comment 3 115766250c93SBram Moolenaar 115866250c93SBram Moolenaar five 115966250c93SBram Moolenaar # comment 6 116066250c93SBram Moolenaar END 116166250c93SBram Moolenaar assert_equal(['# comment 1', 'two', '# comment 3', '', 'five', '# comment 6'], lines) 1162b209750bSBram Moolenaarenddef 1163b209750bSBram Moolenaar 11642a1381c3SBram Moolenaarif has('channel') 116540ee466cSBram Moolenaar let someJob = test_null_job() 116640ee466cSBram Moolenaar 116740ee466cSBram Moolenaar def FuncWithError() 116840ee466cSBram Moolenaar echomsg g:someJob 116940ee466cSBram Moolenaar enddef 117040ee466cSBram Moolenaar 117140ee466cSBram Moolenaar func Test_convert_emsg_to_exception() 117240ee466cSBram Moolenaar try 117340ee466cSBram Moolenaar call FuncWithError() 117440ee466cSBram Moolenaar catch 117540ee466cSBram Moolenaar call assert_match('Vim:E908:', v:exception) 117640ee466cSBram Moolenaar endtry 117740ee466cSBram Moolenaar endfunc 11782a1381c3SBram Moolenaarendif 117940ee466cSBram Moolenaar 11808a7d6542SBram Moolenaarlet s:export_script_lines =<< trim END 11818a7d6542SBram Moolenaar vim9script 11828a7d6542SBram Moolenaar let name: string = 'bob' 11838a7d6542SBram Moolenaar def Concat(arg: string): string 11848a7d6542SBram Moolenaar return name .. arg 11858a7d6542SBram Moolenaar enddef 1186227a69deSBram Moolenaar g:result = Concat('bie') 1187227a69deSBram Moolenaar g:localname = name 11888a7d6542SBram Moolenaar 11898a7d6542SBram Moolenaar export const CONST = 1234 11908a7d6542SBram Moolenaar export let exported = 9876 11916e587dcbSBram Moolenaar export let exp_name = 'John' 11928a7d6542SBram Moolenaar export def Exported(): string 11938a7d6542SBram Moolenaar return 'Exported' 11948a7d6542SBram Moolenaar enddef 11958a7d6542SBram MoolenaarEND 11968a7d6542SBram Moolenaar 1197b3ca9824SBram Moolenaardef Undo_export_script_lines() 1198b3ca9824SBram Moolenaar unlet g:result 1199b3ca9824SBram Moolenaar unlet g:localname 1200b3ca9824SBram Moolenaarenddef 1201b3ca9824SBram Moolenaar 12025269bd2aSBram Moolenaardef Test_vim9_import_export() 12038a7d6542SBram Moolenaar let import_script_lines =<< trim END 12048a7d6542SBram Moolenaar vim9script 12058a7d6542SBram Moolenaar import {exported, Exported} from './Xexport.vim' 12068a7d6542SBram Moolenaar g:imported = exported 12076e587dcbSBram Moolenaar exported += 3 12086e587dcbSBram Moolenaar g:imported_added = exported 12098a7d6542SBram Moolenaar g:imported_func = Exported() 12106e587dcbSBram Moolenaar 121140f4f7a4SBram Moolenaar def GetExported(): string 121240f4f7a4SBram Moolenaar let local_dict = #{ref: Exported} 121340f4f7a4SBram Moolenaar return local_dict.ref() 121440f4f7a4SBram Moolenaar enddef 121540f4f7a4SBram Moolenaar g:funcref_result = GetExported() 121640f4f7a4SBram Moolenaar 12176e587dcbSBram Moolenaar import {exp_name} from './Xexport.vim' 12186e587dcbSBram Moolenaar g:imported_name = exp_name 12196e587dcbSBram Moolenaar exp_name ..= ' Doe' 12206e587dcbSBram Moolenaar g:imported_name_appended = exp_name 12215381c7a1SBram Moolenaar g:imported_later = exported 12228a7d6542SBram Moolenaar END 12238a7d6542SBram Moolenaar 12248a7d6542SBram Moolenaar writefile(import_script_lines, 'Ximport.vim') 12258a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport.vim') 12268a7d6542SBram Moolenaar 12278a7d6542SBram Moolenaar source Ximport.vim 12288a7d6542SBram Moolenaar 12298a7d6542SBram Moolenaar assert_equal('bobbie', g:result) 12308a7d6542SBram Moolenaar assert_equal('bob', g:localname) 12318a7d6542SBram Moolenaar assert_equal(9876, g:imported) 12326e587dcbSBram Moolenaar assert_equal(9879, g:imported_added) 12335381c7a1SBram Moolenaar assert_equal(9879, g:imported_later) 12348a7d6542SBram Moolenaar assert_equal('Exported', g:imported_func) 123540f4f7a4SBram Moolenaar assert_equal('Exported', g:funcref_result) 12366e587dcbSBram Moolenaar assert_equal('John', g:imported_name) 12376e587dcbSBram Moolenaar assert_equal('John Doe', g:imported_name_appended) 12388a7d6542SBram Moolenaar assert_false(exists('g:name')) 12398a7d6542SBram Moolenaar 1240b3ca9824SBram Moolenaar Undo_export_script_lines() 12418a7d6542SBram Moolenaar unlet g:imported 12426e587dcbSBram Moolenaar unlet g:imported_added 12435381c7a1SBram Moolenaar unlet g:imported_later 12448a7d6542SBram Moolenaar unlet g:imported_func 12456e587dcbSBram Moolenaar unlet g:imported_name g:imported_name_appended 12468a7d6542SBram Moolenaar delete('Ximport.vim') 1247f2d5c240SBram Moolenaar 12481c991144SBram Moolenaar # similar, with line breaks 12491c991144SBram Moolenaar let import_line_break_script_lines =<< trim END 12501c991144SBram Moolenaar vim9script 12511c991144SBram Moolenaar import { 12521c991144SBram Moolenaar exported, 12531c991144SBram Moolenaar Exported, 12541c991144SBram Moolenaar } 12551c991144SBram Moolenaar from 12561c991144SBram Moolenaar './Xexport.vim' 12571c991144SBram Moolenaar g:imported = exported 12581c991144SBram Moolenaar exported += 5 12591c991144SBram Moolenaar g:imported_added = exported 12601c991144SBram Moolenaar g:imported_func = Exported() 12611c991144SBram Moolenaar END 12621c991144SBram Moolenaar writefile(import_line_break_script_lines, 'Ximport_lbr.vim') 12631c991144SBram Moolenaar source Ximport_lbr.vim 12641c991144SBram Moolenaar 12651c991144SBram Moolenaar assert_equal(9876, g:imported) 12661c991144SBram Moolenaar assert_equal(9881, g:imported_added) 12671c991144SBram Moolenaar assert_equal('Exported', g:imported_func) 12681c991144SBram Moolenaar 12691c991144SBram Moolenaar # exported script not sourced again 12701c991144SBram Moolenaar assert_false(exists('g:result')) 12711c991144SBram Moolenaar unlet g:imported 12721c991144SBram Moolenaar unlet g:imported_added 12731c991144SBram Moolenaar unlet g:imported_func 12741c991144SBram Moolenaar delete('Ximport_lbr.vim') 12751c991144SBram Moolenaar 12761c991144SBram Moolenaar # import inside :def function 12775381c7a1SBram Moolenaar let import_in_def_lines =<< trim END 12785381c7a1SBram Moolenaar vim9script 12795381c7a1SBram Moolenaar def ImportInDef() 12805381c7a1SBram Moolenaar import exported from './Xexport.vim' 12815381c7a1SBram Moolenaar g:imported = exported 12825381c7a1SBram Moolenaar exported += 7 12835381c7a1SBram Moolenaar g:imported_added = exported 12845381c7a1SBram Moolenaar enddef 12855381c7a1SBram Moolenaar ImportInDef() 12865381c7a1SBram Moolenaar END 12875381c7a1SBram Moolenaar writefile(import_in_def_lines, 'Ximport2.vim') 12885381c7a1SBram Moolenaar source Ximport2.vim 1289f5be8cdbSBram Moolenaar # TODO: this should be 9879 12905381c7a1SBram Moolenaar assert_equal(9876, g:imported) 12915381c7a1SBram Moolenaar assert_equal(9883, g:imported_added) 12925381c7a1SBram Moolenaar unlet g:imported 12935381c7a1SBram Moolenaar unlet g:imported_added 12945381c7a1SBram Moolenaar delete('Ximport2.vim') 12955381c7a1SBram Moolenaar 1296f2d5c240SBram Moolenaar let import_star_as_lines =<< trim END 1297f2d5c240SBram Moolenaar vim9script 1298f2d5c240SBram Moolenaar import * as Export from './Xexport.vim' 1299f2d5c240SBram Moolenaar def UseExport() 1300f2d5c240SBram Moolenaar g:imported = Export.exported 1301f2d5c240SBram Moolenaar enddef 1302f2d5c240SBram Moolenaar UseExport() 1303f2d5c240SBram Moolenaar END 1304f2d5c240SBram Moolenaar writefile(import_star_as_lines, 'Ximport.vim') 1305f2d5c240SBram Moolenaar source Ximport.vim 13065381c7a1SBram Moolenaar assert_equal(9883, g:imported) 1307f2d5c240SBram Moolenaar 1308599c89c8SBram Moolenaar let import_star_as_lines_no_dot =<< trim END 1309599c89c8SBram Moolenaar vim9script 1310599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 1311599c89c8SBram Moolenaar def Func() 1312599c89c8SBram Moolenaar let dummy = 1 1313599c89c8SBram Moolenaar let imported = Export + dummy 1314599c89c8SBram Moolenaar enddef 1315822ba247SBram Moolenaar defcompile 1316599c89c8SBram Moolenaar END 1317599c89c8SBram Moolenaar writefile(import_star_as_lines_no_dot, 'Ximport.vim') 1318599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1060:') 1319599c89c8SBram Moolenaar 1320599c89c8SBram Moolenaar let import_star_as_lines_dot_space =<< trim END 1321599c89c8SBram Moolenaar vim9script 1322599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 1323599c89c8SBram Moolenaar def Func() 1324599c89c8SBram Moolenaar let imported = Export . exported 1325599c89c8SBram Moolenaar enddef 1326822ba247SBram Moolenaar defcompile 1327599c89c8SBram Moolenaar END 1328599c89c8SBram Moolenaar writefile(import_star_as_lines_dot_space, 'Ximport.vim') 1329599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1074:') 1330599c89c8SBram Moolenaar 1331599c89c8SBram Moolenaar let import_star_as_lines_missing_name =<< trim END 1332599c89c8SBram Moolenaar vim9script 1333599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 1334599c89c8SBram Moolenaar def Func() 1335599c89c8SBram Moolenaar let imported = Export. 1336599c89c8SBram Moolenaar enddef 1337822ba247SBram Moolenaar defcompile 1338599c89c8SBram Moolenaar END 1339599c89c8SBram Moolenaar writefile(import_star_as_lines_missing_name, 'Ximport.vim') 1340599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 1341599c89c8SBram Moolenaar 13421c991144SBram Moolenaar let import_star_as_lbr_lines =<< trim END 13431c991144SBram Moolenaar vim9script 13441c991144SBram Moolenaar import * 13451c991144SBram Moolenaar as Export 13461c991144SBram Moolenaar from 13471c991144SBram Moolenaar './Xexport.vim' 13481c991144SBram Moolenaar def UseExport() 13491c991144SBram Moolenaar g:imported = Export.exported 13501c991144SBram Moolenaar enddef 13511c991144SBram Moolenaar UseExport() 13521c991144SBram Moolenaar END 13531c991144SBram Moolenaar writefile(import_star_as_lbr_lines, 'Ximport.vim') 13541c991144SBram Moolenaar source Ximport.vim 13551c991144SBram Moolenaar assert_equal(9883, g:imported) 13561c991144SBram Moolenaar 1357f2d5c240SBram Moolenaar let import_star_lines =<< trim END 1358f2d5c240SBram Moolenaar vim9script 1359f2d5c240SBram Moolenaar import * from './Xexport.vim' 1360f2d5c240SBram Moolenaar END 1361f2d5c240SBram Moolenaar writefile(import_star_lines, 'Ximport.vim') 1362f2d5c240SBram Moolenaar assert_fails('source Ximport.vim', 'E1045:') 1363f2d5c240SBram Moolenaar 1364f5be8cdbSBram Moolenaar # try to import something that exists but is not exported 1365fa29c8abSBram Moolenaar let import_not_exported_lines =<< trim END 1366fa29c8abSBram Moolenaar vim9script 1367fa29c8abSBram Moolenaar import name from './Xexport.vim' 1368fa29c8abSBram Moolenaar END 1369fa29c8abSBram Moolenaar writefile(import_not_exported_lines, 'Ximport.vim') 1370fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1049:') 1371fa29c8abSBram Moolenaar 1372f5be8cdbSBram Moolenaar # try to import something that is already defined 13735269bd2aSBram Moolenaar let import_already_defined =<< trim END 13745269bd2aSBram Moolenaar vim9script 13755269bd2aSBram Moolenaar let exported = 'something' 13765269bd2aSBram Moolenaar import exported from './Xexport.vim' 13775269bd2aSBram Moolenaar END 13785269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 13795269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 13805269bd2aSBram Moolenaar 1381f5be8cdbSBram Moolenaar # try to import something that is already defined 13825269bd2aSBram Moolenaar import_already_defined =<< trim END 13835269bd2aSBram Moolenaar vim9script 13845269bd2aSBram Moolenaar let exported = 'something' 13855269bd2aSBram Moolenaar import * as exported from './Xexport.vim' 13865269bd2aSBram Moolenaar END 13875269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 13885269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 13895269bd2aSBram Moolenaar 1390f5be8cdbSBram Moolenaar # try to import something that is already defined 13915269bd2aSBram Moolenaar import_already_defined =<< trim END 13925269bd2aSBram Moolenaar vim9script 13935269bd2aSBram Moolenaar let exported = 'something' 13945269bd2aSBram Moolenaar import {exported} from './Xexport.vim' 13955269bd2aSBram Moolenaar END 13965269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 13975269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 13985269bd2aSBram Moolenaar 1399f5be8cdbSBram Moolenaar # import a very long name, requires making a copy 1400fa29c8abSBram Moolenaar let import_long_name_lines =<< trim END 1401fa29c8abSBram Moolenaar vim9script 1402fa29c8abSBram Moolenaar import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim' 1403fa29c8abSBram Moolenaar END 1404fa29c8abSBram Moolenaar writefile(import_long_name_lines, 'Ximport.vim') 1405fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 1406fa29c8abSBram Moolenaar 1407fa29c8abSBram Moolenaar let import_no_from_lines =<< trim END 1408fa29c8abSBram Moolenaar vim9script 1409fa29c8abSBram Moolenaar import name './Xexport.vim' 1410fa29c8abSBram Moolenaar END 1411fa29c8abSBram Moolenaar writefile(import_no_from_lines, 'Ximport.vim') 1412fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1070:') 1413fa29c8abSBram Moolenaar 1414fa29c8abSBram Moolenaar let import_invalid_string_lines =<< trim END 1415fa29c8abSBram Moolenaar vim9script 1416fa29c8abSBram Moolenaar import name from Xexport.vim 1417fa29c8abSBram Moolenaar END 1418fa29c8abSBram Moolenaar writefile(import_invalid_string_lines, 'Ximport.vim') 1419fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1071:') 1420fa29c8abSBram Moolenaar 1421fa29c8abSBram Moolenaar let import_wrong_name_lines =<< trim END 1422fa29c8abSBram Moolenaar vim9script 1423fa29c8abSBram Moolenaar import name from './XnoExport.vim' 1424fa29c8abSBram Moolenaar END 1425fa29c8abSBram Moolenaar writefile(import_wrong_name_lines, 'Ximport.vim') 1426fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1053:') 1427fa29c8abSBram Moolenaar 1428fa29c8abSBram Moolenaar let import_missing_comma_lines =<< trim END 1429fa29c8abSBram Moolenaar vim9script 1430fa29c8abSBram Moolenaar import {exported name} from './Xexport.vim' 1431fa29c8abSBram Moolenaar END 14325269bd2aSBram Moolenaar writefile(import_missing_comma_lines, 'Ximport3.vim') 14335269bd2aSBram Moolenaar assert_fails('source Ximport3.vim', 'E1046:') 1434fa29c8abSBram Moolenaar 1435f2d5c240SBram Moolenaar delete('Ximport.vim') 14365269bd2aSBram Moolenaar delete('Ximport3.vim') 14378a7d6542SBram Moolenaar delete('Xexport.vim') 14388a7d6542SBram Moolenaar 1439f5be8cdbSBram Moolenaar # Check that in a Vim9 script 'cpo' is set to the Vim default. 1440750802b5SBram Moolenaar set cpo&vi 1441750802b5SBram Moolenaar let cpo_before = &cpo 1442750802b5SBram Moolenaar let lines =<< trim END 1443750802b5SBram Moolenaar vim9script 1444750802b5SBram Moolenaar g:cpo_in_vim9script = &cpo 1445750802b5SBram Moolenaar END 1446750802b5SBram Moolenaar writefile(lines, 'Xvim9_script') 1447750802b5SBram Moolenaar source Xvim9_script 1448750802b5SBram Moolenaar assert_equal(cpo_before, &cpo) 1449750802b5SBram Moolenaar set cpo&vim 1450750802b5SBram Moolenaar assert_equal(&cpo, g:cpo_in_vim9script) 1451750802b5SBram Moolenaar delete('Xvim9_script') 1452750802b5SBram Moolenaarenddef 1453750802b5SBram Moolenaar 1454803af686SBram Moolenaarfunc g:Trigger() 1455803af686SBram Moolenaar source Ximport.vim 1456803af686SBram Moolenaar return "echo 'yes'\<CR>" 1457803af686SBram Moolenaarendfunc 1458803af686SBram Moolenaar 1459803af686SBram Moolenaardef Test_import_export_expr_map() 1460803af686SBram Moolenaar # check that :import and :export work when buffer is locked 1461803af686SBram Moolenaar let export_lines =<< trim END 1462803af686SBram Moolenaar vim9script 1463803af686SBram Moolenaar export def That(): string 1464803af686SBram Moolenaar return 'yes' 1465803af686SBram Moolenaar enddef 1466803af686SBram Moolenaar END 1467803af686SBram Moolenaar writefile(export_lines, 'Xexport_that.vim') 1468803af686SBram Moolenaar 1469803af686SBram Moolenaar let import_lines =<< trim END 1470803af686SBram Moolenaar vim9script 1471803af686SBram Moolenaar import That from './Xexport_that.vim' 1472803af686SBram Moolenaar assert_equal('yes', That()) 1473803af686SBram Moolenaar END 1474803af686SBram Moolenaar writefile(import_lines, 'Ximport.vim') 1475803af686SBram Moolenaar 1476803af686SBram Moolenaar nnoremap <expr> trigger g:Trigger() 1477803af686SBram Moolenaar feedkeys('trigger', "xt") 1478803af686SBram Moolenaar 1479730b2483SBram Moolenaar delete('Xexport_that.vim') 1480803af686SBram Moolenaar delete('Ximport.vim') 1481803af686SBram Moolenaar nunmap trigger 1482803af686SBram Moolenaarenddef 1483803af686SBram Moolenaar 14848e1986e3SBram Moolenaardef Test_import_in_filetype() 14858e1986e3SBram Moolenaar # check that :import works when the buffer is locked 14868e1986e3SBram Moolenaar mkdir('ftplugin', 'p') 14878e1986e3SBram Moolenaar let export_lines =<< trim END 14888e1986e3SBram Moolenaar vim9script 14898e1986e3SBram Moolenaar export let That = 'yes' 14908e1986e3SBram Moolenaar END 1491730b2483SBram Moolenaar writefile(export_lines, 'ftplugin/Xexport_ft.vim') 14928e1986e3SBram Moolenaar 14938e1986e3SBram Moolenaar let import_lines =<< trim END 14948e1986e3SBram Moolenaar vim9script 1495730b2483SBram Moolenaar import That from './Xexport_ft.vim' 14968e1986e3SBram Moolenaar assert_equal('yes', That) 14978e1986e3SBram Moolenaar g:did_load_mytpe = 1 14988e1986e3SBram Moolenaar END 14998e1986e3SBram Moolenaar writefile(import_lines, 'ftplugin/qf.vim') 15008e1986e3SBram Moolenaar 15018e1986e3SBram Moolenaar let save_rtp = &rtp 15028e1986e3SBram Moolenaar &rtp = getcwd() .. ',' .. &rtp 15038e1986e3SBram Moolenaar 15048e1986e3SBram Moolenaar filetype plugin on 15058e1986e3SBram Moolenaar copen 15068e1986e3SBram Moolenaar assert_equal(1, g:did_load_mytpe) 15078e1986e3SBram Moolenaar 15088e1986e3SBram Moolenaar quit! 1509730b2483SBram Moolenaar delete('Xexport_ft.vim') 15108e1986e3SBram Moolenaar delete('ftplugin', 'rf') 15118e1986e3SBram Moolenaar &rtp = save_rtp 15128e1986e3SBram Moolenaarenddef 15138e1986e3SBram Moolenaar 1514efa94447SBram Moolenaardef Test_use_import_in_mapping() 1515efa94447SBram Moolenaar let lines =<< trim END 1516efa94447SBram Moolenaar vim9script 1517efa94447SBram Moolenaar export def Funcx() 1518efa94447SBram Moolenaar g:result = 42 1519efa94447SBram Moolenaar enddef 1520efa94447SBram Moolenaar END 1521efa94447SBram Moolenaar writefile(lines, 'XsomeExport.vim') 1522efa94447SBram Moolenaar lines =<< trim END 1523efa94447SBram Moolenaar vim9script 1524efa94447SBram Moolenaar import Funcx from './XsomeExport.vim' 1525b3ca9824SBram Moolenaar nnoremap <F3> :call <sid>Funcx()<cr> 1526efa94447SBram Moolenaar END 1527efa94447SBram Moolenaar writefile(lines, 'Xmapscript.vim') 1528efa94447SBram Moolenaar 1529efa94447SBram Moolenaar source Xmapscript.vim 1530b3ca9824SBram Moolenaar feedkeys("\<F3>", "xt") 1531efa94447SBram Moolenaar assert_equal(42, g:result) 1532efa94447SBram Moolenaar 1533efa94447SBram Moolenaar unlet g:result 1534efa94447SBram Moolenaar delete('XsomeExport.vim') 1535efa94447SBram Moolenaar delete('Xmapscript.vim') 1536b3ca9824SBram Moolenaar nunmap <F3> 1537efa94447SBram Moolenaarenddef 1538efa94447SBram Moolenaar 1539750802b5SBram Moolenaardef Test_vim9script_fails() 15408a7d6542SBram Moolenaar CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:') 15418a7d6542SBram Moolenaar CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:') 1542750802b5SBram Moolenaar CheckScriptFailure(['export let some = 123'], 'E1042:') 15439721fb4eSBram Moolenaar CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1048:') 15449b7bf9e9SBram Moolenaar CheckScriptFailure(['vim9script', 'export let g:some'], 'E1022:') 1545750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:') 1546750802b5SBram Moolenaar 1547451c2e35SBram Moolenaar CheckScriptFailure(['vim9script', 'let str: string', 'str = 1234'], 'E1012:') 1548c785b9a7SBram Moolenaar CheckScriptFailure(['vim9script', 'const str = "asdf"', 'str = "xxx"'], 'E46:') 1549c785b9a7SBram Moolenaar 1550750802b5SBram Moolenaar assert_fails('vim9script', 'E1038') 1551a26b9700SBram Moolenaar assert_fails('export something', 'E1043') 15528a7d6542SBram Moolenaarenddef 15538a7d6542SBram Moolenaar 1554f7d267efSBram Moolenaarfunc Test_import_fails_without_script() 1555101f4810SBram Moolenaar CheckRunVimInTerminal 1556101f4810SBram Moolenaar 15579bb3eb3eSBram Moolenaar " call indirectly to avoid compilation error for missing functions 1558c620c055SBram Moolenaar call Run_Test_import_fails_on_command_line() 15599bb3eb3eSBram Moolenaarendfunc 15609bb3eb3eSBram Moolenaar 1561c620c055SBram Moolenaardef Run_Test_import_fails_on_command_line() 1562101f4810SBram Moolenaar let export =<< trim END 1563101f4810SBram Moolenaar vim9script 1564101f4810SBram Moolenaar export def Foo(): number 1565101f4810SBram Moolenaar return 0 1566101f4810SBram Moolenaar enddef 1567101f4810SBram Moolenaar END 1568730b2483SBram Moolenaar writefile(export, 'XexportCmd.vim') 1569101f4810SBram Moolenaar 1570730b2483SBram Moolenaar let buf = RunVimInTerminal('-c "import Foo from ''./XexportCmd.vim''"', #{ 15719bb3eb3eSBram Moolenaar rows: 6, wait_for_ruler: 0}) 15729bb3eb3eSBram Moolenaar WaitForAssert({-> assert_match('^E1094:', term_getline(buf, 5))}) 1573101f4810SBram Moolenaar 1574730b2483SBram Moolenaar delete('XexportCmd.vim') 15759bb3eb3eSBram Moolenaar StopVimInTerminal(buf) 15769bb3eb3eSBram Moolenaarenddef 1577101f4810SBram Moolenaar 15784c17ad94SBram Moolenaardef Test_vim9script_reload_import() 15798a7d6542SBram Moolenaar let lines =<< trim END 15808a7d6542SBram Moolenaar vim9script 15818a7d6542SBram Moolenaar const var = '' 15828a7d6542SBram Moolenaar let valone = 1234 15838a7d6542SBram Moolenaar def MyFunc(arg: string) 15848a7d6542SBram Moolenaar valone = 5678 15858a7d6542SBram Moolenaar enddef 15868a7d6542SBram Moolenaar END 15878a7d6542SBram Moolenaar let morelines =<< trim END 15888a7d6542SBram Moolenaar let valtwo = 222 15898a7d6542SBram Moolenaar export def GetValtwo(): number 15908a7d6542SBram Moolenaar return valtwo 15918a7d6542SBram Moolenaar enddef 15928a7d6542SBram Moolenaar END 159303afdcf1SBram Moolenaar writefile(lines + morelines, 'Xreload.vim') 15948a7d6542SBram Moolenaar source Xreload.vim 15958a7d6542SBram Moolenaar source Xreload.vim 15968a7d6542SBram Moolenaar source Xreload.vim 15978a7d6542SBram Moolenaar 15988a7d6542SBram Moolenaar let testlines =<< trim END 15998a7d6542SBram Moolenaar vim9script 16008a7d6542SBram Moolenaar def TheFunc() 16018a7d6542SBram Moolenaar import GetValtwo from './Xreload.vim' 16028a7d6542SBram Moolenaar assert_equal(222, GetValtwo()) 16038a7d6542SBram Moolenaar enddef 16048a7d6542SBram Moolenaar TheFunc() 16058a7d6542SBram Moolenaar END 16068a7d6542SBram Moolenaar writefile(testlines, 'Ximport.vim') 16078a7d6542SBram Moolenaar source Ximport.vim 16088a7d6542SBram Moolenaar 1609f5be8cdbSBram Moolenaar # Test that when not using "morelines" GetValtwo() and valtwo are still 1610f5be8cdbSBram Moolenaar # defined, because import doesn't reload a script. 16118a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 16128a7d6542SBram Moolenaar source Ximport.vim 16138a7d6542SBram Moolenaar 1614f5be8cdbSBram Moolenaar # cannot declare a var twice 16158a7d6542SBram Moolenaar lines =<< trim END 16168a7d6542SBram Moolenaar vim9script 16178a7d6542SBram Moolenaar let valone = 1234 16188a7d6542SBram Moolenaar let valone = 5678 16198a7d6542SBram Moolenaar END 16208a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 16218a7d6542SBram Moolenaar assert_fails('source Xreload.vim', 'E1041:') 16228a7d6542SBram Moolenaar 16238a7d6542SBram Moolenaar delete('Xreload.vim') 16248a7d6542SBram Moolenaar delete('Ximport.vim') 16258a7d6542SBram Moolenaarenddef 16268a7d6542SBram Moolenaar 1627fe465a01SBram Moolenaar" Not exported function that is referenced needs to be accessed by the 1628fe465a01SBram Moolenaar" script-local name. 1629fe465a01SBram Moolenaardef Test_vim9script_funcref() 1630fe465a01SBram Moolenaar let sortlines =<< trim END 1631fe465a01SBram Moolenaar vim9script 1632fe465a01SBram Moolenaar def Compare(i1: number, i2: number): number 1633bed36b93SBram Moolenaar return i2 - i1 1634fe465a01SBram Moolenaar enddef 1635fe465a01SBram Moolenaar 1636fe465a01SBram Moolenaar export def FastSort(): list<number> 1637fe465a01SBram Moolenaar return range(5)->sort(Compare) 1638fe465a01SBram Moolenaar enddef 1639fe465a01SBram Moolenaar END 1640fe465a01SBram Moolenaar writefile(sortlines, 'Xsort.vim') 1641fe465a01SBram Moolenaar 1642fe465a01SBram Moolenaar let lines =<< trim END 1643fe465a01SBram Moolenaar vim9script 1644fe465a01SBram Moolenaar import FastSort from './Xsort.vim' 1645fe465a01SBram Moolenaar def Test() 1646fe465a01SBram Moolenaar g:result = FastSort() 1647fe465a01SBram Moolenaar enddef 1648fe465a01SBram Moolenaar Test() 1649fe465a01SBram Moolenaar END 1650fe465a01SBram Moolenaar writefile(lines, 'Xscript.vim') 1651fe465a01SBram Moolenaar 1652fe465a01SBram Moolenaar source Xscript.vim 1653fe465a01SBram Moolenaar assert_equal([4, 3, 2, 1, 0], g:result) 1654fe465a01SBram Moolenaar 1655fe465a01SBram Moolenaar unlet g:result 1656fe465a01SBram Moolenaar delete('Xsort.vim') 1657fe465a01SBram Moolenaar delete('Xscript.vim') 1658fe465a01SBram Moolenaarenddef 1659fe465a01SBram Moolenaar 1660c620c055SBram Moolenaar" Check that when searcing for "FilterFunc" it doesn't find the import in the 1661c620c055SBram Moolenaar" script where FastFilter() is called from. 1662c620c055SBram Moolenaardef Test_vim9script_funcref_other_script() 1663c620c055SBram Moolenaar let filterLines =<< trim END 1664c620c055SBram Moolenaar vim9script 1665c620c055SBram Moolenaar export def FilterFunc(idx: number, val: number): bool 1666c620c055SBram Moolenaar return idx % 2 == 1 1667c620c055SBram Moolenaar enddef 1668c620c055SBram Moolenaar export def FastFilter(): list<number> 1669c620c055SBram Moolenaar return range(10)->filter('FilterFunc') 1670c620c055SBram Moolenaar enddef 1671c620c055SBram Moolenaar END 1672c620c055SBram Moolenaar writefile(filterLines, 'Xfilter.vim') 1673c620c055SBram Moolenaar 1674c620c055SBram Moolenaar let lines =<< trim END 1675c620c055SBram Moolenaar vim9script 1676c620c055SBram Moolenaar import {FilterFunc, FastFilter} from './Xfilter.vim' 1677c620c055SBram Moolenaar def Test() 1678c620c055SBram Moolenaar let x: list<number> = FastFilter() 1679c620c055SBram Moolenaar enddef 1680c620c055SBram Moolenaar Test() 1681c620c055SBram Moolenaar END 1682c620c055SBram Moolenaar writefile(lines, 'Ximport.vim') 1683c620c055SBram Moolenaar assert_fails('source Ximport.vim', 'E121:') 1684c620c055SBram Moolenaar 1685c620c055SBram Moolenaar delete('Xfilter.vim') 1686c620c055SBram Moolenaar delete('Ximport.vim') 1687c620c055SBram Moolenaarenddef 1688c620c055SBram Moolenaar 16894c17ad94SBram Moolenaardef Test_vim9script_reload_delfunc() 16904c17ad94SBram Moolenaar let first_lines =<< trim END 16914c17ad94SBram Moolenaar vim9script 16924c17ad94SBram Moolenaar def FuncYes(): string 16934c17ad94SBram Moolenaar return 'yes' 16944c17ad94SBram Moolenaar enddef 16954c17ad94SBram Moolenaar END 169603afdcf1SBram Moolenaar let withno_lines =<< trim END 16974c17ad94SBram Moolenaar def FuncNo(): string 16984c17ad94SBram Moolenaar return 'no' 16994c17ad94SBram Moolenaar enddef 17004c17ad94SBram Moolenaar def g:DoCheck(no_exists: bool) 17014c17ad94SBram Moolenaar assert_equal('yes', FuncYes()) 17024c17ad94SBram Moolenaar assert_equal('no', FuncNo()) 170303afdcf1SBram Moolenaar enddef 170403afdcf1SBram Moolenaar END 170503afdcf1SBram Moolenaar let nono_lines =<< trim END 170603afdcf1SBram Moolenaar def g:DoCheck(no_exists: bool) 170703afdcf1SBram Moolenaar assert_equal('yes', FuncYes()) 17084c17ad94SBram Moolenaar assert_fails('call FuncNo()', 'E117:') 17094c17ad94SBram Moolenaar enddef 17104c17ad94SBram Moolenaar END 17114c17ad94SBram Moolenaar 17124c17ad94SBram Moolenaar # FuncNo() is defined 171303afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 17144c17ad94SBram Moolenaar source Xreloaded.vim 17154c17ad94SBram Moolenaar g:DoCheck(true) 17164c17ad94SBram Moolenaar 17174c17ad94SBram Moolenaar # FuncNo() is not redefined 171803afdcf1SBram Moolenaar writefile(first_lines + nono_lines, 'Xreloaded.vim') 17194c17ad94SBram Moolenaar source Xreloaded.vim 172003afdcf1SBram Moolenaar g:DoCheck() 17214c17ad94SBram Moolenaar 17224c17ad94SBram Moolenaar # FuncNo() is back 172303afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 17244c17ad94SBram Moolenaar source Xreloaded.vim 172503afdcf1SBram Moolenaar g:DoCheck() 17264c17ad94SBram Moolenaar 17274c17ad94SBram Moolenaar delete('Xreloaded.vim') 17284c17ad94SBram Moolenaarenddef 17294c17ad94SBram Moolenaar 173089483d40SBram Moolenaardef Test_vim9script_reload_delvar() 173189483d40SBram Moolenaar # write the script with a script-local variable 173289483d40SBram Moolenaar let lines =<< trim END 173389483d40SBram Moolenaar vim9script 173489483d40SBram Moolenaar let var = 'string' 173589483d40SBram Moolenaar END 173689483d40SBram Moolenaar writefile(lines, 'XreloadVar.vim') 173789483d40SBram Moolenaar source XreloadVar.vim 173889483d40SBram Moolenaar 173989483d40SBram Moolenaar # now write the script using the same variable locally - works 174089483d40SBram Moolenaar lines =<< trim END 174189483d40SBram Moolenaar vim9script 174289483d40SBram Moolenaar def Func() 174389483d40SBram Moolenaar let var = 'string' 174489483d40SBram Moolenaar enddef 174589483d40SBram Moolenaar END 174689483d40SBram Moolenaar writefile(lines, 'XreloadVar.vim') 174789483d40SBram Moolenaar source XreloadVar.vim 174889483d40SBram Moolenaar 174989483d40SBram Moolenaar delete('XreloadVar.vim') 175089483d40SBram Moolenaarenddef 175189483d40SBram Moolenaar 17528a7d6542SBram Moolenaardef Test_import_absolute() 17538a7d6542SBram Moolenaar let import_lines = [ 1754e6085c53SBram Moolenaar 'vim9script', 1755e6085c53SBram Moolenaar 'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"', 1756e6085c53SBram Moolenaar 'def UseExported()', 1757e6085c53SBram Moolenaar ' g:imported_abs = exported', 1758e6085c53SBram Moolenaar ' exported = 8888', 1759e6085c53SBram Moolenaar ' g:imported_after = exported', 1760e6085c53SBram Moolenaar 'enddef', 1761e6085c53SBram Moolenaar 'UseExported()', 1762e6085c53SBram Moolenaar 'g:import_disassembled = execute("disass UseExported")', 1763e6085c53SBram Moolenaar ] 17648a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_abs.vim') 17658a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport_abs.vim') 17668a7d6542SBram Moolenaar 17678a7d6542SBram Moolenaar source Ximport_abs.vim 17688a7d6542SBram Moolenaar 17698a7d6542SBram Moolenaar assert_equal(9876, g:imported_abs) 17704e12a5dfSBram Moolenaar assert_equal(8888, g:imported_after) 1771675f716eSBram Moolenaar assert_match('<SNR>\d\+_UseExported.*' .. 1772675f716eSBram Moolenaar 'g:imported_abs = exported.*' .. 1773675f716eSBram Moolenaar '0 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 1774675f716eSBram Moolenaar '1 STOREG g:imported_abs.*' .. 1775675f716eSBram Moolenaar 'exported = 8888.*' .. 1776675f716eSBram Moolenaar '3 STORESCRIPT exported in .*Xexport_abs.vim.*' .. 1777675f716eSBram Moolenaar 'g:imported_after = exported.*' .. 1778675f716eSBram Moolenaar '4 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 1779675f716eSBram Moolenaar '5 STOREG g:imported_after.*', 1780e6085c53SBram Moolenaar g:import_disassembled) 1781b3ca9824SBram Moolenaar 1782b3ca9824SBram Moolenaar Undo_export_script_lines() 17838a7d6542SBram Moolenaar unlet g:imported_abs 17844e12a5dfSBram Moolenaar unlet g:import_disassembled 17858a7d6542SBram Moolenaar 17868a7d6542SBram Moolenaar delete('Ximport_abs.vim') 17878a7d6542SBram Moolenaar delete('Xexport_abs.vim') 17888a7d6542SBram Moolenaarenddef 17898a7d6542SBram Moolenaar 17908a7d6542SBram Moolenaardef Test_import_rtp() 17918a7d6542SBram Moolenaar let import_lines = [ 1792e6085c53SBram Moolenaar 'vim9script', 1793e6085c53SBram Moolenaar 'import exported from "Xexport_rtp.vim"', 1794e6085c53SBram Moolenaar 'g:imported_rtp = exported', 1795e6085c53SBram Moolenaar ] 17968a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_rtp.vim') 17978a7d6542SBram Moolenaar mkdir('import') 17988a7d6542SBram Moolenaar writefile(s:export_script_lines, 'import/Xexport_rtp.vim') 17998a7d6542SBram Moolenaar 18008a7d6542SBram Moolenaar let save_rtp = &rtp 18018a7d6542SBram Moolenaar &rtp = getcwd() 18028a7d6542SBram Moolenaar source Ximport_rtp.vim 18038a7d6542SBram Moolenaar &rtp = save_rtp 18048a7d6542SBram Moolenaar 18058a7d6542SBram Moolenaar assert_equal(9876, g:imported_rtp) 18068a7d6542SBram Moolenaar 1807b3ca9824SBram Moolenaar Undo_export_script_lines() 1808b3ca9824SBram Moolenaar unlet g:imported_rtp 18098a7d6542SBram Moolenaar delete('Ximport_rtp.vim') 181089483d40SBram Moolenaar delete('import', 'rf') 18118a7d6542SBram Moolenaarenddef 18128a7d6542SBram Moolenaar 181325e0f586SBram Moolenaardef Test_import_compile_error() 181425e0f586SBram Moolenaar let export_lines = [ 181525e0f586SBram Moolenaar 'vim9script', 181625e0f586SBram Moolenaar 'export def ExpFunc(): string', 181725e0f586SBram Moolenaar ' return notDefined', 181825e0f586SBram Moolenaar 'enddef', 181925e0f586SBram Moolenaar ] 182025e0f586SBram Moolenaar writefile(export_lines, 'Xexported.vim') 182125e0f586SBram Moolenaar 182225e0f586SBram Moolenaar let import_lines = [ 182325e0f586SBram Moolenaar 'vim9script', 182425e0f586SBram Moolenaar 'import ExpFunc from "./Xexported.vim"', 182525e0f586SBram Moolenaar 'def ImpFunc()', 182625e0f586SBram Moolenaar ' echo ExpFunc()', 182725e0f586SBram Moolenaar 'enddef', 182825e0f586SBram Moolenaar 'defcompile', 182925e0f586SBram Moolenaar ] 183025e0f586SBram Moolenaar writefile(import_lines, 'Ximport.vim') 183125e0f586SBram Moolenaar 183225e0f586SBram Moolenaar try 183325e0f586SBram Moolenaar source Ximport.vim 183425e0f586SBram Moolenaar catch /E1001/ 1835f5be8cdbSBram Moolenaar # Error should be fore the Xexported.vim file. 183625e0f586SBram Moolenaar assert_match('E1001: variable not found: notDefined', v:exception) 183725e0f586SBram Moolenaar assert_match('function <SNR>\d\+_ImpFunc\[1\]..<SNR>\d\+_ExpFunc, line 1', v:throwpoint) 183825e0f586SBram Moolenaar endtry 183925e0f586SBram Moolenaar 184025e0f586SBram Moolenaar delete('Xexported.vim') 184125e0f586SBram Moolenaar delete('Ximport.vim') 184225e0f586SBram Moolenaarenddef 184325e0f586SBram Moolenaar 1844c4ce36d4SBram Moolenaardef Test_func_redefine_error() 1845c4ce36d4SBram Moolenaar let lines = [ 1846c4ce36d4SBram Moolenaar 'vim9script', 1847c4ce36d4SBram Moolenaar 'def Func()', 1848c4ce36d4SBram Moolenaar ' eval [][0]', 1849c4ce36d4SBram Moolenaar 'enddef', 1850c4ce36d4SBram Moolenaar 'Func()', 1851c4ce36d4SBram Moolenaar ] 1852c4ce36d4SBram Moolenaar writefile(lines, 'Xtestscript.vim') 1853c4ce36d4SBram Moolenaar 1854c4ce36d4SBram Moolenaar for count in range(3) 1855c4ce36d4SBram Moolenaar try 1856c4ce36d4SBram Moolenaar source Xtestscript.vim 1857c4ce36d4SBram Moolenaar catch /E684/ 1858c4ce36d4SBram Moolenaar # function name should contain <SNR> every time 1859c4ce36d4SBram Moolenaar assert_match('E684: list index out of range', v:exception) 1860c4ce36d4SBram Moolenaar assert_match('function <SNR>\d\+_Func, line 1', v:throwpoint) 1861c4ce36d4SBram Moolenaar endtry 1862c4ce36d4SBram Moolenaar endfor 1863c4ce36d4SBram Moolenaar 1864c4ce36d4SBram Moolenaar delete('Xtestscript.vim') 1865c4ce36d4SBram Moolenaarenddef 1866c4ce36d4SBram Moolenaar 1867eef2102eSBram Moolenaardef Test_func_overrules_import_fails() 1868eef2102eSBram Moolenaar let export_lines =<< trim END 1869eef2102eSBram Moolenaar vim9script 1870eef2102eSBram Moolenaar export def Func() 1871eef2102eSBram Moolenaar echo 'imported' 1872eef2102eSBram Moolenaar enddef 1873eef2102eSBram Moolenaar END 1874eef2102eSBram Moolenaar writefile(export_lines, 'XexportedFunc.vim') 1875eef2102eSBram Moolenaar 1876eef2102eSBram Moolenaar let lines =<< trim END 1877eef2102eSBram Moolenaar vim9script 1878eef2102eSBram Moolenaar import Func from './XexportedFunc.vim' 1879eef2102eSBram Moolenaar def Func() 1880eef2102eSBram Moolenaar echo 'local to function' 1881eef2102eSBram Moolenaar enddef 1882eef2102eSBram Moolenaar END 1883eef2102eSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1884eef2102eSBram Moolenaar 1885eef2102eSBram Moolenaar lines =<< trim END 1886eef2102eSBram Moolenaar vim9script 1887eef2102eSBram Moolenaar import Func from './XexportedFunc.vim' 1888eef2102eSBram Moolenaar def Outer() 1889eef2102eSBram Moolenaar def Func() 1890eef2102eSBram Moolenaar echo 'local to function' 1891eef2102eSBram Moolenaar enddef 1892eef2102eSBram Moolenaar enddef 1893eef2102eSBram Moolenaar defcompile 1894eef2102eSBram Moolenaar END 1895eef2102eSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1896eef2102eSBram Moolenaar 1897eef2102eSBram Moolenaar delete('XexportedFunc.vim') 1898eef2102eSBram Moolenaarenddef 1899eef2102eSBram Moolenaar 1900b9a2cac3SBram Moolenaardef Test_func_redefine_fails() 1901b9a2cac3SBram Moolenaar let lines =<< trim END 1902b9a2cac3SBram Moolenaar vim9script 1903b9a2cac3SBram Moolenaar def Func() 1904b9a2cac3SBram Moolenaar echo 'one' 1905b9a2cac3SBram Moolenaar enddef 1906b9a2cac3SBram Moolenaar def Func() 1907b9a2cac3SBram Moolenaar echo 'two' 1908b9a2cac3SBram Moolenaar enddef 1909b9a2cac3SBram Moolenaar END 1910b9a2cac3SBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1911fa211f3cSBram Moolenaar 1912fa211f3cSBram Moolenaar lines =<< trim END 1913fa211f3cSBram Moolenaar vim9script 1914fa211f3cSBram Moolenaar def Foo(): string 1915fa211f3cSBram Moolenaar return 'foo' 1916fa211f3cSBram Moolenaar enddef 1917fa211f3cSBram Moolenaar def Func() 1918fa211f3cSBram Moolenaar let Foo = {-> 'lambda'} 1919fa211f3cSBram Moolenaar enddef 1920fa211f3cSBram Moolenaar defcompile 1921fa211f3cSBram Moolenaar END 1922fa211f3cSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1923b9a2cac3SBram Moolenaarenddef 1924b9a2cac3SBram Moolenaar 19258a7d6542SBram Moolenaardef Test_fixed_size_list() 1926f5be8cdbSBram Moolenaar # will be allocated as one piece of memory, check that changes work 19278a7d6542SBram Moolenaar let l = [1, 2, 3, 4] 19288a7d6542SBram Moolenaar l->remove(0) 19298a7d6542SBram Moolenaar l->add(5) 19308a7d6542SBram Moolenaar l->insert(99, 1) 19310f18b6d1SBram Moolenaar assert_equal([2, 99, 3, 4, 5], l) 19328a7d6542SBram Moolenaarenddef 19338a7d6542SBram Moolenaar 1934ae616494SBram Moolenaardef Test_no_insert_xit() 1935ae616494SBram Moolenaar call CheckDefExecFailure(['a = 1'], 'E1100:') 1936ae616494SBram Moolenaar call CheckDefExecFailure(['c = 1'], 'E1100:') 1937f5a48010SBram Moolenaar call CheckDefExecFailure(['i = 1'], 'E1100:') 1938f5a48010SBram Moolenaar call CheckDefExecFailure(['t = 1'], 'E1100:') 1939f5a48010SBram Moolenaar call CheckDefExecFailure(['x = 1'], 'E1100:') 1940ae616494SBram Moolenaar 1941ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'a = 1'], 'E488:') 1942ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'a'], 'E1100:') 1943ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'c = 1'], 'E488:') 1944ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'c'], 'E1100:') 1945f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'i = 1'], 'E488:') 1946f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'i'], 'E1100:') 1947f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 't'], 'E1100:') 1948f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 't = 1'], 'E1100:') 1949f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'x = 1'], 'E1100:') 1950ae616494SBram Moolenaarenddef 1951ae616494SBram Moolenaar 1952158906cfSBram Moolenaardef IfElse(what: number): string 1953158906cfSBram Moolenaar let res = '' 1954158906cfSBram Moolenaar if what == 1 1955158906cfSBram Moolenaar res = "one" 1956158906cfSBram Moolenaar elseif what == 2 1957158906cfSBram Moolenaar res = "two" 1958a259d8d3SBram Moolenaar else 1959158906cfSBram Moolenaar res = "three" 1960a259d8d3SBram Moolenaar endif 1961158906cfSBram Moolenaar return res 1962a259d8d3SBram Moolenaarenddef 1963a259d8d3SBram Moolenaar 1964158906cfSBram Moolenaardef Test_if_elseif_else() 1965158906cfSBram Moolenaar assert_equal('one', IfElse(1)) 1966158906cfSBram Moolenaar assert_equal('two', IfElse(2)) 1967158906cfSBram Moolenaar assert_equal('three', IfElse(3)) 19680f18b6d1SBram Moolenaarenddef 19690f18b6d1SBram Moolenaar 1970e8c4abbbSBram Moolenaardef Test_if_elseif_else_fails() 1971e8c4abbbSBram Moolenaar call CheckDefFailure(['elseif true'], 'E582:') 1972e8c4abbbSBram Moolenaar call CheckDefFailure(['else'], 'E581:') 1973e8c4abbbSBram Moolenaar call CheckDefFailure(['endif'], 'E580:') 1974e8c4abbbSBram Moolenaar call CheckDefFailure(['if true', 'elseif xxx'], 'E1001:') 1975585fea7bSBram Moolenaar call CheckDefFailure(['if true', 'echo 1'], 'E171:') 1976e8c4abbbSBram Moolenaarenddef 1977e8c4abbbSBram Moolenaar 19786d69bf60SBram Moolenaarlet g:bool_true = v:true 19796d69bf60SBram Moolenaarlet g:bool_false = v:false 19806d69bf60SBram Moolenaar 19816d69bf60SBram Moolenaardef Test_if_const_expr() 19826d69bf60SBram Moolenaar let res = false 19836d69bf60SBram Moolenaar if true ? true : false 19846d69bf60SBram Moolenaar res = true 19856d69bf60SBram Moolenaar endif 19866d69bf60SBram Moolenaar assert_equal(true, res) 19876d69bf60SBram Moolenaar 1988585fea7bSBram Moolenaar g:glob = 2 1989585fea7bSBram Moolenaar if false 19906797966dSBram Moolenaar execute('g:glob = 3') 1991585fea7bSBram Moolenaar endif 1992585fea7bSBram Moolenaar assert_equal(2, g:glob) 1993585fea7bSBram Moolenaar if true 19946797966dSBram Moolenaar execute('g:glob = 3') 1995585fea7bSBram Moolenaar endif 1996585fea7bSBram Moolenaar assert_equal(3, g:glob) 1997585fea7bSBram Moolenaar 19986d69bf60SBram Moolenaar res = false 19996d69bf60SBram Moolenaar if g:bool_true ? true : false 20006d69bf60SBram Moolenaar res = true 20016d69bf60SBram Moolenaar endif 20026d69bf60SBram Moolenaar assert_equal(true, res) 20036d69bf60SBram Moolenaar 20046d69bf60SBram Moolenaar res = false 20056d69bf60SBram Moolenaar if true ? g:bool_true : false 20066d69bf60SBram Moolenaar res = true 20076d69bf60SBram Moolenaar endif 20086d69bf60SBram Moolenaar assert_equal(true, res) 20096d69bf60SBram Moolenaar 20106d69bf60SBram Moolenaar res = false 20116d69bf60SBram Moolenaar if true ? true : g:bool_false 20126d69bf60SBram Moolenaar res = true 20136d69bf60SBram Moolenaar endif 20146d69bf60SBram Moolenaar assert_equal(true, res) 20156d69bf60SBram Moolenaar 20166d69bf60SBram Moolenaar res = false 20176d69bf60SBram Moolenaar if true ? false : true 20186d69bf60SBram Moolenaar res = true 20196d69bf60SBram Moolenaar endif 20206d69bf60SBram Moolenaar assert_equal(false, res) 20216d69bf60SBram Moolenaar 20226d69bf60SBram Moolenaar res = false 20236d69bf60SBram Moolenaar if false ? false : true 20246d69bf60SBram Moolenaar res = true 20256d69bf60SBram Moolenaar endif 20266d69bf60SBram Moolenaar assert_equal(true, res) 20276d69bf60SBram Moolenaar 20286d69bf60SBram Moolenaar res = false 20296d69bf60SBram Moolenaar if false ? true : false 20306d69bf60SBram Moolenaar res = true 20316d69bf60SBram Moolenaar endif 20326d69bf60SBram Moolenaar assert_equal(false, res) 20336d69bf60SBram Moolenaar 20346d69bf60SBram Moolenaar res = false 2035e8c4abbbSBram Moolenaar if has('xyz') ? true : false 2036e8c4abbbSBram Moolenaar res = true 2037e8c4abbbSBram Moolenaar endif 2038e8c4abbbSBram Moolenaar assert_equal(false, res) 2039e8c4abbbSBram Moolenaar 2040e8c4abbbSBram Moolenaar res = false 20416d69bf60SBram Moolenaar if true && true 20426d69bf60SBram Moolenaar res = true 20436d69bf60SBram Moolenaar endif 20446d69bf60SBram Moolenaar assert_equal(true, res) 20456d69bf60SBram Moolenaar 20466d69bf60SBram Moolenaar res = false 20476d69bf60SBram Moolenaar if true && false 20486d69bf60SBram Moolenaar res = true 20496d69bf60SBram Moolenaar endif 20506d69bf60SBram Moolenaar assert_equal(false, res) 20516d69bf60SBram Moolenaar 20526d69bf60SBram Moolenaar res = false 20536d69bf60SBram Moolenaar if g:bool_true && false 20546d69bf60SBram Moolenaar res = true 20556d69bf60SBram Moolenaar endif 20566d69bf60SBram Moolenaar assert_equal(false, res) 20576d69bf60SBram Moolenaar 20586d69bf60SBram Moolenaar res = false 20596d69bf60SBram Moolenaar if true && g:bool_false 20606d69bf60SBram Moolenaar res = true 20616d69bf60SBram Moolenaar endif 20626d69bf60SBram Moolenaar assert_equal(false, res) 20636d69bf60SBram Moolenaar 20646d69bf60SBram Moolenaar res = false 20656d69bf60SBram Moolenaar if false && false 20666d69bf60SBram Moolenaar res = true 20676d69bf60SBram Moolenaar endif 20686d69bf60SBram Moolenaar assert_equal(false, res) 20696d69bf60SBram Moolenaar 20706d69bf60SBram Moolenaar res = false 20716d69bf60SBram Moolenaar if true || false 20726d69bf60SBram Moolenaar res = true 20736d69bf60SBram Moolenaar endif 20746d69bf60SBram Moolenaar assert_equal(true, res) 20756d69bf60SBram Moolenaar 20766d69bf60SBram Moolenaar res = false 20776d69bf60SBram Moolenaar if g:bool_true || false 20786d69bf60SBram Moolenaar res = true 20796d69bf60SBram Moolenaar endif 20806d69bf60SBram Moolenaar assert_equal(true, res) 20816d69bf60SBram Moolenaar 20826d69bf60SBram Moolenaar res = false 20836d69bf60SBram Moolenaar if true || g:bool_false 20846d69bf60SBram Moolenaar res = true 20856d69bf60SBram Moolenaar endif 20866d69bf60SBram Moolenaar assert_equal(true, res) 20876d69bf60SBram Moolenaar 20886d69bf60SBram Moolenaar res = false 20896d69bf60SBram Moolenaar if false || false 20906d69bf60SBram Moolenaar res = true 20916d69bf60SBram Moolenaar endif 20926d69bf60SBram Moolenaar assert_equal(false, res) 209380c34ca3SBram Moolenaarenddef 20946d69bf60SBram Moolenaar 209580c34ca3SBram Moolenaardef Test_if_const_expr_fails() 209680c34ca3SBram Moolenaar call CheckDefFailure(['if "aaa" == "bbb'], 'E114:') 209780c34ca3SBram Moolenaar call CheckDefFailure(["if 'aaa' == 'bbb"], 'E115:') 2098e8c4abbbSBram Moolenaar call CheckDefFailure(["if has('aaa'"], 'E110:') 2099e8c4abbbSBram Moolenaar call CheckDefFailure(["if has('aaa') ? true false"], 'E109:') 21006d69bf60SBram Moolenaarenddef 21016d69bf60SBram Moolenaar 210272abcf42SBram Moolenaardef RunNested(i: number): number 210372abcf42SBram Moolenaar let x: number = 0 210472abcf42SBram Moolenaar if i % 2 210572abcf42SBram Moolenaar if 1 2106f5be8cdbSBram Moolenaar # comment 210772abcf42SBram Moolenaar else 2108f5be8cdbSBram Moolenaar # comment 210972abcf42SBram Moolenaar endif 211072abcf42SBram Moolenaar x += 1 211172abcf42SBram Moolenaar else 211272abcf42SBram Moolenaar x += 1000 211372abcf42SBram Moolenaar endif 211472abcf42SBram Moolenaar return x 211572abcf42SBram Moolenaarenddef 211672abcf42SBram Moolenaar 211772abcf42SBram Moolenaardef Test_nested_if() 211872abcf42SBram Moolenaar assert_equal(1, RunNested(1)) 211972abcf42SBram Moolenaar assert_equal(1000, RunNested(2)) 212072abcf42SBram Moolenaarenddef 212172abcf42SBram Moolenaar 2122ad39c094SBram Moolenaardef Test_execute_cmd() 2123ad39c094SBram Moolenaar new 2124ad39c094SBram Moolenaar setline(1, 'default') 2125ad39c094SBram Moolenaar execute 'call setline(1, "execute-string")' 2126ad39c094SBram Moolenaar assert_equal('execute-string', getline(1)) 2127a72cfb80SBram Moolenaar 2128a72cfb80SBram Moolenaar execute "call setline(1, 'execute-string')" 2129a72cfb80SBram Moolenaar assert_equal('execute-string', getline(1)) 2130a72cfb80SBram Moolenaar 2131ad39c094SBram Moolenaar let cmd1 = 'call setline(1,' 2132ad39c094SBram Moolenaar let cmd2 = '"execute-var")' 2133a72cfb80SBram Moolenaar execute cmd1 cmd2 # comment 2134ad39c094SBram Moolenaar assert_equal('execute-var', getline(1)) 2135a72cfb80SBram Moolenaar 2136ad39c094SBram Moolenaar execute cmd1 cmd2 '|call setline(1, "execute-var-string")' 2137ad39c094SBram Moolenaar assert_equal('execute-var-string', getline(1)) 2138a72cfb80SBram Moolenaar 2139ad39c094SBram Moolenaar let cmd_first = 'call ' 2140ad39c094SBram Moolenaar let cmd_last = 'setline(1, "execute-var-var")' 2141ad39c094SBram Moolenaar execute cmd_first .. cmd_last 2142ad39c094SBram Moolenaar assert_equal('execute-var-var', getline(1)) 2143ad39c094SBram Moolenaar bwipe! 2144585fea7bSBram Moolenaar 21452d6b20d6SBram Moolenaar let n = true 21462d6b20d6SBram Moolenaar execute 'echomsg' (n ? '"true"' : '"no"') 21472d6b20d6SBram Moolenaar assert_match('^true$', Screenline(&lines)) 21482d6b20d6SBram Moolenaar 2149e5abf7afSBram Moolenaar echomsg [1, 2, 3] #{a: 1, b: 2} 2150e5abf7afSBram Moolenaar assert_match('^\[1, 2, 3\] {''a'': 1, ''b'': 2}$', Screenline(&lines)) 2151e5abf7afSBram Moolenaar 2152585fea7bSBram Moolenaar call CheckDefFailure(['execute xxx'], 'E1001:') 2153a72cfb80SBram Moolenaar call CheckDefFailure(['execute "cmd"# comment'], 'E488:') 2154ad39c094SBram Moolenaarenddef 2155ad39c094SBram Moolenaar 215647e880d6SBram Moolenaardef Test_execute_cmd_vimscript() 2157f5be8cdbSBram Moolenaar # only checks line continuation 215847e880d6SBram Moolenaar let lines =<< trim END 215947e880d6SBram Moolenaar vim9script 216047e880d6SBram Moolenaar execute 'g:someVar' 216147e880d6SBram Moolenaar .. ' = ' .. 216247e880d6SBram Moolenaar '28' 216347e880d6SBram Moolenaar assert_equal(28, g:someVar) 216447e880d6SBram Moolenaar unlet g:someVar 216547e880d6SBram Moolenaar END 216647e880d6SBram Moolenaar CheckScriptSuccess(lines) 216747e880d6SBram Moolenaarenddef 216847e880d6SBram Moolenaar 2169ad39c094SBram Moolenaardef Test_echo_cmd() 2170a72cfb80SBram Moolenaar echo 'some' # comment 2171585fea7bSBram Moolenaar echon 'thing' 2172ad39c094SBram Moolenaar assert_match('^something$', Screenline(&lines)) 2173ad39c094SBram Moolenaar 2174a72cfb80SBram Moolenaar echo "some" # comment 2175a72cfb80SBram Moolenaar echon "thing" 2176a72cfb80SBram Moolenaar assert_match('^something$', Screenline(&lines)) 2177a72cfb80SBram Moolenaar 2178ad39c094SBram Moolenaar let str1 = 'some' 2179ad39c094SBram Moolenaar let str2 = 'more' 2180ad39c094SBram Moolenaar echo str1 str2 2181ad39c094SBram Moolenaar assert_match('^some more$', Screenline(&lines)) 2182a72cfb80SBram Moolenaar 2183a72cfb80SBram Moolenaar call CheckDefFailure(['echo "xxx"# comment'], 'E488:') 2184ad39c094SBram Moolenaarenddef 2185ad39c094SBram Moolenaar 2186f93c7feaSBram Moolenaardef Test_echomsg_cmd() 2187f93c7feaSBram Moolenaar echomsg 'some' 'more' # comment 2188f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 2189f93c7feaSBram Moolenaar echo 'clear' 2190df069eecSBram Moolenaar :1messages 2191f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 2192f93c7feaSBram Moolenaar 2193f93c7feaSBram Moolenaar call CheckDefFailure(['echomsg "xxx"# comment'], 'E488:') 2194f93c7feaSBram Moolenaarenddef 2195f93c7feaSBram Moolenaar 219647e880d6SBram Moolenaardef Test_echomsg_cmd_vimscript() 2197f5be8cdbSBram Moolenaar # only checks line continuation 219847e880d6SBram Moolenaar let lines =<< trim END 219947e880d6SBram Moolenaar vim9script 220047e880d6SBram Moolenaar echomsg 'here' 220147e880d6SBram Moolenaar .. ' is ' .. 220247e880d6SBram Moolenaar 'a message' 220347e880d6SBram Moolenaar assert_match('^here is a message$', Screenline(&lines)) 220447e880d6SBram Moolenaar END 220547e880d6SBram Moolenaar CheckScriptSuccess(lines) 220647e880d6SBram Moolenaarenddef 220747e880d6SBram Moolenaar 2208f93c7feaSBram Moolenaardef Test_echoerr_cmd() 220940ee466cSBram Moolenaar try 221040ee466cSBram Moolenaar echoerr 'something' 'wrong' # comment 221140ee466cSBram Moolenaar catch 221240ee466cSBram Moolenaar assert_match('something wrong', v:exception) 221340ee466cSBram Moolenaar endtry 2214f93c7feaSBram Moolenaarenddef 2215f93c7feaSBram Moolenaar 221647e880d6SBram Moolenaardef Test_echoerr_cmd_vimscript() 2217f5be8cdbSBram Moolenaar # only checks line continuation 221847e880d6SBram Moolenaar let lines =<< trim END 221947e880d6SBram Moolenaar vim9script 222047e880d6SBram Moolenaar try 222147e880d6SBram Moolenaar echoerr 'this' 222247e880d6SBram Moolenaar .. ' is ' .. 222347e880d6SBram Moolenaar 'wrong' 222447e880d6SBram Moolenaar catch 222547e880d6SBram Moolenaar assert_match('this is wrong', v:exception) 222647e880d6SBram Moolenaar endtry 222747e880d6SBram Moolenaar END 222847e880d6SBram Moolenaar CheckScriptSuccess(lines) 222947e880d6SBram Moolenaarenddef 223047e880d6SBram Moolenaar 223141fe0617SBram Moolenaardef Test_for_outside_of_function() 223241fe0617SBram Moolenaar let lines =<< trim END 223341fe0617SBram Moolenaar vim9script 223441fe0617SBram Moolenaar new 223541fe0617SBram Moolenaar for var in range(0, 3) 223641fe0617SBram Moolenaar append(line('$'), var) 223741fe0617SBram Moolenaar endfor 223841fe0617SBram Moolenaar assert_equal(['', '0', '1', '2', '3'], getline(1, '$')) 223941fe0617SBram Moolenaar bwipe! 224041fe0617SBram Moolenaar END 224141fe0617SBram Moolenaar writefile(lines, 'Xvim9for.vim') 224241fe0617SBram Moolenaar source Xvim9for.vim 224341fe0617SBram Moolenaar delete('Xvim9for.vim') 224441fe0617SBram Moolenaarenddef 22458a7d6542SBram Moolenaar 2246e8c4abbbSBram Moolenaardef Test_for_loop() 2247e8c4abbbSBram Moolenaar let result = '' 2248e8c4abbbSBram Moolenaar for cnt in range(7) 2249e8c4abbbSBram Moolenaar if cnt == 4 2250e8c4abbbSBram Moolenaar break 2251e8c4abbbSBram Moolenaar endif 2252e8c4abbbSBram Moolenaar if cnt == 2 2253e8c4abbbSBram Moolenaar continue 2254e8c4abbbSBram Moolenaar endif 2255e8c4abbbSBram Moolenaar result ..= cnt .. '_' 2256e8c4abbbSBram Moolenaar endfor 2257e8c4abbbSBram Moolenaar assert_equal('0_1_3_', result) 22580ad3e894SBram Moolenaar 22590ad3e894SBram Moolenaar let concat = '' 22600ad3e894SBram Moolenaar for str in eval('["one", "two"]') 22610ad3e894SBram Moolenaar concat ..= str 22620ad3e894SBram Moolenaar endfor 22630ad3e894SBram Moolenaar assert_equal('onetwo', concat) 2264e8c4abbbSBram Moolenaarenddef 2265e8c4abbbSBram Moolenaar 2266e8c4abbbSBram Moolenaardef Test_for_loop_fails() 2267675f716eSBram Moolenaar CheckDefFailure(['for # in range(5)'], 'E690:') 2268675f716eSBram Moolenaar CheckDefFailure(['for i In range(5)'], 'E690:') 2269451c2e35SBram Moolenaar CheckDefFailure(['let x = 5', 'for x in range(5)'], 'E1017:') 2270822ba247SBram Moolenaar CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef', 'defcompile'], 'E1006:') 2271451c2e35SBram Moolenaar CheckDefFailure(['for i in "text"'], 'E1012:') 2272675f716eSBram Moolenaar CheckDefFailure(['for i in xxx'], 'E1001:') 2273675f716eSBram Moolenaar CheckDefFailure(['endfor'], 'E588:') 2274675f716eSBram Moolenaar CheckDefFailure(['for i in range(3)', 'echo 3'], 'E170:') 2275e8c4abbbSBram Moolenaarenddef 2276e8c4abbbSBram Moolenaar 2277d0df1aacSBram Moolenaardef Test_while_loop() 2278d0df1aacSBram Moolenaar let result = '' 2279d0df1aacSBram Moolenaar let cnt = 0 2280d0df1aacSBram Moolenaar while cnt < 555 2281d0df1aacSBram Moolenaar if cnt == 3 2282d0df1aacSBram Moolenaar break 2283d0df1aacSBram Moolenaar endif 2284d0df1aacSBram Moolenaar cnt += 1 2285d0df1aacSBram Moolenaar if cnt == 2 2286d0df1aacSBram Moolenaar continue 2287d0df1aacSBram Moolenaar endif 2288d0df1aacSBram Moolenaar result ..= cnt .. '_' 2289d0df1aacSBram Moolenaar endwhile 2290d0df1aacSBram Moolenaar assert_equal('1_3_', result) 2291d0df1aacSBram Moolenaarenddef 2292d0df1aacSBram Moolenaar 2293e8c4abbbSBram Moolenaardef Test_while_loop_fails() 2294675f716eSBram Moolenaar CheckDefFailure(['while xxx'], 'E1001:') 2295675f716eSBram Moolenaar CheckDefFailure(['endwhile'], 'E588:') 2296675f716eSBram Moolenaar CheckDefFailure(['continue'], 'E586:') 2297675f716eSBram Moolenaar CheckDefFailure(['if true', 'continue'], 'E586:') 2298675f716eSBram Moolenaar CheckDefFailure(['break'], 'E587:') 2299675f716eSBram Moolenaar CheckDefFailure(['if true', 'break'], 'E587:') 2300675f716eSBram Moolenaar CheckDefFailure(['while 1', 'echo 3'], 'E170:') 2301bd5da371SBram Moolenaarenddef 2302bd5da371SBram Moolenaar 23039645e2d9SBram Moolenaardef Test_interrupt_loop() 230497acfc78SBram Moolenaar let caught = false 23059645e2d9SBram Moolenaar let x = 0 230697acfc78SBram Moolenaar try 23079645e2d9SBram Moolenaar while 1 23089645e2d9SBram Moolenaar x += 1 23099645e2d9SBram Moolenaar if x == 100 23109645e2d9SBram Moolenaar feedkeys("\<C-C>", 'Lt') 23119645e2d9SBram Moolenaar endif 23129645e2d9SBram Moolenaar endwhile 231397acfc78SBram Moolenaar catch 231497acfc78SBram Moolenaar caught = true 231597acfc78SBram Moolenaar assert_equal(100, x) 231697acfc78SBram Moolenaar endtry 231797acfc78SBram Moolenaar assert_true(caught, 'should have caught an exception') 23189645e2d9SBram Moolenaarenddef 231920431c9dSBram Moolenaar 23204fdae999SBram Moolenaardef Test_automatic_line_continuation() 23214fdae999SBram Moolenaar let mylist = [ 23224fdae999SBram Moolenaar 'one', 23234fdae999SBram Moolenaar 'two', 23244fdae999SBram Moolenaar 'three', 2325f5be8cdbSBram Moolenaar ] # comment 23264fdae999SBram Moolenaar assert_equal(['one', 'two', 'three'], mylist) 23274fdae999SBram Moolenaar 23284fdae999SBram Moolenaar let mydict = { 23294fdae999SBram Moolenaar 'one': 1, 23304fdae999SBram Moolenaar 'two': 2, 23314fdae999SBram Moolenaar 'three': 23324fdae999SBram Moolenaar 3, 2333f5be8cdbSBram Moolenaar } # comment 23344fdae999SBram Moolenaar assert_equal({'one': 1, 'two': 2, 'three': 3}, mydict) 23354fdae999SBram Moolenaar mydict = #{ 23362c330432SBram Moolenaar one: 1, # comment 23372c330432SBram Moolenaar two: # comment 23382c330432SBram Moolenaar 2, # comment 23392c330432SBram Moolenaar three: 3 # comment 23402c330432SBram Moolenaar } 23412c330432SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 23422c330432SBram Moolenaar mydict = #{ 23432c330432SBram Moolenaar one: 1, 23444fdae999SBram Moolenaar two: 23454fdae999SBram Moolenaar 2, 23462c330432SBram Moolenaar three: 3 23474fdae999SBram Moolenaar } 23484fdae999SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 2349e6085c53SBram Moolenaar 2350e6085c53SBram Moolenaar assert_equal( 2351e6085c53SBram Moolenaar ['one', 'two', 'three'], 2352e6085c53SBram Moolenaar split('one two three') 2353e6085c53SBram Moolenaar ) 23544fdae999SBram Moolenaarenddef 23554fdae999SBram Moolenaar 23567a092245SBram Moolenaardef Test_vim9_comment() 23577a092245SBram Moolenaar CheckScriptSuccess([ 23587a092245SBram Moolenaar 'vim9script', 23597a092245SBram Moolenaar '# something', 23607a092245SBram Moolenaar ]) 23617a092245SBram Moolenaar CheckScriptFailure([ 23627a092245SBram Moolenaar 'vim9script', 23637a092245SBram Moolenaar ':# something', 23647a092245SBram Moolenaar ], 'E488:') 23657a092245SBram Moolenaar CheckScriptFailure([ 23667a092245SBram Moolenaar '# something', 23677a092245SBram Moolenaar ], 'E488:') 23687a092245SBram Moolenaar CheckScriptFailure([ 23697a092245SBram Moolenaar ':# something', 23707a092245SBram Moolenaar ], 'E488:') 23717a092245SBram Moolenaar 23724a8d9f2eSBram Moolenaar { # block start 23734a8d9f2eSBram Moolenaar } # block end 23744a8d9f2eSBram Moolenaar CheckDefFailure([ 23754a8d9f2eSBram Moolenaar '{# comment', 23764a8d9f2eSBram Moolenaar ], 'E488:') 23774a8d9f2eSBram Moolenaar CheckDefFailure([ 23784a8d9f2eSBram Moolenaar '{', 23794a8d9f2eSBram Moolenaar '}# comment', 23804a8d9f2eSBram Moolenaar ], 'E488:') 23814a8d9f2eSBram Moolenaar 23824a8d9f2eSBram Moolenaar echo "yes" # comment 23834a8d9f2eSBram Moolenaar CheckDefFailure([ 23844a8d9f2eSBram Moolenaar 'echo "yes"# comment', 23854a8d9f2eSBram Moolenaar ], 'E488:') 23867a092245SBram Moolenaar CheckScriptSuccess([ 23877a092245SBram Moolenaar 'vim9script', 23887a092245SBram Moolenaar 'echo "yes" # something', 23897a092245SBram Moolenaar ]) 23907a092245SBram Moolenaar CheckScriptFailure([ 23917a092245SBram Moolenaar 'vim9script', 23927a092245SBram Moolenaar 'echo "yes"# something', 23937a092245SBram Moolenaar ], 'E121:') 23947a092245SBram Moolenaar CheckScriptFailure([ 23957a092245SBram Moolenaar 'vim9script', 23967a092245SBram Moolenaar 'echo# something', 23977a092245SBram Moolenaar ], 'E121:') 23987a092245SBram Moolenaar CheckScriptFailure([ 23997a092245SBram Moolenaar 'echo "yes" # something', 24007a092245SBram Moolenaar ], 'E121:') 24017a092245SBram Moolenaar 24024a8d9f2eSBram Moolenaar exe "echo" # comment 24034a8d9f2eSBram Moolenaar CheckDefFailure([ 24044a8d9f2eSBram Moolenaar 'exe "echo"# comment', 24054a8d9f2eSBram Moolenaar ], 'E488:') 24064a8d9f2eSBram Moolenaar CheckScriptSuccess([ 24074a8d9f2eSBram Moolenaar 'vim9script', 24084a8d9f2eSBram Moolenaar 'exe "echo" # something', 24094a8d9f2eSBram Moolenaar ]) 24104a8d9f2eSBram Moolenaar CheckScriptFailure([ 24114a8d9f2eSBram Moolenaar 'vim9script', 24124a8d9f2eSBram Moolenaar 'exe "echo"# something', 24134a8d9f2eSBram Moolenaar ], 'E121:') 24144a8d9f2eSBram Moolenaar CheckDefFailure([ 24154a8d9f2eSBram Moolenaar 'exe # comment', 24164a8d9f2eSBram Moolenaar ], 'E1015:') 24174a8d9f2eSBram Moolenaar CheckScriptFailure([ 24184a8d9f2eSBram Moolenaar 'vim9script', 24194a8d9f2eSBram Moolenaar 'exe# something', 24204a8d9f2eSBram Moolenaar ], 'E121:') 24214a8d9f2eSBram Moolenaar CheckScriptFailure([ 24224a8d9f2eSBram Moolenaar 'exe "echo" # something', 24234a8d9f2eSBram Moolenaar ], 'E121:') 24244a8d9f2eSBram Moolenaar 24257a092245SBram Moolenaar CheckDefFailure([ 24267a092245SBram Moolenaar 'try# comment', 24277a092245SBram Moolenaar ' echo "yes"', 24287a092245SBram Moolenaar 'catch', 24297a092245SBram Moolenaar 'endtry', 24307a092245SBram Moolenaar ], 'E488:') 24312c5ed4e3SBram Moolenaar CheckScriptFailure([ 24322c5ed4e3SBram Moolenaar 'vim9script', 24332c5ed4e3SBram Moolenaar 'try# comment', 24342c5ed4e3SBram Moolenaar 'echo "yes"', 24352c5ed4e3SBram Moolenaar ], 'E488:') 24367a092245SBram Moolenaar CheckDefFailure([ 24377a092245SBram Moolenaar 'try', 2438a72cfb80SBram Moolenaar ' throw#comment', 2439a72cfb80SBram Moolenaar 'catch', 2440a72cfb80SBram Moolenaar 'endtry', 2441a72cfb80SBram Moolenaar ], 'E1015:') 2442a72cfb80SBram Moolenaar CheckDefFailure([ 2443a72cfb80SBram Moolenaar 'try', 2444a72cfb80SBram Moolenaar ' throw "yes"#comment', 2445a72cfb80SBram Moolenaar 'catch', 2446a72cfb80SBram Moolenaar 'endtry', 2447a72cfb80SBram Moolenaar ], 'E488:') 2448a72cfb80SBram Moolenaar CheckDefFailure([ 2449a72cfb80SBram Moolenaar 'try', 24507a092245SBram Moolenaar ' echo "yes"', 24517a092245SBram Moolenaar 'catch# comment', 24527a092245SBram Moolenaar 'endtry', 24537a092245SBram Moolenaar ], 'E488:') 24542c5ed4e3SBram Moolenaar CheckScriptFailure([ 24552c5ed4e3SBram Moolenaar 'vim9script', 24562c5ed4e3SBram Moolenaar 'try', 24572c5ed4e3SBram Moolenaar ' echo "yes"', 24582c5ed4e3SBram Moolenaar 'catch# comment', 24592c5ed4e3SBram Moolenaar 'endtry', 24602c5ed4e3SBram Moolenaar ], 'E654:') 24612c5ed4e3SBram Moolenaar CheckDefFailure([ 24622c5ed4e3SBram Moolenaar 'try', 24632c5ed4e3SBram Moolenaar ' echo "yes"', 24642c5ed4e3SBram Moolenaar 'catch /pat/# comment', 24652c5ed4e3SBram Moolenaar 'endtry', 24662c5ed4e3SBram Moolenaar ], 'E488:') 24677a092245SBram Moolenaar CheckDefFailure([ 24687a092245SBram Moolenaar 'try', 24697a092245SBram Moolenaar 'echo "yes"', 24707a092245SBram Moolenaar 'catch', 24717a092245SBram Moolenaar 'endtry# comment', 24727a092245SBram Moolenaar ], 'E488:') 24732c5ed4e3SBram Moolenaar CheckScriptFailure([ 24742c5ed4e3SBram Moolenaar 'vim9script', 24752c5ed4e3SBram Moolenaar 'try', 24762c5ed4e3SBram Moolenaar ' echo "yes"', 24772c5ed4e3SBram Moolenaar 'catch', 24782c5ed4e3SBram Moolenaar 'endtry# comment', 24799b7bf9e9SBram Moolenaar ], 'E488:') 24802c5ed4e3SBram Moolenaar 24812c5ed4e3SBram Moolenaar CheckScriptSuccess([ 24822c5ed4e3SBram Moolenaar 'vim9script', 24832c5ed4e3SBram Moolenaar 'hi # comment', 24842c5ed4e3SBram Moolenaar ]) 24852c5ed4e3SBram Moolenaar CheckScriptFailure([ 24862c5ed4e3SBram Moolenaar 'vim9script', 24872c5ed4e3SBram Moolenaar 'hi# comment', 24882c5ed4e3SBram Moolenaar ], 'E416:') 24891966c248SBram Moolenaar CheckScriptSuccess([ 24901966c248SBram Moolenaar 'vim9script', 24911966c248SBram Moolenaar 'hi Search # comment', 24921966c248SBram Moolenaar ]) 24931966c248SBram Moolenaar CheckScriptFailure([ 24941966c248SBram Moolenaar 'vim9script', 24951966c248SBram Moolenaar 'hi Search# comment', 24961966c248SBram Moolenaar ], 'E416:') 24971966c248SBram Moolenaar CheckScriptSuccess([ 24981966c248SBram Moolenaar 'vim9script', 24991966c248SBram Moolenaar 'hi link This Search # comment', 25001966c248SBram Moolenaar ]) 25011966c248SBram Moolenaar CheckScriptFailure([ 25021966c248SBram Moolenaar 'vim9script', 25031966c248SBram Moolenaar 'hi link This That# comment', 25041966c248SBram Moolenaar ], 'E413:') 25051966c248SBram Moolenaar CheckScriptSuccess([ 25061966c248SBram Moolenaar 'vim9script', 25071966c248SBram Moolenaar 'hi clear This # comment', 25081966c248SBram Moolenaar 'hi clear # comment', 25091966c248SBram Moolenaar ]) 2510f5be8cdbSBram Moolenaar # not tested, because it doesn't give an error but a warning: 2511f5be8cdbSBram Moolenaar # hi clear This# comment', 25121966c248SBram Moolenaar CheckScriptFailure([ 25131966c248SBram Moolenaar 'vim9script', 25141966c248SBram Moolenaar 'hi clear# comment', 25151966c248SBram Moolenaar ], 'E416:') 25161966c248SBram Moolenaar 25171966c248SBram Moolenaar CheckScriptSuccess([ 25181966c248SBram Moolenaar 'vim9script', 25191966c248SBram Moolenaar 'hi Group term=bold', 25201966c248SBram Moolenaar 'match Group /todo/ # comment', 25211966c248SBram Moolenaar ]) 25221966c248SBram Moolenaar CheckScriptFailure([ 25231966c248SBram Moolenaar 'vim9script', 25241966c248SBram Moolenaar 'hi Group term=bold', 25251966c248SBram Moolenaar 'match Group /todo/# comment', 25261966c248SBram Moolenaar ], 'E488:') 25271966c248SBram Moolenaar CheckScriptSuccess([ 25281966c248SBram Moolenaar 'vim9script', 25291966c248SBram Moolenaar 'match # comment', 25301966c248SBram Moolenaar ]) 25311966c248SBram Moolenaar CheckScriptFailure([ 25321966c248SBram Moolenaar 'vim9script', 25331966c248SBram Moolenaar 'match# comment', 25341966c248SBram Moolenaar ], 'E475:') 25351966c248SBram Moolenaar CheckScriptSuccess([ 25361966c248SBram Moolenaar 'vim9script', 25371966c248SBram Moolenaar 'match none # comment', 25381966c248SBram Moolenaar ]) 25391966c248SBram Moolenaar CheckScriptFailure([ 25401966c248SBram Moolenaar 'vim9script', 25411966c248SBram Moolenaar 'match none# comment', 25421966c248SBram Moolenaar ], 'E475:') 25431966c248SBram Moolenaar 25441966c248SBram Moolenaar CheckScriptSuccess([ 25451966c248SBram Moolenaar 'vim9script', 25461966c248SBram Moolenaar 'menutrans clear # comment', 25471966c248SBram Moolenaar ]) 25481966c248SBram Moolenaar CheckScriptFailure([ 25491966c248SBram Moolenaar 'vim9script', 25501966c248SBram Moolenaar 'menutrans clear# comment text', 25511966c248SBram Moolenaar ], 'E474:') 25521966c248SBram Moolenaar 25531966c248SBram Moolenaar CheckScriptSuccess([ 25541966c248SBram Moolenaar 'vim9script', 25551966c248SBram Moolenaar 'syntax clear # comment', 25561966c248SBram Moolenaar ]) 25571966c248SBram Moolenaar CheckScriptFailure([ 25581966c248SBram Moolenaar 'vim9script', 25591966c248SBram Moolenaar 'syntax clear# comment text', 25601966c248SBram Moolenaar ], 'E28:') 25611966c248SBram Moolenaar CheckScriptSuccess([ 25621966c248SBram Moolenaar 'vim9script', 25631966c248SBram Moolenaar 'syntax keyword Word some', 25641966c248SBram Moolenaar 'syntax clear Word # comment', 25651966c248SBram Moolenaar ]) 25661966c248SBram Moolenaar CheckScriptFailure([ 25671966c248SBram Moolenaar 'vim9script', 25681966c248SBram Moolenaar 'syntax keyword Word some', 25691966c248SBram Moolenaar 'syntax clear Word# comment text', 25701966c248SBram Moolenaar ], 'E28:') 25711966c248SBram Moolenaar 25721966c248SBram Moolenaar CheckScriptSuccess([ 25731966c248SBram Moolenaar 'vim9script', 25741966c248SBram Moolenaar 'syntax list # comment', 25751966c248SBram Moolenaar ]) 25761966c248SBram Moolenaar CheckScriptFailure([ 25771966c248SBram Moolenaar 'vim9script', 25781966c248SBram Moolenaar 'syntax list# comment text', 25791966c248SBram Moolenaar ], 'E28:') 25801966c248SBram Moolenaar 25811966c248SBram Moolenaar CheckScriptSuccess([ 25821966c248SBram Moolenaar 'vim9script', 25831966c248SBram Moolenaar 'syntax match Word /pat/ oneline # comment', 25841966c248SBram Moolenaar ]) 25851966c248SBram Moolenaar CheckScriptFailure([ 25861966c248SBram Moolenaar 'vim9script', 25871966c248SBram Moolenaar 'syntax match Word /pat/ oneline# comment', 25881966c248SBram Moolenaar ], 'E475:') 25891966c248SBram Moolenaar 25901966c248SBram Moolenaar CheckScriptSuccess([ 25911966c248SBram Moolenaar 'vim9script', 25921966c248SBram Moolenaar 'syntax keyword Word word # comm[ent', 25931966c248SBram Moolenaar ]) 25941966c248SBram Moolenaar CheckScriptFailure([ 25951966c248SBram Moolenaar 'vim9script', 25961966c248SBram Moolenaar 'syntax keyword Word word# comm[ent', 25971966c248SBram Moolenaar ], 'E789:') 25981966c248SBram Moolenaar 25991966c248SBram Moolenaar CheckScriptSuccess([ 26001966c248SBram Moolenaar 'vim9script', 26011966c248SBram Moolenaar 'syntax match Word /pat/ # comment', 26021966c248SBram Moolenaar ]) 26031966c248SBram Moolenaar CheckScriptFailure([ 26041966c248SBram Moolenaar 'vim9script', 26051966c248SBram Moolenaar 'syntax match Word /pat/# comment', 26061966c248SBram Moolenaar ], 'E402:') 26071966c248SBram Moolenaar 26081966c248SBram Moolenaar CheckScriptSuccess([ 26091966c248SBram Moolenaar 'vim9script', 26101966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something # comment', 26111966c248SBram Moolenaar ]) 26121966c248SBram Moolenaar CheckScriptFailure([ 26131966c248SBram Moolenaar 'vim9script', 26141966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something# comment', 26151966c248SBram Moolenaar ], 'E475:') 26161966c248SBram Moolenaar CheckScriptFailure([ 26171966c248SBram Moolenaar 'vim9script', 26181966c248SBram Moolenaar 'syntax match Word /pat/ contains= # comment', 26191966c248SBram Moolenaar ], 'E406:') 26201966c248SBram Moolenaar CheckScriptFailure([ 26211966c248SBram Moolenaar 'vim9script', 26221966c248SBram Moolenaar 'syntax match Word /pat/ contains=# comment', 26231966c248SBram Moolenaar ], 'E475:') 26241966c248SBram Moolenaar 26251966c248SBram Moolenaar CheckScriptSuccess([ 26261966c248SBram Moolenaar 'vim9script', 26271966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/ # comment', 26281966c248SBram Moolenaar ]) 26291966c248SBram Moolenaar CheckScriptFailure([ 26301966c248SBram Moolenaar 'vim9script', 26311966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/# comment', 2632d032f34aSBram Moolenaar ], 'E402:') 26331966c248SBram Moolenaar 26341966c248SBram Moolenaar CheckScriptSuccess([ 26351966c248SBram Moolenaar 'vim9script', 26361966c248SBram Moolenaar 'syntax sync # comment', 26371966c248SBram Moolenaar ]) 26381966c248SBram Moolenaar CheckScriptFailure([ 26391966c248SBram Moolenaar 'vim9script', 26401966c248SBram Moolenaar 'syntax sync# comment', 26411966c248SBram Moolenaar ], 'E404:') 26421966c248SBram Moolenaar CheckScriptSuccess([ 26431966c248SBram Moolenaar 'vim9script', 26441966c248SBram Moolenaar 'syntax sync ccomment # comment', 26451966c248SBram Moolenaar ]) 26461966c248SBram Moolenaar CheckScriptFailure([ 26471966c248SBram Moolenaar 'vim9script', 26481966c248SBram Moolenaar 'syntax sync ccomment# comment', 26491966c248SBram Moolenaar ], 'E404:') 26501966c248SBram Moolenaar 26511966c248SBram Moolenaar CheckScriptSuccess([ 26521966c248SBram Moolenaar 'vim9script', 26531966c248SBram Moolenaar 'syntax cluster Some contains=Word # comment', 26541966c248SBram Moolenaar ]) 26551966c248SBram Moolenaar CheckScriptFailure([ 26561966c248SBram Moolenaar 'vim9script', 26571966c248SBram Moolenaar 'syntax cluster Some contains=Word# comment', 26581966c248SBram Moolenaar ], 'E475:') 2659a72cfb80SBram Moolenaar 2660a72cfb80SBram Moolenaar CheckScriptSuccess([ 2661a72cfb80SBram Moolenaar 'vim9script', 2662a72cfb80SBram Moolenaar 'command Echo echo # comment', 2663a72cfb80SBram Moolenaar 'command Echo # comment', 2664a72cfb80SBram Moolenaar ]) 2665a72cfb80SBram Moolenaar CheckScriptFailure([ 2666a72cfb80SBram Moolenaar 'vim9script', 2667a72cfb80SBram Moolenaar 'command Echo echo# comment', 2668a72cfb80SBram Moolenaar 'Echo', 2669a72cfb80SBram Moolenaar ], 'E121:') 2670a72cfb80SBram Moolenaar CheckScriptFailure([ 2671a72cfb80SBram Moolenaar 'vim9script', 2672a72cfb80SBram Moolenaar 'command Echo# comment', 2673a72cfb80SBram Moolenaar ], 'E182:') 2674a72cfb80SBram Moolenaar CheckScriptFailure([ 2675a72cfb80SBram Moolenaar 'vim9script', 2676a72cfb80SBram Moolenaar 'command Echo echo', 2677a72cfb80SBram Moolenaar 'command Echo# comment', 2678a72cfb80SBram Moolenaar ], 'E182:') 2679a72cfb80SBram Moolenaar 2680a72cfb80SBram Moolenaar CheckScriptSuccess([ 2681a72cfb80SBram Moolenaar 'vim9script', 2682a72cfb80SBram Moolenaar 'function # comment', 2683a72cfb80SBram Moolenaar ]) 2684a72cfb80SBram Moolenaar CheckScriptFailure([ 2685a72cfb80SBram Moolenaar 'vim9script', 26869898107fSBram Moolenaar 'function " comment', 26879898107fSBram Moolenaar ], 'E129:') 26889898107fSBram Moolenaar CheckScriptFailure([ 26899898107fSBram Moolenaar 'vim9script', 2690a72cfb80SBram Moolenaar 'function# comment', 2691a72cfb80SBram Moolenaar ], 'E129:') 2692a72cfb80SBram Moolenaar CheckScriptSuccess([ 2693a72cfb80SBram Moolenaar 'vim9script', 2694a72cfb80SBram Moolenaar 'function CheckScriptSuccess # comment', 2695a72cfb80SBram Moolenaar ]) 2696a72cfb80SBram Moolenaar CheckScriptFailure([ 2697a72cfb80SBram Moolenaar 'vim9script', 2698a72cfb80SBram Moolenaar 'function CheckScriptSuccess# comment', 2699a72cfb80SBram Moolenaar ], 'E488:') 2700a72cfb80SBram Moolenaar 2701a72cfb80SBram Moolenaar CheckScriptSuccess([ 2702a72cfb80SBram Moolenaar 'vim9script', 27034c17ad94SBram Moolenaar 'func g:DeleteMeA()', 2704a72cfb80SBram Moolenaar 'endfunc', 27054c17ad94SBram Moolenaar 'delfunction g:DeleteMeA # comment', 2706a72cfb80SBram Moolenaar ]) 2707a72cfb80SBram Moolenaar CheckScriptFailure([ 2708a72cfb80SBram Moolenaar 'vim9script', 27094c17ad94SBram Moolenaar 'func g:DeleteMeB()', 2710a72cfb80SBram Moolenaar 'endfunc', 27114c17ad94SBram Moolenaar 'delfunction g:DeleteMeB# comment', 2712a72cfb80SBram Moolenaar ], 'E488:') 2713a72cfb80SBram Moolenaar 2714a72cfb80SBram Moolenaar CheckScriptSuccess([ 2715a72cfb80SBram Moolenaar 'vim9script', 2716a72cfb80SBram Moolenaar 'call execute("ls") # comment', 2717a72cfb80SBram Moolenaar ]) 2718a72cfb80SBram Moolenaar CheckScriptFailure([ 2719a72cfb80SBram Moolenaar 'vim9script', 2720a72cfb80SBram Moolenaar 'call execute("ls")# comment', 2721a72cfb80SBram Moolenaar ], 'E488:') 2722e7e4838fSBram Moolenaar 2723e7e4838fSBram Moolenaar CheckScriptFailure([ 2724e7e4838fSBram Moolenaar 'def Test() " comment', 2725e7e4838fSBram Moolenaar 'enddef', 2726e7e4838fSBram Moolenaar ], 'E488:') 2727e7e4838fSBram Moolenaar CheckScriptFailure([ 2728e7e4838fSBram Moolenaar 'vim9script', 2729e7e4838fSBram Moolenaar 'def Test() " comment', 2730e7e4838fSBram Moolenaar 'enddef', 2731e7e4838fSBram Moolenaar ], 'E488:') 2732e7e4838fSBram Moolenaar 2733e7e4838fSBram Moolenaar CheckScriptSuccess([ 2734e7e4838fSBram Moolenaar 'func Test() " comment', 2735e7e4838fSBram Moolenaar 'endfunc', 2736e7e4838fSBram Moolenaar ]) 27379898107fSBram Moolenaar CheckScriptSuccess([ 2738e7e4838fSBram Moolenaar 'vim9script', 2739e7e4838fSBram Moolenaar 'func Test() " comment', 2740e7e4838fSBram Moolenaar 'endfunc', 27419898107fSBram Moolenaar ]) 2742e7e4838fSBram Moolenaar 2743e7e4838fSBram Moolenaar CheckScriptSuccess([ 2744e7e4838fSBram Moolenaar 'def Test() # comment', 2745e7e4838fSBram Moolenaar 'enddef', 2746e7e4838fSBram Moolenaar ]) 2747e7e4838fSBram Moolenaar CheckScriptFailure([ 2748e7e4838fSBram Moolenaar 'func Test() # comment', 2749e7e4838fSBram Moolenaar 'endfunc', 2750e7e4838fSBram Moolenaar ], 'E488:') 27512c5ed4e3SBram Moolenaarenddef 27522c5ed4e3SBram Moolenaar 27532c5ed4e3SBram Moolenaardef Test_vim9_comment_gui() 27542c5ed4e3SBram Moolenaar CheckCanRunGui 27552c5ed4e3SBram Moolenaar 27562c5ed4e3SBram Moolenaar CheckScriptFailure([ 27572c5ed4e3SBram Moolenaar 'vim9script', 27582c5ed4e3SBram Moolenaar 'gui#comment' 27592c5ed4e3SBram Moolenaar ], 'E499:') 27602c5ed4e3SBram Moolenaar CheckScriptFailure([ 27612c5ed4e3SBram Moolenaar 'vim9script', 27622c5ed4e3SBram Moolenaar 'gui -f#comment' 27632c5ed4e3SBram Moolenaar ], 'E499:') 27647a092245SBram Moolenaarenddef 27657a092245SBram Moolenaar 2766a26b9700SBram Moolenaardef Test_vim9_comment_not_compiled() 27676797966dSBram Moolenaar au TabEnter *.vim g:entered = 1 27686797966dSBram Moolenaar au TabEnter *.x g:entered = 2 2769a26b9700SBram Moolenaar 2770a26b9700SBram Moolenaar edit test.vim 2771a26b9700SBram Moolenaar doautocmd TabEnter #comment 2772a26b9700SBram Moolenaar assert_equal(1, g:entered) 2773a26b9700SBram Moolenaar 2774a26b9700SBram Moolenaar doautocmd TabEnter f.x 2775a26b9700SBram Moolenaar assert_equal(2, g:entered) 2776a26b9700SBram Moolenaar 2777a26b9700SBram Moolenaar g:entered = 0 2778a26b9700SBram Moolenaar doautocmd TabEnter f.x #comment 2779a26b9700SBram Moolenaar assert_equal(2, g:entered) 2780a26b9700SBram Moolenaar 2781a26b9700SBram Moolenaar assert_fails('doautocmd Syntax#comment', 'E216:') 2782a26b9700SBram Moolenaar 2783a26b9700SBram Moolenaar au! TabEnter 2784a26b9700SBram Moolenaar unlet g:entered 2785d72c1bf0SBram Moolenaar 2786d72c1bf0SBram Moolenaar CheckScriptSuccess([ 2787d72c1bf0SBram Moolenaar 'vim9script', 27886797966dSBram Moolenaar 'g:var = 123', 2789e55b1c09SBram Moolenaar 'b:var = 456', 2790e55b1c09SBram Moolenaar 'w:var = 777', 2791e55b1c09SBram Moolenaar 't:var = 888', 2792d72c1bf0SBram Moolenaar 'unlet g:var w:var # something', 2793d72c1bf0SBram Moolenaar ]) 2794d72c1bf0SBram Moolenaar 2795d72c1bf0SBram Moolenaar CheckScriptFailure([ 2796d72c1bf0SBram Moolenaar 'vim9script', 2797d72c1bf0SBram Moolenaar 'let g:var = 123', 2798e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a global variable:') 2799e55b1c09SBram Moolenaar 2800e55b1c09SBram Moolenaar CheckScriptFailure([ 2801e55b1c09SBram Moolenaar 'vim9script', 2802e55b1c09SBram Moolenaar 'let b:var = 123', 2803e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a buffer variable:') 2804e55b1c09SBram Moolenaar 2805e55b1c09SBram Moolenaar CheckScriptFailure([ 2806e55b1c09SBram Moolenaar 'vim9script', 2807e55b1c09SBram Moolenaar 'let w:var = 123', 2808e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a window variable:') 2809e55b1c09SBram Moolenaar 2810e55b1c09SBram Moolenaar CheckScriptFailure([ 2811e55b1c09SBram Moolenaar 'vim9script', 2812e55b1c09SBram Moolenaar 'let t:var = 123', 2813e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a tab variable:') 2814e55b1c09SBram Moolenaar 2815e55b1c09SBram Moolenaar CheckScriptFailure([ 2816e55b1c09SBram Moolenaar 'vim9script', 2817e55b1c09SBram Moolenaar 'let v:version = 123', 2818e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a v: variable:') 2819e55b1c09SBram Moolenaar 2820e55b1c09SBram Moolenaar CheckScriptFailure([ 2821e55b1c09SBram Moolenaar 'vim9script', 2822e55b1c09SBram Moolenaar 'let $VARIABLE = "text"', 2823e55b1c09SBram Moolenaar ], 'E1016: Cannot declare an environment variable:') 28246797966dSBram Moolenaar 28256797966dSBram Moolenaar CheckScriptFailure([ 28266797966dSBram Moolenaar 'vim9script', 28276797966dSBram Moolenaar 'g:var = 123', 282832e35117SBram Moolenaar 'unlet g:var# comment1', 2829d72c1bf0SBram Moolenaar ], 'E108:') 2830d72c1bf0SBram Moolenaar 2831d72c1bf0SBram Moolenaar CheckScriptFailure([ 2832d72c1bf0SBram Moolenaar 'let g:var = 123', 2833d72c1bf0SBram Moolenaar 'unlet g:var # something', 2834d72c1bf0SBram Moolenaar ], 'E488:') 2835faac4104SBram Moolenaar 2836faac4104SBram Moolenaar CheckScriptSuccess([ 2837faac4104SBram Moolenaar 'vim9script', 283832e35117SBram Moolenaar 'if 1 # comment2', 2839faac4104SBram Moolenaar ' echo "yes"', 2840faac4104SBram Moolenaar 'elseif 2 #comment', 2841faac4104SBram Moolenaar ' echo "no"', 2842faac4104SBram Moolenaar 'endif', 2843faac4104SBram Moolenaar ]) 2844faac4104SBram Moolenaar 2845faac4104SBram Moolenaar CheckScriptFailure([ 2846faac4104SBram Moolenaar 'vim9script', 284732e35117SBram Moolenaar 'if 1# comment3', 2848faac4104SBram Moolenaar ' echo "yes"', 2849faac4104SBram Moolenaar 'endif', 2850faac4104SBram Moolenaar ], 'E15:') 2851faac4104SBram Moolenaar 2852faac4104SBram Moolenaar CheckScriptFailure([ 2853faac4104SBram Moolenaar 'vim9script', 285432e35117SBram Moolenaar 'if 0 # comment4', 2855faac4104SBram Moolenaar ' echo "yes"', 2856faac4104SBram Moolenaar 'elseif 2#comment', 2857faac4104SBram Moolenaar ' echo "no"', 2858faac4104SBram Moolenaar 'endif', 2859faac4104SBram Moolenaar ], 'E15:') 2860faac4104SBram Moolenaar 2861faac4104SBram Moolenaar CheckScriptSuccess([ 2862faac4104SBram Moolenaar 'vim9script', 286332e35117SBram Moolenaar 'let v = 1 # comment5', 2864faac4104SBram Moolenaar ]) 2865faac4104SBram Moolenaar 2866faac4104SBram Moolenaar CheckScriptFailure([ 2867faac4104SBram Moolenaar 'vim9script', 286832e35117SBram Moolenaar 'let v = 1# comment6', 286932e35117SBram Moolenaar ], 'E15:') 2870faac4104SBram Moolenaar 2871faac4104SBram Moolenaar CheckScriptSuccess([ 2872faac4104SBram Moolenaar 'vim9script', 2873faac4104SBram Moolenaar 'new' 2874faac4104SBram Moolenaar 'call setline(1, ["# define pat", "last"])', 2875df069eecSBram Moolenaar ':$', 2876faac4104SBram Moolenaar 'dsearch /pat/ #comment', 2877faac4104SBram Moolenaar 'bwipe!', 2878faac4104SBram Moolenaar ]) 2879faac4104SBram Moolenaar 2880f5be8cdbSBram Moolenaar CheckScriptFailure([ 2881f5be8cdbSBram Moolenaar 'vim9script', 2882f5be8cdbSBram Moolenaar 'new' 2883f5be8cdbSBram Moolenaar 'call setline(1, ["# define pat", "last"])', 2884f5be8cdbSBram Moolenaar ':$', 2885f5be8cdbSBram Moolenaar 'dsearch /pat/#comment', 2886f5be8cdbSBram Moolenaar 'bwipe!', 2887f5be8cdbSBram Moolenaar ], 'E488:') 2888f5be8cdbSBram Moolenaar 2889f5be8cdbSBram Moolenaar CheckScriptFailure([ 2890f5be8cdbSBram Moolenaar 'vim9script', 2891f5be8cdbSBram Moolenaar 'func! SomeFunc()', 2892f5be8cdbSBram Moolenaar ], 'E477:') 2893a26b9700SBram Moolenaarenddef 2894a26b9700SBram Moolenaar 28957e5bd91dSBram Moolenaardef Test_finish() 28967e5bd91dSBram Moolenaar let lines =<< trim END 28977e5bd91dSBram Moolenaar vim9script 28986797966dSBram Moolenaar g:res = 'one' 28997e5bd91dSBram Moolenaar if v:false | finish | endif 29006797966dSBram Moolenaar g:res = 'two' 29017e5bd91dSBram Moolenaar finish 29026797966dSBram Moolenaar g:res = 'three' 29037e5bd91dSBram Moolenaar END 29047e5bd91dSBram Moolenaar writefile(lines, 'Xfinished') 29057e5bd91dSBram Moolenaar source Xfinished 29067e5bd91dSBram Moolenaar assert_equal('two', g:res) 29077e5bd91dSBram Moolenaar 29087e5bd91dSBram Moolenaar unlet g:res 29097e5bd91dSBram Moolenaar delete('Xfinished') 29107e5bd91dSBram Moolenaarenddef 29117e5bd91dSBram Moolenaar 291232e35117SBram Moolenaardef Test_let_func_call() 291332e35117SBram Moolenaar let lines =<< trim END 291432e35117SBram Moolenaar vim9script 291532e35117SBram Moolenaar func GetValue() 291632e35117SBram Moolenaar if exists('g:count') 291732e35117SBram Moolenaar let g:count += 1 291832e35117SBram Moolenaar else 291932e35117SBram Moolenaar let g:count = 1 292032e35117SBram Moolenaar endif 292132e35117SBram Moolenaar return 'this' 292232e35117SBram Moolenaar endfunc 292332e35117SBram Moolenaar let val: string = GetValue() 2924f5be8cdbSBram Moolenaar # env var is always a string 2925df671b46SBram Moolenaar let env = $TERM 292632e35117SBram Moolenaar END 292732e35117SBram Moolenaar writefile(lines, 'Xfinished') 292832e35117SBram Moolenaar source Xfinished 2929f5be8cdbSBram Moolenaar # GetValue() is not called during discovery phase 293032e35117SBram Moolenaar assert_equal(1, g:count) 293132e35117SBram Moolenaar 293232e35117SBram Moolenaar unlet g:count 293332e35117SBram Moolenaar delete('Xfinished') 293432e35117SBram Moolenaarenddef 293532e35117SBram Moolenaar 293632e35117SBram Moolenaardef Test_let_missing_type() 293732e35117SBram Moolenaar let lines =<< trim END 293832e35117SBram Moolenaar vim9script 2939df671b46SBram Moolenaar let var = g:unknown 2940227a69deSBram Moolenaar END 2941822ba247SBram Moolenaar CheckScriptFailure(lines, 'E121:') 2942227a69deSBram Moolenaar 2943227a69deSBram Moolenaar lines =<< trim END 2944227a69deSBram Moolenaar vim9script 2945227a69deSBram Moolenaar let nr: number = 123 2946227a69deSBram Moolenaar let var = nr 2947227a69deSBram Moolenaar END 2948822ba247SBram Moolenaar CheckScriptSuccess(lines) 294932e35117SBram Moolenaarenddef 295032e35117SBram Moolenaar 2951c82a5b5dSBram Moolenaardef Test_let_declaration() 2952c82a5b5dSBram Moolenaar let lines =<< trim END 2953c82a5b5dSBram Moolenaar vim9script 2954c82a5b5dSBram Moolenaar let var: string 2955c82a5b5dSBram Moolenaar g:var_uninit = var 2956c82a5b5dSBram Moolenaar var = 'text' 2957c82a5b5dSBram Moolenaar g:var_test = var 2958f5be8cdbSBram Moolenaar # prefixing s: is optional 2959984dddbeSBram Moolenaar s:var = 'prefixed' 2960984dddbeSBram Moolenaar g:var_prefixed = s:var 2961984dddbeSBram Moolenaar 2962984dddbeSBram Moolenaar let s:other: number 2963984dddbeSBram Moolenaar other = 1234 2964984dddbeSBram Moolenaar g:other_var = other 296553b29e48SBram Moolenaar 296653b29e48SBram Moolenaar # type is inferred 296753b29e48SBram Moolenaar s:dict = {'a': 222} 296853b29e48SBram Moolenaar def GetDictVal(key: any) 296953b29e48SBram Moolenaar g:dict_val = s:dict[key] 297053b29e48SBram Moolenaar enddef 297153b29e48SBram Moolenaar GetDictVal('a') 2972c82a5b5dSBram Moolenaar END 2973c82a5b5dSBram Moolenaar CheckScriptSuccess(lines) 2974c82a5b5dSBram Moolenaar assert_equal('', g:var_uninit) 2975c82a5b5dSBram Moolenaar assert_equal('text', g:var_test) 2976984dddbeSBram Moolenaar assert_equal('prefixed', g:var_prefixed) 2977984dddbeSBram Moolenaar assert_equal(1234, g:other_var) 297853b29e48SBram Moolenaar assert_equal(222, g:dict_val) 2979c82a5b5dSBram Moolenaar 2980c82a5b5dSBram Moolenaar unlet g:var_uninit 2981c82a5b5dSBram Moolenaar unlet g:var_test 2982984dddbeSBram Moolenaar unlet g:var_prefixed 2983984dddbeSBram Moolenaar unlet g:other_var 2984c82a5b5dSBram Moolenaarenddef 2985c82a5b5dSBram Moolenaar 2986c5b1c20bSBram Moolenaardef Test_let_declaration_fails() 2987c5b1c20bSBram Moolenaar let lines =<< trim END 2988c5b1c20bSBram Moolenaar vim9script 2989c5b1c20bSBram Moolenaar const var: string 2990c5b1c20bSBram Moolenaar END 2991c5b1c20bSBram Moolenaar CheckScriptFailure(lines, 'E1021:') 2992c5b1c20bSBram Moolenaar 2993c5b1c20bSBram Moolenaar lines =<< trim END 2994c5b1c20bSBram Moolenaar vim9script 2995c5b1c20bSBram Moolenaar let 9var: string 2996c5b1c20bSBram Moolenaar END 2997c5b1c20bSBram Moolenaar CheckScriptFailure(lines, 'E475:') 2998c5b1c20bSBram Moolenaarenddef 2999c5b1c20bSBram Moolenaar 300034db91f7SBram Moolenaardef Test_let_type_check() 300134db91f7SBram Moolenaar let lines =<< trim END 300234db91f7SBram Moolenaar vim9script 300334db91f7SBram Moolenaar let var: string 300434db91f7SBram Moolenaar var = 1234 300534db91f7SBram Moolenaar END 3006451c2e35SBram Moolenaar CheckScriptFailure(lines, 'E1012:') 3007984dddbeSBram Moolenaar 3008984dddbeSBram Moolenaar lines =<< trim END 3009984dddbeSBram Moolenaar vim9script 3010984dddbeSBram Moolenaar let var:string 3011984dddbeSBram Moolenaar END 3012984dddbeSBram Moolenaar CheckScriptFailure(lines, 'E1069:') 3013c5b1c20bSBram Moolenaar 3014c5b1c20bSBram Moolenaar lines =<< trim END 3015c5b1c20bSBram Moolenaar vim9script 3016c5b1c20bSBram Moolenaar let var: asdf 3017c5b1c20bSBram Moolenaar END 3018c5b1c20bSBram Moolenaar CheckScriptFailure(lines, 'E1010:') 3019a71e2633SBram Moolenaar 3020a71e2633SBram Moolenaar lines =<< trim END 3021a71e2633SBram Moolenaar vim9script 3022a71e2633SBram Moolenaar let s:l: list<number> 3023a71e2633SBram Moolenaar s:l = [] 3024a71e2633SBram Moolenaar END 3025a71e2633SBram Moolenaar CheckScriptSuccess(lines) 3026a71e2633SBram Moolenaar 3027a71e2633SBram Moolenaar lines =<< trim END 3028a71e2633SBram Moolenaar vim9script 3029a71e2633SBram Moolenaar let s:d: dict<number> 3030a71e2633SBram Moolenaar s:d = {} 3031a71e2633SBram Moolenaar END 3032a71e2633SBram Moolenaar CheckScriptSuccess(lines) 303334db91f7SBram Moolenaarenddef 303434db91f7SBram Moolenaar 3035a5d0077eSBram Moolenaardef Test_forward_declaration() 3036a5d0077eSBram Moolenaar let lines =<< trim END 3037a5d0077eSBram Moolenaar vim9script 3038a5d0077eSBram Moolenaar def GetValue(): string 3039a5d0077eSBram Moolenaar return theVal 3040a5d0077eSBram Moolenaar enddef 3041a5d0077eSBram Moolenaar let theVal = 'something' 3042822ba247SBram Moolenaar g:initVal = GetValue() 3043a5d0077eSBram Moolenaar theVal = 'else' 3044a5d0077eSBram Moolenaar g:laterVal = GetValue() 3045a5d0077eSBram Moolenaar END 3046a5d0077eSBram Moolenaar writefile(lines, 'Xforward') 3047a5d0077eSBram Moolenaar source Xforward 3048a5d0077eSBram Moolenaar assert_equal('something', g:initVal) 3049a5d0077eSBram Moolenaar assert_equal('else', g:laterVal) 3050a5d0077eSBram Moolenaar 3051a5d0077eSBram Moolenaar unlet g:initVal 3052a5d0077eSBram Moolenaar unlet g:laterVal 3053a5d0077eSBram Moolenaar delete('Xforward') 3054a5d0077eSBram Moolenaarenddef 3055a5d0077eSBram Moolenaar 30569721fb4eSBram Moolenaardef Test_source_vim9_from_legacy() 30579721fb4eSBram Moolenaar let legacy_lines =<< trim END 30589721fb4eSBram Moolenaar source Xvim9_script.vim 30599721fb4eSBram Moolenaar 30609721fb4eSBram Moolenaar call assert_false(exists('local')) 30619721fb4eSBram Moolenaar call assert_false(exists('exported')) 30629721fb4eSBram Moolenaar call assert_false(exists('s:exported')) 30639721fb4eSBram Moolenaar call assert_equal('global', global) 30649721fb4eSBram Moolenaar call assert_equal('global', g:global) 30659721fb4eSBram Moolenaar 30669721fb4eSBram Moolenaar " imported variable becomes script-local 30679721fb4eSBram Moolenaar import exported from './Xvim9_script.vim' 30689721fb4eSBram Moolenaar call assert_equal('exported', s:exported) 30699721fb4eSBram Moolenaar call assert_false(exists('exported')) 30709721fb4eSBram Moolenaar 30719721fb4eSBram Moolenaar " imported function becomes script-local 30729721fb4eSBram Moolenaar import GetText from './Xvim9_script.vim' 30739721fb4eSBram Moolenaar call assert_equal('text', s:GetText()) 30749721fb4eSBram Moolenaar call assert_false(exists('*GetText')) 30759721fb4eSBram Moolenaar END 30769721fb4eSBram Moolenaar writefile(legacy_lines, 'Xlegacy_script.vim') 30779721fb4eSBram Moolenaar 30789721fb4eSBram Moolenaar let vim9_lines =<< trim END 30799721fb4eSBram Moolenaar vim9script 30809721fb4eSBram Moolenaar let local = 'local' 30819721fb4eSBram Moolenaar g:global = 'global' 30829721fb4eSBram Moolenaar export let exported = 'exported' 30839721fb4eSBram Moolenaar export def GetText(): string 30849721fb4eSBram Moolenaar return 'text' 30859721fb4eSBram Moolenaar enddef 30869721fb4eSBram Moolenaar END 30879721fb4eSBram Moolenaar writefile(vim9_lines, 'Xvim9_script.vim') 30889721fb4eSBram Moolenaar 30899721fb4eSBram Moolenaar source Xlegacy_script.vim 30909721fb4eSBram Moolenaar 30919721fb4eSBram Moolenaar assert_equal('global', g:global) 3092f5be8cdbSBram Moolenaar unlet g:global 30939721fb4eSBram Moolenaar 30949721fb4eSBram Moolenaar delete('Xlegacy_script.vim') 30959721fb4eSBram Moolenaar delete('Xvim9_script.vim') 30969721fb4eSBram Moolenaarenddef 3097a5d0077eSBram Moolenaar 30987d699701SBram Moolenaarfunc Test_vim9script_not_global() 30997d699701SBram Moolenaar " check that items defined in Vim9 script are script-local, not global 31007d699701SBram Moolenaar let vim9lines =<< trim END 31017d699701SBram Moolenaar vim9script 31027d699701SBram Moolenaar let var = 'local' 31037d699701SBram Moolenaar func TheFunc() 31047d699701SBram Moolenaar echo 'local' 31057d699701SBram Moolenaar endfunc 31067d699701SBram Moolenaar def DefFunc() 31077d699701SBram Moolenaar echo 'local' 31087d699701SBram Moolenaar enddef 31097d699701SBram Moolenaar END 31107d699701SBram Moolenaar call writefile(vim9lines, 'Xvim9script.vim') 31117d699701SBram Moolenaar source Xvim9script.vim 31127d699701SBram Moolenaar try 31137d699701SBram Moolenaar echo g:var 31147d699701SBram Moolenaar assert_report('did not fail') 31157d699701SBram Moolenaar catch /E121:/ 31167d699701SBram Moolenaar " caught 31177d699701SBram Moolenaar endtry 31187d699701SBram Moolenaar try 31197d699701SBram Moolenaar call TheFunc() 31207d699701SBram Moolenaar assert_report('did not fail') 31217d699701SBram Moolenaar catch /E117:/ 31227d699701SBram Moolenaar " caught 31237d699701SBram Moolenaar endtry 31247d699701SBram Moolenaar try 31257d699701SBram Moolenaar call DefFunc() 31267d699701SBram Moolenaar assert_report('did not fail') 31277d699701SBram Moolenaar catch /E117:/ 31287d699701SBram Moolenaar " caught 31297d699701SBram Moolenaar endtry 31307d699701SBram Moolenaar 31317d699701SBram Moolenaar call delete('Xvim9script.vium') 31327d699701SBram Moolenaarendfunc 31337d699701SBram Moolenaar 3134eeb27bfeSBram Moolenaardef Test_vim9_copen() 3135eeb27bfeSBram Moolenaar # this was giving an error for setting w:quickfix_title 3136eeb27bfeSBram Moolenaar copen 3137eeb27bfeSBram Moolenaar quit 3138eeb27bfeSBram Moolenaarenddef 3139eeb27bfeSBram Moolenaar 31402d6b20d6SBram Moolenaar" test using a vim9script that is auto-loaded from an autocmd 31412d6b20d6SBram Moolenaardef Test_vim9_autoload() 31422d6b20d6SBram Moolenaar let lines =<< trim END 31432d6b20d6SBram Moolenaar vim9script 31442d6b20d6SBram Moolenaar def foo#test() 31452d6b20d6SBram Moolenaar echomsg getreg('"') 31462d6b20d6SBram Moolenaar enddef 31472d6b20d6SBram Moolenaar END 31482d6b20d6SBram Moolenaar 31492d6b20d6SBram Moolenaar mkdir('Xdir/autoload', 'p') 31502d6b20d6SBram Moolenaar writefile(lines, 'Xdir/autoload/foo.vim') 31512d6b20d6SBram Moolenaar let save_rtp = &rtp 31522d6b20d6SBram Moolenaar exe 'set rtp^=' .. getcwd() .. '/Xdir' 31532d6b20d6SBram Moolenaar augroup test 31542d6b20d6SBram Moolenaar autocmd TextYankPost * call foo#test() 31552d6b20d6SBram Moolenaar augroup END 31562d6b20d6SBram Moolenaar 31572d6b20d6SBram Moolenaar normal Y 31582d6b20d6SBram Moolenaar 31592d6b20d6SBram Moolenaar augroup test 31602d6b20d6SBram Moolenaar autocmd! 31612d6b20d6SBram Moolenaar augroup END 31622d6b20d6SBram Moolenaar delete('Xdir', 'rf') 31632d6b20d6SBram Moolenaar &rtp = save_rtp 31642d6b20d6SBram Moolenaarenddef 31652d6b20d6SBram Moolenaar 31663896a105SBram Moolenaardef Test_cmdline_win() 31673896a105SBram Moolenaar # if the Vim syntax highlighting uses Vim9 constructs they can be used from 31683896a105SBram Moolenaar # the command line window. 31693896a105SBram Moolenaar mkdir('rtp/syntax', 'p') 31703896a105SBram Moolenaar let export_lines =<< trim END 31713896a105SBram Moolenaar vim9script 31723896a105SBram Moolenaar export let That = 'yes' 31733896a105SBram Moolenaar END 31743896a105SBram Moolenaar writefile(export_lines, 'rtp/syntax/Xexport.vim') 31753896a105SBram Moolenaar let import_lines =<< trim END 31763896a105SBram Moolenaar vim9script 31773896a105SBram Moolenaar import That from './Xexport.vim' 31783896a105SBram Moolenaar END 31793896a105SBram Moolenaar writefile(import_lines, 'rtp/syntax/vim.vim') 31803896a105SBram Moolenaar let save_rtp = &rtp 31813896a105SBram Moolenaar &rtp = getcwd() .. '/rtp' .. ',' .. &rtp 31823896a105SBram Moolenaar syntax on 31833896a105SBram Moolenaar augroup CmdWin 31843896a105SBram Moolenaar autocmd CmdwinEnter * g:got_there = 'yes' 31853896a105SBram Moolenaar augroup END 31863896a105SBram Moolenaar # this will open and also close the cmdline window 31873896a105SBram Moolenaar feedkeys('q:', 'xt') 31883896a105SBram Moolenaar assert_equal('yes', g:got_there) 31893896a105SBram Moolenaar 31903896a105SBram Moolenaar augroup CmdWin 31913896a105SBram Moolenaar au! 31923896a105SBram Moolenaar augroup END 31933896a105SBram Moolenaar &rtp = save_rtp 31943896a105SBram Moolenaar delete('rtp', 'rf') 31953896a105SBram Moolenaarenddef 31963896a105SBram Moolenaar 3197585fea7bSBram Moolenaar" Keep this last, it messes up highlighting. 3198585fea7bSBram Moolenaardef Test_substitute_cmd() 3199585fea7bSBram Moolenaar new 3200585fea7bSBram Moolenaar setline(1, 'something') 3201585fea7bSBram Moolenaar :substitute(some(other( 3202585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 3203585fea7bSBram Moolenaar bwipe! 3204585fea7bSBram Moolenaar 3205f5be8cdbSBram Moolenaar # also when the context is Vim9 script 3206585fea7bSBram Moolenaar let lines =<< trim END 3207585fea7bSBram Moolenaar vim9script 3208585fea7bSBram Moolenaar new 3209585fea7bSBram Moolenaar setline(1, 'something') 3210585fea7bSBram Moolenaar :substitute(some(other( 3211585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 3212585fea7bSBram Moolenaar bwipe! 3213585fea7bSBram Moolenaar END 3214585fea7bSBram Moolenaar writefile(lines, 'Xvim9lines') 3215585fea7bSBram Moolenaar source Xvim9lines 3216585fea7bSBram Moolenaar 3217585fea7bSBram Moolenaar delete('Xvim9lines') 3218585fea7bSBram Moolenaarenddef 3219585fea7bSBram Moolenaar 32208a7d6542SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker 3221