18a7d6542SBram Moolenaar" Test various aspects of the Vim9 script language. 28a7d6542SBram Moolenaar 3673660abSBram Moolenaarsource check.vim 4101f4810SBram Moolenaarsource term_util.vim 5ad39c094SBram Moolenaarsource view_util.vim 6cfe435d7SBram Moolenaarsource vim9.vim 78a7d6542SBram Moolenaar 88a7d6542SBram Moolenaardef Test_syntax() 98a7d6542SBram Moolenaar let var = 234 108a7d6542SBram Moolenaar let other: list<string> = ['asdf'] 118a7d6542SBram Moolenaarenddef 128a7d6542SBram Moolenaar 135d72ce69SBram Moolenaardef Test_range_only() 145d72ce69SBram Moolenaar new 155d72ce69SBram Moolenaar setline(1, ['blah', 'Blah']) 165d72ce69SBram Moolenaar :/Blah/ 175d72ce69SBram Moolenaar assert_equal(2, getcurpos()[1]) 185d72ce69SBram Moolenaarenddef 195d72ce69SBram 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:') 572122616d9SBram Moolenaar call CheckDefFailure(['let xnr += 4'], 'E1020:', 1) 573122616d9SBram Moolenaar call CheckScriptFailure(['vim9script', 'let xnr += 4'], 'E1020:') 574122616d9SBram Moolenaar call CheckDefFailure(["let xnr = xnr + 1"], 'E1001:', 1) 575122616d9SBram Moolenaar call CheckScriptFailure(['vim9script', 'let xnr = xnr + 4'], 'E121:') 5769be61bbbSBram Moolenaar 577451c2e35SBram Moolenaar call CheckScriptFailure(['vim9script', 'def Func()', 'let dummy = s:notfound', 'enddef', 'defcompile'], 'E1108:') 57833fa29cfSBram Moolenaar 5798a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<string> = [123]'], 'expected list<string> but got list<number>') 5808a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<number> = ["xx"]'], 'expected list<number> but got list<string>') 5818a7d6542SBram Moolenaar 5828a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<string> = #{key: 123}'], 'expected dict<string> but got dict<number>') 5838a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<number> = #{key: "xx"}'], 'expected dict<number> but got dict<string>') 5848a7d6542SBram Moolenaar 5858a7d6542SBram Moolenaar call CheckDefFailure(['let var = feedkeys("0")'], 'E1031:') 5868a7d6542SBram Moolenaar call CheckDefFailure(['let var: number = feedkeys("0")'], 'expected number but got void') 58742a480bfSBram Moolenaar 588d77a8525SBram Moolenaar call CheckDefFailure(['let var: dict <number>'], 'E1068:') 58942a480bfSBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 590cab27678SBram Moolenaar 591cab27678SBram Moolenaar call assert_fails('s/^/\=Mess()/n', 'E794:') 592cab27678SBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 59343e969d3SBram Moolenaar 59443e969d3SBram Moolenaar call CheckDefFailure(['w:foo: number = 10'], 59543e969d3SBram Moolenaar 'E488: Trailing characters: : number = 1') 59643e969d3SBram Moolenaar call CheckDefFailure(['t:foo: bool = true'], 59743e969d3SBram Moolenaar 'E488: Trailing characters: : bool = true') 59843e969d3SBram Moolenaar call CheckDefFailure(['b:foo: string = "x"'], 59943e969d3SBram Moolenaar 'E488: Trailing characters: : string = "x"') 60043e969d3SBram Moolenaar call CheckDefFailure(['g:foo: number = 123'], 60143e969d3SBram Moolenaar 'E488: Trailing characters: : number = 123') 602d72c1bf0SBram Moolenaarenddef 603d72c1bf0SBram Moolenaar 604d72c1bf0SBram Moolenaardef Test_unlet() 605d72c1bf0SBram Moolenaar g:somevar = 'yes' 606d72c1bf0SBram Moolenaar assert_true(exists('g:somevar')) 607d72c1bf0SBram Moolenaar unlet g:somevar 608d72c1bf0SBram Moolenaar assert_false(exists('g:somevar')) 609d72c1bf0SBram Moolenaar unlet! g:somevar 610d72c1bf0SBram Moolenaar 6118436773fSBram Moolenaar # also works for script-local variable in legacy Vim script 6128436773fSBram Moolenaar s:somevar = 'legacy' 6138436773fSBram Moolenaar assert_true(exists('s:somevar')) 6148436773fSBram Moolenaar unlet s:somevar 6158436773fSBram Moolenaar assert_false(exists('s:somevar')) 6168436773fSBram Moolenaar unlet! s:somevar 6178436773fSBram Moolenaar 618d72c1bf0SBram Moolenaar call CheckScriptFailure([ 619d72c1bf0SBram Moolenaar 'vim9script', 620d72c1bf0SBram Moolenaar 'let svar = 123', 621d72c1bf0SBram Moolenaar 'unlet svar', 622d72c1bf0SBram Moolenaar ], 'E1081:') 623d72c1bf0SBram Moolenaar call CheckScriptFailure([ 624d72c1bf0SBram Moolenaar 'vim9script', 625d72c1bf0SBram Moolenaar 'let svar = 123', 626d72c1bf0SBram Moolenaar 'unlet s:svar', 627d72c1bf0SBram Moolenaar ], 'E1081:') 628d72c1bf0SBram Moolenaar call CheckScriptFailure([ 629d72c1bf0SBram Moolenaar 'vim9script', 630d72c1bf0SBram Moolenaar 'let svar = 123', 631d72c1bf0SBram Moolenaar 'def Func()', 632d72c1bf0SBram Moolenaar ' unlet svar', 633d72c1bf0SBram Moolenaar 'enddef', 634822ba247SBram Moolenaar 'defcompile', 635d72c1bf0SBram Moolenaar ], 'E1081:') 636d72c1bf0SBram Moolenaar call CheckScriptFailure([ 637d72c1bf0SBram Moolenaar 'vim9script', 638d72c1bf0SBram Moolenaar 'let svar = 123', 639d72c1bf0SBram Moolenaar 'def Func()', 640d72c1bf0SBram Moolenaar ' unlet s:svar', 641d72c1bf0SBram Moolenaar 'enddef', 642822ba247SBram Moolenaar 'defcompile', 643d72c1bf0SBram Moolenaar ], 'E1081:') 6447bdaea6eSBram Moolenaar 6457bdaea6eSBram Moolenaar $ENVVAR = 'foobar' 6467bdaea6eSBram Moolenaar assert_equal('foobar', $ENVVAR) 6477bdaea6eSBram Moolenaar unlet $ENVVAR 6487bdaea6eSBram Moolenaar assert_equal('', $ENVVAR) 649d72c1bf0SBram Moolenaarenddef 650599c89c8SBram Moolenaar 6514c17ad94SBram Moolenaardef Test_delfunction() 652f5be8cdbSBram Moolenaar # Check function is defined in script namespace 6534c17ad94SBram Moolenaar CheckScriptSuccess([ 6544c17ad94SBram Moolenaar 'vim9script', 6554c17ad94SBram Moolenaar 'func CheckMe()', 6564c17ad94SBram Moolenaar ' return 123', 6574c17ad94SBram Moolenaar 'endfunc', 6584c17ad94SBram Moolenaar 'assert_equal(123, s:CheckMe())', 6594c17ad94SBram Moolenaar ]) 6604c17ad94SBram Moolenaar 661f5be8cdbSBram Moolenaar # Check function in script namespace cannot be deleted 6624c17ad94SBram Moolenaar CheckScriptFailure([ 6634c17ad94SBram Moolenaar 'vim9script', 6644c17ad94SBram Moolenaar 'func DeleteMe1()', 6654c17ad94SBram Moolenaar 'endfunc', 6664c17ad94SBram Moolenaar 'delfunction DeleteMe1', 6674c17ad94SBram Moolenaar ], 'E1084:') 6684c17ad94SBram Moolenaar CheckScriptFailure([ 6694c17ad94SBram Moolenaar 'vim9script', 6704c17ad94SBram Moolenaar 'func DeleteMe2()', 6714c17ad94SBram Moolenaar 'endfunc', 6724c17ad94SBram Moolenaar 'def DoThat()', 6734c17ad94SBram Moolenaar ' delfunction DeleteMe2', 6744c17ad94SBram Moolenaar 'enddef', 6754c17ad94SBram Moolenaar 'DoThat()', 6764c17ad94SBram Moolenaar ], 'E1084:') 6774c17ad94SBram Moolenaar CheckScriptFailure([ 6784c17ad94SBram Moolenaar 'vim9script', 6794c17ad94SBram Moolenaar 'def DeleteMe3()', 6804c17ad94SBram Moolenaar 'enddef', 6814c17ad94SBram Moolenaar 'delfunction DeleteMe3', 6824c17ad94SBram Moolenaar ], 'E1084:') 6834c17ad94SBram Moolenaar CheckScriptFailure([ 6844c17ad94SBram Moolenaar 'vim9script', 6854c17ad94SBram Moolenaar 'def DeleteMe4()', 6864c17ad94SBram Moolenaar 'enddef', 6874c17ad94SBram Moolenaar 'def DoThat()', 6884c17ad94SBram Moolenaar ' delfunction DeleteMe4', 6894c17ad94SBram Moolenaar 'enddef', 6904c17ad94SBram Moolenaar 'DoThat()', 6914c17ad94SBram Moolenaar ], 'E1084:') 692925e9fd6SBram Moolenaar 693925e9fd6SBram Moolenaar # Check that global :def function can be replaced and deleted 694925e9fd6SBram Moolenaar let lines =<< trim END 695925e9fd6SBram Moolenaar vim9script 696925e9fd6SBram Moolenaar def g:Global(): string 697925e9fd6SBram Moolenaar return "yes" 698925e9fd6SBram Moolenaar enddef 699925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 700925e9fd6SBram Moolenaar def! g:Global(): string 701925e9fd6SBram Moolenaar return "no" 702925e9fd6SBram Moolenaar enddef 703925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 704925e9fd6SBram Moolenaar delfunc g:Global 705925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 706925e9fd6SBram Moolenaar END 707925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 708925e9fd6SBram Moolenaar 709925e9fd6SBram Moolenaar # Check that global function can be replaced by a :def function and deleted 710925e9fd6SBram Moolenaar lines =<< trim END 711925e9fd6SBram Moolenaar vim9script 712925e9fd6SBram Moolenaar func g:Global() 713925e9fd6SBram Moolenaar return "yes" 714925e9fd6SBram Moolenaar endfunc 715925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 716925e9fd6SBram Moolenaar def! g:Global(): string 717925e9fd6SBram Moolenaar return "no" 718925e9fd6SBram Moolenaar enddef 719925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 720925e9fd6SBram Moolenaar delfunc g:Global 721925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 722925e9fd6SBram Moolenaar END 723925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 724925e9fd6SBram Moolenaar 725925e9fd6SBram Moolenaar # Check that global :def function can be replaced by a function and deleted 726925e9fd6SBram Moolenaar lines =<< trim END 727925e9fd6SBram Moolenaar vim9script 728925e9fd6SBram Moolenaar def g:Global(): string 729925e9fd6SBram Moolenaar return "yes" 730925e9fd6SBram Moolenaar enddef 731925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 732925e9fd6SBram Moolenaar func! g:Global() 733925e9fd6SBram Moolenaar return "no" 734925e9fd6SBram Moolenaar endfunc 735925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 736925e9fd6SBram Moolenaar delfunc g:Global 737925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 738925e9fd6SBram Moolenaar END 739925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 7404c17ad94SBram Moolenaarenddef 7414c17ad94SBram Moolenaar 742599c89c8SBram Moolenaarfunc Test_wrong_type() 743599c89c8SBram Moolenaar call CheckDefFailure(['let var: list<nothing>'], 'E1010:') 744599c89c8SBram Moolenaar call CheckDefFailure(['let var: list<list<nothing>>'], 'E1010:') 745599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<nothing>'], 'E1010:') 746599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<dict<nothing>>'], 'E1010:') 747599c89c8SBram Moolenaar 748599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 749599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<list<number>'], 'E1009:') 75042a480bfSBram Moolenaar 75142a480bfSBram Moolenaar call CheckDefFailure(['let var: ally'], 'E1010:') 75242a480bfSBram Moolenaar call CheckDefFailure(['let var: bram'], 'E1010:') 75342a480bfSBram Moolenaar call CheckDefFailure(['let var: cathy'], 'E1010:') 75442a480bfSBram Moolenaar call CheckDefFailure(['let var: dom'], 'E1010:') 75542a480bfSBram Moolenaar call CheckDefFailure(['let var: freddy'], 'E1010:') 75642a480bfSBram Moolenaar call CheckDefFailure(['let var: john'], 'E1010:') 75742a480bfSBram Moolenaar call CheckDefFailure(['let var: larry'], 'E1010:') 75842a480bfSBram Moolenaar call CheckDefFailure(['let var: ned'], 'E1010:') 75942a480bfSBram Moolenaar call CheckDefFailure(['let var: pam'], 'E1010:') 76042a480bfSBram Moolenaar call CheckDefFailure(['let var: sam'], 'E1010:') 76142a480bfSBram Moolenaar call CheckDefFailure(['let var: vim'], 'E1010:') 762a0a9f43aSBram Moolenaar 763a0a9f43aSBram Moolenaar call CheckDefFailure(['let Ref: number', 'Ref()'], 'E1085:') 764a0a9f43aSBram Moolenaar call CheckDefFailure(['let Ref: string', 'let res = Ref()'], 'E1085:') 7658a7d6542SBram Moolenaarendfunc 7668a7d6542SBram Moolenaar 7678a7d6542SBram Moolenaarfunc Test_const() 7688a7d6542SBram Moolenaar call CheckDefFailure(['const var = 234', 'var = 99'], 'E1018:') 7698a7d6542SBram Moolenaar call CheckDefFailure(['const one = 234', 'let one = 99'], 'E1017:') 7708a7d6542SBram Moolenaar call CheckDefFailure(['const two'], 'E1021:') 7719be61bbbSBram Moolenaar call CheckDefFailure(['const &option'], 'E996:') 7728a7d6542SBram Moolenaarendfunc 7738a7d6542SBram Moolenaar 774df069eecSBram Moolenaardef Test_range_no_colon() 775df069eecSBram Moolenaar call CheckDefFailure(['%s/a/b/'], 'E1050:') 776df069eecSBram Moolenaar call CheckDefFailure(['+ s/a/b/'], 'E1050:') 777df069eecSBram Moolenaar call CheckDefFailure(['- s/a/b/'], 'E1050:') 778df069eecSBram Moolenaar call CheckDefFailure(['. s/a/b/'], 'E1050:') 779df069eecSBram Moolenaarenddef 780df069eecSBram Moolenaar 781df069eecSBram Moolenaar 7828a7d6542SBram Moolenaardef Test_block() 7838a7d6542SBram Moolenaar let outer = 1 7848a7d6542SBram Moolenaar { 7858a7d6542SBram Moolenaar let inner = 2 7868a7d6542SBram Moolenaar assert_equal(1, outer) 7878a7d6542SBram Moolenaar assert_equal(2, inner) 7888a7d6542SBram Moolenaar } 7898a7d6542SBram Moolenaar assert_equal(1, outer) 7908a7d6542SBram Moolenaarenddef 7918a7d6542SBram Moolenaar 7928a7d6542SBram Moolenaarfunc Test_block_failure() 7938a7d6542SBram Moolenaar call CheckDefFailure(['{', 'let inner = 1', '}', 'echo inner'], 'E1001:') 794585fea7bSBram Moolenaar call CheckDefFailure(['}'], 'E1025:') 795585fea7bSBram Moolenaar call CheckDefFailure(['{', 'echo 1'], 'E1026:') 7968a7d6542SBram Moolenaarendfunc 7978a7d6542SBram Moolenaar 798d032f34aSBram Moolenaarfunc g:NoSuchFunc() 799d032f34aSBram Moolenaar echo 'none' 800d032f34aSBram Moolenaarendfunc 801d032f34aSBram Moolenaar 8028a7d6542SBram Moolenaardef Test_try_catch() 8038a7d6542SBram Moolenaar let l = [] 8047a092245SBram Moolenaar try # comment 8058a7d6542SBram Moolenaar add(l, '1') 8068a7d6542SBram Moolenaar throw 'wrong' 8078a7d6542SBram Moolenaar add(l, '2') 8087a092245SBram Moolenaar catch # comment 8098a7d6542SBram Moolenaar add(l, v:exception) 8107a092245SBram Moolenaar finally # comment 8118a7d6542SBram Moolenaar add(l, '3') 8127a092245SBram Moolenaar endtry # comment 8138a7d6542SBram Moolenaar assert_equal(['1', 'wrong', '3'], l) 81468d130c6SBram Moolenaar 815e859312eSBram Moolenaar l = [] 816e859312eSBram Moolenaar try 817e859312eSBram Moolenaar try 818e859312eSBram Moolenaar add(l, '1') 819e859312eSBram Moolenaar throw 'wrong' 820e859312eSBram Moolenaar add(l, '2') 821e859312eSBram Moolenaar catch /right/ 822e859312eSBram Moolenaar add(l, v:exception) 823e859312eSBram Moolenaar endtry 824e859312eSBram Moolenaar catch /wrong/ 825e859312eSBram Moolenaar add(l, 'caught') 826e859312eSBram Moolenaar finally 827e859312eSBram Moolenaar add(l, 'finally') 828e859312eSBram Moolenaar endtry 829e859312eSBram Moolenaar assert_equal(['1', 'caught', 'finally'], l) 830e859312eSBram Moolenaar 83168d130c6SBram Moolenaar let n: number 83268d130c6SBram Moolenaar try 83368d130c6SBram Moolenaar n = l[3] 83468d130c6SBram Moolenaar catch /E684:/ 83568d130c6SBram Moolenaar n = 99 83668d130c6SBram Moolenaar endtry 83768d130c6SBram Moolenaar assert_equal(99, n) 83868d130c6SBram Moolenaar 83968d130c6SBram Moolenaar try 840cc673e74SBram Moolenaar # string slice returns a string, not a number 84168d130c6SBram Moolenaar n = g:astring[3] 84256acb094SBram Moolenaar catch /E1029:/ 84368d130c6SBram Moolenaar n = 77 84468d130c6SBram Moolenaar endtry 84568d130c6SBram Moolenaar assert_equal(77, n) 84668d130c6SBram Moolenaar 84768d130c6SBram Moolenaar try 84868d130c6SBram Moolenaar n = l[g:astring] 84956acb094SBram Moolenaar catch /E1029:/ 85056acb094SBram Moolenaar n = 88 85168d130c6SBram Moolenaar endtry 85256acb094SBram Moolenaar assert_equal(88, n) 85368d130c6SBram Moolenaar 85468d130c6SBram Moolenaar try 85568d130c6SBram Moolenaar n = s:does_not_exist 85668d130c6SBram Moolenaar catch /E121:/ 857f0b9f43cSBram Moolenaar n = 111 858f0b9f43cSBram Moolenaar endtry 859f0b9f43cSBram Moolenaar assert_equal(111, n) 860f0b9f43cSBram Moolenaar 861f0b9f43cSBram Moolenaar try 862f0b9f43cSBram Moolenaar n = g:does_not_exist 863f0b9f43cSBram Moolenaar catch /E121:/ 86468d130c6SBram Moolenaar n = 121 86568d130c6SBram Moolenaar endtry 86668d130c6SBram Moolenaar assert_equal(121, n) 86768d130c6SBram Moolenaar 86868d130c6SBram Moolenaar let d = #{one: 1} 86968d130c6SBram Moolenaar try 87068d130c6SBram Moolenaar n = d[g:astring] 87168d130c6SBram Moolenaar catch /E716:/ 87268d130c6SBram Moolenaar n = 222 87368d130c6SBram Moolenaar endtry 87468d130c6SBram Moolenaar assert_equal(222, n) 875f0b9f43cSBram Moolenaar 876f0b9f43cSBram Moolenaar try 877f0b9f43cSBram Moolenaar n = -g:astring 878f0b9f43cSBram Moolenaar catch /E39:/ 879f0b9f43cSBram Moolenaar n = 233 880f0b9f43cSBram Moolenaar endtry 881f0b9f43cSBram Moolenaar assert_equal(233, n) 882f0b9f43cSBram Moolenaar 883f0b9f43cSBram Moolenaar try 884f0b9f43cSBram Moolenaar n = +g:astring 885f0b9f43cSBram Moolenaar catch /E1030:/ 886f0b9f43cSBram Moolenaar n = 244 887f0b9f43cSBram Moolenaar endtry 888f0b9f43cSBram Moolenaar assert_equal(244, n) 889f0b9f43cSBram Moolenaar 890f0b9f43cSBram Moolenaar try 891f0b9f43cSBram Moolenaar n = +g:alist 892f0b9f43cSBram Moolenaar catch /E745:/ 893f0b9f43cSBram Moolenaar n = 255 894f0b9f43cSBram Moolenaar endtry 895f0b9f43cSBram Moolenaar assert_equal(255, n) 896f0b9f43cSBram Moolenaar 897f0b9f43cSBram Moolenaar let nd: dict<any> 898f0b9f43cSBram Moolenaar try 899f0b9f43cSBram Moolenaar nd = {g:anumber: 1} 900f0b9f43cSBram Moolenaar catch /E1029:/ 901f0b9f43cSBram Moolenaar n = 266 902f0b9f43cSBram Moolenaar endtry 903f0b9f43cSBram Moolenaar assert_equal(266, n) 904f0b9f43cSBram Moolenaar 905f0b9f43cSBram Moolenaar try 906f0b9f43cSBram Moolenaar [n] = [1, 2, 3] 907f0b9f43cSBram Moolenaar catch /E1093:/ 908f0b9f43cSBram Moolenaar n = 277 909f0b9f43cSBram Moolenaar endtry 910f0b9f43cSBram Moolenaar assert_equal(277, n) 911f0b9f43cSBram Moolenaar 912e859312eSBram Moolenaar try 913e859312eSBram Moolenaar &ts = g:astring 914e859312eSBram Moolenaar catch /E1029:/ 915e859312eSBram Moolenaar n = 288 916e859312eSBram Moolenaar endtry 917e859312eSBram Moolenaar assert_equal(288, n) 918e859312eSBram Moolenaar 919e859312eSBram Moolenaar try 920e859312eSBram Moolenaar &backspace = 'asdf' 921e859312eSBram Moolenaar catch /E474:/ 922e859312eSBram Moolenaar n = 299 923e859312eSBram Moolenaar endtry 924e859312eSBram Moolenaar assert_equal(299, n) 925e859312eSBram Moolenaar 926e859312eSBram Moolenaar l = [1] 927e859312eSBram Moolenaar try 928e859312eSBram Moolenaar l[3] = 3 929e859312eSBram Moolenaar catch /E684:/ 930e859312eSBram Moolenaar n = 300 931e859312eSBram Moolenaar endtry 932e859312eSBram Moolenaar assert_equal(300, n) 933e859312eSBram Moolenaar 934e859312eSBram Moolenaar try 935e859312eSBram Moolenaar unlet g:does_not_exist 936e859312eSBram Moolenaar catch /E108:/ 937e859312eSBram Moolenaar n = 322 938e859312eSBram Moolenaar endtry 939e859312eSBram Moolenaar assert_equal(322, n) 940e859312eSBram Moolenaar 941e859312eSBram Moolenaar try 942e859312eSBram Moolenaar d = {'text': 1, g:astring: 2} 943e859312eSBram Moolenaar catch /E721:/ 944e859312eSBram Moolenaar n = 333 945e859312eSBram Moolenaar endtry 946e859312eSBram Moolenaar assert_equal(333, n) 947e859312eSBram Moolenaar 948e859312eSBram Moolenaar try 949e859312eSBram Moolenaar l = DeletedFunc() 950e859312eSBram Moolenaar catch /E933:/ 951e859312eSBram Moolenaar n = 344 952e859312eSBram Moolenaar endtry 953e859312eSBram Moolenaar assert_equal(344, n) 954d032f34aSBram Moolenaar 955d032f34aSBram Moolenaar try 956d032f34aSBram Moolenaar echo len(v:true) 957d032f34aSBram Moolenaar catch /E701:/ 958d032f34aSBram Moolenaar n = 355 959d032f34aSBram Moolenaar endtry 960d032f34aSBram Moolenaar assert_equal(355, n) 961d032f34aSBram Moolenaar 962d032f34aSBram Moolenaar let P = function('g:NoSuchFunc') 963d032f34aSBram Moolenaar delfunc g:NoSuchFunc 964d032f34aSBram Moolenaar try 965d032f34aSBram Moolenaar echo P() 966d032f34aSBram Moolenaar catch /E117:/ 967d032f34aSBram Moolenaar n = 366 968d032f34aSBram Moolenaar endtry 969d032f34aSBram Moolenaar assert_equal(366, n) 970d032f34aSBram Moolenaar 971d032f34aSBram Moolenaar try 972d032f34aSBram Moolenaar echo g:NoSuchFunc() 973d032f34aSBram Moolenaar catch /E117:/ 974d032f34aSBram Moolenaar n = 377 975d032f34aSBram Moolenaar endtry 976d032f34aSBram Moolenaar assert_equal(377, n) 977d032f34aSBram Moolenaar 978d032f34aSBram Moolenaar try 979d032f34aSBram Moolenaar echo g:alist + 4 980d032f34aSBram Moolenaar catch /E745:/ 981d032f34aSBram Moolenaar n = 388 982d032f34aSBram Moolenaar endtry 983d032f34aSBram Moolenaar assert_equal(388, n) 984d032f34aSBram Moolenaar 985d032f34aSBram Moolenaar try 986d032f34aSBram Moolenaar echo 4 + g:alist 987d032f34aSBram Moolenaar catch /E745:/ 988d032f34aSBram Moolenaar n = 399 989d032f34aSBram Moolenaar endtry 990d032f34aSBram Moolenaar assert_equal(399, n) 991d032f34aSBram Moolenaar 992d032f34aSBram Moolenaar try 993d032f34aSBram Moolenaar echo g:alist.member 994d032f34aSBram Moolenaar catch /E715:/ 995d032f34aSBram Moolenaar n = 400 996d032f34aSBram Moolenaar endtry 997d032f34aSBram Moolenaar assert_equal(400, n) 998d032f34aSBram Moolenaar 999d032f34aSBram Moolenaar try 1000d032f34aSBram Moolenaar echo d.member 1001d032f34aSBram Moolenaar catch /E716:/ 1002d032f34aSBram Moolenaar n = 411 1003d032f34aSBram Moolenaar endtry 1004d032f34aSBram Moolenaar assert_equal(411, n) 10058a7d6542SBram Moolenaarenddef 10068a7d6542SBram Moolenaar 1007e859312eSBram Moolenaardef DeletedFunc(): list<any> 1008e859312eSBram Moolenaar return ['delete me'] 1009e859312eSBram Moolenaarenddef 1010e859312eSBram Moolenaardefcompile 1011e859312eSBram Moolenaardelfunc DeletedFunc 1012e859312eSBram Moolenaar 1013257cc5eeSBram Moolenaardef ThrowFromDef() 1014a72cfb80SBram Moolenaar throw "getout" # comment 1015257cc5eeSBram Moolenaarenddef 1016257cc5eeSBram Moolenaar 1017257cc5eeSBram Moolenaarfunc CatchInFunc() 1018257cc5eeSBram Moolenaar try 1019257cc5eeSBram Moolenaar call ThrowFromDef() 1020257cc5eeSBram Moolenaar catch 1021257cc5eeSBram Moolenaar let g:thrown_func = v:exception 1022257cc5eeSBram Moolenaar endtry 1023257cc5eeSBram Moolenaarendfunc 1024257cc5eeSBram Moolenaar 1025257cc5eeSBram Moolenaardef CatchInDef() 1026257cc5eeSBram Moolenaar try 1027257cc5eeSBram Moolenaar ThrowFromDef() 1028257cc5eeSBram Moolenaar catch 1029257cc5eeSBram Moolenaar g:thrown_def = v:exception 1030257cc5eeSBram Moolenaar endtry 1031257cc5eeSBram Moolenaarenddef 1032257cc5eeSBram Moolenaar 1033f575adffSBram Moolenaardef ReturnFinally(): string 1034f575adffSBram Moolenaar try 1035f575adffSBram Moolenaar return 'intry' 1036f575adffSBram Moolenaar finally 1037f575adffSBram Moolenaar g:in_finally = 'finally' 1038f575adffSBram Moolenaar endtry 1039f575adffSBram Moolenaar return 'end' 1040f575adffSBram Moolenaarenddef 1041f575adffSBram Moolenaar 1042257cc5eeSBram Moolenaardef Test_try_catch_nested() 1043257cc5eeSBram Moolenaar CatchInFunc() 1044257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_func) 1045257cc5eeSBram Moolenaar 1046257cc5eeSBram Moolenaar CatchInDef() 1047257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_def) 1048f575adffSBram Moolenaar 1049f575adffSBram Moolenaar assert_equal('intry', ReturnFinally()) 1050f575adffSBram Moolenaar assert_equal('finally', g:in_finally) 1051f575adffSBram Moolenaarenddef 1052f575adffSBram Moolenaar 1053f575adffSBram Moolenaardef Test_try_catch_match() 1054f575adffSBram Moolenaar let seq = 'a' 1055f575adffSBram Moolenaar try 1056f575adffSBram Moolenaar throw 'something' 1057f575adffSBram Moolenaar catch /nothing/ 1058f575adffSBram Moolenaar seq ..= 'x' 1059f575adffSBram Moolenaar catch /some/ 1060f575adffSBram Moolenaar seq ..= 'b' 1061f575adffSBram Moolenaar catch /asdf/ 1062f575adffSBram Moolenaar seq ..= 'x' 1063e8c4abbbSBram Moolenaar catch ?a\?sdf? 1064e8c4abbbSBram Moolenaar seq ..= 'y' 1065f575adffSBram Moolenaar finally 1066f575adffSBram Moolenaar seq ..= 'c' 1067f575adffSBram Moolenaar endtry 1068f575adffSBram Moolenaar assert_equal('abc', seq) 1069257cc5eeSBram Moolenaarenddef 1070257cc5eeSBram Moolenaar 1071e8c4abbbSBram Moolenaardef Test_try_catch_fails() 1072e8c4abbbSBram Moolenaar call CheckDefFailure(['catch'], 'E603:') 1073e8c4abbbSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'catch', 'catch'], 'E1033:') 1074e8c4abbbSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'catch /pat'], 'E1067:') 1075585fea7bSBram Moolenaar call CheckDefFailure(['finally'], 'E606:') 1076585fea7bSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'finally', 'echo 1', 'finally'], 'E607:') 1077585fea7bSBram Moolenaar call CheckDefFailure(['endtry'], 'E602:') 1078585fea7bSBram Moolenaar call CheckDefFailure(['while 1', 'endtry'], 'E170:') 1079585fea7bSBram Moolenaar call CheckDefFailure(['for i in range(5)', 'endtry'], 'E170:') 1080585fea7bSBram Moolenaar call CheckDefFailure(['if 2', 'endtry'], 'E171:') 1081585fea7bSBram Moolenaar call CheckDefFailure(['try', 'echo 1', 'endtry'], 'E1032:') 1082585fea7bSBram Moolenaar 1083a72cfb80SBram Moolenaar call CheckDefFailure(['throw'], 'E1015:') 1084585fea7bSBram Moolenaar call CheckDefFailure(['throw xxx'], 'E1001:') 1085e8c4abbbSBram Moolenaarenddef 1086e8c4abbbSBram Moolenaar 1087006ad48bSBram Moolenaardef Test_throw_vimscript() 1088f5be8cdbSBram Moolenaar # only checks line continuation 1089006ad48bSBram Moolenaar let lines =<< trim END 1090006ad48bSBram Moolenaar vim9script 1091006ad48bSBram Moolenaar try 1092006ad48bSBram Moolenaar throw 'one' 1093006ad48bSBram Moolenaar .. 'two' 1094006ad48bSBram Moolenaar catch 1095006ad48bSBram Moolenaar assert_equal('onetwo', v:exception) 1096006ad48bSBram Moolenaar endtry 1097006ad48bSBram Moolenaar END 1098006ad48bSBram Moolenaar CheckScriptSuccess(lines) 1099006ad48bSBram Moolenaarenddef 1100006ad48bSBram Moolenaar 1101ed677f55SBram Moolenaardef Test_error_in_nested_function() 1102ed677f55SBram Moolenaar # an error in a nested :function aborts executin in the calling :def function 1103ed677f55SBram Moolenaar let lines =<< trim END 1104ed677f55SBram Moolenaar vim9script 1105ed677f55SBram Moolenaar def Func() 1106ed677f55SBram Moolenaar Error() 1107ed677f55SBram Moolenaar g:test_var = 1 1108ed677f55SBram Moolenaar enddef 1109ed677f55SBram Moolenaar func Error() abort 1110ed677f55SBram Moolenaar eval [][0] 1111ed677f55SBram Moolenaar endfunc 1112ed677f55SBram Moolenaar Func() 1113ed677f55SBram Moolenaar END 1114ed677f55SBram Moolenaar g:test_var = 0 1115ed677f55SBram Moolenaar CheckScriptFailure(lines, 'E684:') 1116ed677f55SBram Moolenaar assert_equal(0, g:test_var) 1117ed677f55SBram Moolenaarenddef 1118ed677f55SBram Moolenaar 111937c83711SBram Moolenaardef Test_cexpr_vimscript() 1120f5be8cdbSBram Moolenaar # only checks line continuation 112137c83711SBram Moolenaar set errorformat=File\ %f\ line\ %l 112237c83711SBram Moolenaar let lines =<< trim END 112337c83711SBram Moolenaar vim9script 112437c83711SBram Moolenaar cexpr 'File' 112537c83711SBram Moolenaar .. ' someFile' .. 112637c83711SBram Moolenaar ' line 19' 112737c83711SBram Moolenaar assert_equal(19, getqflist()[0].lnum) 112837c83711SBram Moolenaar END 112937c83711SBram Moolenaar CheckScriptSuccess(lines) 113037c83711SBram Moolenaar set errorformat& 113137c83711SBram Moolenaarenddef 113237c83711SBram Moolenaar 1133c9edd6b5SBram Moolenaardef Test_statusline_syntax() 1134c9edd6b5SBram Moolenaar # legacy syntax is used for 'statusline' 1135c9edd6b5SBram Moolenaar let lines =<< trim END 1136c9edd6b5SBram Moolenaar vim9script 1137c9edd6b5SBram Moolenaar func g:Status() 1138c9edd6b5SBram Moolenaar return '%{"x" is# "x"}' 1139c9edd6b5SBram Moolenaar endfunc 1140c9edd6b5SBram Moolenaar set laststatus=2 statusline=%!Status() 1141c9edd6b5SBram Moolenaar redrawstatus 1142c9edd6b5SBram Moolenaar set laststatus statusline= 1143c9edd6b5SBram Moolenaar END 1144c9edd6b5SBram Moolenaar CheckScriptSuccess(lines) 1145c9edd6b5SBram Moolenaarenddef 1146c9edd6b5SBram Moolenaar 1147b209750bSBram Moolenaardef Test_list_vimscript() 1148b209750bSBram Moolenaar # checks line continuation and comments 1149b209750bSBram Moolenaar let lines =<< trim END 1150b209750bSBram Moolenaar vim9script 1151b209750bSBram Moolenaar let mylist = [ 1152b209750bSBram Moolenaar 'one', 1153b209750bSBram Moolenaar # comment 1154b209750bSBram Moolenaar 'two', # empty line follows 1155b209750bSBram Moolenaar 1156b209750bSBram Moolenaar 'three', 1157b209750bSBram Moolenaar ] 1158b209750bSBram Moolenaar assert_equal(['one', 'two', 'three'], mylist) 1159b209750bSBram Moolenaar END 1160b209750bSBram Moolenaar CheckScriptSuccess(lines) 116166250c93SBram Moolenaar 116266250c93SBram Moolenaar # check all lines from heredoc are kept 116366250c93SBram Moolenaar lines =<< trim END 116466250c93SBram Moolenaar # comment 1 116566250c93SBram Moolenaar two 116666250c93SBram Moolenaar # comment 3 116766250c93SBram Moolenaar 116866250c93SBram Moolenaar five 116966250c93SBram Moolenaar # comment 6 117066250c93SBram Moolenaar END 117166250c93SBram Moolenaar assert_equal(['# comment 1', 'two', '# comment 3', '', 'five', '# comment 6'], lines) 1172b209750bSBram Moolenaarenddef 1173b209750bSBram Moolenaar 11742a1381c3SBram Moolenaarif has('channel') 117540ee466cSBram Moolenaar let someJob = test_null_job() 117640ee466cSBram Moolenaar 117740ee466cSBram Moolenaar def FuncWithError() 117840ee466cSBram Moolenaar echomsg g:someJob 117940ee466cSBram Moolenaar enddef 118040ee466cSBram Moolenaar 118140ee466cSBram Moolenaar func Test_convert_emsg_to_exception() 118240ee466cSBram Moolenaar try 118340ee466cSBram Moolenaar call FuncWithError() 118440ee466cSBram Moolenaar catch 118540ee466cSBram Moolenaar call assert_match('Vim:E908:', v:exception) 118640ee466cSBram Moolenaar endtry 118740ee466cSBram Moolenaar endfunc 11882a1381c3SBram Moolenaarendif 118940ee466cSBram Moolenaar 11908a7d6542SBram Moolenaarlet s:export_script_lines =<< trim END 11918a7d6542SBram Moolenaar vim9script 11928a7d6542SBram Moolenaar let name: string = 'bob' 11938a7d6542SBram Moolenaar def Concat(arg: string): string 11948a7d6542SBram Moolenaar return name .. arg 11958a7d6542SBram Moolenaar enddef 1196227a69deSBram Moolenaar g:result = Concat('bie') 1197227a69deSBram Moolenaar g:localname = name 11988a7d6542SBram Moolenaar 11998a7d6542SBram Moolenaar export const CONST = 1234 12008a7d6542SBram Moolenaar export let exported = 9876 12016e587dcbSBram Moolenaar export let exp_name = 'John' 12028a7d6542SBram Moolenaar export def Exported(): string 12038a7d6542SBram Moolenaar return 'Exported' 12048a7d6542SBram Moolenaar enddef 12058a7d6542SBram MoolenaarEND 12068a7d6542SBram Moolenaar 1207b3ca9824SBram Moolenaardef Undo_export_script_lines() 1208b3ca9824SBram Moolenaar unlet g:result 1209b3ca9824SBram Moolenaar unlet g:localname 1210b3ca9824SBram Moolenaarenddef 1211b3ca9824SBram Moolenaar 12125269bd2aSBram Moolenaardef Test_vim9_import_export() 12138a7d6542SBram Moolenaar let import_script_lines =<< trim END 12148a7d6542SBram Moolenaar vim9script 12158a7d6542SBram Moolenaar import {exported, Exported} from './Xexport.vim' 12168a7d6542SBram Moolenaar g:imported = exported 12176e587dcbSBram Moolenaar exported += 3 12186e587dcbSBram Moolenaar g:imported_added = exported 12198a7d6542SBram Moolenaar g:imported_func = Exported() 12206e587dcbSBram Moolenaar 122140f4f7a4SBram Moolenaar def GetExported(): string 122240f4f7a4SBram Moolenaar let local_dict = #{ref: Exported} 122340f4f7a4SBram Moolenaar return local_dict.ref() 122440f4f7a4SBram Moolenaar enddef 122540f4f7a4SBram Moolenaar g:funcref_result = GetExported() 122640f4f7a4SBram Moolenaar 12276e587dcbSBram Moolenaar import {exp_name} from './Xexport.vim' 12286e587dcbSBram Moolenaar g:imported_name = exp_name 12296e587dcbSBram Moolenaar exp_name ..= ' Doe' 12306e587dcbSBram Moolenaar g:imported_name_appended = exp_name 12315381c7a1SBram Moolenaar g:imported_later = exported 12328a7d6542SBram Moolenaar END 12338a7d6542SBram Moolenaar 12348a7d6542SBram Moolenaar writefile(import_script_lines, 'Ximport.vim') 12358a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport.vim') 12368a7d6542SBram Moolenaar 12378a7d6542SBram Moolenaar source Ximport.vim 12388a7d6542SBram Moolenaar 12398a7d6542SBram Moolenaar assert_equal('bobbie', g:result) 12408a7d6542SBram Moolenaar assert_equal('bob', g:localname) 12418a7d6542SBram Moolenaar assert_equal(9876, g:imported) 12426e587dcbSBram Moolenaar assert_equal(9879, g:imported_added) 12435381c7a1SBram Moolenaar assert_equal(9879, g:imported_later) 12448a7d6542SBram Moolenaar assert_equal('Exported', g:imported_func) 124540f4f7a4SBram Moolenaar assert_equal('Exported', g:funcref_result) 12466e587dcbSBram Moolenaar assert_equal('John', g:imported_name) 12476e587dcbSBram Moolenaar assert_equal('John Doe', g:imported_name_appended) 12488a7d6542SBram Moolenaar assert_false(exists('g:name')) 12498a7d6542SBram Moolenaar 1250b3ca9824SBram Moolenaar Undo_export_script_lines() 12518a7d6542SBram Moolenaar unlet g:imported 12526e587dcbSBram Moolenaar unlet g:imported_added 12535381c7a1SBram Moolenaar unlet g:imported_later 12548a7d6542SBram Moolenaar unlet g:imported_func 12556e587dcbSBram Moolenaar unlet g:imported_name g:imported_name_appended 12568a7d6542SBram Moolenaar delete('Ximport.vim') 1257f2d5c240SBram Moolenaar 12581c991144SBram Moolenaar # similar, with line breaks 12591c991144SBram Moolenaar let import_line_break_script_lines =<< trim END 12601c991144SBram Moolenaar vim9script 12611c991144SBram Moolenaar import { 12621c991144SBram Moolenaar exported, 12631c991144SBram Moolenaar Exported, 12641c991144SBram Moolenaar } 12651c991144SBram Moolenaar from 12661c991144SBram Moolenaar './Xexport.vim' 12671c991144SBram Moolenaar g:imported = exported 12681c991144SBram Moolenaar exported += 5 12691c991144SBram Moolenaar g:imported_added = exported 12701c991144SBram Moolenaar g:imported_func = Exported() 12711c991144SBram Moolenaar END 12721c991144SBram Moolenaar writefile(import_line_break_script_lines, 'Ximport_lbr.vim') 12731c991144SBram Moolenaar source Ximport_lbr.vim 12741c991144SBram Moolenaar 12751c991144SBram Moolenaar assert_equal(9876, g:imported) 12761c991144SBram Moolenaar assert_equal(9881, g:imported_added) 12771c991144SBram Moolenaar assert_equal('Exported', g:imported_func) 12781c991144SBram Moolenaar 12791c991144SBram Moolenaar # exported script not sourced again 12801c991144SBram Moolenaar assert_false(exists('g:result')) 12811c991144SBram Moolenaar unlet g:imported 12821c991144SBram Moolenaar unlet g:imported_added 12831c991144SBram Moolenaar unlet g:imported_func 12841c991144SBram Moolenaar delete('Ximport_lbr.vim') 12851c991144SBram Moolenaar 12861c991144SBram Moolenaar # import inside :def function 12875381c7a1SBram Moolenaar let import_in_def_lines =<< trim END 12885381c7a1SBram Moolenaar vim9script 12895381c7a1SBram Moolenaar def ImportInDef() 12905381c7a1SBram Moolenaar import exported from './Xexport.vim' 12915381c7a1SBram Moolenaar g:imported = exported 12925381c7a1SBram Moolenaar exported += 7 12935381c7a1SBram Moolenaar g:imported_added = exported 12945381c7a1SBram Moolenaar enddef 12955381c7a1SBram Moolenaar ImportInDef() 12965381c7a1SBram Moolenaar END 12975381c7a1SBram Moolenaar writefile(import_in_def_lines, 'Ximport2.vim') 12985381c7a1SBram Moolenaar source Ximport2.vim 1299f5be8cdbSBram Moolenaar # TODO: this should be 9879 13005381c7a1SBram Moolenaar assert_equal(9876, g:imported) 13015381c7a1SBram Moolenaar assert_equal(9883, g:imported_added) 13025381c7a1SBram Moolenaar unlet g:imported 13035381c7a1SBram Moolenaar unlet g:imported_added 13045381c7a1SBram Moolenaar delete('Ximport2.vim') 13055381c7a1SBram Moolenaar 1306f2d5c240SBram Moolenaar let import_star_as_lines =<< trim END 1307f2d5c240SBram Moolenaar vim9script 1308f2d5c240SBram Moolenaar import * as Export from './Xexport.vim' 1309f2d5c240SBram Moolenaar def UseExport() 1310f2d5c240SBram Moolenaar g:imported = Export.exported 1311f2d5c240SBram Moolenaar enddef 1312f2d5c240SBram Moolenaar UseExport() 1313f2d5c240SBram Moolenaar END 1314f2d5c240SBram Moolenaar writefile(import_star_as_lines, 'Ximport.vim') 1315f2d5c240SBram Moolenaar source Ximport.vim 13165381c7a1SBram Moolenaar assert_equal(9883, g:imported) 1317f2d5c240SBram Moolenaar 1318599c89c8SBram Moolenaar let import_star_as_lines_no_dot =<< trim END 1319599c89c8SBram Moolenaar vim9script 1320599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 1321599c89c8SBram Moolenaar def Func() 1322599c89c8SBram Moolenaar let dummy = 1 1323599c89c8SBram Moolenaar let imported = Export + dummy 1324599c89c8SBram Moolenaar enddef 1325822ba247SBram Moolenaar defcompile 1326599c89c8SBram Moolenaar END 1327599c89c8SBram Moolenaar writefile(import_star_as_lines_no_dot, 'Ximport.vim') 1328599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1060:') 1329599c89c8SBram Moolenaar 1330599c89c8SBram Moolenaar let import_star_as_lines_dot_space =<< trim END 1331599c89c8SBram Moolenaar vim9script 1332599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 1333599c89c8SBram Moolenaar def Func() 1334599c89c8SBram Moolenaar let imported = Export . exported 1335599c89c8SBram Moolenaar enddef 1336822ba247SBram Moolenaar defcompile 1337599c89c8SBram Moolenaar END 1338599c89c8SBram Moolenaar writefile(import_star_as_lines_dot_space, 'Ximport.vim') 1339599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1074:') 1340599c89c8SBram Moolenaar 1341599c89c8SBram Moolenaar let import_star_as_lines_missing_name =<< trim END 1342599c89c8SBram Moolenaar vim9script 1343599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 1344599c89c8SBram Moolenaar def Func() 1345599c89c8SBram Moolenaar let imported = Export. 1346599c89c8SBram Moolenaar enddef 1347822ba247SBram Moolenaar defcompile 1348599c89c8SBram Moolenaar END 1349599c89c8SBram Moolenaar writefile(import_star_as_lines_missing_name, 'Ximport.vim') 1350599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 1351599c89c8SBram Moolenaar 13521c991144SBram Moolenaar let import_star_as_lbr_lines =<< trim END 13531c991144SBram Moolenaar vim9script 13541c991144SBram Moolenaar import * 13551c991144SBram Moolenaar as Export 13561c991144SBram Moolenaar from 13571c991144SBram Moolenaar './Xexport.vim' 13581c991144SBram Moolenaar def UseExport() 13591c991144SBram Moolenaar g:imported = Export.exported 13601c991144SBram Moolenaar enddef 13611c991144SBram Moolenaar UseExport() 13621c991144SBram Moolenaar END 13631c991144SBram Moolenaar writefile(import_star_as_lbr_lines, 'Ximport.vim') 13641c991144SBram Moolenaar source Ximport.vim 13651c991144SBram Moolenaar assert_equal(9883, g:imported) 13661c991144SBram Moolenaar 1367f2d5c240SBram Moolenaar let import_star_lines =<< trim END 1368f2d5c240SBram Moolenaar vim9script 1369f2d5c240SBram Moolenaar import * from './Xexport.vim' 1370f2d5c240SBram Moolenaar END 1371f2d5c240SBram Moolenaar writefile(import_star_lines, 'Ximport.vim') 1372f2d5c240SBram Moolenaar assert_fails('source Ximport.vim', 'E1045:') 1373f2d5c240SBram Moolenaar 1374f5be8cdbSBram Moolenaar # try to import something that exists but is not exported 1375fa29c8abSBram Moolenaar let import_not_exported_lines =<< trim END 1376fa29c8abSBram Moolenaar vim9script 1377fa29c8abSBram Moolenaar import name from './Xexport.vim' 1378fa29c8abSBram Moolenaar END 1379fa29c8abSBram Moolenaar writefile(import_not_exported_lines, 'Ximport.vim') 1380fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1049:') 1381fa29c8abSBram Moolenaar 1382f5be8cdbSBram Moolenaar # try to import something that is already defined 13835269bd2aSBram Moolenaar let import_already_defined =<< trim END 13845269bd2aSBram Moolenaar vim9script 13855269bd2aSBram Moolenaar let exported = 'something' 13865269bd2aSBram Moolenaar import exported from './Xexport.vim' 13875269bd2aSBram Moolenaar END 13885269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 13895269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 13905269bd2aSBram Moolenaar 1391f5be8cdbSBram Moolenaar # try to import something that is already defined 13925269bd2aSBram Moolenaar import_already_defined =<< trim END 13935269bd2aSBram Moolenaar vim9script 13945269bd2aSBram Moolenaar let exported = 'something' 13955269bd2aSBram Moolenaar import * as exported from './Xexport.vim' 13965269bd2aSBram Moolenaar END 13975269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 13985269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 13995269bd2aSBram Moolenaar 1400f5be8cdbSBram Moolenaar # try to import something that is already defined 14015269bd2aSBram Moolenaar import_already_defined =<< trim END 14025269bd2aSBram Moolenaar vim9script 14035269bd2aSBram Moolenaar let exported = 'something' 14045269bd2aSBram Moolenaar import {exported} from './Xexport.vim' 14055269bd2aSBram Moolenaar END 14065269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 14075269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 14085269bd2aSBram Moolenaar 1409f5be8cdbSBram Moolenaar # import a very long name, requires making a copy 1410fa29c8abSBram Moolenaar let import_long_name_lines =<< trim END 1411fa29c8abSBram Moolenaar vim9script 1412fa29c8abSBram Moolenaar import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim' 1413fa29c8abSBram Moolenaar END 1414fa29c8abSBram Moolenaar writefile(import_long_name_lines, 'Ximport.vim') 1415fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 1416fa29c8abSBram Moolenaar 1417fa29c8abSBram Moolenaar let import_no_from_lines =<< trim END 1418fa29c8abSBram Moolenaar vim9script 1419fa29c8abSBram Moolenaar import name './Xexport.vim' 1420fa29c8abSBram Moolenaar END 1421fa29c8abSBram Moolenaar writefile(import_no_from_lines, 'Ximport.vim') 1422fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1070:') 1423fa29c8abSBram Moolenaar 1424fa29c8abSBram Moolenaar let import_invalid_string_lines =<< trim END 1425fa29c8abSBram Moolenaar vim9script 1426fa29c8abSBram Moolenaar import name from Xexport.vim 1427fa29c8abSBram Moolenaar END 1428fa29c8abSBram Moolenaar writefile(import_invalid_string_lines, 'Ximport.vim') 1429fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1071:') 1430fa29c8abSBram Moolenaar 1431fa29c8abSBram Moolenaar let import_wrong_name_lines =<< trim END 1432fa29c8abSBram Moolenaar vim9script 1433fa29c8abSBram Moolenaar import name from './XnoExport.vim' 1434fa29c8abSBram Moolenaar END 1435fa29c8abSBram Moolenaar writefile(import_wrong_name_lines, 'Ximport.vim') 1436fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1053:') 1437fa29c8abSBram Moolenaar 1438fa29c8abSBram Moolenaar let import_missing_comma_lines =<< trim END 1439fa29c8abSBram Moolenaar vim9script 1440fa29c8abSBram Moolenaar import {exported name} from './Xexport.vim' 1441fa29c8abSBram Moolenaar END 14425269bd2aSBram Moolenaar writefile(import_missing_comma_lines, 'Ximport3.vim') 14435269bd2aSBram Moolenaar assert_fails('source Ximport3.vim', 'E1046:') 1444fa29c8abSBram Moolenaar 1445f2d5c240SBram Moolenaar delete('Ximport.vim') 14465269bd2aSBram Moolenaar delete('Ximport3.vim') 14478a7d6542SBram Moolenaar delete('Xexport.vim') 14488a7d6542SBram Moolenaar 1449f5be8cdbSBram Moolenaar # Check that in a Vim9 script 'cpo' is set to the Vim default. 1450750802b5SBram Moolenaar set cpo&vi 1451750802b5SBram Moolenaar let cpo_before = &cpo 1452750802b5SBram Moolenaar let lines =<< trim END 1453750802b5SBram Moolenaar vim9script 1454750802b5SBram Moolenaar g:cpo_in_vim9script = &cpo 1455750802b5SBram Moolenaar END 1456750802b5SBram Moolenaar writefile(lines, 'Xvim9_script') 1457750802b5SBram Moolenaar source Xvim9_script 1458750802b5SBram Moolenaar assert_equal(cpo_before, &cpo) 1459750802b5SBram Moolenaar set cpo&vim 1460750802b5SBram Moolenaar assert_equal(&cpo, g:cpo_in_vim9script) 1461750802b5SBram Moolenaar delete('Xvim9_script') 1462750802b5SBram Moolenaarenddef 1463750802b5SBram Moolenaar 1464803af686SBram Moolenaarfunc g:Trigger() 1465803af686SBram Moolenaar source Ximport.vim 1466803af686SBram Moolenaar return "echo 'yes'\<CR>" 1467803af686SBram Moolenaarendfunc 1468803af686SBram Moolenaar 1469803af686SBram Moolenaardef Test_import_export_expr_map() 1470803af686SBram Moolenaar # check that :import and :export work when buffer is locked 1471803af686SBram Moolenaar let export_lines =<< trim END 1472803af686SBram Moolenaar vim9script 1473803af686SBram Moolenaar export def That(): string 1474803af686SBram Moolenaar return 'yes' 1475803af686SBram Moolenaar enddef 1476803af686SBram Moolenaar END 1477803af686SBram Moolenaar writefile(export_lines, 'Xexport_that.vim') 1478803af686SBram Moolenaar 1479803af686SBram Moolenaar let import_lines =<< trim END 1480803af686SBram Moolenaar vim9script 1481803af686SBram Moolenaar import That from './Xexport_that.vim' 1482803af686SBram Moolenaar assert_equal('yes', That()) 1483803af686SBram Moolenaar END 1484803af686SBram Moolenaar writefile(import_lines, 'Ximport.vim') 1485803af686SBram Moolenaar 1486803af686SBram Moolenaar nnoremap <expr> trigger g:Trigger() 1487803af686SBram Moolenaar feedkeys('trigger', "xt") 1488803af686SBram Moolenaar 1489730b2483SBram Moolenaar delete('Xexport_that.vim') 1490803af686SBram Moolenaar delete('Ximport.vim') 1491803af686SBram Moolenaar nunmap trigger 1492803af686SBram Moolenaarenddef 1493803af686SBram Moolenaar 14948e1986e3SBram Moolenaardef Test_import_in_filetype() 14958e1986e3SBram Moolenaar # check that :import works when the buffer is locked 14968e1986e3SBram Moolenaar mkdir('ftplugin', 'p') 14978e1986e3SBram Moolenaar let export_lines =<< trim END 14988e1986e3SBram Moolenaar vim9script 14998e1986e3SBram Moolenaar export let That = 'yes' 15008e1986e3SBram Moolenaar END 1501730b2483SBram Moolenaar writefile(export_lines, 'ftplugin/Xexport_ft.vim') 15028e1986e3SBram Moolenaar 15038e1986e3SBram Moolenaar let import_lines =<< trim END 15048e1986e3SBram Moolenaar vim9script 1505730b2483SBram Moolenaar import That from './Xexport_ft.vim' 15068e1986e3SBram Moolenaar assert_equal('yes', That) 15078e1986e3SBram Moolenaar g:did_load_mytpe = 1 15088e1986e3SBram Moolenaar END 15098e1986e3SBram Moolenaar writefile(import_lines, 'ftplugin/qf.vim') 15108e1986e3SBram Moolenaar 15118e1986e3SBram Moolenaar let save_rtp = &rtp 15128e1986e3SBram Moolenaar &rtp = getcwd() .. ',' .. &rtp 15138e1986e3SBram Moolenaar 15148e1986e3SBram Moolenaar filetype plugin on 15158e1986e3SBram Moolenaar copen 15168e1986e3SBram Moolenaar assert_equal(1, g:did_load_mytpe) 15178e1986e3SBram Moolenaar 15188e1986e3SBram Moolenaar quit! 1519730b2483SBram Moolenaar delete('Xexport_ft.vim') 15208e1986e3SBram Moolenaar delete('ftplugin', 'rf') 15218e1986e3SBram Moolenaar &rtp = save_rtp 15228e1986e3SBram Moolenaarenddef 15238e1986e3SBram Moolenaar 1524efa94447SBram Moolenaardef Test_use_import_in_mapping() 1525efa94447SBram Moolenaar let lines =<< trim END 1526efa94447SBram Moolenaar vim9script 1527efa94447SBram Moolenaar export def Funcx() 1528efa94447SBram Moolenaar g:result = 42 1529efa94447SBram Moolenaar enddef 1530efa94447SBram Moolenaar END 1531efa94447SBram Moolenaar writefile(lines, 'XsomeExport.vim') 1532efa94447SBram Moolenaar lines =<< trim END 1533efa94447SBram Moolenaar vim9script 1534efa94447SBram Moolenaar import Funcx from './XsomeExport.vim' 1535b3ca9824SBram Moolenaar nnoremap <F3> :call <sid>Funcx()<cr> 1536efa94447SBram Moolenaar END 1537efa94447SBram Moolenaar writefile(lines, 'Xmapscript.vim') 1538efa94447SBram Moolenaar 1539efa94447SBram Moolenaar source Xmapscript.vim 1540b3ca9824SBram Moolenaar feedkeys("\<F3>", "xt") 1541efa94447SBram Moolenaar assert_equal(42, g:result) 1542efa94447SBram Moolenaar 1543efa94447SBram Moolenaar unlet g:result 1544efa94447SBram Moolenaar delete('XsomeExport.vim') 1545efa94447SBram Moolenaar delete('Xmapscript.vim') 1546b3ca9824SBram Moolenaar nunmap <F3> 1547efa94447SBram Moolenaarenddef 1548efa94447SBram Moolenaar 1549750802b5SBram Moolenaardef Test_vim9script_fails() 15508a7d6542SBram Moolenaar CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:') 15518a7d6542SBram Moolenaar CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:') 1552750802b5SBram Moolenaar CheckScriptFailure(['export let some = 123'], 'E1042:') 15539721fb4eSBram Moolenaar CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1048:') 15549b7bf9e9SBram Moolenaar CheckScriptFailure(['vim9script', 'export let g:some'], 'E1022:') 1555750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:') 1556750802b5SBram Moolenaar 1557451c2e35SBram Moolenaar CheckScriptFailure(['vim9script', 'let str: string', 'str = 1234'], 'E1012:') 1558c785b9a7SBram Moolenaar CheckScriptFailure(['vim9script', 'const str = "asdf"', 'str = "xxx"'], 'E46:') 1559c785b9a7SBram Moolenaar 1560750802b5SBram Moolenaar assert_fails('vim9script', 'E1038') 1561a26b9700SBram Moolenaar assert_fails('export something', 'E1043') 15628a7d6542SBram Moolenaarenddef 15638a7d6542SBram Moolenaar 1564f7d267efSBram Moolenaarfunc Test_import_fails_without_script() 1565101f4810SBram Moolenaar CheckRunVimInTerminal 1566101f4810SBram Moolenaar 15679bb3eb3eSBram Moolenaar " call indirectly to avoid compilation error for missing functions 1568c620c055SBram Moolenaar call Run_Test_import_fails_on_command_line() 15699bb3eb3eSBram Moolenaarendfunc 15709bb3eb3eSBram Moolenaar 1571c620c055SBram Moolenaardef Run_Test_import_fails_on_command_line() 1572101f4810SBram Moolenaar let export =<< trim END 1573101f4810SBram Moolenaar vim9script 1574101f4810SBram Moolenaar export def Foo(): number 1575101f4810SBram Moolenaar return 0 1576101f4810SBram Moolenaar enddef 1577101f4810SBram Moolenaar END 1578730b2483SBram Moolenaar writefile(export, 'XexportCmd.vim') 1579101f4810SBram Moolenaar 1580730b2483SBram Moolenaar let buf = RunVimInTerminal('-c "import Foo from ''./XexportCmd.vim''"', #{ 15819bb3eb3eSBram Moolenaar rows: 6, wait_for_ruler: 0}) 15829bb3eb3eSBram Moolenaar WaitForAssert({-> assert_match('^E1094:', term_getline(buf, 5))}) 1583101f4810SBram Moolenaar 1584730b2483SBram Moolenaar delete('XexportCmd.vim') 15859bb3eb3eSBram Moolenaar StopVimInTerminal(buf) 15869bb3eb3eSBram Moolenaarenddef 1587101f4810SBram Moolenaar 15884c17ad94SBram Moolenaardef Test_vim9script_reload_import() 15898a7d6542SBram Moolenaar let lines =<< trim END 15908a7d6542SBram Moolenaar vim9script 15918a7d6542SBram Moolenaar const var = '' 15928a7d6542SBram Moolenaar let valone = 1234 15938a7d6542SBram Moolenaar def MyFunc(arg: string) 15948a7d6542SBram Moolenaar valone = 5678 15958a7d6542SBram Moolenaar enddef 15968a7d6542SBram Moolenaar END 15978a7d6542SBram Moolenaar let morelines =<< trim END 15988a7d6542SBram Moolenaar let valtwo = 222 15998a7d6542SBram Moolenaar export def GetValtwo(): number 16008a7d6542SBram Moolenaar return valtwo 16018a7d6542SBram Moolenaar enddef 16028a7d6542SBram Moolenaar END 160303afdcf1SBram Moolenaar writefile(lines + morelines, 'Xreload.vim') 16048a7d6542SBram Moolenaar source Xreload.vim 16058a7d6542SBram Moolenaar source Xreload.vim 16068a7d6542SBram Moolenaar source Xreload.vim 16078a7d6542SBram Moolenaar 16088a7d6542SBram Moolenaar let testlines =<< trim END 16098a7d6542SBram Moolenaar vim9script 16108a7d6542SBram Moolenaar def TheFunc() 16118a7d6542SBram Moolenaar import GetValtwo from './Xreload.vim' 16128a7d6542SBram Moolenaar assert_equal(222, GetValtwo()) 16138a7d6542SBram Moolenaar enddef 16148a7d6542SBram Moolenaar TheFunc() 16158a7d6542SBram Moolenaar END 16168a7d6542SBram Moolenaar writefile(testlines, 'Ximport.vim') 16178a7d6542SBram Moolenaar source Ximport.vim 16188a7d6542SBram Moolenaar 1619f5be8cdbSBram Moolenaar # Test that when not using "morelines" GetValtwo() and valtwo are still 1620f5be8cdbSBram Moolenaar # defined, because import doesn't reload a script. 16218a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 16228a7d6542SBram Moolenaar source Ximport.vim 16238a7d6542SBram Moolenaar 1624f5be8cdbSBram Moolenaar # cannot declare a var twice 16258a7d6542SBram Moolenaar lines =<< trim END 16268a7d6542SBram Moolenaar vim9script 16278a7d6542SBram Moolenaar let valone = 1234 16288a7d6542SBram Moolenaar let valone = 5678 16298a7d6542SBram Moolenaar END 16308a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 16318a7d6542SBram Moolenaar assert_fails('source Xreload.vim', 'E1041:') 16328a7d6542SBram Moolenaar 16338a7d6542SBram Moolenaar delete('Xreload.vim') 16348a7d6542SBram Moolenaar delete('Ximport.vim') 16358a7d6542SBram Moolenaarenddef 16368a7d6542SBram Moolenaar 1637fe465a01SBram Moolenaar" Not exported function that is referenced needs to be accessed by the 1638fe465a01SBram Moolenaar" script-local name. 1639fe465a01SBram Moolenaardef Test_vim9script_funcref() 1640fe465a01SBram Moolenaar let sortlines =<< trim END 1641fe465a01SBram Moolenaar vim9script 1642fe465a01SBram Moolenaar def Compare(i1: number, i2: number): number 1643bed36b93SBram Moolenaar return i2 - i1 1644fe465a01SBram Moolenaar enddef 1645fe465a01SBram Moolenaar 1646fe465a01SBram Moolenaar export def FastSort(): list<number> 1647fe465a01SBram Moolenaar return range(5)->sort(Compare) 1648fe465a01SBram Moolenaar enddef 1649fe465a01SBram Moolenaar END 1650fe465a01SBram Moolenaar writefile(sortlines, 'Xsort.vim') 1651fe465a01SBram Moolenaar 1652fe465a01SBram Moolenaar let lines =<< trim END 1653fe465a01SBram Moolenaar vim9script 1654fe465a01SBram Moolenaar import FastSort from './Xsort.vim' 1655fe465a01SBram Moolenaar def Test() 1656fe465a01SBram Moolenaar g:result = FastSort() 1657fe465a01SBram Moolenaar enddef 1658fe465a01SBram Moolenaar Test() 1659fe465a01SBram Moolenaar END 1660fe465a01SBram Moolenaar writefile(lines, 'Xscript.vim') 1661fe465a01SBram Moolenaar 1662fe465a01SBram Moolenaar source Xscript.vim 1663fe465a01SBram Moolenaar assert_equal([4, 3, 2, 1, 0], g:result) 1664fe465a01SBram Moolenaar 1665fe465a01SBram Moolenaar unlet g:result 1666fe465a01SBram Moolenaar delete('Xsort.vim') 1667fe465a01SBram Moolenaar delete('Xscript.vim') 1668fe465a01SBram Moolenaarenddef 1669fe465a01SBram Moolenaar 1670c620c055SBram Moolenaar" Check that when searcing for "FilterFunc" it doesn't find the import in the 1671c620c055SBram Moolenaar" script where FastFilter() is called from. 1672c620c055SBram Moolenaardef Test_vim9script_funcref_other_script() 1673c620c055SBram Moolenaar let filterLines =<< trim END 1674c620c055SBram Moolenaar vim9script 1675c620c055SBram Moolenaar export def FilterFunc(idx: number, val: number): bool 1676c620c055SBram Moolenaar return idx % 2 == 1 1677c620c055SBram Moolenaar enddef 1678c620c055SBram Moolenaar export def FastFilter(): list<number> 1679c620c055SBram Moolenaar return range(10)->filter('FilterFunc') 1680c620c055SBram Moolenaar enddef 1681c620c055SBram Moolenaar END 1682c620c055SBram Moolenaar writefile(filterLines, 'Xfilter.vim') 1683c620c055SBram Moolenaar 1684c620c055SBram Moolenaar let lines =<< trim END 1685c620c055SBram Moolenaar vim9script 1686c620c055SBram Moolenaar import {FilterFunc, FastFilter} from './Xfilter.vim' 1687c620c055SBram Moolenaar def Test() 1688c620c055SBram Moolenaar let x: list<number> = FastFilter() 1689c620c055SBram Moolenaar enddef 1690c620c055SBram Moolenaar Test() 1691c620c055SBram Moolenaar END 1692c620c055SBram Moolenaar writefile(lines, 'Ximport.vim') 1693c620c055SBram Moolenaar assert_fails('source Ximport.vim', 'E121:') 1694c620c055SBram Moolenaar 1695c620c055SBram Moolenaar delete('Xfilter.vim') 1696c620c055SBram Moolenaar delete('Ximport.vim') 1697c620c055SBram Moolenaarenddef 1698c620c055SBram Moolenaar 16994c17ad94SBram Moolenaardef Test_vim9script_reload_delfunc() 17004c17ad94SBram Moolenaar let first_lines =<< trim END 17014c17ad94SBram Moolenaar vim9script 17024c17ad94SBram Moolenaar def FuncYes(): string 17034c17ad94SBram Moolenaar return 'yes' 17044c17ad94SBram Moolenaar enddef 17054c17ad94SBram Moolenaar END 170603afdcf1SBram Moolenaar let withno_lines =<< trim END 17074c17ad94SBram Moolenaar def FuncNo(): string 17084c17ad94SBram Moolenaar return 'no' 17094c17ad94SBram Moolenaar enddef 17104c17ad94SBram Moolenaar def g:DoCheck(no_exists: bool) 17114c17ad94SBram Moolenaar assert_equal('yes', FuncYes()) 17124c17ad94SBram Moolenaar assert_equal('no', FuncNo()) 171303afdcf1SBram Moolenaar enddef 171403afdcf1SBram Moolenaar END 171503afdcf1SBram Moolenaar let nono_lines =<< trim END 171603afdcf1SBram Moolenaar def g:DoCheck(no_exists: bool) 171703afdcf1SBram Moolenaar assert_equal('yes', FuncYes()) 17184c17ad94SBram Moolenaar assert_fails('call FuncNo()', 'E117:') 17194c17ad94SBram Moolenaar enddef 17204c17ad94SBram Moolenaar END 17214c17ad94SBram Moolenaar 17224c17ad94SBram Moolenaar # FuncNo() is defined 172303afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 17244c17ad94SBram Moolenaar source Xreloaded.vim 17254c17ad94SBram Moolenaar g:DoCheck(true) 17264c17ad94SBram Moolenaar 17274c17ad94SBram Moolenaar # FuncNo() is not redefined 172803afdcf1SBram Moolenaar writefile(first_lines + nono_lines, 'Xreloaded.vim') 17294c17ad94SBram Moolenaar source Xreloaded.vim 173003afdcf1SBram Moolenaar g:DoCheck() 17314c17ad94SBram Moolenaar 17324c17ad94SBram Moolenaar # FuncNo() is back 173303afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 17344c17ad94SBram Moolenaar source Xreloaded.vim 173503afdcf1SBram Moolenaar g:DoCheck() 17364c17ad94SBram Moolenaar 17374c17ad94SBram Moolenaar delete('Xreloaded.vim') 17384c17ad94SBram Moolenaarenddef 17394c17ad94SBram Moolenaar 174089483d40SBram Moolenaardef Test_vim9script_reload_delvar() 174189483d40SBram Moolenaar # write the script with a script-local variable 174289483d40SBram Moolenaar let lines =<< trim END 174389483d40SBram Moolenaar vim9script 174489483d40SBram Moolenaar let var = 'string' 174589483d40SBram Moolenaar END 174689483d40SBram Moolenaar writefile(lines, 'XreloadVar.vim') 174789483d40SBram Moolenaar source XreloadVar.vim 174889483d40SBram Moolenaar 174989483d40SBram Moolenaar # now write the script using the same variable locally - works 175089483d40SBram Moolenaar lines =<< trim END 175189483d40SBram Moolenaar vim9script 175289483d40SBram Moolenaar def Func() 175389483d40SBram Moolenaar let var = 'string' 175489483d40SBram Moolenaar enddef 175589483d40SBram Moolenaar END 175689483d40SBram Moolenaar writefile(lines, 'XreloadVar.vim') 175789483d40SBram Moolenaar source XreloadVar.vim 175889483d40SBram Moolenaar 175989483d40SBram Moolenaar delete('XreloadVar.vim') 176089483d40SBram Moolenaarenddef 176189483d40SBram Moolenaar 17628a7d6542SBram Moolenaardef Test_import_absolute() 17638a7d6542SBram Moolenaar let import_lines = [ 1764e6085c53SBram Moolenaar 'vim9script', 1765e6085c53SBram Moolenaar 'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"', 1766e6085c53SBram Moolenaar 'def UseExported()', 1767e6085c53SBram Moolenaar ' g:imported_abs = exported', 1768e6085c53SBram Moolenaar ' exported = 8888', 1769e6085c53SBram Moolenaar ' g:imported_after = exported', 1770e6085c53SBram Moolenaar 'enddef', 1771e6085c53SBram Moolenaar 'UseExported()', 1772e6085c53SBram Moolenaar 'g:import_disassembled = execute("disass UseExported")', 1773e6085c53SBram Moolenaar ] 17748a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_abs.vim') 17758a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport_abs.vim') 17768a7d6542SBram Moolenaar 17778a7d6542SBram Moolenaar source Ximport_abs.vim 17788a7d6542SBram Moolenaar 17798a7d6542SBram Moolenaar assert_equal(9876, g:imported_abs) 17804e12a5dfSBram Moolenaar assert_equal(8888, g:imported_after) 1781675f716eSBram Moolenaar assert_match('<SNR>\d\+_UseExported.*' .. 1782675f716eSBram Moolenaar 'g:imported_abs = exported.*' .. 1783675f716eSBram Moolenaar '0 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 1784675f716eSBram Moolenaar '1 STOREG g:imported_abs.*' .. 1785675f716eSBram Moolenaar 'exported = 8888.*' .. 1786675f716eSBram Moolenaar '3 STORESCRIPT exported in .*Xexport_abs.vim.*' .. 1787675f716eSBram Moolenaar 'g:imported_after = exported.*' .. 1788675f716eSBram Moolenaar '4 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 1789675f716eSBram Moolenaar '5 STOREG g:imported_after.*', 1790e6085c53SBram Moolenaar g:import_disassembled) 1791b3ca9824SBram Moolenaar 1792b3ca9824SBram Moolenaar Undo_export_script_lines() 17938a7d6542SBram Moolenaar unlet g:imported_abs 17944e12a5dfSBram Moolenaar unlet g:import_disassembled 17958a7d6542SBram Moolenaar 17968a7d6542SBram Moolenaar delete('Ximport_abs.vim') 17978a7d6542SBram Moolenaar delete('Xexport_abs.vim') 17988a7d6542SBram Moolenaarenddef 17998a7d6542SBram Moolenaar 18008a7d6542SBram Moolenaardef Test_import_rtp() 18018a7d6542SBram Moolenaar let import_lines = [ 1802e6085c53SBram Moolenaar 'vim9script', 1803e6085c53SBram Moolenaar 'import exported from "Xexport_rtp.vim"', 1804e6085c53SBram Moolenaar 'g:imported_rtp = exported', 1805e6085c53SBram Moolenaar ] 18068a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_rtp.vim') 18078a7d6542SBram Moolenaar mkdir('import') 18088a7d6542SBram Moolenaar writefile(s:export_script_lines, 'import/Xexport_rtp.vim') 18098a7d6542SBram Moolenaar 18108a7d6542SBram Moolenaar let save_rtp = &rtp 18118a7d6542SBram Moolenaar &rtp = getcwd() 18128a7d6542SBram Moolenaar source Ximport_rtp.vim 18138a7d6542SBram Moolenaar &rtp = save_rtp 18148a7d6542SBram Moolenaar 18158a7d6542SBram Moolenaar assert_equal(9876, g:imported_rtp) 18168a7d6542SBram Moolenaar 1817b3ca9824SBram Moolenaar Undo_export_script_lines() 1818b3ca9824SBram Moolenaar unlet g:imported_rtp 18198a7d6542SBram Moolenaar delete('Ximport_rtp.vim') 182089483d40SBram Moolenaar delete('import', 'rf') 18218a7d6542SBram Moolenaarenddef 18228a7d6542SBram Moolenaar 182325e0f586SBram Moolenaardef Test_import_compile_error() 182425e0f586SBram Moolenaar let export_lines = [ 182525e0f586SBram Moolenaar 'vim9script', 182625e0f586SBram Moolenaar 'export def ExpFunc(): string', 182725e0f586SBram Moolenaar ' return notDefined', 182825e0f586SBram Moolenaar 'enddef', 182925e0f586SBram Moolenaar ] 183025e0f586SBram Moolenaar writefile(export_lines, 'Xexported.vim') 183125e0f586SBram Moolenaar 183225e0f586SBram Moolenaar let import_lines = [ 183325e0f586SBram Moolenaar 'vim9script', 183425e0f586SBram Moolenaar 'import ExpFunc from "./Xexported.vim"', 183525e0f586SBram Moolenaar 'def ImpFunc()', 183625e0f586SBram Moolenaar ' echo ExpFunc()', 183725e0f586SBram Moolenaar 'enddef', 183825e0f586SBram Moolenaar 'defcompile', 183925e0f586SBram Moolenaar ] 184025e0f586SBram Moolenaar writefile(import_lines, 'Ximport.vim') 184125e0f586SBram Moolenaar 184225e0f586SBram Moolenaar try 184325e0f586SBram Moolenaar source Ximport.vim 184425e0f586SBram Moolenaar catch /E1001/ 1845f5be8cdbSBram Moolenaar # Error should be fore the Xexported.vim file. 184625e0f586SBram Moolenaar assert_match('E1001: variable not found: notDefined', v:exception) 184725e0f586SBram Moolenaar assert_match('function <SNR>\d\+_ImpFunc\[1\]..<SNR>\d\+_ExpFunc, line 1', v:throwpoint) 184825e0f586SBram Moolenaar endtry 184925e0f586SBram Moolenaar 185025e0f586SBram Moolenaar delete('Xexported.vim') 185125e0f586SBram Moolenaar delete('Ximport.vim') 185225e0f586SBram Moolenaarenddef 185325e0f586SBram Moolenaar 1854c4ce36d4SBram Moolenaardef Test_func_redefine_error() 1855c4ce36d4SBram Moolenaar let lines = [ 1856c4ce36d4SBram Moolenaar 'vim9script', 1857c4ce36d4SBram Moolenaar 'def Func()', 1858c4ce36d4SBram Moolenaar ' eval [][0]', 1859c4ce36d4SBram Moolenaar 'enddef', 1860c4ce36d4SBram Moolenaar 'Func()', 1861c4ce36d4SBram Moolenaar ] 1862c4ce36d4SBram Moolenaar writefile(lines, 'Xtestscript.vim') 1863c4ce36d4SBram Moolenaar 1864c4ce36d4SBram Moolenaar for count in range(3) 1865c4ce36d4SBram Moolenaar try 1866c4ce36d4SBram Moolenaar source Xtestscript.vim 1867c4ce36d4SBram Moolenaar catch /E684/ 1868c4ce36d4SBram Moolenaar # function name should contain <SNR> every time 1869c4ce36d4SBram Moolenaar assert_match('E684: list index out of range', v:exception) 1870c4ce36d4SBram Moolenaar assert_match('function <SNR>\d\+_Func, line 1', v:throwpoint) 1871c4ce36d4SBram Moolenaar endtry 1872c4ce36d4SBram Moolenaar endfor 1873c4ce36d4SBram Moolenaar 1874c4ce36d4SBram Moolenaar delete('Xtestscript.vim') 1875c4ce36d4SBram Moolenaarenddef 1876c4ce36d4SBram Moolenaar 1877eef2102eSBram Moolenaardef Test_func_overrules_import_fails() 1878eef2102eSBram Moolenaar let export_lines =<< trim END 1879eef2102eSBram Moolenaar vim9script 1880eef2102eSBram Moolenaar export def Func() 1881eef2102eSBram Moolenaar echo 'imported' 1882eef2102eSBram Moolenaar enddef 1883eef2102eSBram Moolenaar END 1884eef2102eSBram Moolenaar writefile(export_lines, 'XexportedFunc.vim') 1885eef2102eSBram Moolenaar 1886eef2102eSBram Moolenaar let lines =<< trim END 1887eef2102eSBram Moolenaar vim9script 1888eef2102eSBram Moolenaar import Func from './XexportedFunc.vim' 1889eef2102eSBram Moolenaar def Func() 1890eef2102eSBram Moolenaar echo 'local to function' 1891eef2102eSBram Moolenaar enddef 1892eef2102eSBram Moolenaar END 1893eef2102eSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1894eef2102eSBram Moolenaar 1895eef2102eSBram Moolenaar lines =<< trim END 1896eef2102eSBram Moolenaar vim9script 1897eef2102eSBram Moolenaar import Func from './XexportedFunc.vim' 1898eef2102eSBram Moolenaar def Outer() 1899eef2102eSBram Moolenaar def Func() 1900eef2102eSBram Moolenaar echo 'local to function' 1901eef2102eSBram Moolenaar enddef 1902eef2102eSBram Moolenaar enddef 1903eef2102eSBram Moolenaar defcompile 1904eef2102eSBram Moolenaar END 1905eef2102eSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1906eef2102eSBram Moolenaar 1907eef2102eSBram Moolenaar delete('XexportedFunc.vim') 1908eef2102eSBram Moolenaarenddef 1909eef2102eSBram Moolenaar 1910b9a2cac3SBram Moolenaardef Test_func_redefine_fails() 1911b9a2cac3SBram Moolenaar let lines =<< trim END 1912b9a2cac3SBram Moolenaar vim9script 1913b9a2cac3SBram Moolenaar def Func() 1914b9a2cac3SBram Moolenaar echo 'one' 1915b9a2cac3SBram Moolenaar enddef 1916b9a2cac3SBram Moolenaar def Func() 1917b9a2cac3SBram Moolenaar echo 'two' 1918b9a2cac3SBram Moolenaar enddef 1919b9a2cac3SBram Moolenaar END 1920b9a2cac3SBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1921fa211f3cSBram Moolenaar 1922fa211f3cSBram Moolenaar lines =<< trim END 1923fa211f3cSBram Moolenaar vim9script 1924fa211f3cSBram Moolenaar def Foo(): string 1925fa211f3cSBram Moolenaar return 'foo' 1926fa211f3cSBram Moolenaar enddef 1927fa211f3cSBram Moolenaar def Func() 1928fa211f3cSBram Moolenaar let Foo = {-> 'lambda'} 1929fa211f3cSBram Moolenaar enddef 1930fa211f3cSBram Moolenaar defcompile 1931fa211f3cSBram Moolenaar END 1932fa211f3cSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1933b9a2cac3SBram Moolenaarenddef 1934b9a2cac3SBram Moolenaar 19358a7d6542SBram Moolenaardef Test_fixed_size_list() 1936f5be8cdbSBram Moolenaar # will be allocated as one piece of memory, check that changes work 19378a7d6542SBram Moolenaar let l = [1, 2, 3, 4] 19388a7d6542SBram Moolenaar l->remove(0) 19398a7d6542SBram Moolenaar l->add(5) 19408a7d6542SBram Moolenaar l->insert(99, 1) 19410f18b6d1SBram Moolenaar assert_equal([2, 99, 3, 4, 5], l) 19428a7d6542SBram Moolenaarenddef 19438a7d6542SBram Moolenaar 1944ae616494SBram Moolenaardef Test_no_insert_xit() 1945ae616494SBram Moolenaar call CheckDefExecFailure(['a = 1'], 'E1100:') 1946ae616494SBram Moolenaar call CheckDefExecFailure(['c = 1'], 'E1100:') 1947f5a48010SBram Moolenaar call CheckDefExecFailure(['i = 1'], 'E1100:') 1948f5a48010SBram Moolenaar call CheckDefExecFailure(['t = 1'], 'E1100:') 1949f5a48010SBram Moolenaar call CheckDefExecFailure(['x = 1'], 'E1100:') 1950ae616494SBram Moolenaar 1951ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'a = 1'], 'E488:') 1952ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'a'], 'E1100:') 1953ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'c = 1'], 'E488:') 1954ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'c'], 'E1100:') 1955f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'i = 1'], 'E488:') 1956f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'i'], 'E1100:') 1957f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 't'], 'E1100:') 1958f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 't = 1'], 'E1100:') 1959f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'x = 1'], 'E1100:') 1960ae616494SBram Moolenaarenddef 1961ae616494SBram Moolenaar 1962158906cfSBram Moolenaardef IfElse(what: number): string 1963158906cfSBram Moolenaar let res = '' 1964158906cfSBram Moolenaar if what == 1 1965158906cfSBram Moolenaar res = "one" 1966158906cfSBram Moolenaar elseif what == 2 1967158906cfSBram Moolenaar res = "two" 1968a259d8d3SBram Moolenaar else 1969158906cfSBram Moolenaar res = "three" 1970a259d8d3SBram Moolenaar endif 1971158906cfSBram Moolenaar return res 1972a259d8d3SBram Moolenaarenddef 1973a259d8d3SBram Moolenaar 1974158906cfSBram Moolenaardef Test_if_elseif_else() 1975158906cfSBram Moolenaar assert_equal('one', IfElse(1)) 1976158906cfSBram Moolenaar assert_equal('two', IfElse(2)) 1977158906cfSBram Moolenaar assert_equal('three', IfElse(3)) 19780f18b6d1SBram Moolenaarenddef 19790f18b6d1SBram Moolenaar 1980e8c4abbbSBram Moolenaardef Test_if_elseif_else_fails() 1981e8c4abbbSBram Moolenaar call CheckDefFailure(['elseif true'], 'E582:') 1982e8c4abbbSBram Moolenaar call CheckDefFailure(['else'], 'E581:') 1983e8c4abbbSBram Moolenaar call CheckDefFailure(['endif'], 'E580:') 1984e8c4abbbSBram Moolenaar call CheckDefFailure(['if true', 'elseif xxx'], 'E1001:') 1985585fea7bSBram Moolenaar call CheckDefFailure(['if true', 'echo 1'], 'E171:') 1986e8c4abbbSBram Moolenaarenddef 1987e8c4abbbSBram Moolenaar 19886d69bf60SBram Moolenaarlet g:bool_true = v:true 19896d69bf60SBram Moolenaarlet g:bool_false = v:false 19906d69bf60SBram Moolenaar 19916d69bf60SBram Moolenaardef Test_if_const_expr() 19926d69bf60SBram Moolenaar let res = false 19936d69bf60SBram Moolenaar if true ? true : false 19946d69bf60SBram Moolenaar res = true 19956d69bf60SBram Moolenaar endif 19966d69bf60SBram Moolenaar assert_equal(true, res) 19976d69bf60SBram Moolenaar 1998585fea7bSBram Moolenaar g:glob = 2 1999585fea7bSBram Moolenaar if false 20006797966dSBram Moolenaar execute('g:glob = 3') 2001585fea7bSBram Moolenaar endif 2002585fea7bSBram Moolenaar assert_equal(2, g:glob) 2003585fea7bSBram Moolenaar if true 20046797966dSBram Moolenaar execute('g:glob = 3') 2005585fea7bSBram Moolenaar endif 2006585fea7bSBram Moolenaar assert_equal(3, g:glob) 2007585fea7bSBram Moolenaar 20086d69bf60SBram Moolenaar res = false 20096d69bf60SBram Moolenaar if g:bool_true ? true : false 20106d69bf60SBram Moolenaar res = true 20116d69bf60SBram Moolenaar endif 20126d69bf60SBram Moolenaar assert_equal(true, res) 20136d69bf60SBram Moolenaar 20146d69bf60SBram Moolenaar res = false 20156d69bf60SBram Moolenaar if true ? g:bool_true : false 20166d69bf60SBram Moolenaar res = true 20176d69bf60SBram Moolenaar endif 20186d69bf60SBram Moolenaar assert_equal(true, res) 20196d69bf60SBram Moolenaar 20206d69bf60SBram Moolenaar res = false 20216d69bf60SBram Moolenaar if true ? true : g:bool_false 20226d69bf60SBram Moolenaar res = true 20236d69bf60SBram Moolenaar endif 20246d69bf60SBram Moolenaar assert_equal(true, res) 20256d69bf60SBram Moolenaar 20266d69bf60SBram Moolenaar res = false 20276d69bf60SBram Moolenaar if true ? false : true 20286d69bf60SBram Moolenaar res = true 20296d69bf60SBram Moolenaar endif 20306d69bf60SBram Moolenaar assert_equal(false, res) 20316d69bf60SBram Moolenaar 20326d69bf60SBram Moolenaar res = false 20336d69bf60SBram Moolenaar if false ? false : true 20346d69bf60SBram Moolenaar res = true 20356d69bf60SBram Moolenaar endif 20366d69bf60SBram Moolenaar assert_equal(true, res) 20376d69bf60SBram Moolenaar 20386d69bf60SBram Moolenaar res = false 20396d69bf60SBram Moolenaar if false ? true : false 20406d69bf60SBram Moolenaar res = true 20416d69bf60SBram Moolenaar endif 20426d69bf60SBram Moolenaar assert_equal(false, res) 20436d69bf60SBram Moolenaar 20446d69bf60SBram Moolenaar res = false 2045e8c4abbbSBram Moolenaar if has('xyz') ? true : false 2046e8c4abbbSBram Moolenaar res = true 2047e8c4abbbSBram Moolenaar endif 2048e8c4abbbSBram Moolenaar assert_equal(false, res) 2049e8c4abbbSBram Moolenaar 2050e8c4abbbSBram Moolenaar res = false 20516d69bf60SBram Moolenaar if true && true 20526d69bf60SBram Moolenaar res = true 20536d69bf60SBram Moolenaar endif 20546d69bf60SBram Moolenaar assert_equal(true, res) 20556d69bf60SBram Moolenaar 20566d69bf60SBram Moolenaar res = false 20576d69bf60SBram Moolenaar if true && false 20586d69bf60SBram Moolenaar res = true 20596d69bf60SBram Moolenaar endif 20606d69bf60SBram Moolenaar assert_equal(false, res) 20616d69bf60SBram Moolenaar 20626d69bf60SBram Moolenaar res = false 20636d69bf60SBram Moolenaar if g:bool_true && false 20646d69bf60SBram Moolenaar res = true 20656d69bf60SBram Moolenaar endif 20666d69bf60SBram Moolenaar assert_equal(false, res) 20676d69bf60SBram Moolenaar 20686d69bf60SBram Moolenaar res = false 20696d69bf60SBram Moolenaar if true && g:bool_false 20706d69bf60SBram Moolenaar res = true 20716d69bf60SBram Moolenaar endif 20726d69bf60SBram Moolenaar assert_equal(false, res) 20736d69bf60SBram Moolenaar 20746d69bf60SBram Moolenaar res = false 20756d69bf60SBram Moolenaar if false && false 20766d69bf60SBram Moolenaar res = true 20776d69bf60SBram Moolenaar endif 20786d69bf60SBram Moolenaar assert_equal(false, res) 20796d69bf60SBram Moolenaar 20806d69bf60SBram Moolenaar res = false 20816d69bf60SBram Moolenaar if true || false 20826d69bf60SBram Moolenaar res = true 20836d69bf60SBram Moolenaar endif 20846d69bf60SBram Moolenaar assert_equal(true, res) 20856d69bf60SBram Moolenaar 20866d69bf60SBram Moolenaar res = false 20876d69bf60SBram Moolenaar if g:bool_true || false 20886d69bf60SBram Moolenaar res = true 20896d69bf60SBram Moolenaar endif 20906d69bf60SBram Moolenaar assert_equal(true, res) 20916d69bf60SBram Moolenaar 20926d69bf60SBram Moolenaar res = false 20936d69bf60SBram Moolenaar if true || g:bool_false 20946d69bf60SBram Moolenaar res = true 20956d69bf60SBram Moolenaar endif 20966d69bf60SBram Moolenaar assert_equal(true, res) 20976d69bf60SBram Moolenaar 20986d69bf60SBram Moolenaar res = false 20996d69bf60SBram Moolenaar if false || false 21006d69bf60SBram Moolenaar res = true 21016d69bf60SBram Moolenaar endif 21026d69bf60SBram Moolenaar assert_equal(false, res) 210380c34ca3SBram Moolenaarenddef 21046d69bf60SBram Moolenaar 210580c34ca3SBram Moolenaardef Test_if_const_expr_fails() 210680c34ca3SBram Moolenaar call CheckDefFailure(['if "aaa" == "bbb'], 'E114:') 210780c34ca3SBram Moolenaar call CheckDefFailure(["if 'aaa' == 'bbb"], 'E115:') 2108e8c4abbbSBram Moolenaar call CheckDefFailure(["if has('aaa'"], 'E110:') 2109e8c4abbbSBram Moolenaar call CheckDefFailure(["if has('aaa') ? true false"], 'E109:') 21106d69bf60SBram Moolenaarenddef 21116d69bf60SBram Moolenaar 211272abcf42SBram Moolenaardef RunNested(i: number): number 211372abcf42SBram Moolenaar let x: number = 0 211472abcf42SBram Moolenaar if i % 2 211572abcf42SBram Moolenaar if 1 2116f5be8cdbSBram Moolenaar # comment 211772abcf42SBram Moolenaar else 2118f5be8cdbSBram Moolenaar # comment 211972abcf42SBram Moolenaar endif 212072abcf42SBram Moolenaar x += 1 212172abcf42SBram Moolenaar else 212272abcf42SBram Moolenaar x += 1000 212372abcf42SBram Moolenaar endif 212472abcf42SBram Moolenaar return x 212572abcf42SBram Moolenaarenddef 212672abcf42SBram Moolenaar 212772abcf42SBram Moolenaardef Test_nested_if() 212872abcf42SBram Moolenaar assert_equal(1, RunNested(1)) 212972abcf42SBram Moolenaar assert_equal(1000, RunNested(2)) 213072abcf42SBram Moolenaarenddef 213172abcf42SBram Moolenaar 2132ad39c094SBram Moolenaardef Test_execute_cmd() 2133ad39c094SBram Moolenaar new 2134ad39c094SBram Moolenaar setline(1, 'default') 2135ad39c094SBram Moolenaar execute 'call setline(1, "execute-string")' 2136ad39c094SBram Moolenaar assert_equal('execute-string', getline(1)) 2137a72cfb80SBram Moolenaar 2138a72cfb80SBram Moolenaar execute "call setline(1, 'execute-string')" 2139a72cfb80SBram Moolenaar assert_equal('execute-string', getline(1)) 2140a72cfb80SBram Moolenaar 2141ad39c094SBram Moolenaar let cmd1 = 'call setline(1,' 2142ad39c094SBram Moolenaar let cmd2 = '"execute-var")' 2143a72cfb80SBram Moolenaar execute cmd1 cmd2 # comment 2144ad39c094SBram Moolenaar assert_equal('execute-var', getline(1)) 2145a72cfb80SBram Moolenaar 2146ad39c094SBram Moolenaar execute cmd1 cmd2 '|call setline(1, "execute-var-string")' 2147ad39c094SBram Moolenaar assert_equal('execute-var-string', getline(1)) 2148a72cfb80SBram Moolenaar 2149ad39c094SBram Moolenaar let cmd_first = 'call ' 2150ad39c094SBram Moolenaar let cmd_last = 'setline(1, "execute-var-var")' 2151ad39c094SBram Moolenaar execute cmd_first .. cmd_last 2152ad39c094SBram Moolenaar assert_equal('execute-var-var', getline(1)) 2153ad39c094SBram Moolenaar bwipe! 2154585fea7bSBram Moolenaar 21552d6b20d6SBram Moolenaar let n = true 21562d6b20d6SBram Moolenaar execute 'echomsg' (n ? '"true"' : '"no"') 21572d6b20d6SBram Moolenaar assert_match('^true$', Screenline(&lines)) 21582d6b20d6SBram Moolenaar 2159e5abf7afSBram Moolenaar echomsg [1, 2, 3] #{a: 1, b: 2} 2160e5abf7afSBram Moolenaar assert_match('^\[1, 2, 3\] {''a'': 1, ''b'': 2}$', Screenline(&lines)) 2161e5abf7afSBram Moolenaar 2162*430deb19SBram Moolenaar call CheckDefFailure(['execute xxx'], 'E1001:', 1) 2163*430deb19SBram Moolenaar call CheckDefExecFailure(['execute "tabnext " .. 8'], 'E475:', 1) 2164*430deb19SBram Moolenaar call CheckDefFailure(['execute "cmd"# comment'], 'E488:', 1) 2165ad39c094SBram Moolenaarenddef 2166ad39c094SBram Moolenaar 216747e880d6SBram Moolenaardef Test_execute_cmd_vimscript() 2168f5be8cdbSBram Moolenaar # only checks line continuation 216947e880d6SBram Moolenaar let lines =<< trim END 217047e880d6SBram Moolenaar vim9script 217147e880d6SBram Moolenaar execute 'g:someVar' 217247e880d6SBram Moolenaar .. ' = ' .. 217347e880d6SBram Moolenaar '28' 217447e880d6SBram Moolenaar assert_equal(28, g:someVar) 217547e880d6SBram Moolenaar unlet g:someVar 217647e880d6SBram Moolenaar END 217747e880d6SBram Moolenaar CheckScriptSuccess(lines) 217847e880d6SBram Moolenaarenddef 217947e880d6SBram Moolenaar 2180ad39c094SBram Moolenaardef Test_echo_cmd() 2181a72cfb80SBram Moolenaar echo 'some' # comment 2182585fea7bSBram Moolenaar echon 'thing' 2183ad39c094SBram Moolenaar assert_match('^something$', Screenline(&lines)) 2184ad39c094SBram Moolenaar 2185a72cfb80SBram Moolenaar echo "some" # comment 2186a72cfb80SBram Moolenaar echon "thing" 2187a72cfb80SBram Moolenaar assert_match('^something$', Screenline(&lines)) 2188a72cfb80SBram Moolenaar 2189ad39c094SBram Moolenaar let str1 = 'some' 2190ad39c094SBram Moolenaar let str2 = 'more' 2191ad39c094SBram Moolenaar echo str1 str2 2192ad39c094SBram Moolenaar assert_match('^some more$', Screenline(&lines)) 2193a72cfb80SBram Moolenaar 2194a72cfb80SBram Moolenaar call CheckDefFailure(['echo "xxx"# comment'], 'E488:') 2195ad39c094SBram Moolenaarenddef 2196ad39c094SBram Moolenaar 2197f93c7feaSBram Moolenaardef Test_echomsg_cmd() 2198f93c7feaSBram Moolenaar echomsg 'some' 'more' # comment 2199f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 2200f93c7feaSBram Moolenaar echo 'clear' 2201df069eecSBram Moolenaar :1messages 2202f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 2203f93c7feaSBram Moolenaar 2204f93c7feaSBram Moolenaar call CheckDefFailure(['echomsg "xxx"# comment'], 'E488:') 2205f93c7feaSBram Moolenaarenddef 2206f93c7feaSBram Moolenaar 220747e880d6SBram Moolenaardef Test_echomsg_cmd_vimscript() 2208f5be8cdbSBram Moolenaar # only checks line continuation 220947e880d6SBram Moolenaar let lines =<< trim END 221047e880d6SBram Moolenaar vim9script 221147e880d6SBram Moolenaar echomsg 'here' 221247e880d6SBram Moolenaar .. ' is ' .. 221347e880d6SBram Moolenaar 'a message' 221447e880d6SBram Moolenaar assert_match('^here is a message$', Screenline(&lines)) 221547e880d6SBram Moolenaar END 221647e880d6SBram Moolenaar CheckScriptSuccess(lines) 221747e880d6SBram Moolenaarenddef 221847e880d6SBram Moolenaar 2219f93c7feaSBram Moolenaardef Test_echoerr_cmd() 222040ee466cSBram Moolenaar try 222140ee466cSBram Moolenaar echoerr 'something' 'wrong' # comment 222240ee466cSBram Moolenaar catch 222340ee466cSBram Moolenaar assert_match('something wrong', v:exception) 222440ee466cSBram Moolenaar endtry 2225f93c7feaSBram Moolenaarenddef 2226f93c7feaSBram Moolenaar 222747e880d6SBram Moolenaardef Test_echoerr_cmd_vimscript() 2228f5be8cdbSBram Moolenaar # only checks line continuation 222947e880d6SBram Moolenaar let lines =<< trim END 223047e880d6SBram Moolenaar vim9script 223147e880d6SBram Moolenaar try 223247e880d6SBram Moolenaar echoerr 'this' 223347e880d6SBram Moolenaar .. ' is ' .. 223447e880d6SBram Moolenaar 'wrong' 223547e880d6SBram Moolenaar catch 223647e880d6SBram Moolenaar assert_match('this is wrong', v:exception) 223747e880d6SBram Moolenaar endtry 223847e880d6SBram Moolenaar END 223947e880d6SBram Moolenaar CheckScriptSuccess(lines) 224047e880d6SBram Moolenaarenddef 224147e880d6SBram Moolenaar 224241fe0617SBram Moolenaardef Test_for_outside_of_function() 224341fe0617SBram Moolenaar let lines =<< trim END 224441fe0617SBram Moolenaar vim9script 224541fe0617SBram Moolenaar new 224641fe0617SBram Moolenaar for var in range(0, 3) 224741fe0617SBram Moolenaar append(line('$'), var) 224841fe0617SBram Moolenaar endfor 224941fe0617SBram Moolenaar assert_equal(['', '0', '1', '2', '3'], getline(1, '$')) 225041fe0617SBram Moolenaar bwipe! 225141fe0617SBram Moolenaar END 225241fe0617SBram Moolenaar writefile(lines, 'Xvim9for.vim') 225341fe0617SBram Moolenaar source Xvim9for.vim 225441fe0617SBram Moolenaar delete('Xvim9for.vim') 225541fe0617SBram Moolenaarenddef 22568a7d6542SBram Moolenaar 2257e8c4abbbSBram Moolenaardef Test_for_loop() 2258e8c4abbbSBram Moolenaar let result = '' 2259e8c4abbbSBram Moolenaar for cnt in range(7) 2260e8c4abbbSBram Moolenaar if cnt == 4 2261e8c4abbbSBram Moolenaar break 2262e8c4abbbSBram Moolenaar endif 2263e8c4abbbSBram Moolenaar if cnt == 2 2264e8c4abbbSBram Moolenaar continue 2265e8c4abbbSBram Moolenaar endif 2266e8c4abbbSBram Moolenaar result ..= cnt .. '_' 2267e8c4abbbSBram Moolenaar endfor 2268e8c4abbbSBram Moolenaar assert_equal('0_1_3_', result) 22690ad3e894SBram Moolenaar 22700ad3e894SBram Moolenaar let concat = '' 22710ad3e894SBram Moolenaar for str in eval('["one", "two"]') 22720ad3e894SBram Moolenaar concat ..= str 22730ad3e894SBram Moolenaar endfor 22740ad3e894SBram Moolenaar assert_equal('onetwo', concat) 2275e8c4abbbSBram Moolenaarenddef 2276e8c4abbbSBram Moolenaar 2277e8c4abbbSBram Moolenaardef Test_for_loop_fails() 2278675f716eSBram Moolenaar CheckDefFailure(['for # in range(5)'], 'E690:') 2279675f716eSBram Moolenaar CheckDefFailure(['for i In range(5)'], 'E690:') 2280451c2e35SBram Moolenaar CheckDefFailure(['let x = 5', 'for x in range(5)'], 'E1017:') 2281822ba247SBram Moolenaar CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef', 'defcompile'], 'E1006:') 2282451c2e35SBram Moolenaar CheckDefFailure(['for i in "text"'], 'E1012:') 2283675f716eSBram Moolenaar CheckDefFailure(['for i in xxx'], 'E1001:') 2284675f716eSBram Moolenaar CheckDefFailure(['endfor'], 'E588:') 2285675f716eSBram Moolenaar CheckDefFailure(['for i in range(3)', 'echo 3'], 'E170:') 2286e8c4abbbSBram Moolenaarenddef 2287e8c4abbbSBram Moolenaar 2288d0df1aacSBram Moolenaardef Test_while_loop() 2289d0df1aacSBram Moolenaar let result = '' 2290d0df1aacSBram Moolenaar let cnt = 0 2291d0df1aacSBram Moolenaar while cnt < 555 2292d0df1aacSBram Moolenaar if cnt == 3 2293d0df1aacSBram Moolenaar break 2294d0df1aacSBram Moolenaar endif 2295d0df1aacSBram Moolenaar cnt += 1 2296d0df1aacSBram Moolenaar if cnt == 2 2297d0df1aacSBram Moolenaar continue 2298d0df1aacSBram Moolenaar endif 2299d0df1aacSBram Moolenaar result ..= cnt .. '_' 2300d0df1aacSBram Moolenaar endwhile 2301d0df1aacSBram Moolenaar assert_equal('1_3_', result) 2302d0df1aacSBram Moolenaarenddef 2303d0df1aacSBram Moolenaar 2304e8c4abbbSBram Moolenaardef Test_while_loop_fails() 2305675f716eSBram Moolenaar CheckDefFailure(['while xxx'], 'E1001:') 2306675f716eSBram Moolenaar CheckDefFailure(['endwhile'], 'E588:') 2307675f716eSBram Moolenaar CheckDefFailure(['continue'], 'E586:') 2308675f716eSBram Moolenaar CheckDefFailure(['if true', 'continue'], 'E586:') 2309675f716eSBram Moolenaar CheckDefFailure(['break'], 'E587:') 2310675f716eSBram Moolenaar CheckDefFailure(['if true', 'break'], 'E587:') 2311675f716eSBram Moolenaar CheckDefFailure(['while 1', 'echo 3'], 'E170:') 2312bd5da371SBram Moolenaarenddef 2313bd5da371SBram Moolenaar 23149645e2d9SBram Moolenaardef Test_interrupt_loop() 231597acfc78SBram Moolenaar let caught = false 23169645e2d9SBram Moolenaar let x = 0 231797acfc78SBram Moolenaar try 23189645e2d9SBram Moolenaar while 1 23199645e2d9SBram Moolenaar x += 1 23209645e2d9SBram Moolenaar if x == 100 23219645e2d9SBram Moolenaar feedkeys("\<C-C>", 'Lt') 23229645e2d9SBram Moolenaar endif 23239645e2d9SBram Moolenaar endwhile 232497acfc78SBram Moolenaar catch 232597acfc78SBram Moolenaar caught = true 232697acfc78SBram Moolenaar assert_equal(100, x) 232797acfc78SBram Moolenaar endtry 232897acfc78SBram Moolenaar assert_true(caught, 'should have caught an exception') 23299645e2d9SBram Moolenaarenddef 233020431c9dSBram Moolenaar 23314fdae999SBram Moolenaardef Test_automatic_line_continuation() 23324fdae999SBram Moolenaar let mylist = [ 23334fdae999SBram Moolenaar 'one', 23344fdae999SBram Moolenaar 'two', 23354fdae999SBram Moolenaar 'three', 2336f5be8cdbSBram Moolenaar ] # comment 23374fdae999SBram Moolenaar assert_equal(['one', 'two', 'three'], mylist) 23384fdae999SBram Moolenaar 23394fdae999SBram Moolenaar let mydict = { 23404fdae999SBram Moolenaar 'one': 1, 23414fdae999SBram Moolenaar 'two': 2, 23424fdae999SBram Moolenaar 'three': 23434fdae999SBram Moolenaar 3, 2344f5be8cdbSBram Moolenaar } # comment 23454fdae999SBram Moolenaar assert_equal({'one': 1, 'two': 2, 'three': 3}, mydict) 23464fdae999SBram Moolenaar mydict = #{ 23472c330432SBram Moolenaar one: 1, # comment 23482c330432SBram Moolenaar two: # comment 23492c330432SBram Moolenaar 2, # comment 23502c330432SBram Moolenaar three: 3 # comment 23512c330432SBram Moolenaar } 23522c330432SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 23532c330432SBram Moolenaar mydict = #{ 23542c330432SBram Moolenaar one: 1, 23554fdae999SBram Moolenaar two: 23564fdae999SBram Moolenaar 2, 23572c330432SBram Moolenaar three: 3 23584fdae999SBram Moolenaar } 23594fdae999SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 2360e6085c53SBram Moolenaar 2361e6085c53SBram Moolenaar assert_equal( 2362e6085c53SBram Moolenaar ['one', 'two', 'three'], 2363e6085c53SBram Moolenaar split('one two three') 2364e6085c53SBram Moolenaar ) 23654fdae999SBram Moolenaarenddef 23664fdae999SBram Moolenaar 23677a092245SBram Moolenaardef Test_vim9_comment() 23687a092245SBram Moolenaar CheckScriptSuccess([ 23697a092245SBram Moolenaar 'vim9script', 23707a092245SBram Moolenaar '# something', 23717a092245SBram Moolenaar ]) 23727a092245SBram Moolenaar CheckScriptFailure([ 23737a092245SBram Moolenaar 'vim9script', 23747a092245SBram Moolenaar ':# something', 23757a092245SBram Moolenaar ], 'E488:') 23767a092245SBram Moolenaar CheckScriptFailure([ 23777a092245SBram Moolenaar '# something', 23787a092245SBram Moolenaar ], 'E488:') 23797a092245SBram Moolenaar CheckScriptFailure([ 23807a092245SBram Moolenaar ':# something', 23817a092245SBram Moolenaar ], 'E488:') 23827a092245SBram Moolenaar 23834a8d9f2eSBram Moolenaar { # block start 23844a8d9f2eSBram Moolenaar } # block end 23854a8d9f2eSBram Moolenaar CheckDefFailure([ 23864a8d9f2eSBram Moolenaar '{# comment', 23874a8d9f2eSBram Moolenaar ], 'E488:') 23884a8d9f2eSBram Moolenaar CheckDefFailure([ 23894a8d9f2eSBram Moolenaar '{', 23904a8d9f2eSBram Moolenaar '}# comment', 23914a8d9f2eSBram Moolenaar ], 'E488:') 23924a8d9f2eSBram Moolenaar 23934a8d9f2eSBram Moolenaar echo "yes" # comment 23944a8d9f2eSBram Moolenaar CheckDefFailure([ 23954a8d9f2eSBram Moolenaar 'echo "yes"# comment', 23964a8d9f2eSBram Moolenaar ], 'E488:') 23977a092245SBram Moolenaar CheckScriptSuccess([ 23987a092245SBram Moolenaar 'vim9script', 23997a092245SBram Moolenaar 'echo "yes" # something', 24007a092245SBram Moolenaar ]) 24017a092245SBram Moolenaar CheckScriptFailure([ 24027a092245SBram Moolenaar 'vim9script', 24037a092245SBram Moolenaar 'echo "yes"# something', 24047a092245SBram Moolenaar ], 'E121:') 24057a092245SBram Moolenaar CheckScriptFailure([ 24067a092245SBram Moolenaar 'vim9script', 24077a092245SBram Moolenaar 'echo# something', 24087a092245SBram Moolenaar ], 'E121:') 24097a092245SBram Moolenaar CheckScriptFailure([ 24107a092245SBram Moolenaar 'echo "yes" # something', 24117a092245SBram Moolenaar ], 'E121:') 24127a092245SBram Moolenaar 24134a8d9f2eSBram Moolenaar exe "echo" # comment 24144a8d9f2eSBram Moolenaar CheckDefFailure([ 24154a8d9f2eSBram Moolenaar 'exe "echo"# comment', 24164a8d9f2eSBram Moolenaar ], 'E488:') 24174a8d9f2eSBram Moolenaar CheckScriptSuccess([ 24184a8d9f2eSBram Moolenaar 'vim9script', 24194a8d9f2eSBram Moolenaar 'exe "echo" # something', 24204a8d9f2eSBram Moolenaar ]) 24214a8d9f2eSBram Moolenaar CheckScriptFailure([ 24224a8d9f2eSBram Moolenaar 'vim9script', 24234a8d9f2eSBram Moolenaar 'exe "echo"# something', 24244a8d9f2eSBram Moolenaar ], 'E121:') 24254a8d9f2eSBram Moolenaar CheckDefFailure([ 24264a8d9f2eSBram Moolenaar 'exe # comment', 24274a8d9f2eSBram Moolenaar ], 'E1015:') 24284a8d9f2eSBram Moolenaar CheckScriptFailure([ 24294a8d9f2eSBram Moolenaar 'vim9script', 24304a8d9f2eSBram Moolenaar 'exe# something', 24314a8d9f2eSBram Moolenaar ], 'E121:') 24324a8d9f2eSBram Moolenaar CheckScriptFailure([ 24334a8d9f2eSBram Moolenaar 'exe "echo" # something', 24344a8d9f2eSBram Moolenaar ], 'E121:') 24354a8d9f2eSBram Moolenaar 24367a092245SBram Moolenaar CheckDefFailure([ 24377a092245SBram Moolenaar 'try# comment', 24387a092245SBram Moolenaar ' echo "yes"', 24397a092245SBram Moolenaar 'catch', 24407a092245SBram Moolenaar 'endtry', 24417a092245SBram Moolenaar ], 'E488:') 24422c5ed4e3SBram Moolenaar CheckScriptFailure([ 24432c5ed4e3SBram Moolenaar 'vim9script', 24442c5ed4e3SBram Moolenaar 'try# comment', 24452c5ed4e3SBram Moolenaar 'echo "yes"', 24462c5ed4e3SBram Moolenaar ], 'E488:') 24477a092245SBram Moolenaar CheckDefFailure([ 24487a092245SBram Moolenaar 'try', 2449a72cfb80SBram Moolenaar ' throw#comment', 2450a72cfb80SBram Moolenaar 'catch', 2451a72cfb80SBram Moolenaar 'endtry', 2452a72cfb80SBram Moolenaar ], 'E1015:') 2453a72cfb80SBram Moolenaar CheckDefFailure([ 2454a72cfb80SBram Moolenaar 'try', 2455a72cfb80SBram Moolenaar ' throw "yes"#comment', 2456a72cfb80SBram Moolenaar 'catch', 2457a72cfb80SBram Moolenaar 'endtry', 2458a72cfb80SBram Moolenaar ], 'E488:') 2459a72cfb80SBram Moolenaar CheckDefFailure([ 2460a72cfb80SBram Moolenaar 'try', 24617a092245SBram Moolenaar ' echo "yes"', 24627a092245SBram Moolenaar 'catch# comment', 24637a092245SBram Moolenaar 'endtry', 24647a092245SBram Moolenaar ], 'E488:') 24652c5ed4e3SBram Moolenaar CheckScriptFailure([ 24662c5ed4e3SBram Moolenaar 'vim9script', 24672c5ed4e3SBram Moolenaar 'try', 24682c5ed4e3SBram Moolenaar ' echo "yes"', 24692c5ed4e3SBram Moolenaar 'catch# comment', 24702c5ed4e3SBram Moolenaar 'endtry', 24712c5ed4e3SBram Moolenaar ], 'E654:') 24722c5ed4e3SBram Moolenaar CheckDefFailure([ 24732c5ed4e3SBram Moolenaar 'try', 24742c5ed4e3SBram Moolenaar ' echo "yes"', 24752c5ed4e3SBram Moolenaar 'catch /pat/# comment', 24762c5ed4e3SBram Moolenaar 'endtry', 24772c5ed4e3SBram Moolenaar ], 'E488:') 24787a092245SBram Moolenaar CheckDefFailure([ 24797a092245SBram Moolenaar 'try', 24807a092245SBram Moolenaar 'echo "yes"', 24817a092245SBram Moolenaar 'catch', 24827a092245SBram Moolenaar 'endtry# comment', 24837a092245SBram Moolenaar ], 'E488:') 24842c5ed4e3SBram Moolenaar CheckScriptFailure([ 24852c5ed4e3SBram Moolenaar 'vim9script', 24862c5ed4e3SBram Moolenaar 'try', 24872c5ed4e3SBram Moolenaar ' echo "yes"', 24882c5ed4e3SBram Moolenaar 'catch', 24892c5ed4e3SBram Moolenaar 'endtry# comment', 24909b7bf9e9SBram Moolenaar ], 'E488:') 24912c5ed4e3SBram Moolenaar 24922c5ed4e3SBram Moolenaar CheckScriptSuccess([ 24932c5ed4e3SBram Moolenaar 'vim9script', 24942c5ed4e3SBram Moolenaar 'hi # comment', 24952c5ed4e3SBram Moolenaar ]) 24962c5ed4e3SBram Moolenaar CheckScriptFailure([ 24972c5ed4e3SBram Moolenaar 'vim9script', 24982c5ed4e3SBram Moolenaar 'hi# comment', 24992c5ed4e3SBram Moolenaar ], 'E416:') 25001966c248SBram Moolenaar CheckScriptSuccess([ 25011966c248SBram Moolenaar 'vim9script', 25021966c248SBram Moolenaar 'hi Search # comment', 25031966c248SBram Moolenaar ]) 25041966c248SBram Moolenaar CheckScriptFailure([ 25051966c248SBram Moolenaar 'vim9script', 25061966c248SBram Moolenaar 'hi Search# comment', 25071966c248SBram Moolenaar ], 'E416:') 25081966c248SBram Moolenaar CheckScriptSuccess([ 25091966c248SBram Moolenaar 'vim9script', 25101966c248SBram Moolenaar 'hi link This Search # comment', 25111966c248SBram Moolenaar ]) 25121966c248SBram Moolenaar CheckScriptFailure([ 25131966c248SBram Moolenaar 'vim9script', 25141966c248SBram Moolenaar 'hi link This That# comment', 25151966c248SBram Moolenaar ], 'E413:') 25161966c248SBram Moolenaar CheckScriptSuccess([ 25171966c248SBram Moolenaar 'vim9script', 25181966c248SBram Moolenaar 'hi clear This # comment', 25191966c248SBram Moolenaar 'hi clear # comment', 25201966c248SBram Moolenaar ]) 2521f5be8cdbSBram Moolenaar # not tested, because it doesn't give an error but a warning: 2522f5be8cdbSBram Moolenaar # hi clear This# comment', 25231966c248SBram Moolenaar CheckScriptFailure([ 25241966c248SBram Moolenaar 'vim9script', 25251966c248SBram Moolenaar 'hi clear# comment', 25261966c248SBram Moolenaar ], 'E416:') 25271966c248SBram Moolenaar 25281966c248SBram Moolenaar CheckScriptSuccess([ 25291966c248SBram Moolenaar 'vim9script', 25301966c248SBram Moolenaar 'hi Group term=bold', 25311966c248SBram Moolenaar 'match Group /todo/ # comment', 25321966c248SBram Moolenaar ]) 25331966c248SBram Moolenaar CheckScriptFailure([ 25341966c248SBram Moolenaar 'vim9script', 25351966c248SBram Moolenaar 'hi Group term=bold', 25361966c248SBram Moolenaar 'match Group /todo/# comment', 25371966c248SBram Moolenaar ], 'E488:') 25381966c248SBram Moolenaar CheckScriptSuccess([ 25391966c248SBram Moolenaar 'vim9script', 25401966c248SBram Moolenaar 'match # comment', 25411966c248SBram Moolenaar ]) 25421966c248SBram Moolenaar CheckScriptFailure([ 25431966c248SBram Moolenaar 'vim9script', 25441966c248SBram Moolenaar 'match# comment', 25451966c248SBram Moolenaar ], 'E475:') 25461966c248SBram Moolenaar CheckScriptSuccess([ 25471966c248SBram Moolenaar 'vim9script', 25481966c248SBram Moolenaar 'match none # comment', 25491966c248SBram Moolenaar ]) 25501966c248SBram Moolenaar CheckScriptFailure([ 25511966c248SBram Moolenaar 'vim9script', 25521966c248SBram Moolenaar 'match none# comment', 25531966c248SBram Moolenaar ], 'E475:') 25541966c248SBram Moolenaar 25551966c248SBram Moolenaar CheckScriptSuccess([ 25561966c248SBram Moolenaar 'vim9script', 25571966c248SBram Moolenaar 'menutrans clear # comment', 25581966c248SBram Moolenaar ]) 25591966c248SBram Moolenaar CheckScriptFailure([ 25601966c248SBram Moolenaar 'vim9script', 25611966c248SBram Moolenaar 'menutrans clear# comment text', 25621966c248SBram Moolenaar ], 'E474:') 25631966c248SBram Moolenaar 25641966c248SBram Moolenaar CheckScriptSuccess([ 25651966c248SBram Moolenaar 'vim9script', 25661966c248SBram Moolenaar 'syntax clear # comment', 25671966c248SBram Moolenaar ]) 25681966c248SBram Moolenaar CheckScriptFailure([ 25691966c248SBram Moolenaar 'vim9script', 25701966c248SBram Moolenaar 'syntax clear# comment text', 25711966c248SBram Moolenaar ], 'E28:') 25721966c248SBram Moolenaar CheckScriptSuccess([ 25731966c248SBram Moolenaar 'vim9script', 25741966c248SBram Moolenaar 'syntax keyword Word some', 25751966c248SBram Moolenaar 'syntax clear Word # comment', 25761966c248SBram Moolenaar ]) 25771966c248SBram Moolenaar CheckScriptFailure([ 25781966c248SBram Moolenaar 'vim9script', 25791966c248SBram Moolenaar 'syntax keyword Word some', 25801966c248SBram Moolenaar 'syntax clear Word# comment text', 25811966c248SBram Moolenaar ], 'E28:') 25821966c248SBram Moolenaar 25831966c248SBram Moolenaar CheckScriptSuccess([ 25841966c248SBram Moolenaar 'vim9script', 25851966c248SBram Moolenaar 'syntax list # comment', 25861966c248SBram Moolenaar ]) 25871966c248SBram Moolenaar CheckScriptFailure([ 25881966c248SBram Moolenaar 'vim9script', 25891966c248SBram Moolenaar 'syntax list# comment text', 25901966c248SBram Moolenaar ], 'E28:') 25911966c248SBram Moolenaar 25921966c248SBram Moolenaar CheckScriptSuccess([ 25931966c248SBram Moolenaar 'vim9script', 25941966c248SBram Moolenaar 'syntax match Word /pat/ oneline # comment', 25951966c248SBram Moolenaar ]) 25961966c248SBram Moolenaar CheckScriptFailure([ 25971966c248SBram Moolenaar 'vim9script', 25981966c248SBram Moolenaar 'syntax match Word /pat/ oneline# comment', 25991966c248SBram Moolenaar ], 'E475:') 26001966c248SBram Moolenaar 26011966c248SBram Moolenaar CheckScriptSuccess([ 26021966c248SBram Moolenaar 'vim9script', 26031966c248SBram Moolenaar 'syntax keyword Word word # comm[ent', 26041966c248SBram Moolenaar ]) 26051966c248SBram Moolenaar CheckScriptFailure([ 26061966c248SBram Moolenaar 'vim9script', 26071966c248SBram Moolenaar 'syntax keyword Word word# comm[ent', 26081966c248SBram Moolenaar ], 'E789:') 26091966c248SBram Moolenaar 26101966c248SBram Moolenaar CheckScriptSuccess([ 26111966c248SBram Moolenaar 'vim9script', 26121966c248SBram Moolenaar 'syntax match Word /pat/ # comment', 26131966c248SBram Moolenaar ]) 26141966c248SBram Moolenaar CheckScriptFailure([ 26151966c248SBram Moolenaar 'vim9script', 26161966c248SBram Moolenaar 'syntax match Word /pat/# comment', 26171966c248SBram Moolenaar ], 'E402:') 26181966c248SBram Moolenaar 26191966c248SBram Moolenaar CheckScriptSuccess([ 26201966c248SBram Moolenaar 'vim9script', 26211966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something # comment', 26221966c248SBram Moolenaar ]) 26231966c248SBram Moolenaar CheckScriptFailure([ 26241966c248SBram Moolenaar 'vim9script', 26251966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something# comment', 26261966c248SBram Moolenaar ], 'E475:') 26271966c248SBram Moolenaar CheckScriptFailure([ 26281966c248SBram Moolenaar 'vim9script', 26291966c248SBram Moolenaar 'syntax match Word /pat/ contains= # comment', 26301966c248SBram Moolenaar ], 'E406:') 26311966c248SBram Moolenaar CheckScriptFailure([ 26321966c248SBram Moolenaar 'vim9script', 26331966c248SBram Moolenaar 'syntax match Word /pat/ contains=# comment', 26341966c248SBram Moolenaar ], 'E475:') 26351966c248SBram Moolenaar 26361966c248SBram Moolenaar CheckScriptSuccess([ 26371966c248SBram Moolenaar 'vim9script', 26381966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/ # comment', 26391966c248SBram Moolenaar ]) 26401966c248SBram Moolenaar CheckScriptFailure([ 26411966c248SBram Moolenaar 'vim9script', 26421966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/# comment', 2643d032f34aSBram Moolenaar ], 'E402:') 26441966c248SBram Moolenaar 26451966c248SBram Moolenaar CheckScriptSuccess([ 26461966c248SBram Moolenaar 'vim9script', 26471966c248SBram Moolenaar 'syntax sync # comment', 26481966c248SBram Moolenaar ]) 26491966c248SBram Moolenaar CheckScriptFailure([ 26501966c248SBram Moolenaar 'vim9script', 26511966c248SBram Moolenaar 'syntax sync# comment', 26521966c248SBram Moolenaar ], 'E404:') 26531966c248SBram Moolenaar CheckScriptSuccess([ 26541966c248SBram Moolenaar 'vim9script', 26551966c248SBram Moolenaar 'syntax sync ccomment # comment', 26561966c248SBram Moolenaar ]) 26571966c248SBram Moolenaar CheckScriptFailure([ 26581966c248SBram Moolenaar 'vim9script', 26591966c248SBram Moolenaar 'syntax sync ccomment# comment', 26601966c248SBram Moolenaar ], 'E404:') 26611966c248SBram Moolenaar 26621966c248SBram Moolenaar CheckScriptSuccess([ 26631966c248SBram Moolenaar 'vim9script', 26641966c248SBram Moolenaar 'syntax cluster Some contains=Word # comment', 26651966c248SBram Moolenaar ]) 26661966c248SBram Moolenaar CheckScriptFailure([ 26671966c248SBram Moolenaar 'vim9script', 26681966c248SBram Moolenaar 'syntax cluster Some contains=Word# comment', 26691966c248SBram Moolenaar ], 'E475:') 2670a72cfb80SBram Moolenaar 2671a72cfb80SBram Moolenaar CheckScriptSuccess([ 2672a72cfb80SBram Moolenaar 'vim9script', 2673a72cfb80SBram Moolenaar 'command Echo echo # comment', 2674a72cfb80SBram Moolenaar 'command Echo # comment', 2675a72cfb80SBram Moolenaar ]) 2676a72cfb80SBram Moolenaar CheckScriptFailure([ 2677a72cfb80SBram Moolenaar 'vim9script', 2678a72cfb80SBram Moolenaar 'command Echo echo# comment', 2679a72cfb80SBram Moolenaar 'Echo', 2680a72cfb80SBram Moolenaar ], 'E121:') 2681a72cfb80SBram Moolenaar CheckScriptFailure([ 2682a72cfb80SBram Moolenaar 'vim9script', 2683a72cfb80SBram Moolenaar 'command Echo# comment', 2684a72cfb80SBram Moolenaar ], 'E182:') 2685a72cfb80SBram Moolenaar CheckScriptFailure([ 2686a72cfb80SBram Moolenaar 'vim9script', 2687a72cfb80SBram Moolenaar 'command Echo echo', 2688a72cfb80SBram Moolenaar 'command Echo# comment', 2689a72cfb80SBram Moolenaar ], 'E182:') 2690a72cfb80SBram Moolenaar 2691a72cfb80SBram Moolenaar CheckScriptSuccess([ 2692a72cfb80SBram Moolenaar 'vim9script', 2693a72cfb80SBram Moolenaar 'function # comment', 2694a72cfb80SBram Moolenaar ]) 2695a72cfb80SBram Moolenaar CheckScriptFailure([ 2696a72cfb80SBram Moolenaar 'vim9script', 26979898107fSBram Moolenaar 'function " comment', 26989898107fSBram Moolenaar ], 'E129:') 26999898107fSBram Moolenaar CheckScriptFailure([ 27009898107fSBram Moolenaar 'vim9script', 2701a72cfb80SBram Moolenaar 'function# comment', 2702a72cfb80SBram Moolenaar ], 'E129:') 2703a72cfb80SBram Moolenaar CheckScriptSuccess([ 2704a72cfb80SBram Moolenaar 'vim9script', 2705a72cfb80SBram Moolenaar 'function CheckScriptSuccess # comment', 2706a72cfb80SBram Moolenaar ]) 2707a72cfb80SBram Moolenaar CheckScriptFailure([ 2708a72cfb80SBram Moolenaar 'vim9script', 2709a72cfb80SBram Moolenaar 'function CheckScriptSuccess# comment', 2710a72cfb80SBram Moolenaar ], 'E488:') 2711a72cfb80SBram Moolenaar 2712a72cfb80SBram Moolenaar CheckScriptSuccess([ 2713a72cfb80SBram Moolenaar 'vim9script', 27144c17ad94SBram Moolenaar 'func g:DeleteMeA()', 2715a72cfb80SBram Moolenaar 'endfunc', 27164c17ad94SBram Moolenaar 'delfunction g:DeleteMeA # comment', 2717a72cfb80SBram Moolenaar ]) 2718a72cfb80SBram Moolenaar CheckScriptFailure([ 2719a72cfb80SBram Moolenaar 'vim9script', 27204c17ad94SBram Moolenaar 'func g:DeleteMeB()', 2721a72cfb80SBram Moolenaar 'endfunc', 27224c17ad94SBram Moolenaar 'delfunction g:DeleteMeB# comment', 2723a72cfb80SBram Moolenaar ], 'E488:') 2724a72cfb80SBram Moolenaar 2725a72cfb80SBram Moolenaar CheckScriptSuccess([ 2726a72cfb80SBram Moolenaar 'vim9script', 2727a72cfb80SBram Moolenaar 'call execute("ls") # comment', 2728a72cfb80SBram Moolenaar ]) 2729a72cfb80SBram Moolenaar CheckScriptFailure([ 2730a72cfb80SBram Moolenaar 'vim9script', 2731a72cfb80SBram Moolenaar 'call execute("ls")# comment', 2732a72cfb80SBram Moolenaar ], 'E488:') 2733e7e4838fSBram Moolenaar 2734e7e4838fSBram Moolenaar CheckScriptFailure([ 2735e7e4838fSBram Moolenaar 'def Test() " comment', 2736e7e4838fSBram Moolenaar 'enddef', 2737e7e4838fSBram Moolenaar ], 'E488:') 2738e7e4838fSBram Moolenaar CheckScriptFailure([ 2739e7e4838fSBram Moolenaar 'vim9script', 2740e7e4838fSBram Moolenaar 'def Test() " comment', 2741e7e4838fSBram Moolenaar 'enddef', 2742e7e4838fSBram Moolenaar ], 'E488:') 2743e7e4838fSBram Moolenaar 2744e7e4838fSBram Moolenaar CheckScriptSuccess([ 2745e7e4838fSBram Moolenaar 'func Test() " comment', 2746e7e4838fSBram Moolenaar 'endfunc', 2747e7e4838fSBram Moolenaar ]) 27489898107fSBram Moolenaar CheckScriptSuccess([ 2749e7e4838fSBram Moolenaar 'vim9script', 2750e7e4838fSBram Moolenaar 'func Test() " comment', 2751e7e4838fSBram Moolenaar 'endfunc', 27529898107fSBram Moolenaar ]) 2753e7e4838fSBram Moolenaar 2754e7e4838fSBram Moolenaar CheckScriptSuccess([ 2755e7e4838fSBram Moolenaar 'def Test() # comment', 2756e7e4838fSBram Moolenaar 'enddef', 2757e7e4838fSBram Moolenaar ]) 2758e7e4838fSBram Moolenaar CheckScriptFailure([ 2759e7e4838fSBram Moolenaar 'func Test() # comment', 2760e7e4838fSBram Moolenaar 'endfunc', 2761e7e4838fSBram Moolenaar ], 'E488:') 27622c5ed4e3SBram Moolenaarenddef 27632c5ed4e3SBram Moolenaar 27642c5ed4e3SBram Moolenaardef Test_vim9_comment_gui() 27652c5ed4e3SBram Moolenaar CheckCanRunGui 27662c5ed4e3SBram Moolenaar 27672c5ed4e3SBram Moolenaar CheckScriptFailure([ 27682c5ed4e3SBram Moolenaar 'vim9script', 27692c5ed4e3SBram Moolenaar 'gui#comment' 27702c5ed4e3SBram Moolenaar ], 'E499:') 27712c5ed4e3SBram Moolenaar CheckScriptFailure([ 27722c5ed4e3SBram Moolenaar 'vim9script', 27732c5ed4e3SBram Moolenaar 'gui -f#comment' 27742c5ed4e3SBram Moolenaar ], 'E499:') 27757a092245SBram Moolenaarenddef 27767a092245SBram Moolenaar 2777a26b9700SBram Moolenaardef Test_vim9_comment_not_compiled() 27786797966dSBram Moolenaar au TabEnter *.vim g:entered = 1 27796797966dSBram Moolenaar au TabEnter *.x g:entered = 2 2780a26b9700SBram Moolenaar 2781a26b9700SBram Moolenaar edit test.vim 2782a26b9700SBram Moolenaar doautocmd TabEnter #comment 2783a26b9700SBram Moolenaar assert_equal(1, g:entered) 2784a26b9700SBram Moolenaar 2785a26b9700SBram Moolenaar doautocmd TabEnter f.x 2786a26b9700SBram Moolenaar assert_equal(2, g:entered) 2787a26b9700SBram Moolenaar 2788a26b9700SBram Moolenaar g:entered = 0 2789a26b9700SBram Moolenaar doautocmd TabEnter f.x #comment 2790a26b9700SBram Moolenaar assert_equal(2, g:entered) 2791a26b9700SBram Moolenaar 2792a26b9700SBram Moolenaar assert_fails('doautocmd Syntax#comment', 'E216:') 2793a26b9700SBram Moolenaar 2794a26b9700SBram Moolenaar au! TabEnter 2795a26b9700SBram Moolenaar unlet g:entered 2796d72c1bf0SBram Moolenaar 2797d72c1bf0SBram Moolenaar CheckScriptSuccess([ 2798d72c1bf0SBram Moolenaar 'vim9script', 27996797966dSBram Moolenaar 'g:var = 123', 2800e55b1c09SBram Moolenaar 'b:var = 456', 2801e55b1c09SBram Moolenaar 'w:var = 777', 2802e55b1c09SBram Moolenaar 't:var = 888', 2803d72c1bf0SBram Moolenaar 'unlet g:var w:var # something', 2804d72c1bf0SBram Moolenaar ]) 2805d72c1bf0SBram Moolenaar 2806d72c1bf0SBram Moolenaar CheckScriptFailure([ 2807d72c1bf0SBram Moolenaar 'vim9script', 2808d72c1bf0SBram Moolenaar 'let g:var = 123', 2809e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a global variable:') 2810e55b1c09SBram Moolenaar 2811e55b1c09SBram Moolenaar CheckScriptFailure([ 2812e55b1c09SBram Moolenaar 'vim9script', 2813e55b1c09SBram Moolenaar 'let b:var = 123', 2814e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a buffer variable:') 2815e55b1c09SBram Moolenaar 2816e55b1c09SBram Moolenaar CheckScriptFailure([ 2817e55b1c09SBram Moolenaar 'vim9script', 2818e55b1c09SBram Moolenaar 'let w:var = 123', 2819e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a window variable:') 2820e55b1c09SBram Moolenaar 2821e55b1c09SBram Moolenaar CheckScriptFailure([ 2822e55b1c09SBram Moolenaar 'vim9script', 2823e55b1c09SBram Moolenaar 'let t:var = 123', 2824e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a tab variable:') 2825e55b1c09SBram Moolenaar 2826e55b1c09SBram Moolenaar CheckScriptFailure([ 2827e55b1c09SBram Moolenaar 'vim9script', 2828e55b1c09SBram Moolenaar 'let v:version = 123', 2829e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a v: variable:') 2830e55b1c09SBram Moolenaar 2831e55b1c09SBram Moolenaar CheckScriptFailure([ 2832e55b1c09SBram Moolenaar 'vim9script', 2833e55b1c09SBram Moolenaar 'let $VARIABLE = "text"', 2834e55b1c09SBram Moolenaar ], 'E1016: Cannot declare an environment variable:') 28356797966dSBram Moolenaar 28366797966dSBram Moolenaar CheckScriptFailure([ 28376797966dSBram Moolenaar 'vim9script', 28386797966dSBram Moolenaar 'g:var = 123', 283932e35117SBram Moolenaar 'unlet g:var# comment1', 2840d72c1bf0SBram Moolenaar ], 'E108:') 2841d72c1bf0SBram Moolenaar 2842d72c1bf0SBram Moolenaar CheckScriptFailure([ 2843d72c1bf0SBram Moolenaar 'let g:var = 123', 2844d72c1bf0SBram Moolenaar 'unlet g:var # something', 2845d72c1bf0SBram Moolenaar ], 'E488:') 2846faac4104SBram Moolenaar 2847faac4104SBram Moolenaar CheckScriptSuccess([ 2848faac4104SBram Moolenaar 'vim9script', 284932e35117SBram Moolenaar 'if 1 # comment2', 2850faac4104SBram Moolenaar ' echo "yes"', 2851faac4104SBram Moolenaar 'elseif 2 #comment', 2852faac4104SBram Moolenaar ' echo "no"', 2853faac4104SBram Moolenaar 'endif', 2854faac4104SBram Moolenaar ]) 2855faac4104SBram Moolenaar 2856faac4104SBram Moolenaar CheckScriptFailure([ 2857faac4104SBram Moolenaar 'vim9script', 285832e35117SBram Moolenaar 'if 1# comment3', 2859faac4104SBram Moolenaar ' echo "yes"', 2860faac4104SBram Moolenaar 'endif', 2861faac4104SBram Moolenaar ], 'E15:') 2862faac4104SBram Moolenaar 2863faac4104SBram Moolenaar CheckScriptFailure([ 2864faac4104SBram Moolenaar 'vim9script', 286532e35117SBram Moolenaar 'if 0 # comment4', 2866faac4104SBram Moolenaar ' echo "yes"', 2867faac4104SBram Moolenaar 'elseif 2#comment', 2868faac4104SBram Moolenaar ' echo "no"', 2869faac4104SBram Moolenaar 'endif', 2870faac4104SBram Moolenaar ], 'E15:') 2871faac4104SBram Moolenaar 2872faac4104SBram Moolenaar CheckScriptSuccess([ 2873faac4104SBram Moolenaar 'vim9script', 287432e35117SBram Moolenaar 'let v = 1 # comment5', 2875faac4104SBram Moolenaar ]) 2876faac4104SBram Moolenaar 2877faac4104SBram Moolenaar CheckScriptFailure([ 2878faac4104SBram Moolenaar 'vim9script', 287932e35117SBram Moolenaar 'let v = 1# comment6', 288032e35117SBram Moolenaar ], 'E15:') 2881faac4104SBram Moolenaar 2882faac4104SBram Moolenaar CheckScriptSuccess([ 2883faac4104SBram Moolenaar 'vim9script', 2884faac4104SBram Moolenaar 'new' 2885faac4104SBram Moolenaar 'call setline(1, ["# define pat", "last"])', 2886df069eecSBram Moolenaar ':$', 2887faac4104SBram Moolenaar 'dsearch /pat/ #comment', 2888faac4104SBram Moolenaar 'bwipe!', 2889faac4104SBram Moolenaar ]) 2890faac4104SBram Moolenaar 2891f5be8cdbSBram Moolenaar CheckScriptFailure([ 2892f5be8cdbSBram Moolenaar 'vim9script', 2893f5be8cdbSBram Moolenaar 'new' 2894f5be8cdbSBram Moolenaar 'call setline(1, ["# define pat", "last"])', 2895f5be8cdbSBram Moolenaar ':$', 2896f5be8cdbSBram Moolenaar 'dsearch /pat/#comment', 2897f5be8cdbSBram Moolenaar 'bwipe!', 2898f5be8cdbSBram Moolenaar ], 'E488:') 2899f5be8cdbSBram Moolenaar 2900f5be8cdbSBram Moolenaar CheckScriptFailure([ 2901f5be8cdbSBram Moolenaar 'vim9script', 2902f5be8cdbSBram Moolenaar 'func! SomeFunc()', 2903f5be8cdbSBram Moolenaar ], 'E477:') 2904a26b9700SBram Moolenaarenddef 2905a26b9700SBram Moolenaar 29067e5bd91dSBram Moolenaardef Test_finish() 29077e5bd91dSBram Moolenaar let lines =<< trim END 29087e5bd91dSBram Moolenaar vim9script 29096797966dSBram Moolenaar g:res = 'one' 29107e5bd91dSBram Moolenaar if v:false | finish | endif 29116797966dSBram Moolenaar g:res = 'two' 29127e5bd91dSBram Moolenaar finish 29136797966dSBram Moolenaar g:res = 'three' 29147e5bd91dSBram Moolenaar END 29157e5bd91dSBram Moolenaar writefile(lines, 'Xfinished') 29167e5bd91dSBram Moolenaar source Xfinished 29177e5bd91dSBram Moolenaar assert_equal('two', g:res) 29187e5bd91dSBram Moolenaar 29197e5bd91dSBram Moolenaar unlet g:res 29207e5bd91dSBram Moolenaar delete('Xfinished') 29217e5bd91dSBram Moolenaarenddef 29227e5bd91dSBram Moolenaar 292332e35117SBram Moolenaardef Test_let_func_call() 292432e35117SBram Moolenaar let lines =<< trim END 292532e35117SBram Moolenaar vim9script 292632e35117SBram Moolenaar func GetValue() 292732e35117SBram Moolenaar if exists('g:count') 292832e35117SBram Moolenaar let g:count += 1 292932e35117SBram Moolenaar else 293032e35117SBram Moolenaar let g:count = 1 293132e35117SBram Moolenaar endif 293232e35117SBram Moolenaar return 'this' 293332e35117SBram Moolenaar endfunc 293432e35117SBram Moolenaar let val: string = GetValue() 2935f5be8cdbSBram Moolenaar # env var is always a string 2936df671b46SBram Moolenaar let env = $TERM 293732e35117SBram Moolenaar END 293832e35117SBram Moolenaar writefile(lines, 'Xfinished') 293932e35117SBram Moolenaar source Xfinished 2940f5be8cdbSBram Moolenaar # GetValue() is not called during discovery phase 294132e35117SBram Moolenaar assert_equal(1, g:count) 294232e35117SBram Moolenaar 294332e35117SBram Moolenaar unlet g:count 294432e35117SBram Moolenaar delete('Xfinished') 294532e35117SBram Moolenaarenddef 294632e35117SBram Moolenaar 294732e35117SBram Moolenaardef Test_let_missing_type() 294832e35117SBram Moolenaar let lines =<< trim END 294932e35117SBram Moolenaar vim9script 2950df671b46SBram Moolenaar let var = g:unknown 2951227a69deSBram Moolenaar END 2952822ba247SBram Moolenaar CheckScriptFailure(lines, 'E121:') 2953227a69deSBram Moolenaar 2954227a69deSBram Moolenaar lines =<< trim END 2955227a69deSBram Moolenaar vim9script 2956227a69deSBram Moolenaar let nr: number = 123 2957227a69deSBram Moolenaar let var = nr 2958227a69deSBram Moolenaar END 2959822ba247SBram Moolenaar CheckScriptSuccess(lines) 296032e35117SBram Moolenaarenddef 296132e35117SBram Moolenaar 2962c82a5b5dSBram Moolenaardef Test_let_declaration() 2963c82a5b5dSBram Moolenaar let lines =<< trim END 2964c82a5b5dSBram Moolenaar vim9script 2965c82a5b5dSBram Moolenaar let var: string 2966c82a5b5dSBram Moolenaar g:var_uninit = var 2967c82a5b5dSBram Moolenaar var = 'text' 2968c82a5b5dSBram Moolenaar g:var_test = var 2969f5be8cdbSBram Moolenaar # prefixing s: is optional 2970984dddbeSBram Moolenaar s:var = 'prefixed' 2971984dddbeSBram Moolenaar g:var_prefixed = s:var 2972984dddbeSBram Moolenaar 2973984dddbeSBram Moolenaar let s:other: number 2974984dddbeSBram Moolenaar other = 1234 2975984dddbeSBram Moolenaar g:other_var = other 297653b29e48SBram Moolenaar 297753b29e48SBram Moolenaar # type is inferred 297853b29e48SBram Moolenaar s:dict = {'a': 222} 297953b29e48SBram Moolenaar def GetDictVal(key: any) 298053b29e48SBram Moolenaar g:dict_val = s:dict[key] 298153b29e48SBram Moolenaar enddef 298253b29e48SBram Moolenaar GetDictVal('a') 2983c82a5b5dSBram Moolenaar END 2984c82a5b5dSBram Moolenaar CheckScriptSuccess(lines) 2985c82a5b5dSBram Moolenaar assert_equal('', g:var_uninit) 2986c82a5b5dSBram Moolenaar assert_equal('text', g:var_test) 2987984dddbeSBram Moolenaar assert_equal('prefixed', g:var_prefixed) 2988984dddbeSBram Moolenaar assert_equal(1234, g:other_var) 298953b29e48SBram Moolenaar assert_equal(222, g:dict_val) 2990c82a5b5dSBram Moolenaar 2991c82a5b5dSBram Moolenaar unlet g:var_uninit 2992c82a5b5dSBram Moolenaar unlet g:var_test 2993984dddbeSBram Moolenaar unlet g:var_prefixed 2994984dddbeSBram Moolenaar unlet g:other_var 2995c82a5b5dSBram Moolenaarenddef 2996c82a5b5dSBram Moolenaar 2997c5b1c20bSBram Moolenaardef Test_let_declaration_fails() 2998c5b1c20bSBram Moolenaar let lines =<< trim END 2999c5b1c20bSBram Moolenaar vim9script 3000c5b1c20bSBram Moolenaar const var: string 3001c5b1c20bSBram Moolenaar END 3002c5b1c20bSBram Moolenaar CheckScriptFailure(lines, 'E1021:') 3003c5b1c20bSBram Moolenaar 3004c5b1c20bSBram Moolenaar lines =<< trim END 3005c5b1c20bSBram Moolenaar vim9script 3006c5b1c20bSBram Moolenaar let 9var: string 3007c5b1c20bSBram Moolenaar END 3008c5b1c20bSBram Moolenaar CheckScriptFailure(lines, 'E475:') 3009c5b1c20bSBram Moolenaarenddef 3010c5b1c20bSBram Moolenaar 301134db91f7SBram Moolenaardef Test_let_type_check() 301234db91f7SBram Moolenaar let lines =<< trim END 301334db91f7SBram Moolenaar vim9script 301434db91f7SBram Moolenaar let var: string 301534db91f7SBram Moolenaar var = 1234 301634db91f7SBram Moolenaar END 3017451c2e35SBram Moolenaar CheckScriptFailure(lines, 'E1012:') 3018984dddbeSBram Moolenaar 3019984dddbeSBram Moolenaar lines =<< trim END 3020984dddbeSBram Moolenaar vim9script 3021984dddbeSBram Moolenaar let var:string 3022984dddbeSBram Moolenaar END 3023984dddbeSBram Moolenaar CheckScriptFailure(lines, 'E1069:') 3024c5b1c20bSBram Moolenaar 3025c5b1c20bSBram Moolenaar lines =<< trim END 3026c5b1c20bSBram Moolenaar vim9script 3027c5b1c20bSBram Moolenaar let var: asdf 3028c5b1c20bSBram Moolenaar END 3029c5b1c20bSBram Moolenaar CheckScriptFailure(lines, 'E1010:') 3030a71e2633SBram Moolenaar 3031a71e2633SBram Moolenaar lines =<< trim END 3032a71e2633SBram Moolenaar vim9script 3033a71e2633SBram Moolenaar let s:l: list<number> 3034a71e2633SBram Moolenaar s:l = [] 3035a71e2633SBram Moolenaar END 3036a71e2633SBram Moolenaar CheckScriptSuccess(lines) 3037a71e2633SBram Moolenaar 3038a71e2633SBram Moolenaar lines =<< trim END 3039a71e2633SBram Moolenaar vim9script 3040a71e2633SBram Moolenaar let s:d: dict<number> 3041a71e2633SBram Moolenaar s:d = {} 3042a71e2633SBram Moolenaar END 3043a71e2633SBram Moolenaar CheckScriptSuccess(lines) 304434db91f7SBram Moolenaarenddef 304534db91f7SBram Moolenaar 3046a5d0077eSBram Moolenaardef Test_forward_declaration() 3047a5d0077eSBram Moolenaar let lines =<< trim END 3048a5d0077eSBram Moolenaar vim9script 3049a5d0077eSBram Moolenaar def GetValue(): string 3050a5d0077eSBram Moolenaar return theVal 3051a5d0077eSBram Moolenaar enddef 3052a5d0077eSBram Moolenaar let theVal = 'something' 3053822ba247SBram Moolenaar g:initVal = GetValue() 3054a5d0077eSBram Moolenaar theVal = 'else' 3055a5d0077eSBram Moolenaar g:laterVal = GetValue() 3056a5d0077eSBram Moolenaar END 3057a5d0077eSBram Moolenaar writefile(lines, 'Xforward') 3058a5d0077eSBram Moolenaar source Xforward 3059a5d0077eSBram Moolenaar assert_equal('something', g:initVal) 3060a5d0077eSBram Moolenaar assert_equal('else', g:laterVal) 3061a5d0077eSBram Moolenaar 3062a5d0077eSBram Moolenaar unlet g:initVal 3063a5d0077eSBram Moolenaar unlet g:laterVal 3064a5d0077eSBram Moolenaar delete('Xforward') 3065a5d0077eSBram Moolenaarenddef 3066a5d0077eSBram Moolenaar 30679721fb4eSBram Moolenaardef Test_source_vim9_from_legacy() 30689721fb4eSBram Moolenaar let legacy_lines =<< trim END 30699721fb4eSBram Moolenaar source Xvim9_script.vim 30709721fb4eSBram Moolenaar 30719721fb4eSBram Moolenaar call assert_false(exists('local')) 30729721fb4eSBram Moolenaar call assert_false(exists('exported')) 30739721fb4eSBram Moolenaar call assert_false(exists('s:exported')) 30749721fb4eSBram Moolenaar call assert_equal('global', global) 30759721fb4eSBram Moolenaar call assert_equal('global', g:global) 30769721fb4eSBram Moolenaar 30779721fb4eSBram Moolenaar " imported variable becomes script-local 30789721fb4eSBram Moolenaar import exported from './Xvim9_script.vim' 30799721fb4eSBram Moolenaar call assert_equal('exported', s:exported) 30809721fb4eSBram Moolenaar call assert_false(exists('exported')) 30819721fb4eSBram Moolenaar 30829721fb4eSBram Moolenaar " imported function becomes script-local 30839721fb4eSBram Moolenaar import GetText from './Xvim9_script.vim' 30849721fb4eSBram Moolenaar call assert_equal('text', s:GetText()) 30859721fb4eSBram Moolenaar call assert_false(exists('*GetText')) 30869721fb4eSBram Moolenaar END 30879721fb4eSBram Moolenaar writefile(legacy_lines, 'Xlegacy_script.vim') 30889721fb4eSBram Moolenaar 30899721fb4eSBram Moolenaar let vim9_lines =<< trim END 30909721fb4eSBram Moolenaar vim9script 30919721fb4eSBram Moolenaar let local = 'local' 30929721fb4eSBram Moolenaar g:global = 'global' 30939721fb4eSBram Moolenaar export let exported = 'exported' 30949721fb4eSBram Moolenaar export def GetText(): string 30959721fb4eSBram Moolenaar return 'text' 30969721fb4eSBram Moolenaar enddef 30979721fb4eSBram Moolenaar END 30989721fb4eSBram Moolenaar writefile(vim9_lines, 'Xvim9_script.vim') 30999721fb4eSBram Moolenaar 31009721fb4eSBram Moolenaar source Xlegacy_script.vim 31019721fb4eSBram Moolenaar 31029721fb4eSBram Moolenaar assert_equal('global', g:global) 3103f5be8cdbSBram Moolenaar unlet g:global 31049721fb4eSBram Moolenaar 31059721fb4eSBram Moolenaar delete('Xlegacy_script.vim') 31069721fb4eSBram Moolenaar delete('Xvim9_script.vim') 31079721fb4eSBram Moolenaarenddef 3108a5d0077eSBram Moolenaar 31097d699701SBram Moolenaarfunc Test_vim9script_not_global() 31107d699701SBram Moolenaar " check that items defined in Vim9 script are script-local, not global 31117d699701SBram Moolenaar let vim9lines =<< trim END 31127d699701SBram Moolenaar vim9script 31137d699701SBram Moolenaar let var = 'local' 31147d699701SBram Moolenaar func TheFunc() 31157d699701SBram Moolenaar echo 'local' 31167d699701SBram Moolenaar endfunc 31177d699701SBram Moolenaar def DefFunc() 31187d699701SBram Moolenaar echo 'local' 31197d699701SBram Moolenaar enddef 31207d699701SBram Moolenaar END 31217d699701SBram Moolenaar call writefile(vim9lines, 'Xvim9script.vim') 31227d699701SBram Moolenaar source Xvim9script.vim 31237d699701SBram Moolenaar try 31247d699701SBram Moolenaar echo g:var 31257d699701SBram Moolenaar assert_report('did not fail') 31267d699701SBram Moolenaar catch /E121:/ 31277d699701SBram Moolenaar " caught 31287d699701SBram Moolenaar endtry 31297d699701SBram Moolenaar try 31307d699701SBram Moolenaar call TheFunc() 31317d699701SBram Moolenaar assert_report('did not fail') 31327d699701SBram Moolenaar catch /E117:/ 31337d699701SBram Moolenaar " caught 31347d699701SBram Moolenaar endtry 31357d699701SBram Moolenaar try 31367d699701SBram Moolenaar call DefFunc() 31377d699701SBram Moolenaar assert_report('did not fail') 31387d699701SBram Moolenaar catch /E117:/ 31397d699701SBram Moolenaar " caught 31407d699701SBram Moolenaar endtry 31417d699701SBram Moolenaar 31427d699701SBram Moolenaar call delete('Xvim9script.vium') 31437d699701SBram Moolenaarendfunc 31447d699701SBram Moolenaar 3145eeb27bfeSBram Moolenaardef Test_vim9_copen() 3146eeb27bfeSBram Moolenaar # this was giving an error for setting w:quickfix_title 3147eeb27bfeSBram Moolenaar copen 3148eeb27bfeSBram Moolenaar quit 3149eeb27bfeSBram Moolenaarenddef 3150eeb27bfeSBram Moolenaar 31512d6b20d6SBram Moolenaar" test using a vim9script that is auto-loaded from an autocmd 31522d6b20d6SBram Moolenaardef Test_vim9_autoload() 31532d6b20d6SBram Moolenaar let lines =<< trim END 31542d6b20d6SBram Moolenaar vim9script 31552d6b20d6SBram Moolenaar def foo#test() 31562d6b20d6SBram Moolenaar echomsg getreg('"') 31572d6b20d6SBram Moolenaar enddef 31582d6b20d6SBram Moolenaar END 31592d6b20d6SBram Moolenaar 31602d6b20d6SBram Moolenaar mkdir('Xdir/autoload', 'p') 31612d6b20d6SBram Moolenaar writefile(lines, 'Xdir/autoload/foo.vim') 31622d6b20d6SBram Moolenaar let save_rtp = &rtp 31632d6b20d6SBram Moolenaar exe 'set rtp^=' .. getcwd() .. '/Xdir' 31642d6b20d6SBram Moolenaar augroup test 31652d6b20d6SBram Moolenaar autocmd TextYankPost * call foo#test() 31662d6b20d6SBram Moolenaar augroup END 31672d6b20d6SBram Moolenaar 31682d6b20d6SBram Moolenaar normal Y 31692d6b20d6SBram Moolenaar 31702d6b20d6SBram Moolenaar augroup test 31712d6b20d6SBram Moolenaar autocmd! 31722d6b20d6SBram Moolenaar augroup END 31732d6b20d6SBram Moolenaar delete('Xdir', 'rf') 31742d6b20d6SBram Moolenaar &rtp = save_rtp 31752d6b20d6SBram Moolenaarenddef 31762d6b20d6SBram Moolenaar 317781e17fbeSBram Moolenaardef Test_script_var_in_autocmd() 317881e17fbeSBram Moolenaar # using a script variable from an autocommand, defined in a :def function in a 317981e17fbeSBram Moolenaar # legacy Vim script, cannot check the variable type. 318081e17fbeSBram Moolenaar let lines =<< trim END 318181e17fbeSBram Moolenaar let s:counter = 1 318281e17fbeSBram Moolenaar def s:Func() 318381e17fbeSBram Moolenaar au! CursorHold 318481e17fbeSBram Moolenaar au CursorHold * s:counter += 1 318581e17fbeSBram Moolenaar enddef 318681e17fbeSBram Moolenaar call s:Func() 318781e17fbeSBram Moolenaar doau CursorHold 318881e17fbeSBram Moolenaar call assert_equal(2, s:counter) 318981e17fbeSBram Moolenaar au! CursorHold 319081e17fbeSBram Moolenaar END 319181e17fbeSBram Moolenaar CheckScriptSuccess(lines) 319281e17fbeSBram Moolenaarenddef 319381e17fbeSBram Moolenaar 31943896a105SBram Moolenaardef Test_cmdline_win() 31953896a105SBram Moolenaar # if the Vim syntax highlighting uses Vim9 constructs they can be used from 31963896a105SBram Moolenaar # the command line window. 31973896a105SBram Moolenaar mkdir('rtp/syntax', 'p') 31983896a105SBram Moolenaar let export_lines =<< trim END 31993896a105SBram Moolenaar vim9script 32003896a105SBram Moolenaar export let That = 'yes' 32013896a105SBram Moolenaar END 32023896a105SBram Moolenaar writefile(export_lines, 'rtp/syntax/Xexport.vim') 32033896a105SBram Moolenaar let import_lines =<< trim END 32043896a105SBram Moolenaar vim9script 32053896a105SBram Moolenaar import That from './Xexport.vim' 32063896a105SBram Moolenaar END 32073896a105SBram Moolenaar writefile(import_lines, 'rtp/syntax/vim.vim') 32083896a105SBram Moolenaar let save_rtp = &rtp 32093896a105SBram Moolenaar &rtp = getcwd() .. '/rtp' .. ',' .. &rtp 32103896a105SBram Moolenaar syntax on 32113896a105SBram Moolenaar augroup CmdWin 32123896a105SBram Moolenaar autocmd CmdwinEnter * g:got_there = 'yes' 32133896a105SBram Moolenaar augroup END 32143896a105SBram Moolenaar # this will open and also close the cmdline window 32153896a105SBram Moolenaar feedkeys('q:', 'xt') 32163896a105SBram Moolenaar assert_equal('yes', g:got_there) 32173896a105SBram Moolenaar 32183896a105SBram Moolenaar augroup CmdWin 32193896a105SBram Moolenaar au! 32203896a105SBram Moolenaar augroup END 32213896a105SBram Moolenaar &rtp = save_rtp 32223896a105SBram Moolenaar delete('rtp', 'rf') 32233896a105SBram Moolenaarenddef 32243896a105SBram Moolenaar 3225585fea7bSBram Moolenaar" Keep this last, it messes up highlighting. 3226585fea7bSBram Moolenaardef Test_substitute_cmd() 3227585fea7bSBram Moolenaar new 3228585fea7bSBram Moolenaar setline(1, 'something') 3229585fea7bSBram Moolenaar :substitute(some(other( 3230585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 3231585fea7bSBram Moolenaar bwipe! 3232585fea7bSBram Moolenaar 3233f5be8cdbSBram Moolenaar # also when the context is Vim9 script 3234585fea7bSBram Moolenaar let lines =<< trim END 3235585fea7bSBram Moolenaar vim9script 3236585fea7bSBram Moolenaar new 3237585fea7bSBram Moolenaar setline(1, 'something') 3238585fea7bSBram Moolenaar :substitute(some(other( 3239585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 3240585fea7bSBram Moolenaar bwipe! 3241585fea7bSBram Moolenaar END 3242585fea7bSBram Moolenaar writefile(lines, 'Xvim9lines') 3243585fea7bSBram Moolenaar source Xvim9lines 3244585fea7bSBram Moolenaar 3245585fea7bSBram Moolenaar delete('Xvim9lines') 3246585fea7bSBram Moolenaarenddef 3247585fea7bSBram Moolenaar 32488a7d6542SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker 3249