18a7d6542SBram Moolenaar" Test various aspects of the Vim9 script language. 28a7d6542SBram Moolenaar 3673660abSBram Moolenaarsource check.vim 4101f4810SBram Moolenaarsource term_util.vim 5ad39c094SBram Moolenaarsource view_util.vim 6cfe435d7SBram Moolenaarsource vim9.vim 78a7d6542SBram Moolenaar 88a7d6542SBram Moolenaardef Test_syntax() 98a7d6542SBram Moolenaar let var = 234 108a7d6542SBram Moolenaar let other: list<string> = ['asdf'] 118a7d6542SBram Moolenaarenddef 128a7d6542SBram Moolenaar 136e587dcbSBram Moolenaarlet s:appendToMe = 'xxx' 146e587dcbSBram Moolenaarlet s:addToMe = 111 15401d9ffbSBram Moolenaarlet g:existing = 'yes' 16a8c17704SBram Moolenaarlet g:inc_counter = 1 17a8c17704SBram Moolenaarlet $SOME_ENV_VAR = 'some' 18a6e67e4fSBram Moolenaarlet g:alist = [7] 19a6e67e4fSBram Moolenaarlet g:astring = 'text' 20f0b9f43cSBram Moolenaarlet g:anumber = 123 216e587dcbSBram Moolenaar 228a7d6542SBram Moolenaardef Test_assignment() 238a7d6542SBram Moolenaar let bool1: bool = true 248a7d6542SBram Moolenaar assert_equal(v:true, bool1) 258a7d6542SBram Moolenaar let bool2: bool = false 268a7d6542SBram Moolenaar assert_equal(v:false, bool2) 278a7d6542SBram Moolenaar 28f93c7feaSBram Moolenaar call CheckDefFailure(['let x:string'], 'E1069:') 29f93c7feaSBram Moolenaar call CheckDefFailure(['let x:string = "x"'], 'E1069:') 301cc2a94fSBram Moolenaar call CheckDefFailure(['let a:string = "x"'], 'E1069:') 31f93c7feaSBram Moolenaar 324cdb13ceSBram Moolenaar let nr: number = 1234 334cdb13ceSBram Moolenaar call CheckDefFailure(['let nr: number = "asdf"'], 'E1013:') 344cdb13ceSBram Moolenaar 35b209750bSBram Moolenaar let a: number = 6 #comment 369be61bbbSBram Moolenaar assert_equal(6, a) 379be61bbbSBram Moolenaar 3842a480bfSBram Moolenaar if has('channel') 3942a480bfSBram Moolenaar let chan1: channel 40fbdd08edSBram Moolenaar let job1: job 41f51cb4e0SBram Moolenaar let job2: job = job_start('willfail') 4242a480bfSBram Moolenaar endif 43fbdd08edSBram Moolenaar if has('float') 44fbdd08edSBram Moolenaar let float1: float = 3.4 45fbdd08edSBram Moolenaar endif 465deeb3f1SBram Moolenaar let Funky1: func 475deeb3f1SBram Moolenaar let Funky2: func = function('len') 484c17ad94SBram Moolenaar let Party2: func = funcref('g:Test_syntax') 4942a480bfSBram Moolenaar 50b209750bSBram Moolenaar g:newvar = 'new' #comment 51401d9ffbSBram Moolenaar assert_equal('new', g:newvar) 52401d9ffbSBram Moolenaar 53401d9ffbSBram Moolenaar assert_equal('yes', g:existing) 54401d9ffbSBram Moolenaar g:existing = 'no' 55401d9ffbSBram Moolenaar assert_equal('no', g:existing) 56401d9ffbSBram Moolenaar 57b283a8a6SBram Moolenaar v:char = 'abc' 586e587dcbSBram Moolenaar assert_equal('abc', v:char) 59b283a8a6SBram Moolenaar 60b283a8a6SBram Moolenaar $ENVVAR = 'foobar' 616e587dcbSBram Moolenaar assert_equal('foobar', $ENVVAR) 62b283a8a6SBram Moolenaar $ENVVAR = '' 636e587dcbSBram Moolenaar 64b5ed2660SBram Moolenaar let lines =<< trim END 65b5ed2660SBram Moolenaar vim9script 66b5ed2660SBram Moolenaar $ENVVAR = 'barfoo' 67b5ed2660SBram Moolenaar assert_equal('barfoo', $ENVVAR) 68b5ed2660SBram Moolenaar $ENVVAR = '' 69b5ed2660SBram Moolenaar END 70b5ed2660SBram Moolenaar call CheckScriptSuccess(lines) 71b5ed2660SBram Moolenaar 72fd1823e0SBram Moolenaar s:appendToMe ..= 'yyy' 73fd1823e0SBram Moolenaar assert_equal('xxxyyy', s:appendToMe) 74fd1823e0SBram Moolenaar s:addToMe += 222 75fd1823e0SBram Moolenaar assert_equal(333, s:addToMe) 760bbf722aSBram Moolenaar s:newVar = 'new' 770bbf722aSBram Moolenaar assert_equal('new', s:newVar) 78a8c17704SBram Moolenaar 79a8c17704SBram Moolenaar set ts=7 80a8c17704SBram Moolenaar &ts += 1 81a8c17704SBram Moolenaar assert_equal(8, &ts) 8280c34ca3SBram Moolenaar &ts -= 3 8380c34ca3SBram Moolenaar assert_equal(5, &ts) 8480c34ca3SBram Moolenaar &ts *= 2 8580c34ca3SBram Moolenaar assert_equal(10, &ts) 8680c34ca3SBram Moolenaar &ts /= 3 8780c34ca3SBram Moolenaar assert_equal(3, &ts) 8880c34ca3SBram Moolenaar set ts=10 8980c34ca3SBram Moolenaar &ts %= 4 9080c34ca3SBram Moolenaar assert_equal(2, &ts) 91b5ed2660SBram Moolenaar 92b5ed2660SBram Moolenaar lines =<< trim END 93b5ed2660SBram Moolenaar vim9script 94b5ed2660SBram Moolenaar &ts = 6 95b5ed2660SBram Moolenaar &ts += 3 96b5ed2660SBram Moolenaar assert_equal(9, &ts) 97b5ed2660SBram Moolenaar END 98b5ed2660SBram Moolenaar call CheckScriptSuccess(lines) 99b5ed2660SBram Moolenaar 100a8c17704SBram Moolenaar call CheckDefFailure(['¬ex += 3'], 'E113:') 101a8c17704SBram Moolenaar call CheckDefFailure(['&ts ..= "xxx"'], 'E1019:') 102a6e67e4fSBram Moolenaar call CheckDefFailure(['&ts = [7]'], 'E1013:') 103a6e67e4fSBram Moolenaar call CheckDefExecFailure(['&ts = g:alist'], 'E1029: Expected number but got list') 104a6e67e4fSBram Moolenaar call CheckDefFailure(['&ts = "xx"'], 'E1013:') 105a6e67e4fSBram Moolenaar call CheckDefExecFailure(['&ts = g:astring'], 'E1029: Expected number but got string') 106a8c17704SBram Moolenaar call CheckDefFailure(['&path += 3'], 'E1013:') 107a6e67e4fSBram Moolenaar call CheckDefExecFailure(['&bs = "asdf"'], 'E474:') 108cb711abfSBram Moolenaar # test freeing ISN_STOREOPT 109585fea7bSBram Moolenaar call CheckDefFailure(['&ts = 3', 'let asdf'], 'E1022:') 11080c34ca3SBram Moolenaar &ts = 8 111a8c17704SBram Moolenaar 11233afa244SBram Moolenaar call CheckDefFailure(['let s:var = 123'], 'E1101:') 11333afa244SBram Moolenaar call CheckDefFailure(['let s:var: number'], 'E1101:') 11433afa244SBram Moolenaar 115a8c17704SBram Moolenaar g:inc_counter += 1 116a8c17704SBram Moolenaar assert_equal(2, g:inc_counter) 117a8c17704SBram Moolenaar 118a8c17704SBram Moolenaar $SOME_ENV_VAR ..= 'more' 119a8c17704SBram Moolenaar assert_equal('somemore', $SOME_ENV_VAR) 120a8c17704SBram Moolenaar call CheckDefFailure(['$SOME_ENV_VAR += "more"'], 'E1013:') 121a8c17704SBram Moolenaar call CheckDefFailure(['$SOME_ENV_VAR += 123'], 'E1013:') 122a8c17704SBram Moolenaar 123a8c17704SBram Moolenaar @a = 'areg' 124a8c17704SBram Moolenaar @a ..= 'add' 125a8c17704SBram Moolenaar assert_equal('aregadd', @a) 126a8c17704SBram Moolenaar call CheckDefFailure(['@a += "more"'], 'E1013:') 127a8c17704SBram Moolenaar call CheckDefFailure(['@a += 123'], 'E1013:') 128e69f6d04SBram Moolenaar 129b5ed2660SBram Moolenaar lines =<< trim END 130b5ed2660SBram Moolenaar vim9script 131b5ed2660SBram Moolenaar @c = 'areg' 132b5ed2660SBram Moolenaar @c ..= 'add' 133b5ed2660SBram Moolenaar assert_equal('aregadd', @c) 134b5ed2660SBram Moolenaar END 135b5ed2660SBram Moolenaar call CheckScriptSuccess(lines) 136b5ed2660SBram Moolenaar 137e69f6d04SBram Moolenaar v:errmsg = 'none' 138e69f6d04SBram Moolenaar v:errmsg ..= 'again' 139e69f6d04SBram Moolenaar assert_equal('noneagain', v:errmsg) 140e69f6d04SBram Moolenaar call CheckDefFailure(['v:errmsg += "more"'], 'E1013:') 141e69f6d04SBram Moolenaar call CheckDefFailure(['v:errmsg += 123'], 'E1013:') 14233afa244SBram Moolenaar 14333afa244SBram Moolenaar # single letter variables 14433afa244SBram Moolenaar a = 123 14533afa244SBram Moolenaar assert_equal(123, a) 14633afa244SBram Moolenaar let b: number 14733afa244SBram Moolenaar b = 123 14833afa244SBram Moolenaar assert_equal(123, b) 14933afa244SBram Moolenaar let g: number 15033afa244SBram Moolenaar g = 123 15133afa244SBram Moolenaar assert_equal(123, g) 15233afa244SBram Moolenaar let s: number 15333afa244SBram Moolenaar s = 123 15433afa244SBram Moolenaar assert_equal(123, s) 15533afa244SBram Moolenaar let t: number 15633afa244SBram Moolenaar t = 123 15733afa244SBram Moolenaar assert_equal(123, t) 15833afa244SBram Moolenaar let v: number 15933afa244SBram Moolenaar v = 123 16033afa244SBram Moolenaar assert_equal(123, v) 16133afa244SBram Moolenaar let w: number 16233afa244SBram Moolenaar w = 123 16333afa244SBram Moolenaar assert_equal(123, w) 1645deeb3f1SBram Moolenaarenddef 1655deeb3f1SBram Moolenaar 1663b74b6b4SBram Moolenaardef Test_vim9_single_char_vars() 1673b74b6b4SBram Moolenaar let lines =<< trim END 1683b74b6b4SBram Moolenaar vim9script 1693b74b6b4SBram Moolenaar 170f5be8cdbSBram Moolenaar # single character variable declarations work 1713b74b6b4SBram Moolenaar let a: string 1723b74b6b4SBram Moolenaar let b: number 1733b74b6b4SBram Moolenaar let l: list<any> 1743b74b6b4SBram Moolenaar let s: string 1753b74b6b4SBram Moolenaar let t: number 1763b74b6b4SBram Moolenaar let v: number 1773b74b6b4SBram Moolenaar let w: number 1783b74b6b4SBram Moolenaar 179f5be8cdbSBram Moolenaar # script-local variables can be used without s: prefix 1803b74b6b4SBram Moolenaar a = 'script-a' 1813b74b6b4SBram Moolenaar b = 111 1823b74b6b4SBram Moolenaar l = [1, 2, 3] 1833b74b6b4SBram Moolenaar s = 'script-s' 1843b74b6b4SBram Moolenaar t = 222 1853b74b6b4SBram Moolenaar v = 333 1863b74b6b4SBram Moolenaar w = 444 1873b74b6b4SBram Moolenaar 1883b74b6b4SBram Moolenaar assert_equal('script-a', a) 1893b74b6b4SBram Moolenaar assert_equal(111, b) 1903b74b6b4SBram Moolenaar assert_equal([1, 2, 3], l) 1913b74b6b4SBram Moolenaar assert_equal('script-s', s) 1923b74b6b4SBram Moolenaar assert_equal(222, t) 1933b74b6b4SBram Moolenaar assert_equal(333, v) 1943b74b6b4SBram Moolenaar assert_equal(444, w) 1953b74b6b4SBram Moolenaar END 1963b74b6b4SBram Moolenaar writefile(lines, 'Xsinglechar') 1973b74b6b4SBram Moolenaar source Xsinglechar 1983b74b6b4SBram Moolenaar delete('Xsinglechar') 1993b74b6b4SBram Moolenaarenddef 2003b74b6b4SBram Moolenaar 20184370087SBram Moolenaardef Test_assignment_list() 20284370087SBram Moolenaar let list1: list<bool> = [false, true, false] 20384370087SBram Moolenaar let list2: list<number> = [1, 2, 3] 20484370087SBram Moolenaar let list3: list<string> = ['sdf', 'asdf'] 20584370087SBram Moolenaar let list4: list<any> = ['yes', true, 1234] 20684370087SBram Moolenaar let list5: list<blob> = [0z01, 0z02] 20784370087SBram Moolenaar 20884370087SBram Moolenaar let listS: list<string> = [] 20984370087SBram Moolenaar let listN: list<number> = [] 21084370087SBram Moolenaar 21184370087SBram Moolenaar assert_equal([1, 2, 3], list2) 21284370087SBram Moolenaar list2[-1] = 99 21384370087SBram Moolenaar assert_equal([1, 2, 99], list2) 21484370087SBram Moolenaar list2[-2] = 88 21584370087SBram Moolenaar assert_equal([1, 88, 99], list2) 21684370087SBram Moolenaar list2[-3] = 77 21784370087SBram Moolenaar assert_equal([77, 88, 99], list2) 21884370087SBram Moolenaar call CheckDefExecFailure(['let ll = [1, 2, 3]', 'll[-4] = 6'], 'E684:') 219c5b1c20bSBram Moolenaar call CheckDefExecFailure(['let [v1, v2] = [1, 2]'], 'E1092:') 22084370087SBram Moolenaar 22184370087SBram Moolenaar # type becomes list<any> 22284370087SBram Moolenaar let somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c'] 22384370087SBram Moolenaarenddef 22484370087SBram Moolenaar 225b31be3f9SBram Moolenaardef Test_assignment_list_vim9script() 226b31be3f9SBram Moolenaar let lines =<< trim END 227b31be3f9SBram Moolenaar vim9script 228b31be3f9SBram Moolenaar let v1: number 229b31be3f9SBram Moolenaar let v2: number 230b31be3f9SBram Moolenaar let v3: number 231b31be3f9SBram Moolenaar [v1, v2, v3] = [1, 2, 3] 232b31be3f9SBram Moolenaar assert_equal([1, 2, 3], [v1, v2, v3]) 233b31be3f9SBram Moolenaar END 234b31be3f9SBram Moolenaar call CheckScriptSuccess(lines) 235b31be3f9SBram Moolenaarenddef 236b31be3f9SBram Moolenaar 23784370087SBram Moolenaardef Test_assignment_dict() 23884370087SBram Moolenaar let dict1: dict<bool> = #{one: false, two: true} 23984370087SBram Moolenaar let dict2: dict<number> = #{one: 1, two: 2} 24084370087SBram Moolenaar let dict3: dict<string> = #{key: 'value'} 24184370087SBram Moolenaar let dict4: dict<any> = #{one: 1, two: '2'} 24274fae513SBram Moolenaar let dict5: dict<blob> = #{one: 0z01, two: 0z02} 24384370087SBram Moolenaar 244f5be8cdbSBram Moolenaar # overwrite 245c785b9a7SBram Moolenaar dict3['key'] = 'another' 246c785b9a7SBram Moolenaar 24784370087SBram Moolenaar call CheckDefExecFailure(['let dd = {}', 'dd[""] = 6'], 'E713:') 24884370087SBram Moolenaar 24984370087SBram Moolenaar # type becomes dict<any> 25084370087SBram Moolenaar let somedict = rand() > 0 ? #{a: 1, b: 2} : #{a: 'a', b: 'b'} 25184370087SBram Moolenaarenddef 25284370087SBram Moolenaar 253d3aac291SBram Moolenaardef Test_assignment_local() 254f5be8cdbSBram Moolenaar # Test in a separated file in order not to the current buffer/window/tab is 255f5be8cdbSBram Moolenaar # changed. 256d3aac291SBram Moolenaar let script_lines: list<string> =<< trim END 257d3aac291SBram Moolenaar let b:existing = 'yes' 258d3aac291SBram Moolenaar let w:existing = 'yes' 259d3aac291SBram Moolenaar let t:existing = 'yes' 260d3aac291SBram Moolenaar 261d3aac291SBram Moolenaar def Test_assignment_local_internal() 262d3aac291SBram Moolenaar b:newvar = 'new' 263d3aac291SBram Moolenaar assert_equal('new', b:newvar) 264d3aac291SBram Moolenaar assert_equal('yes', b:existing) 265d3aac291SBram Moolenaar b:existing = 'no' 266d3aac291SBram Moolenaar assert_equal('no', b:existing) 267396f3138SBram Moolenaar b:existing ..= 'NO' 268396f3138SBram Moolenaar assert_equal('noNO', b:existing) 269d3aac291SBram Moolenaar 270d3aac291SBram Moolenaar w:newvar = 'new' 271d3aac291SBram Moolenaar assert_equal('new', w:newvar) 272d3aac291SBram Moolenaar assert_equal('yes', w:existing) 273d3aac291SBram Moolenaar w:existing = 'no' 274d3aac291SBram Moolenaar assert_equal('no', w:existing) 275396f3138SBram Moolenaar w:existing ..= 'NO' 276396f3138SBram Moolenaar assert_equal('noNO', w:existing) 277d3aac291SBram Moolenaar 278d3aac291SBram Moolenaar t:newvar = 'new' 279d3aac291SBram Moolenaar assert_equal('new', t:newvar) 280d3aac291SBram Moolenaar assert_equal('yes', t:existing) 281d3aac291SBram Moolenaar t:existing = 'no' 282d3aac291SBram Moolenaar assert_equal('no', t:existing) 283396f3138SBram Moolenaar t:existing ..= 'NO' 284396f3138SBram Moolenaar assert_equal('noNO', t:existing) 285d3aac291SBram Moolenaar enddef 286d3aac291SBram Moolenaar call Test_assignment_local_internal() 287d3aac291SBram Moolenaar END 288d3aac291SBram Moolenaar call CheckScriptSuccess(script_lines) 289d3aac291SBram Moolenaarenddef 290d3aac291SBram Moolenaar 2915deeb3f1SBram Moolenaardef Test_assignment_default() 292e69f6d04SBram Moolenaar 293cb711abfSBram Moolenaar # Test default values. 294e69f6d04SBram Moolenaar let thebool: bool 295e69f6d04SBram Moolenaar assert_equal(v:false, thebool) 296e69f6d04SBram Moolenaar 297e69f6d04SBram Moolenaar let thenumber: number 298e69f6d04SBram Moolenaar assert_equal(0, thenumber) 299e69f6d04SBram Moolenaar 300e69f6d04SBram Moolenaar if has('float') 301e69f6d04SBram Moolenaar let thefloat: float 302e69f6d04SBram Moolenaar assert_equal(0.0, thefloat) 303e69f6d04SBram Moolenaar endif 304e69f6d04SBram Moolenaar 305e69f6d04SBram Moolenaar let thestring: string 306e69f6d04SBram Moolenaar assert_equal('', thestring) 307e69f6d04SBram Moolenaar 308e69f6d04SBram Moolenaar let theblob: blob 309e69f6d04SBram Moolenaar assert_equal(0z, theblob) 310e69f6d04SBram Moolenaar 3115deeb3f1SBram Moolenaar let Thefunc: func 3125deeb3f1SBram Moolenaar assert_equal(test_null_function(), Thefunc) 313e69f6d04SBram Moolenaar 314e69f6d04SBram Moolenaar let thelist: list<any> 315e69f6d04SBram Moolenaar assert_equal([], thelist) 316e69f6d04SBram Moolenaar 317e69f6d04SBram Moolenaar let thedict: dict<any> 318e69f6d04SBram Moolenaar assert_equal({}, thedict) 319e69f6d04SBram Moolenaar 3202c869deeSBram Moolenaar if has('channel') 321e69f6d04SBram Moolenaar let thejob: job 322e69f6d04SBram Moolenaar assert_equal(test_null_job(), thejob) 323e69f6d04SBram Moolenaar 324e69f6d04SBram Moolenaar let thechannel: channel 325e69f6d04SBram Moolenaar assert_equal(test_null_channel(), thechannel) 326c785b9a7SBram Moolenaar 327c785b9a7SBram Moolenaar if has('unix') && executable('cat') 328f5be8cdbSBram Moolenaar # check with non-null job and channel, types must match 329c785b9a7SBram Moolenaar thejob = job_start("cat ", #{}) 330c785b9a7SBram Moolenaar thechannel = job_getchannel(thejob) 331c785b9a7SBram Moolenaar job_stop(thejob, 'kill') 332c785b9a7SBram Moolenaar endif 3332c869deeSBram Moolenaar endif 334585fea7bSBram Moolenaar 335585fea7bSBram Moolenaar let nr = 1234 | nr = 5678 336585fea7bSBram Moolenaar assert_equal(5678, nr) 3378a7d6542SBram Moolenaarenddef 3388a7d6542SBram Moolenaar 33947a519a9SBram Moolenaardef Test_assignment_var_list() 34047a519a9SBram Moolenaar let v1: string 34147a519a9SBram Moolenaar let v2: string 3429af78769SBram Moolenaar let vrem: list<string> 3439af78769SBram Moolenaar [v1] = ['aaa'] 3449af78769SBram Moolenaar assert_equal('aaa', v1) 3459af78769SBram Moolenaar 34647a519a9SBram Moolenaar [v1, v2] = ['one', 'two'] 34747a519a9SBram Moolenaar assert_equal('one', v1) 34847a519a9SBram Moolenaar assert_equal('two', v2) 3499af78769SBram Moolenaar 3509af78769SBram Moolenaar [v1, v2; vrem] = ['one', 'two'] 3519af78769SBram Moolenaar assert_equal('one', v1) 3529af78769SBram Moolenaar assert_equal('two', v2) 3539af78769SBram Moolenaar assert_equal([], vrem) 3549af78769SBram Moolenaar 3559af78769SBram Moolenaar [v1, v2; vrem] = ['one', 'two', 'three'] 3569af78769SBram Moolenaar assert_equal('one', v1) 3579af78769SBram Moolenaar assert_equal('two', v2) 3589af78769SBram Moolenaar assert_equal(['three'], vrem) 35947a519a9SBram Moolenaarenddef 36047a519a9SBram Moolenaar 361*c7e44a7eSBram Moolenaardef Test_assignment_vim9script() 362*c7e44a7eSBram Moolenaar let lines =<< trim END 363*c7e44a7eSBram Moolenaar vim9script 364*c7e44a7eSBram Moolenaar def Func(): list<number> 365*c7e44a7eSBram Moolenaar return [1, 2] 366*c7e44a7eSBram Moolenaar enddef 367*c7e44a7eSBram Moolenaar let var1: number 368*c7e44a7eSBram Moolenaar let var2: number 369*c7e44a7eSBram Moolenaar [var1, var2] = 370*c7e44a7eSBram Moolenaar Func() 371*c7e44a7eSBram Moolenaar assert_equal(1, var1) 372*c7e44a7eSBram Moolenaar assert_equal(2, var2) 373*c7e44a7eSBram Moolenaar let ll = 374*c7e44a7eSBram Moolenaar Func() 375*c7e44a7eSBram Moolenaar assert_equal([1, 2], ll) 376*c7e44a7eSBram Moolenaar END 377*c7e44a7eSBram Moolenaar CheckScriptSuccess(lines) 378*c7e44a7eSBram Moolenaarenddef 379*c7e44a7eSBram Moolenaar 380cab27678SBram Moolenaardef Mess(): string 381cab27678SBram Moolenaar v:foldstart = 123 382cab27678SBram Moolenaar return 'xxx' 383cab27678SBram Moolenaarenddef 384cab27678SBram Moolenaar 385d72c1bf0SBram Moolenaardef Test_assignment_failure() 3868a7d6542SBram Moolenaar call CheckDefFailure(['let var=234'], 'E1004:') 3878a7d6542SBram Moolenaar call CheckDefFailure(['let var =234'], 'E1004:') 3888a7d6542SBram Moolenaar call CheckDefFailure(['let var= 234'], 'E1004:') 3898a7d6542SBram Moolenaar 39063be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var=234'], 'E1004:') 39163be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var=234'], "before and after '='") 39263be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var =234'], 'E1004:') 39363be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var= 234'], 'E1004:') 39463be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var = 234', 'var+=234'], 'E1004:') 39563be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var = 234', 'var+=234'], "before and after '+='") 39663be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var = "x"', 'var..="y"'], 'E1004:') 39763be3d4bSBram Moolenaar call CheckScriptFailure(['vim9script', 'let var = "x"', 'var..="y"'], "before and after '..='") 39863be3d4bSBram Moolenaar 3998a7d6542SBram Moolenaar call CheckDefFailure(['let true = 1'], 'E1034:') 4008a7d6542SBram Moolenaar call CheckDefFailure(['let false = 1'], 'E1034:') 4018a7d6542SBram Moolenaar 4029b7bf9e9SBram Moolenaar call CheckDefFailure(['[a; b; c] = g:list'], 'E452:') 4039af78769SBram Moolenaar call CheckDefExecFailure(['let a: number', 4049af78769SBram Moolenaar '[a] = test_null_list()'], 'E1093:') 4059af78769SBram Moolenaar call CheckDefExecFailure(['let a: number', 4069af78769SBram Moolenaar '[a] = []'], 'E1093:') 4079af78769SBram Moolenaar call CheckDefExecFailure(['let x: number', 4089af78769SBram Moolenaar 'let y: number', 4099af78769SBram Moolenaar '[x, y] = [1]'], 'E1093:') 4109af78769SBram Moolenaar call CheckDefExecFailure(['let x: number', 4119af78769SBram Moolenaar 'let y: number', 4129af78769SBram Moolenaar 'let z: list<number>', 4139af78769SBram Moolenaar '[x, y; z] = [1]'], 'E1093:') 4149be61bbbSBram Moolenaar 415e69f6d04SBram Moolenaar call CheckDefFailure(['let somevar'], "E1022:") 4169be61bbbSBram Moolenaar call CheckDefFailure(['let &option'], 'E1052:') 4179be61bbbSBram Moolenaar call CheckDefFailure(['&g:option = 5'], 'E113:') 4189be61bbbSBram Moolenaar 419e55b1c09SBram Moolenaar call CheckDefFailure(['let $VAR = 5'], 'E1016: Cannot declare an environment variable:') 4209be61bbbSBram Moolenaar 4219be61bbbSBram Moolenaar call CheckDefFailure(['let @~ = 5'], 'E354:') 4229be61bbbSBram Moolenaar call CheckDefFailure(['let @a = 5'], 'E1066:') 4239be61bbbSBram Moolenaar 424e55b1c09SBram Moolenaar call CheckDefFailure(['let g:var = 5'], 'E1016: Cannot declare a global variable:') 425e55b1c09SBram Moolenaar call CheckDefFailure(['let w:var = 5'], 'E1016: Cannot declare a window variable:') 426e55b1c09SBram Moolenaar call CheckDefFailure(['let b:var = 5'], 'E1016: Cannot declare a buffer variable:') 427e55b1c09SBram Moolenaar call CheckDefFailure(['let t:var = 5'], 'E1016: Cannot declare a tab variable:') 4289be61bbbSBram Moolenaar 4299be61bbbSBram Moolenaar call CheckDefFailure(['let anr = 4', 'anr ..= "text"'], 'E1019:') 4309be61bbbSBram Moolenaar call CheckDefFailure(['let xnr += 4'], 'E1020:') 4319be61bbbSBram Moolenaar 432822ba247SBram Moolenaar call CheckScriptFailure(['vim9script', 'def Func()', 'let dummy = s:notfound', 'enddef', 'defcompile'], 'E1050:') 43333fa29cfSBram Moolenaar 4348a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<string> = [123]'], 'expected list<string> but got list<number>') 4358a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<number> = ["xx"]'], 'expected list<number> but got list<string>') 4368a7d6542SBram Moolenaar 4378a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<string> = #{key: 123}'], 'expected dict<string> but got dict<number>') 4388a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<number> = #{key: "xx"}'], 'expected dict<number> but got dict<string>') 4398a7d6542SBram Moolenaar 4408a7d6542SBram Moolenaar call CheckDefFailure(['let var = feedkeys("0")'], 'E1031:') 4418a7d6542SBram Moolenaar call CheckDefFailure(['let var: number = feedkeys("0")'], 'expected number but got void') 44242a480bfSBram Moolenaar 443d77a8525SBram Moolenaar call CheckDefFailure(['let var: dict <number>'], 'E1068:') 44442a480bfSBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 445cab27678SBram Moolenaar 446cab27678SBram Moolenaar call assert_fails('s/^/\=Mess()/n', 'E794:') 447cab27678SBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 44843e969d3SBram Moolenaar 44943e969d3SBram Moolenaar call CheckDefFailure(['w:foo: number = 10'], 45043e969d3SBram Moolenaar 'E488: Trailing characters: : number = 1') 45143e969d3SBram Moolenaar call CheckDefFailure(['t:foo: bool = true'], 45243e969d3SBram Moolenaar 'E488: Trailing characters: : bool = true') 45343e969d3SBram Moolenaar call CheckDefFailure(['b:foo: string = "x"'], 45443e969d3SBram Moolenaar 'E488: Trailing characters: : string = "x"') 45543e969d3SBram Moolenaar call CheckDefFailure(['g:foo: number = 123'], 45643e969d3SBram Moolenaar 'E488: Trailing characters: : number = 123') 457d72c1bf0SBram Moolenaarenddef 458d72c1bf0SBram Moolenaar 459d72c1bf0SBram Moolenaardef Test_unlet() 460d72c1bf0SBram Moolenaar g:somevar = 'yes' 461d72c1bf0SBram Moolenaar assert_true(exists('g:somevar')) 462d72c1bf0SBram Moolenaar unlet g:somevar 463d72c1bf0SBram Moolenaar assert_false(exists('g:somevar')) 464d72c1bf0SBram Moolenaar unlet! g:somevar 465d72c1bf0SBram Moolenaar 466d72c1bf0SBram Moolenaar call CheckScriptFailure([ 467d72c1bf0SBram Moolenaar 'vim9script', 468d72c1bf0SBram Moolenaar 'let svar = 123', 469d72c1bf0SBram Moolenaar 'unlet svar', 470d72c1bf0SBram Moolenaar ], 'E1081:') 471d72c1bf0SBram Moolenaar call CheckScriptFailure([ 472d72c1bf0SBram Moolenaar 'vim9script', 473d72c1bf0SBram Moolenaar 'let svar = 123', 474d72c1bf0SBram Moolenaar 'unlet s:svar', 475d72c1bf0SBram Moolenaar ], 'E1081:') 476d72c1bf0SBram Moolenaar call CheckScriptFailure([ 477d72c1bf0SBram Moolenaar 'vim9script', 478d72c1bf0SBram Moolenaar 'let svar = 123', 479d72c1bf0SBram Moolenaar 'def Func()', 480d72c1bf0SBram Moolenaar ' unlet svar', 481d72c1bf0SBram Moolenaar 'enddef', 482822ba247SBram Moolenaar 'defcompile', 483d72c1bf0SBram Moolenaar ], 'E1081:') 484d72c1bf0SBram Moolenaar call CheckScriptFailure([ 485d72c1bf0SBram Moolenaar 'vim9script', 486d72c1bf0SBram Moolenaar 'let svar = 123', 487d72c1bf0SBram Moolenaar 'def Func()', 488d72c1bf0SBram Moolenaar ' unlet s:svar', 489d72c1bf0SBram Moolenaar 'enddef', 490822ba247SBram Moolenaar 'defcompile', 491d72c1bf0SBram Moolenaar ], 'E1081:') 4927bdaea6eSBram Moolenaar 4937bdaea6eSBram Moolenaar $ENVVAR = 'foobar' 4947bdaea6eSBram Moolenaar assert_equal('foobar', $ENVVAR) 4957bdaea6eSBram Moolenaar unlet $ENVVAR 4967bdaea6eSBram Moolenaar assert_equal('', $ENVVAR) 497d72c1bf0SBram Moolenaarenddef 498599c89c8SBram Moolenaar 4994c17ad94SBram Moolenaardef Test_delfunction() 500f5be8cdbSBram Moolenaar # Check function is defined in script namespace 5014c17ad94SBram Moolenaar CheckScriptSuccess([ 5024c17ad94SBram Moolenaar 'vim9script', 5034c17ad94SBram Moolenaar 'func CheckMe()', 5044c17ad94SBram Moolenaar ' return 123', 5054c17ad94SBram Moolenaar 'endfunc', 5064c17ad94SBram Moolenaar 'assert_equal(123, s:CheckMe())', 5074c17ad94SBram Moolenaar ]) 5084c17ad94SBram Moolenaar 509f5be8cdbSBram Moolenaar # Check function in script namespace cannot be deleted 5104c17ad94SBram Moolenaar CheckScriptFailure([ 5114c17ad94SBram Moolenaar 'vim9script', 5124c17ad94SBram Moolenaar 'func DeleteMe1()', 5134c17ad94SBram Moolenaar 'endfunc', 5144c17ad94SBram Moolenaar 'delfunction DeleteMe1', 5154c17ad94SBram Moolenaar ], 'E1084:') 5164c17ad94SBram Moolenaar CheckScriptFailure([ 5174c17ad94SBram Moolenaar 'vim9script', 5184c17ad94SBram Moolenaar 'func DeleteMe2()', 5194c17ad94SBram Moolenaar 'endfunc', 5204c17ad94SBram Moolenaar 'def DoThat()', 5214c17ad94SBram Moolenaar ' delfunction DeleteMe2', 5224c17ad94SBram Moolenaar 'enddef', 5234c17ad94SBram Moolenaar 'DoThat()', 5244c17ad94SBram Moolenaar ], 'E1084:') 5254c17ad94SBram Moolenaar CheckScriptFailure([ 5264c17ad94SBram Moolenaar 'vim9script', 5274c17ad94SBram Moolenaar 'def DeleteMe3()', 5284c17ad94SBram Moolenaar 'enddef', 5294c17ad94SBram Moolenaar 'delfunction DeleteMe3', 5304c17ad94SBram Moolenaar ], 'E1084:') 5314c17ad94SBram Moolenaar CheckScriptFailure([ 5324c17ad94SBram Moolenaar 'vim9script', 5334c17ad94SBram Moolenaar 'def DeleteMe4()', 5344c17ad94SBram Moolenaar 'enddef', 5354c17ad94SBram Moolenaar 'def DoThat()', 5364c17ad94SBram Moolenaar ' delfunction DeleteMe4', 5374c17ad94SBram Moolenaar 'enddef', 5384c17ad94SBram Moolenaar 'DoThat()', 5394c17ad94SBram Moolenaar ], 'E1084:') 540925e9fd6SBram Moolenaar 541925e9fd6SBram Moolenaar # Check that global :def function can be replaced and deleted 542925e9fd6SBram Moolenaar let lines =<< trim END 543925e9fd6SBram Moolenaar vim9script 544925e9fd6SBram Moolenaar def g:Global(): string 545925e9fd6SBram Moolenaar return "yes" 546925e9fd6SBram Moolenaar enddef 547925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 548925e9fd6SBram Moolenaar def! g:Global(): string 549925e9fd6SBram Moolenaar return "no" 550925e9fd6SBram Moolenaar enddef 551925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 552925e9fd6SBram Moolenaar delfunc g:Global 553925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 554925e9fd6SBram Moolenaar END 555925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 556925e9fd6SBram Moolenaar 557925e9fd6SBram Moolenaar # Check that global function can be replaced by a :def function and deleted 558925e9fd6SBram Moolenaar lines =<< trim END 559925e9fd6SBram Moolenaar vim9script 560925e9fd6SBram Moolenaar func g:Global() 561925e9fd6SBram Moolenaar return "yes" 562925e9fd6SBram Moolenaar endfunc 563925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 564925e9fd6SBram Moolenaar def! g:Global(): string 565925e9fd6SBram Moolenaar return "no" 566925e9fd6SBram Moolenaar enddef 567925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 568925e9fd6SBram Moolenaar delfunc g:Global 569925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 570925e9fd6SBram Moolenaar END 571925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 572925e9fd6SBram Moolenaar 573925e9fd6SBram Moolenaar # Check that global :def function can be replaced by a function and deleted 574925e9fd6SBram Moolenaar lines =<< trim END 575925e9fd6SBram Moolenaar vim9script 576925e9fd6SBram Moolenaar def g:Global(): string 577925e9fd6SBram Moolenaar return "yes" 578925e9fd6SBram Moolenaar enddef 579925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 580925e9fd6SBram Moolenaar func! g:Global() 581925e9fd6SBram Moolenaar return "no" 582925e9fd6SBram Moolenaar endfunc 583925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 584925e9fd6SBram Moolenaar delfunc g:Global 585925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 586925e9fd6SBram Moolenaar END 587925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 5884c17ad94SBram Moolenaarenddef 5894c17ad94SBram Moolenaar 590599c89c8SBram Moolenaarfunc Test_wrong_type() 591599c89c8SBram Moolenaar call CheckDefFailure(['let var: list<nothing>'], 'E1010:') 592599c89c8SBram Moolenaar call CheckDefFailure(['let var: list<list<nothing>>'], 'E1010:') 593599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<nothing>'], 'E1010:') 594599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<dict<nothing>>'], 'E1010:') 595599c89c8SBram Moolenaar 596599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 597599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<list<number>'], 'E1009:') 59842a480bfSBram Moolenaar 59942a480bfSBram Moolenaar call CheckDefFailure(['let var: ally'], 'E1010:') 60042a480bfSBram Moolenaar call CheckDefFailure(['let var: bram'], 'E1010:') 60142a480bfSBram Moolenaar call CheckDefFailure(['let var: cathy'], 'E1010:') 60242a480bfSBram Moolenaar call CheckDefFailure(['let var: dom'], 'E1010:') 60342a480bfSBram Moolenaar call CheckDefFailure(['let var: freddy'], 'E1010:') 60442a480bfSBram Moolenaar call CheckDefFailure(['let var: john'], 'E1010:') 60542a480bfSBram Moolenaar call CheckDefFailure(['let var: larry'], 'E1010:') 60642a480bfSBram Moolenaar call CheckDefFailure(['let var: ned'], 'E1010:') 60742a480bfSBram Moolenaar call CheckDefFailure(['let var: pam'], 'E1010:') 60842a480bfSBram Moolenaar call CheckDefFailure(['let var: sam'], 'E1010:') 60942a480bfSBram Moolenaar call CheckDefFailure(['let var: vim'], 'E1010:') 610a0a9f43aSBram Moolenaar 611a0a9f43aSBram Moolenaar call CheckDefFailure(['let Ref: number', 'Ref()'], 'E1085:') 612a0a9f43aSBram Moolenaar call CheckDefFailure(['let Ref: string', 'let res = Ref()'], 'E1085:') 6138a7d6542SBram Moolenaarendfunc 6148a7d6542SBram Moolenaar 6158a7d6542SBram Moolenaarfunc Test_const() 6168a7d6542SBram Moolenaar call CheckDefFailure(['const var = 234', 'var = 99'], 'E1018:') 6178a7d6542SBram Moolenaar call CheckDefFailure(['const one = 234', 'let one = 99'], 'E1017:') 6188a7d6542SBram Moolenaar call CheckDefFailure(['const two'], 'E1021:') 6199be61bbbSBram Moolenaar call CheckDefFailure(['const &option'], 'E996:') 6208a7d6542SBram Moolenaarendfunc 6218a7d6542SBram Moolenaar 622df069eecSBram Moolenaardef Test_range_no_colon() 623df069eecSBram Moolenaar call CheckDefFailure(['%s/a/b/'], 'E1050:') 624df069eecSBram Moolenaar call CheckDefFailure(['+ s/a/b/'], 'E1050:') 625df069eecSBram Moolenaar call CheckDefFailure(['- s/a/b/'], 'E1050:') 626df069eecSBram Moolenaar call CheckDefFailure(['. s/a/b/'], 'E1050:') 627df069eecSBram Moolenaarenddef 628df069eecSBram Moolenaar 629df069eecSBram Moolenaar 6308a7d6542SBram Moolenaardef Test_block() 6318a7d6542SBram Moolenaar let outer = 1 6328a7d6542SBram Moolenaar { 6338a7d6542SBram Moolenaar let inner = 2 6348a7d6542SBram Moolenaar assert_equal(1, outer) 6358a7d6542SBram Moolenaar assert_equal(2, inner) 6368a7d6542SBram Moolenaar } 6378a7d6542SBram Moolenaar assert_equal(1, outer) 6388a7d6542SBram Moolenaarenddef 6398a7d6542SBram Moolenaar 6408a7d6542SBram Moolenaarfunc Test_block_failure() 6418a7d6542SBram Moolenaar call CheckDefFailure(['{', 'let inner = 1', '}', 'echo inner'], 'E1001:') 642585fea7bSBram Moolenaar call CheckDefFailure(['}'], 'E1025:') 643585fea7bSBram Moolenaar call CheckDefFailure(['{', 'echo 1'], 'E1026:') 6448a7d6542SBram Moolenaarendfunc 6458a7d6542SBram Moolenaar 646585fea7bSBram Moolenaardef Test_cmd_modifier() 647585fea7bSBram Moolenaar tab echo '0' 648585fea7bSBram Moolenaar call CheckDefFailure(['5tab echo 3'], 'E16:') 649585fea7bSBram Moolenaarenddef 650585fea7bSBram Moolenaar 651d032f34aSBram Moolenaarfunc g:NoSuchFunc() 652d032f34aSBram Moolenaar echo 'none' 653d032f34aSBram Moolenaarendfunc 654d032f34aSBram Moolenaar 6558a7d6542SBram Moolenaardef Test_try_catch() 6568a7d6542SBram Moolenaar let l = [] 6577a092245SBram Moolenaar try # comment 6588a7d6542SBram Moolenaar add(l, '1') 6598a7d6542SBram Moolenaar throw 'wrong' 6608a7d6542SBram Moolenaar add(l, '2') 6617a092245SBram Moolenaar catch # comment 6628a7d6542SBram Moolenaar add(l, v:exception) 6637a092245SBram Moolenaar finally # comment 6648a7d6542SBram Moolenaar add(l, '3') 6657a092245SBram Moolenaar endtry # comment 6668a7d6542SBram Moolenaar assert_equal(['1', 'wrong', '3'], l) 66768d130c6SBram Moolenaar 668e859312eSBram Moolenaar l = [] 669e859312eSBram Moolenaar try 670e859312eSBram Moolenaar try 671e859312eSBram Moolenaar add(l, '1') 672e859312eSBram Moolenaar throw 'wrong' 673e859312eSBram Moolenaar add(l, '2') 674e859312eSBram Moolenaar catch /right/ 675e859312eSBram Moolenaar add(l, v:exception) 676e859312eSBram Moolenaar endtry 677e859312eSBram Moolenaar catch /wrong/ 678e859312eSBram Moolenaar add(l, 'caught') 679e859312eSBram Moolenaar finally 680e859312eSBram Moolenaar add(l, 'finally') 681e859312eSBram Moolenaar endtry 682e859312eSBram Moolenaar assert_equal(['1', 'caught', 'finally'], l) 683e859312eSBram Moolenaar 68468d130c6SBram Moolenaar let n: number 68568d130c6SBram Moolenaar try 68668d130c6SBram Moolenaar n = l[3] 68768d130c6SBram Moolenaar catch /E684:/ 68868d130c6SBram Moolenaar n = 99 68968d130c6SBram Moolenaar endtry 69068d130c6SBram Moolenaar assert_equal(99, n) 69168d130c6SBram Moolenaar 69268d130c6SBram Moolenaar try 69368d130c6SBram Moolenaar n = g:astring[3] 69468d130c6SBram Moolenaar catch /E714:/ 69568d130c6SBram Moolenaar n = 77 69668d130c6SBram Moolenaar endtry 69768d130c6SBram Moolenaar assert_equal(77, n) 69868d130c6SBram Moolenaar 69968d130c6SBram Moolenaar try 70068d130c6SBram Moolenaar n = l[g:astring] 70168d130c6SBram Moolenaar catch /E39:/ 70268d130c6SBram Moolenaar n = 77 70368d130c6SBram Moolenaar endtry 70468d130c6SBram Moolenaar assert_equal(77, n) 70568d130c6SBram Moolenaar 70668d130c6SBram Moolenaar try 70768d130c6SBram Moolenaar n = s:does_not_exist 70868d130c6SBram Moolenaar catch /E121:/ 709f0b9f43cSBram Moolenaar n = 111 710f0b9f43cSBram Moolenaar endtry 711f0b9f43cSBram Moolenaar assert_equal(111, n) 712f0b9f43cSBram Moolenaar 713f0b9f43cSBram Moolenaar try 714f0b9f43cSBram Moolenaar n = g:does_not_exist 715f0b9f43cSBram Moolenaar catch /E121:/ 71668d130c6SBram Moolenaar n = 121 71768d130c6SBram Moolenaar endtry 71868d130c6SBram Moolenaar assert_equal(121, n) 71968d130c6SBram Moolenaar 72068d130c6SBram Moolenaar let d = #{one: 1} 72168d130c6SBram Moolenaar try 72268d130c6SBram Moolenaar n = d[g:astring] 72368d130c6SBram Moolenaar catch /E716:/ 72468d130c6SBram Moolenaar n = 222 72568d130c6SBram Moolenaar endtry 72668d130c6SBram Moolenaar assert_equal(222, n) 727f0b9f43cSBram Moolenaar 728f0b9f43cSBram Moolenaar try 729f0b9f43cSBram Moolenaar n = -g:astring 730f0b9f43cSBram Moolenaar catch /E39:/ 731f0b9f43cSBram Moolenaar n = 233 732f0b9f43cSBram Moolenaar endtry 733f0b9f43cSBram Moolenaar assert_equal(233, n) 734f0b9f43cSBram Moolenaar 735f0b9f43cSBram Moolenaar try 736f0b9f43cSBram Moolenaar n = +g:astring 737f0b9f43cSBram Moolenaar catch /E1030:/ 738f0b9f43cSBram Moolenaar n = 244 739f0b9f43cSBram Moolenaar endtry 740f0b9f43cSBram Moolenaar assert_equal(244, n) 741f0b9f43cSBram Moolenaar 742f0b9f43cSBram Moolenaar try 743f0b9f43cSBram Moolenaar n = +g:alist 744f0b9f43cSBram Moolenaar catch /E745:/ 745f0b9f43cSBram Moolenaar n = 255 746f0b9f43cSBram Moolenaar endtry 747f0b9f43cSBram Moolenaar assert_equal(255, n) 748f0b9f43cSBram Moolenaar 749f0b9f43cSBram Moolenaar let nd: dict<any> 750f0b9f43cSBram Moolenaar try 751f0b9f43cSBram Moolenaar nd = {g:anumber: 1} 752f0b9f43cSBram Moolenaar catch /E1029:/ 753f0b9f43cSBram Moolenaar n = 266 754f0b9f43cSBram Moolenaar endtry 755f0b9f43cSBram Moolenaar assert_equal(266, n) 756f0b9f43cSBram Moolenaar 757f0b9f43cSBram Moolenaar try 758f0b9f43cSBram Moolenaar [n] = [1, 2, 3] 759f0b9f43cSBram Moolenaar catch /E1093:/ 760f0b9f43cSBram Moolenaar n = 277 761f0b9f43cSBram Moolenaar endtry 762f0b9f43cSBram Moolenaar assert_equal(277, n) 763f0b9f43cSBram Moolenaar 764e859312eSBram Moolenaar try 765e859312eSBram Moolenaar &ts = g:astring 766e859312eSBram Moolenaar catch /E1029:/ 767e859312eSBram Moolenaar n = 288 768e859312eSBram Moolenaar endtry 769e859312eSBram Moolenaar assert_equal(288, n) 770e859312eSBram Moolenaar 771e859312eSBram Moolenaar try 772e859312eSBram Moolenaar &backspace = 'asdf' 773e859312eSBram Moolenaar catch /E474:/ 774e859312eSBram Moolenaar n = 299 775e859312eSBram Moolenaar endtry 776e859312eSBram Moolenaar assert_equal(299, n) 777e859312eSBram Moolenaar 778e859312eSBram Moolenaar l = [1] 779e859312eSBram Moolenaar try 780e859312eSBram Moolenaar l[3] = 3 781e859312eSBram Moolenaar catch /E684:/ 782e859312eSBram Moolenaar n = 300 783e859312eSBram Moolenaar endtry 784e859312eSBram Moolenaar assert_equal(300, n) 785e859312eSBram Moolenaar 786e859312eSBram Moolenaar try 787e859312eSBram Moolenaar d[''] = 3 788e859312eSBram Moolenaar catch /E713:/ 789e859312eSBram Moolenaar n = 311 790e859312eSBram Moolenaar endtry 791e859312eSBram Moolenaar assert_equal(311, n) 792e859312eSBram Moolenaar 793e859312eSBram Moolenaar try 794e859312eSBram Moolenaar unlet g:does_not_exist 795e859312eSBram Moolenaar catch /E108:/ 796e859312eSBram Moolenaar n = 322 797e859312eSBram Moolenaar endtry 798e859312eSBram Moolenaar assert_equal(322, n) 799e859312eSBram Moolenaar 800e859312eSBram Moolenaar try 801e859312eSBram Moolenaar d = {'text': 1, g:astring: 2} 802e859312eSBram Moolenaar catch /E721:/ 803e859312eSBram Moolenaar n = 333 804e859312eSBram Moolenaar endtry 805e859312eSBram Moolenaar assert_equal(333, n) 806e859312eSBram Moolenaar 807e859312eSBram Moolenaar try 808e859312eSBram Moolenaar l = DeletedFunc() 809e859312eSBram Moolenaar catch /E933:/ 810e859312eSBram Moolenaar n = 344 811e859312eSBram Moolenaar endtry 812e859312eSBram Moolenaar assert_equal(344, n) 813d032f34aSBram Moolenaar 814d032f34aSBram Moolenaar try 815d032f34aSBram Moolenaar echo len(v:true) 816d032f34aSBram Moolenaar catch /E701:/ 817d032f34aSBram Moolenaar n = 355 818d032f34aSBram Moolenaar endtry 819d032f34aSBram Moolenaar assert_equal(355, n) 820d032f34aSBram Moolenaar 821d032f34aSBram Moolenaar let P = function('g:NoSuchFunc') 822d032f34aSBram Moolenaar delfunc g:NoSuchFunc 823d032f34aSBram Moolenaar try 824d032f34aSBram Moolenaar echo P() 825d032f34aSBram Moolenaar catch /E117:/ 826d032f34aSBram Moolenaar n = 366 827d032f34aSBram Moolenaar endtry 828d032f34aSBram Moolenaar assert_equal(366, n) 829d032f34aSBram Moolenaar 830d032f34aSBram Moolenaar try 831d032f34aSBram Moolenaar echo g:NoSuchFunc() 832d032f34aSBram Moolenaar catch /E117:/ 833d032f34aSBram Moolenaar n = 377 834d032f34aSBram Moolenaar endtry 835d032f34aSBram Moolenaar assert_equal(377, n) 836d032f34aSBram Moolenaar 837d032f34aSBram Moolenaar try 838d032f34aSBram Moolenaar echo g:alist + 4 839d032f34aSBram Moolenaar catch /E745:/ 840d032f34aSBram Moolenaar n = 388 841d032f34aSBram Moolenaar endtry 842d032f34aSBram Moolenaar assert_equal(388, n) 843d032f34aSBram Moolenaar 844d032f34aSBram Moolenaar try 845d032f34aSBram Moolenaar echo 4 + g:alist 846d032f34aSBram Moolenaar catch /E745:/ 847d032f34aSBram Moolenaar n = 399 848d032f34aSBram Moolenaar endtry 849d032f34aSBram Moolenaar assert_equal(399, n) 850d032f34aSBram Moolenaar 851d032f34aSBram Moolenaar try 852d032f34aSBram Moolenaar echo g:alist.member 853d032f34aSBram Moolenaar catch /E715:/ 854d032f34aSBram Moolenaar n = 400 855d032f34aSBram Moolenaar endtry 856d032f34aSBram Moolenaar assert_equal(400, n) 857d032f34aSBram Moolenaar 858d032f34aSBram Moolenaar try 859d032f34aSBram Moolenaar echo d.member 860d032f34aSBram Moolenaar catch /E716:/ 861d032f34aSBram Moolenaar n = 411 862d032f34aSBram Moolenaar endtry 863d032f34aSBram Moolenaar assert_equal(411, n) 8648a7d6542SBram Moolenaarenddef 8658a7d6542SBram Moolenaar 866e859312eSBram Moolenaardef DeletedFunc(): list<any> 867e859312eSBram Moolenaar return ['delete me'] 868e859312eSBram Moolenaarenddef 869e859312eSBram Moolenaardefcompile 870e859312eSBram Moolenaardelfunc DeletedFunc 871e859312eSBram Moolenaar 872257cc5eeSBram Moolenaardef ThrowFromDef() 873a72cfb80SBram Moolenaar throw "getout" # comment 874257cc5eeSBram Moolenaarenddef 875257cc5eeSBram Moolenaar 876257cc5eeSBram Moolenaarfunc CatchInFunc() 877257cc5eeSBram Moolenaar try 878257cc5eeSBram Moolenaar call ThrowFromDef() 879257cc5eeSBram Moolenaar catch 880257cc5eeSBram Moolenaar let g:thrown_func = v:exception 881257cc5eeSBram Moolenaar endtry 882257cc5eeSBram Moolenaarendfunc 883257cc5eeSBram Moolenaar 884257cc5eeSBram Moolenaardef CatchInDef() 885257cc5eeSBram Moolenaar try 886257cc5eeSBram Moolenaar ThrowFromDef() 887257cc5eeSBram Moolenaar catch 888257cc5eeSBram Moolenaar g:thrown_def = v:exception 889257cc5eeSBram Moolenaar endtry 890257cc5eeSBram Moolenaarenddef 891257cc5eeSBram Moolenaar 892f575adffSBram Moolenaardef ReturnFinally(): string 893f575adffSBram Moolenaar try 894f575adffSBram Moolenaar return 'intry' 895f575adffSBram Moolenaar finally 896f575adffSBram Moolenaar g:in_finally = 'finally' 897f575adffSBram Moolenaar endtry 898f575adffSBram Moolenaar return 'end' 899f575adffSBram Moolenaarenddef 900f575adffSBram Moolenaar 901257cc5eeSBram Moolenaardef Test_try_catch_nested() 902257cc5eeSBram Moolenaar CatchInFunc() 903257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_func) 904257cc5eeSBram Moolenaar 905257cc5eeSBram Moolenaar CatchInDef() 906257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_def) 907f575adffSBram Moolenaar 908f575adffSBram Moolenaar assert_equal('intry', ReturnFinally()) 909f575adffSBram Moolenaar assert_equal('finally', g:in_finally) 910f575adffSBram Moolenaarenddef 911f575adffSBram Moolenaar 912f575adffSBram Moolenaardef Test_try_catch_match() 913f575adffSBram Moolenaar let seq = 'a' 914f575adffSBram Moolenaar try 915f575adffSBram Moolenaar throw 'something' 916f575adffSBram Moolenaar catch /nothing/ 917f575adffSBram Moolenaar seq ..= 'x' 918f575adffSBram Moolenaar catch /some/ 919f575adffSBram Moolenaar seq ..= 'b' 920f575adffSBram Moolenaar catch /asdf/ 921f575adffSBram Moolenaar seq ..= 'x' 922e8c4abbbSBram Moolenaar catch ?a\?sdf? 923e8c4abbbSBram Moolenaar seq ..= 'y' 924f575adffSBram Moolenaar finally 925f575adffSBram Moolenaar seq ..= 'c' 926f575adffSBram Moolenaar endtry 927f575adffSBram Moolenaar assert_equal('abc', seq) 928257cc5eeSBram Moolenaarenddef 929257cc5eeSBram Moolenaar 930e8c4abbbSBram Moolenaardef Test_try_catch_fails() 931e8c4abbbSBram Moolenaar call CheckDefFailure(['catch'], 'E603:') 932e8c4abbbSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'catch', 'catch'], 'E1033:') 933e8c4abbbSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'catch /pat'], 'E1067:') 934585fea7bSBram Moolenaar call CheckDefFailure(['finally'], 'E606:') 935585fea7bSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'finally', 'echo 1', 'finally'], 'E607:') 936585fea7bSBram Moolenaar call CheckDefFailure(['endtry'], 'E602:') 937585fea7bSBram Moolenaar call CheckDefFailure(['while 1', 'endtry'], 'E170:') 938585fea7bSBram Moolenaar call CheckDefFailure(['for i in range(5)', 'endtry'], 'E170:') 939585fea7bSBram Moolenaar call CheckDefFailure(['if 2', 'endtry'], 'E171:') 940585fea7bSBram Moolenaar call CheckDefFailure(['try', 'echo 1', 'endtry'], 'E1032:') 941585fea7bSBram Moolenaar 942a72cfb80SBram Moolenaar call CheckDefFailure(['throw'], 'E1015:') 943585fea7bSBram Moolenaar call CheckDefFailure(['throw xxx'], 'E1001:') 944e8c4abbbSBram Moolenaarenddef 945e8c4abbbSBram Moolenaar 946006ad48bSBram Moolenaardef Test_throw_vimscript() 947f5be8cdbSBram Moolenaar # only checks line continuation 948006ad48bSBram Moolenaar let lines =<< trim END 949006ad48bSBram Moolenaar vim9script 950006ad48bSBram Moolenaar try 951006ad48bSBram Moolenaar throw 'one' 952006ad48bSBram Moolenaar .. 'two' 953006ad48bSBram Moolenaar catch 954006ad48bSBram Moolenaar assert_equal('onetwo', v:exception) 955006ad48bSBram Moolenaar endtry 956006ad48bSBram Moolenaar END 957006ad48bSBram Moolenaar CheckScriptSuccess(lines) 958006ad48bSBram Moolenaarenddef 959006ad48bSBram Moolenaar 96037c83711SBram Moolenaardef Test_cexpr_vimscript() 961f5be8cdbSBram Moolenaar # only checks line continuation 96237c83711SBram Moolenaar set errorformat=File\ %f\ line\ %l 96337c83711SBram Moolenaar let lines =<< trim END 96437c83711SBram Moolenaar vim9script 96537c83711SBram Moolenaar cexpr 'File' 96637c83711SBram Moolenaar .. ' someFile' .. 96737c83711SBram Moolenaar ' line 19' 96837c83711SBram Moolenaar assert_equal(19, getqflist()[0].lnum) 96937c83711SBram Moolenaar END 97037c83711SBram Moolenaar CheckScriptSuccess(lines) 97137c83711SBram Moolenaar set errorformat& 97237c83711SBram Moolenaarenddef 97337c83711SBram Moolenaar 974b209750bSBram Moolenaardef Test_list_vimscript() 975b209750bSBram Moolenaar # checks line continuation and comments 976b209750bSBram Moolenaar let lines =<< trim END 977b209750bSBram Moolenaar vim9script 978b209750bSBram Moolenaar let mylist = [ 979b209750bSBram Moolenaar 'one', 980b209750bSBram Moolenaar # comment 981b209750bSBram Moolenaar 'two', # empty line follows 982b209750bSBram Moolenaar 983b209750bSBram Moolenaar 'three', 984b209750bSBram Moolenaar ] 985b209750bSBram Moolenaar assert_equal(['one', 'two', 'three'], mylist) 986b209750bSBram Moolenaar END 987b209750bSBram Moolenaar CheckScriptSuccess(lines) 988b209750bSBram Moolenaarenddef 989b209750bSBram Moolenaar 9902a1381c3SBram Moolenaarif has('channel') 99140ee466cSBram Moolenaar let someJob = test_null_job() 99240ee466cSBram Moolenaar 99340ee466cSBram Moolenaar def FuncWithError() 99440ee466cSBram Moolenaar echomsg g:someJob 99540ee466cSBram Moolenaar enddef 99640ee466cSBram Moolenaar 99740ee466cSBram Moolenaar func Test_convert_emsg_to_exception() 99840ee466cSBram Moolenaar try 99940ee466cSBram Moolenaar call FuncWithError() 100040ee466cSBram Moolenaar catch 100140ee466cSBram Moolenaar call assert_match('Vim:E908:', v:exception) 100240ee466cSBram Moolenaar endtry 100340ee466cSBram Moolenaar endfunc 10042a1381c3SBram Moolenaarendif 100540ee466cSBram Moolenaar 10068a7d6542SBram Moolenaarlet s:export_script_lines =<< trim END 10078a7d6542SBram Moolenaar vim9script 10088a7d6542SBram Moolenaar let name: string = 'bob' 10098a7d6542SBram Moolenaar def Concat(arg: string): string 10108a7d6542SBram Moolenaar return name .. arg 10118a7d6542SBram Moolenaar enddef 1012227a69deSBram Moolenaar g:result = Concat('bie') 1013227a69deSBram Moolenaar g:localname = name 10148a7d6542SBram Moolenaar 10158a7d6542SBram Moolenaar export const CONST = 1234 10168a7d6542SBram Moolenaar export let exported = 9876 10176e587dcbSBram Moolenaar export let exp_name = 'John' 10188a7d6542SBram Moolenaar export def Exported(): string 10198a7d6542SBram Moolenaar return 'Exported' 10208a7d6542SBram Moolenaar enddef 10218a7d6542SBram MoolenaarEND 10228a7d6542SBram Moolenaar 10235269bd2aSBram Moolenaardef Test_vim9_import_export() 10248a7d6542SBram Moolenaar let import_script_lines =<< trim END 10258a7d6542SBram Moolenaar vim9script 10268a7d6542SBram Moolenaar import {exported, Exported} from './Xexport.vim' 10278a7d6542SBram Moolenaar g:imported = exported 10286e587dcbSBram Moolenaar exported += 3 10296e587dcbSBram Moolenaar g:imported_added = exported 10308a7d6542SBram Moolenaar g:imported_func = Exported() 10316e587dcbSBram Moolenaar 103240f4f7a4SBram Moolenaar def GetExported(): string 103340f4f7a4SBram Moolenaar let local_dict = #{ref: Exported} 103440f4f7a4SBram Moolenaar return local_dict.ref() 103540f4f7a4SBram Moolenaar enddef 103640f4f7a4SBram Moolenaar g:funcref_result = GetExported() 103740f4f7a4SBram Moolenaar 10386e587dcbSBram Moolenaar import {exp_name} from './Xexport.vim' 10396e587dcbSBram Moolenaar g:imported_name = exp_name 10406e587dcbSBram Moolenaar exp_name ..= ' Doe' 10416e587dcbSBram Moolenaar g:imported_name_appended = exp_name 10425381c7a1SBram Moolenaar g:imported_later = exported 10438a7d6542SBram Moolenaar END 10448a7d6542SBram Moolenaar 10458a7d6542SBram Moolenaar writefile(import_script_lines, 'Ximport.vim') 10468a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport.vim') 10478a7d6542SBram Moolenaar 10488a7d6542SBram Moolenaar source Ximport.vim 10498a7d6542SBram Moolenaar 10508a7d6542SBram Moolenaar assert_equal('bobbie', g:result) 10518a7d6542SBram Moolenaar assert_equal('bob', g:localname) 10528a7d6542SBram Moolenaar assert_equal(9876, g:imported) 10536e587dcbSBram Moolenaar assert_equal(9879, g:imported_added) 10545381c7a1SBram Moolenaar assert_equal(9879, g:imported_later) 10558a7d6542SBram Moolenaar assert_equal('Exported', g:imported_func) 105640f4f7a4SBram Moolenaar assert_equal('Exported', g:funcref_result) 10576e587dcbSBram Moolenaar assert_equal('John', g:imported_name) 10586e587dcbSBram Moolenaar assert_equal('John Doe', g:imported_name_appended) 10598a7d6542SBram Moolenaar assert_false(exists('g:name')) 10608a7d6542SBram Moolenaar 10618a7d6542SBram Moolenaar unlet g:result 10628a7d6542SBram Moolenaar unlet g:localname 10638a7d6542SBram Moolenaar unlet g:imported 10646e587dcbSBram Moolenaar unlet g:imported_added 10655381c7a1SBram Moolenaar unlet g:imported_later 10668a7d6542SBram Moolenaar unlet g:imported_func 10676e587dcbSBram Moolenaar unlet g:imported_name g:imported_name_appended 10688a7d6542SBram Moolenaar delete('Ximport.vim') 1069f2d5c240SBram Moolenaar 10701c991144SBram Moolenaar # similar, with line breaks 10711c991144SBram Moolenaar let import_line_break_script_lines =<< trim END 10721c991144SBram Moolenaar vim9script 10731c991144SBram Moolenaar import { 10741c991144SBram Moolenaar exported, 10751c991144SBram Moolenaar Exported, 10761c991144SBram Moolenaar } 10771c991144SBram Moolenaar from 10781c991144SBram Moolenaar './Xexport.vim' 10791c991144SBram Moolenaar g:imported = exported 10801c991144SBram Moolenaar exported += 5 10811c991144SBram Moolenaar g:imported_added = exported 10821c991144SBram Moolenaar g:imported_func = Exported() 10831c991144SBram Moolenaar END 10841c991144SBram Moolenaar writefile(import_line_break_script_lines, 'Ximport_lbr.vim') 10851c991144SBram Moolenaar source Ximport_lbr.vim 10861c991144SBram Moolenaar 10871c991144SBram Moolenaar assert_equal(9876, g:imported) 10881c991144SBram Moolenaar assert_equal(9881, g:imported_added) 10891c991144SBram Moolenaar assert_equal('Exported', g:imported_func) 10901c991144SBram Moolenaar 10911c991144SBram Moolenaar # exported script not sourced again 10921c991144SBram Moolenaar assert_false(exists('g:result')) 10931c991144SBram Moolenaar unlet g:imported 10941c991144SBram Moolenaar unlet g:imported_added 10951c991144SBram Moolenaar unlet g:imported_func 10961c991144SBram Moolenaar delete('Ximport_lbr.vim') 10971c991144SBram Moolenaar 10981c991144SBram Moolenaar # import inside :def function 10995381c7a1SBram Moolenaar let import_in_def_lines =<< trim END 11005381c7a1SBram Moolenaar vim9script 11015381c7a1SBram Moolenaar def ImportInDef() 11025381c7a1SBram Moolenaar import exported from './Xexport.vim' 11035381c7a1SBram Moolenaar g:imported = exported 11045381c7a1SBram Moolenaar exported += 7 11055381c7a1SBram Moolenaar g:imported_added = exported 11065381c7a1SBram Moolenaar enddef 11075381c7a1SBram Moolenaar ImportInDef() 11085381c7a1SBram Moolenaar END 11095381c7a1SBram Moolenaar writefile(import_in_def_lines, 'Ximport2.vim') 11105381c7a1SBram Moolenaar source Ximport2.vim 1111f5be8cdbSBram Moolenaar # TODO: this should be 9879 11125381c7a1SBram Moolenaar assert_equal(9876, g:imported) 11135381c7a1SBram Moolenaar assert_equal(9883, g:imported_added) 11145381c7a1SBram Moolenaar unlet g:imported 11155381c7a1SBram Moolenaar unlet g:imported_added 11165381c7a1SBram Moolenaar delete('Ximport2.vim') 11175381c7a1SBram Moolenaar 1118f2d5c240SBram Moolenaar let import_star_as_lines =<< trim END 1119f2d5c240SBram Moolenaar vim9script 1120f2d5c240SBram Moolenaar import * as Export from './Xexport.vim' 1121f2d5c240SBram Moolenaar def UseExport() 1122f2d5c240SBram Moolenaar g:imported = Export.exported 1123f2d5c240SBram Moolenaar enddef 1124f2d5c240SBram Moolenaar UseExport() 1125f2d5c240SBram Moolenaar END 1126f2d5c240SBram Moolenaar writefile(import_star_as_lines, 'Ximport.vim') 1127f2d5c240SBram Moolenaar source Ximport.vim 11285381c7a1SBram Moolenaar assert_equal(9883, g:imported) 1129f2d5c240SBram Moolenaar 1130599c89c8SBram Moolenaar let import_star_as_lines_no_dot =<< trim END 1131599c89c8SBram Moolenaar vim9script 1132599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 1133599c89c8SBram Moolenaar def Func() 1134599c89c8SBram Moolenaar let dummy = 1 1135599c89c8SBram Moolenaar let imported = Export + dummy 1136599c89c8SBram Moolenaar enddef 1137822ba247SBram Moolenaar defcompile 1138599c89c8SBram Moolenaar END 1139599c89c8SBram Moolenaar writefile(import_star_as_lines_no_dot, 'Ximport.vim') 1140599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1060:') 1141599c89c8SBram Moolenaar 1142599c89c8SBram Moolenaar let import_star_as_lines_dot_space =<< trim END 1143599c89c8SBram Moolenaar vim9script 1144599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 1145599c89c8SBram Moolenaar def Func() 1146599c89c8SBram Moolenaar let imported = Export . exported 1147599c89c8SBram Moolenaar enddef 1148822ba247SBram Moolenaar defcompile 1149599c89c8SBram Moolenaar END 1150599c89c8SBram Moolenaar writefile(import_star_as_lines_dot_space, 'Ximport.vim') 1151599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1074:') 1152599c89c8SBram Moolenaar 1153599c89c8SBram Moolenaar let import_star_as_lines_missing_name =<< trim END 1154599c89c8SBram Moolenaar vim9script 1155599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 1156599c89c8SBram Moolenaar def Func() 1157599c89c8SBram Moolenaar let imported = Export. 1158599c89c8SBram Moolenaar enddef 1159822ba247SBram Moolenaar defcompile 1160599c89c8SBram Moolenaar END 1161599c89c8SBram Moolenaar writefile(import_star_as_lines_missing_name, 'Ximport.vim') 1162599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 1163599c89c8SBram Moolenaar 11641c991144SBram Moolenaar let import_star_as_lbr_lines =<< trim END 11651c991144SBram Moolenaar vim9script 11661c991144SBram Moolenaar import * 11671c991144SBram Moolenaar as Export 11681c991144SBram Moolenaar from 11691c991144SBram Moolenaar './Xexport.vim' 11701c991144SBram Moolenaar def UseExport() 11711c991144SBram Moolenaar g:imported = Export.exported 11721c991144SBram Moolenaar enddef 11731c991144SBram Moolenaar UseExport() 11741c991144SBram Moolenaar END 11751c991144SBram Moolenaar writefile(import_star_as_lbr_lines, 'Ximport.vim') 11761c991144SBram Moolenaar source Ximport.vim 11771c991144SBram Moolenaar assert_equal(9883, g:imported) 11781c991144SBram Moolenaar 1179f2d5c240SBram Moolenaar let import_star_lines =<< trim END 1180f2d5c240SBram Moolenaar vim9script 1181f2d5c240SBram Moolenaar import * from './Xexport.vim' 1182f2d5c240SBram Moolenaar END 1183f2d5c240SBram Moolenaar writefile(import_star_lines, 'Ximport.vim') 1184f2d5c240SBram Moolenaar assert_fails('source Ximport.vim', 'E1045:') 1185f2d5c240SBram Moolenaar 1186f5be8cdbSBram Moolenaar # try to import something that exists but is not exported 1187fa29c8abSBram Moolenaar let import_not_exported_lines =<< trim END 1188fa29c8abSBram Moolenaar vim9script 1189fa29c8abSBram Moolenaar import name from './Xexport.vim' 1190fa29c8abSBram Moolenaar END 1191fa29c8abSBram Moolenaar writefile(import_not_exported_lines, 'Ximport.vim') 1192fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1049:') 1193fa29c8abSBram Moolenaar 1194f5be8cdbSBram Moolenaar # try to import something that is already defined 11955269bd2aSBram Moolenaar let import_already_defined =<< trim END 11965269bd2aSBram Moolenaar vim9script 11975269bd2aSBram Moolenaar let exported = 'something' 11985269bd2aSBram Moolenaar import exported from './Xexport.vim' 11995269bd2aSBram Moolenaar END 12005269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 12015269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 12025269bd2aSBram Moolenaar 1203f5be8cdbSBram Moolenaar # try to import something that is already defined 12045269bd2aSBram Moolenaar import_already_defined =<< trim END 12055269bd2aSBram Moolenaar vim9script 12065269bd2aSBram Moolenaar let exported = 'something' 12075269bd2aSBram Moolenaar import * as exported from './Xexport.vim' 12085269bd2aSBram Moolenaar END 12095269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 12105269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 12115269bd2aSBram Moolenaar 1212f5be8cdbSBram Moolenaar # try to import something that is already defined 12135269bd2aSBram Moolenaar import_already_defined =<< trim END 12145269bd2aSBram Moolenaar vim9script 12155269bd2aSBram Moolenaar let exported = 'something' 12165269bd2aSBram Moolenaar import {exported} from './Xexport.vim' 12175269bd2aSBram Moolenaar END 12185269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 12195269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 12205269bd2aSBram Moolenaar 1221f5be8cdbSBram Moolenaar # import a very long name, requires making a copy 1222fa29c8abSBram Moolenaar let import_long_name_lines =<< trim END 1223fa29c8abSBram Moolenaar vim9script 1224fa29c8abSBram Moolenaar import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim' 1225fa29c8abSBram Moolenaar END 1226fa29c8abSBram Moolenaar writefile(import_long_name_lines, 'Ximport.vim') 1227fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 1228fa29c8abSBram Moolenaar 1229fa29c8abSBram Moolenaar let import_no_from_lines =<< trim END 1230fa29c8abSBram Moolenaar vim9script 1231fa29c8abSBram Moolenaar import name './Xexport.vim' 1232fa29c8abSBram Moolenaar END 1233fa29c8abSBram Moolenaar writefile(import_no_from_lines, 'Ximport.vim') 1234fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1070:') 1235fa29c8abSBram Moolenaar 1236fa29c8abSBram Moolenaar let import_invalid_string_lines =<< trim END 1237fa29c8abSBram Moolenaar vim9script 1238fa29c8abSBram Moolenaar import name from Xexport.vim 1239fa29c8abSBram Moolenaar END 1240fa29c8abSBram Moolenaar writefile(import_invalid_string_lines, 'Ximport.vim') 1241fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1071:') 1242fa29c8abSBram Moolenaar 1243fa29c8abSBram Moolenaar let import_wrong_name_lines =<< trim END 1244fa29c8abSBram Moolenaar vim9script 1245fa29c8abSBram Moolenaar import name from './XnoExport.vim' 1246fa29c8abSBram Moolenaar END 1247fa29c8abSBram Moolenaar writefile(import_wrong_name_lines, 'Ximport.vim') 1248fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1053:') 1249fa29c8abSBram Moolenaar 1250fa29c8abSBram Moolenaar let import_missing_comma_lines =<< trim END 1251fa29c8abSBram Moolenaar vim9script 1252fa29c8abSBram Moolenaar import {exported name} from './Xexport.vim' 1253fa29c8abSBram Moolenaar END 12545269bd2aSBram Moolenaar writefile(import_missing_comma_lines, 'Ximport3.vim') 12555269bd2aSBram Moolenaar assert_fails('source Ximport3.vim', 'E1046:') 1256fa29c8abSBram Moolenaar 1257f2d5c240SBram Moolenaar delete('Ximport.vim') 12585269bd2aSBram Moolenaar delete('Ximport3.vim') 12598a7d6542SBram Moolenaar delete('Xexport.vim') 12608a7d6542SBram Moolenaar 1261f5be8cdbSBram Moolenaar # Check that in a Vim9 script 'cpo' is set to the Vim default. 1262750802b5SBram Moolenaar set cpo&vi 1263750802b5SBram Moolenaar let cpo_before = &cpo 1264750802b5SBram Moolenaar let lines =<< trim END 1265750802b5SBram Moolenaar vim9script 1266750802b5SBram Moolenaar g:cpo_in_vim9script = &cpo 1267750802b5SBram Moolenaar END 1268750802b5SBram Moolenaar writefile(lines, 'Xvim9_script') 1269750802b5SBram Moolenaar source Xvim9_script 1270750802b5SBram Moolenaar assert_equal(cpo_before, &cpo) 1271750802b5SBram Moolenaar set cpo&vim 1272750802b5SBram Moolenaar assert_equal(&cpo, g:cpo_in_vim9script) 1273750802b5SBram Moolenaar delete('Xvim9_script') 1274750802b5SBram Moolenaarenddef 1275750802b5SBram Moolenaar 1276750802b5SBram Moolenaardef Test_vim9script_fails() 12778a7d6542SBram Moolenaar CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:') 12788a7d6542SBram Moolenaar CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:') 1279750802b5SBram Moolenaar CheckScriptFailure(['export let some = 123'], 'E1042:') 12809721fb4eSBram Moolenaar CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1048:') 12819b7bf9e9SBram Moolenaar CheckScriptFailure(['vim9script', 'export let g:some'], 'E1022:') 1282750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:') 1283750802b5SBram Moolenaar 1284c785b9a7SBram Moolenaar CheckScriptFailure(['vim9script', 'let str: string', 'str = 1234'], 'E1013:') 1285c785b9a7SBram Moolenaar CheckScriptFailure(['vim9script', 'const str = "asdf"', 'str = "xxx"'], 'E46:') 1286c785b9a7SBram Moolenaar 1287750802b5SBram Moolenaar assert_fails('vim9script', 'E1038') 1288a26b9700SBram Moolenaar assert_fails('export something', 'E1043') 12898a7d6542SBram Moolenaarenddef 12908a7d6542SBram Moolenaar 1291f7d267efSBram Moolenaarfunc Test_import_fails_without_script() 1292101f4810SBram Moolenaar CheckRunVimInTerminal 1293101f4810SBram Moolenaar 12949bb3eb3eSBram Moolenaar " call indirectly to avoid compilation error for missing functions 1295c620c055SBram Moolenaar call Run_Test_import_fails_on_command_line() 12969bb3eb3eSBram Moolenaarendfunc 12979bb3eb3eSBram Moolenaar 1298c620c055SBram Moolenaardef Run_Test_import_fails_on_command_line() 1299101f4810SBram Moolenaar let export =<< trim END 1300101f4810SBram Moolenaar vim9script 1301101f4810SBram Moolenaar export def Foo(): number 1302101f4810SBram Moolenaar return 0 1303101f4810SBram Moolenaar enddef 1304101f4810SBram Moolenaar END 13059bb3eb3eSBram Moolenaar writefile(export, 'Xexport.vim') 1306101f4810SBram Moolenaar 13079bb3eb3eSBram Moolenaar let buf = RunVimInTerminal('-c "import Foo from ''./Xexport.vim''"', #{ 13089bb3eb3eSBram Moolenaar rows: 6, wait_for_ruler: 0}) 13099bb3eb3eSBram Moolenaar WaitForAssert({-> assert_match('^E1094:', term_getline(buf, 5))}) 1310101f4810SBram Moolenaar 13119bb3eb3eSBram Moolenaar delete('Xexport.vim') 13129bb3eb3eSBram Moolenaar StopVimInTerminal(buf) 13139bb3eb3eSBram Moolenaarenddef 1314101f4810SBram Moolenaar 13154c17ad94SBram Moolenaardef Test_vim9script_reload_import() 13168a7d6542SBram Moolenaar let lines =<< trim END 13178a7d6542SBram Moolenaar vim9script 13188a7d6542SBram Moolenaar const var = '' 13198a7d6542SBram Moolenaar let valone = 1234 13208a7d6542SBram Moolenaar def MyFunc(arg: string) 13218a7d6542SBram Moolenaar valone = 5678 13228a7d6542SBram Moolenaar enddef 13238a7d6542SBram Moolenaar END 13248a7d6542SBram Moolenaar let morelines =<< trim END 13258a7d6542SBram Moolenaar let valtwo = 222 13268a7d6542SBram Moolenaar export def GetValtwo(): number 13278a7d6542SBram Moolenaar return valtwo 13288a7d6542SBram Moolenaar enddef 13298a7d6542SBram Moolenaar END 133003afdcf1SBram Moolenaar writefile(lines + morelines, 'Xreload.vim') 13318a7d6542SBram Moolenaar source Xreload.vim 13328a7d6542SBram Moolenaar source Xreload.vim 13338a7d6542SBram Moolenaar source Xreload.vim 13348a7d6542SBram Moolenaar 13358a7d6542SBram Moolenaar let testlines =<< trim END 13368a7d6542SBram Moolenaar vim9script 13378a7d6542SBram Moolenaar def TheFunc() 13388a7d6542SBram Moolenaar import GetValtwo from './Xreload.vim' 13398a7d6542SBram Moolenaar assert_equal(222, GetValtwo()) 13408a7d6542SBram Moolenaar enddef 13418a7d6542SBram Moolenaar TheFunc() 13428a7d6542SBram Moolenaar END 13438a7d6542SBram Moolenaar writefile(testlines, 'Ximport.vim') 13448a7d6542SBram Moolenaar source Ximport.vim 13458a7d6542SBram Moolenaar 1346f5be8cdbSBram Moolenaar # Test that when not using "morelines" GetValtwo() and valtwo are still 1347f5be8cdbSBram Moolenaar # defined, because import doesn't reload a script. 13488a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 13498a7d6542SBram Moolenaar source Ximport.vim 13508a7d6542SBram Moolenaar 1351f5be8cdbSBram Moolenaar # cannot declare a var twice 13528a7d6542SBram Moolenaar lines =<< trim END 13538a7d6542SBram Moolenaar vim9script 13548a7d6542SBram Moolenaar let valone = 1234 13558a7d6542SBram Moolenaar let valone = 5678 13568a7d6542SBram Moolenaar END 13578a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 13588a7d6542SBram Moolenaar assert_fails('source Xreload.vim', 'E1041:') 13598a7d6542SBram Moolenaar 13608a7d6542SBram Moolenaar delete('Xreload.vim') 13618a7d6542SBram Moolenaar delete('Ximport.vim') 13628a7d6542SBram Moolenaarenddef 13638a7d6542SBram Moolenaar 1364fe465a01SBram Moolenaar" Not exported function that is referenced needs to be accessed by the 1365fe465a01SBram Moolenaar" script-local name. 1366fe465a01SBram Moolenaardef Test_vim9script_funcref() 1367fe465a01SBram Moolenaar let sortlines =<< trim END 1368fe465a01SBram Moolenaar vim9script 1369fe465a01SBram Moolenaar def Compare(i1: number, i2: number): number 1370bed36b93SBram Moolenaar return i2 - i1 1371fe465a01SBram Moolenaar enddef 1372fe465a01SBram Moolenaar 1373fe465a01SBram Moolenaar export def FastSort(): list<number> 1374fe465a01SBram Moolenaar return range(5)->sort(Compare) 1375fe465a01SBram Moolenaar enddef 1376fe465a01SBram Moolenaar END 1377fe465a01SBram Moolenaar writefile(sortlines, 'Xsort.vim') 1378fe465a01SBram Moolenaar 1379fe465a01SBram Moolenaar let lines =<< trim END 1380fe465a01SBram Moolenaar vim9script 1381fe465a01SBram Moolenaar import FastSort from './Xsort.vim' 1382fe465a01SBram Moolenaar def Test() 1383fe465a01SBram Moolenaar g:result = FastSort() 1384fe465a01SBram Moolenaar enddef 1385fe465a01SBram Moolenaar Test() 1386fe465a01SBram Moolenaar END 1387fe465a01SBram Moolenaar writefile(lines, 'Xscript.vim') 1388fe465a01SBram Moolenaar 1389fe465a01SBram Moolenaar source Xscript.vim 1390fe465a01SBram Moolenaar assert_equal([4, 3, 2, 1, 0], g:result) 1391fe465a01SBram Moolenaar 1392fe465a01SBram Moolenaar unlet g:result 1393fe465a01SBram Moolenaar delete('Xsort.vim') 1394fe465a01SBram Moolenaar delete('Xscript.vim') 1395fe465a01SBram Moolenaarenddef 1396fe465a01SBram Moolenaar 1397c620c055SBram Moolenaar" Check that when searcing for "FilterFunc" it doesn't find the import in the 1398c620c055SBram Moolenaar" script where FastFilter() is called from. 1399c620c055SBram Moolenaardef Test_vim9script_funcref_other_script() 1400c620c055SBram Moolenaar let filterLines =<< trim END 1401c620c055SBram Moolenaar vim9script 1402c620c055SBram Moolenaar export def FilterFunc(idx: number, val: number): bool 1403c620c055SBram Moolenaar return idx % 2 == 1 1404c620c055SBram Moolenaar enddef 1405c620c055SBram Moolenaar export def FastFilter(): list<number> 1406c620c055SBram Moolenaar return range(10)->filter('FilterFunc') 1407c620c055SBram Moolenaar enddef 1408c620c055SBram Moolenaar END 1409c620c055SBram Moolenaar writefile(filterLines, 'Xfilter.vim') 1410c620c055SBram Moolenaar 1411c620c055SBram Moolenaar let lines =<< trim END 1412c620c055SBram Moolenaar vim9script 1413c620c055SBram Moolenaar import {FilterFunc, FastFilter} from './Xfilter.vim' 1414c620c055SBram Moolenaar def Test() 1415c620c055SBram Moolenaar let x: list<number> = FastFilter() 1416c620c055SBram Moolenaar enddef 1417c620c055SBram Moolenaar Test() 1418c620c055SBram Moolenaar END 1419c620c055SBram Moolenaar writefile(lines, 'Ximport.vim') 1420c620c055SBram Moolenaar assert_fails('source Ximport.vim', 'E121:') 1421c620c055SBram Moolenaar 1422c620c055SBram Moolenaar delete('Xfilter.vim') 1423c620c055SBram Moolenaar delete('Ximport.vim') 1424c620c055SBram Moolenaarenddef 1425c620c055SBram Moolenaar 14264c17ad94SBram Moolenaardef Test_vim9script_reload_delfunc() 14274c17ad94SBram Moolenaar let first_lines =<< trim END 14284c17ad94SBram Moolenaar vim9script 14294c17ad94SBram Moolenaar def FuncYes(): string 14304c17ad94SBram Moolenaar return 'yes' 14314c17ad94SBram Moolenaar enddef 14324c17ad94SBram Moolenaar END 143303afdcf1SBram Moolenaar let withno_lines =<< trim END 14344c17ad94SBram Moolenaar def FuncNo(): string 14354c17ad94SBram Moolenaar return 'no' 14364c17ad94SBram Moolenaar enddef 14374c17ad94SBram Moolenaar def g:DoCheck(no_exists: bool) 14384c17ad94SBram Moolenaar assert_equal('yes', FuncYes()) 14394c17ad94SBram Moolenaar assert_equal('no', FuncNo()) 144003afdcf1SBram Moolenaar enddef 144103afdcf1SBram Moolenaar END 144203afdcf1SBram Moolenaar let nono_lines =<< trim END 144303afdcf1SBram Moolenaar def g:DoCheck(no_exists: bool) 144403afdcf1SBram Moolenaar assert_equal('yes', FuncYes()) 14454c17ad94SBram Moolenaar assert_fails('call FuncNo()', 'E117:') 14464c17ad94SBram Moolenaar enddef 14474c17ad94SBram Moolenaar END 14484c17ad94SBram Moolenaar 14494c17ad94SBram Moolenaar # FuncNo() is defined 145003afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 14514c17ad94SBram Moolenaar source Xreloaded.vim 14524c17ad94SBram Moolenaar g:DoCheck(true) 14534c17ad94SBram Moolenaar 14544c17ad94SBram Moolenaar # FuncNo() is not redefined 145503afdcf1SBram Moolenaar writefile(first_lines + nono_lines, 'Xreloaded.vim') 14564c17ad94SBram Moolenaar source Xreloaded.vim 145703afdcf1SBram Moolenaar g:DoCheck() 14584c17ad94SBram Moolenaar 14594c17ad94SBram Moolenaar # FuncNo() is back 146003afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 14614c17ad94SBram Moolenaar source Xreloaded.vim 146203afdcf1SBram Moolenaar g:DoCheck() 14634c17ad94SBram Moolenaar 14644c17ad94SBram Moolenaar delete('Xreloaded.vim') 14654c17ad94SBram Moolenaarenddef 14664c17ad94SBram Moolenaar 146789483d40SBram Moolenaardef Test_vim9script_reload_delvar() 146889483d40SBram Moolenaar # write the script with a script-local variable 146989483d40SBram Moolenaar let lines =<< trim END 147089483d40SBram Moolenaar vim9script 147189483d40SBram Moolenaar let var = 'string' 147289483d40SBram Moolenaar END 147389483d40SBram Moolenaar writefile(lines, 'XreloadVar.vim') 147489483d40SBram Moolenaar source XreloadVar.vim 147589483d40SBram Moolenaar 147689483d40SBram Moolenaar # now write the script using the same variable locally - works 147789483d40SBram Moolenaar lines =<< trim END 147889483d40SBram Moolenaar vim9script 147989483d40SBram Moolenaar def Func() 148089483d40SBram Moolenaar let var = 'string' 148189483d40SBram Moolenaar enddef 148289483d40SBram Moolenaar END 148389483d40SBram Moolenaar writefile(lines, 'XreloadVar.vim') 148489483d40SBram Moolenaar source XreloadVar.vim 148589483d40SBram Moolenaar 148689483d40SBram Moolenaar delete('XreloadVar.vim') 148789483d40SBram Moolenaarenddef 148889483d40SBram Moolenaar 14898a7d6542SBram Moolenaardef Test_import_absolute() 14908a7d6542SBram Moolenaar let import_lines = [ 1491e6085c53SBram Moolenaar 'vim9script', 1492e6085c53SBram Moolenaar 'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"', 1493e6085c53SBram Moolenaar 'def UseExported()', 1494e6085c53SBram Moolenaar ' g:imported_abs = exported', 1495e6085c53SBram Moolenaar ' exported = 8888', 1496e6085c53SBram Moolenaar ' g:imported_after = exported', 1497e6085c53SBram Moolenaar 'enddef', 1498e6085c53SBram Moolenaar 'UseExported()', 1499e6085c53SBram Moolenaar 'g:import_disassembled = execute("disass UseExported")', 1500e6085c53SBram Moolenaar ] 15018a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_abs.vim') 15028a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport_abs.vim') 15038a7d6542SBram Moolenaar 15048a7d6542SBram Moolenaar source Ximport_abs.vim 15058a7d6542SBram Moolenaar 15068a7d6542SBram Moolenaar assert_equal(9876, g:imported_abs) 15074e12a5dfSBram Moolenaar assert_equal(8888, g:imported_after) 1508675f716eSBram Moolenaar assert_match('<SNR>\d\+_UseExported.*' .. 1509675f716eSBram Moolenaar 'g:imported_abs = exported.*' .. 1510675f716eSBram Moolenaar '0 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 1511675f716eSBram Moolenaar '1 STOREG g:imported_abs.*' .. 1512675f716eSBram Moolenaar 'exported = 8888.*' .. 1513675f716eSBram Moolenaar '3 STORESCRIPT exported in .*Xexport_abs.vim.*' .. 1514675f716eSBram Moolenaar 'g:imported_after = exported.*' .. 1515675f716eSBram Moolenaar '4 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 1516675f716eSBram Moolenaar '5 STOREG g:imported_after.*', 1517e6085c53SBram Moolenaar g:import_disassembled) 15188a7d6542SBram Moolenaar unlet g:imported_abs 15194e12a5dfSBram Moolenaar unlet g:import_disassembled 15208a7d6542SBram Moolenaar 15218a7d6542SBram Moolenaar delete('Ximport_abs.vim') 15228a7d6542SBram Moolenaar delete('Xexport_abs.vim') 15238a7d6542SBram Moolenaarenddef 15248a7d6542SBram Moolenaar 15258a7d6542SBram Moolenaardef Test_import_rtp() 15268a7d6542SBram Moolenaar let import_lines = [ 1527e6085c53SBram Moolenaar 'vim9script', 1528e6085c53SBram Moolenaar 'import exported from "Xexport_rtp.vim"', 1529e6085c53SBram Moolenaar 'g:imported_rtp = exported', 1530e6085c53SBram Moolenaar ] 15318a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_rtp.vim') 15328a7d6542SBram Moolenaar mkdir('import') 15338a7d6542SBram Moolenaar writefile(s:export_script_lines, 'import/Xexport_rtp.vim') 15348a7d6542SBram Moolenaar 15358a7d6542SBram Moolenaar let save_rtp = &rtp 15368a7d6542SBram Moolenaar &rtp = getcwd() 15378a7d6542SBram Moolenaar source Ximport_rtp.vim 15388a7d6542SBram Moolenaar &rtp = save_rtp 15398a7d6542SBram Moolenaar 15408a7d6542SBram Moolenaar assert_equal(9876, g:imported_rtp) 15418a7d6542SBram Moolenaar unlet g:imported_rtp 15428a7d6542SBram Moolenaar 15438a7d6542SBram Moolenaar delete('Ximport_rtp.vim') 154489483d40SBram Moolenaar delete('import', 'rf') 15458a7d6542SBram Moolenaarenddef 15468a7d6542SBram Moolenaar 154725e0f586SBram Moolenaardef Test_import_compile_error() 154825e0f586SBram Moolenaar let export_lines = [ 154925e0f586SBram Moolenaar 'vim9script', 155025e0f586SBram Moolenaar 'export def ExpFunc(): string', 155125e0f586SBram Moolenaar ' return notDefined', 155225e0f586SBram Moolenaar 'enddef', 155325e0f586SBram Moolenaar ] 155425e0f586SBram Moolenaar writefile(export_lines, 'Xexported.vim') 155525e0f586SBram Moolenaar 155625e0f586SBram Moolenaar let import_lines = [ 155725e0f586SBram Moolenaar 'vim9script', 155825e0f586SBram Moolenaar 'import ExpFunc from "./Xexported.vim"', 155925e0f586SBram Moolenaar 'def ImpFunc()', 156025e0f586SBram Moolenaar ' echo ExpFunc()', 156125e0f586SBram Moolenaar 'enddef', 156225e0f586SBram Moolenaar 'defcompile', 156325e0f586SBram Moolenaar ] 156425e0f586SBram Moolenaar writefile(import_lines, 'Ximport.vim') 156525e0f586SBram Moolenaar 156625e0f586SBram Moolenaar try 156725e0f586SBram Moolenaar source Ximport.vim 156825e0f586SBram Moolenaar catch /E1001/ 1569f5be8cdbSBram Moolenaar # Error should be fore the Xexported.vim file. 157025e0f586SBram Moolenaar assert_match('E1001: variable not found: notDefined', v:exception) 157125e0f586SBram Moolenaar assert_match('function <SNR>\d\+_ImpFunc\[1\]..<SNR>\d\+_ExpFunc, line 1', v:throwpoint) 157225e0f586SBram Moolenaar endtry 157325e0f586SBram Moolenaar 157425e0f586SBram Moolenaar delete('Xexported.vim') 157525e0f586SBram Moolenaar delete('Ximport.vim') 157625e0f586SBram Moolenaarenddef 157725e0f586SBram Moolenaar 15788a7d6542SBram Moolenaardef Test_fixed_size_list() 1579f5be8cdbSBram Moolenaar # will be allocated as one piece of memory, check that changes work 15808a7d6542SBram Moolenaar let l = [1, 2, 3, 4] 15818a7d6542SBram Moolenaar l->remove(0) 15828a7d6542SBram Moolenaar l->add(5) 15838a7d6542SBram Moolenaar l->insert(99, 1) 15840f18b6d1SBram Moolenaar assert_equal([2, 99, 3, 4, 5], l) 15858a7d6542SBram Moolenaarenddef 15868a7d6542SBram Moolenaar 1587ae616494SBram Moolenaardef Test_no_insert_xit() 1588ae616494SBram Moolenaar call CheckDefExecFailure(['x = 1'], 'E1100:') 1589ae616494SBram Moolenaar call CheckDefExecFailure(['a = 1'], 'E1100:') 1590ae616494SBram Moolenaar call CheckDefExecFailure(['i = 1'], 'E1100:') 1591ae616494SBram Moolenaar call CheckDefExecFailure(['c = 1'], 'E1100:') 1592ae616494SBram Moolenaar 1593ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'x = 1'], 'E1100:') 1594ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'a = 1'], 'E488:') 1595ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'a'], 'E1100:') 1596ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'i = 1'], 'E488:') 1597ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'i'], 'E1100:') 1598ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'c = 1'], 'E488:') 1599ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'c'], 'E1100:') 1600ae616494SBram Moolenaarenddef 1601ae616494SBram Moolenaar 1602158906cfSBram Moolenaardef IfElse(what: number): string 1603158906cfSBram Moolenaar let res = '' 1604158906cfSBram Moolenaar if what == 1 1605158906cfSBram Moolenaar res = "one" 1606158906cfSBram Moolenaar elseif what == 2 1607158906cfSBram Moolenaar res = "two" 1608a259d8d3SBram Moolenaar else 1609158906cfSBram Moolenaar res = "three" 1610a259d8d3SBram Moolenaar endif 1611158906cfSBram Moolenaar return res 1612a259d8d3SBram Moolenaarenddef 1613a259d8d3SBram Moolenaar 1614158906cfSBram Moolenaardef Test_if_elseif_else() 1615158906cfSBram Moolenaar assert_equal('one', IfElse(1)) 1616158906cfSBram Moolenaar assert_equal('two', IfElse(2)) 1617158906cfSBram Moolenaar assert_equal('three', IfElse(3)) 16180f18b6d1SBram Moolenaarenddef 16190f18b6d1SBram Moolenaar 1620e8c4abbbSBram Moolenaardef Test_if_elseif_else_fails() 1621e8c4abbbSBram Moolenaar call CheckDefFailure(['elseif true'], 'E582:') 1622e8c4abbbSBram Moolenaar call CheckDefFailure(['else'], 'E581:') 1623e8c4abbbSBram Moolenaar call CheckDefFailure(['endif'], 'E580:') 1624e8c4abbbSBram Moolenaar call CheckDefFailure(['if true', 'elseif xxx'], 'E1001:') 1625585fea7bSBram Moolenaar call CheckDefFailure(['if true', 'echo 1'], 'E171:') 1626e8c4abbbSBram Moolenaarenddef 1627e8c4abbbSBram Moolenaar 16286d69bf60SBram Moolenaarlet g:bool_true = v:true 16296d69bf60SBram Moolenaarlet g:bool_false = v:false 16306d69bf60SBram Moolenaar 16316d69bf60SBram Moolenaardef Test_if_const_expr() 16326d69bf60SBram Moolenaar let res = false 16336d69bf60SBram Moolenaar if true ? true : false 16346d69bf60SBram Moolenaar res = true 16356d69bf60SBram Moolenaar endif 16366d69bf60SBram Moolenaar assert_equal(true, res) 16376d69bf60SBram Moolenaar 1638585fea7bSBram Moolenaar g:glob = 2 1639585fea7bSBram Moolenaar if false 16406797966dSBram Moolenaar execute('g:glob = 3') 1641585fea7bSBram Moolenaar endif 1642585fea7bSBram Moolenaar assert_equal(2, g:glob) 1643585fea7bSBram Moolenaar if true 16446797966dSBram Moolenaar execute('g:glob = 3') 1645585fea7bSBram Moolenaar endif 1646585fea7bSBram Moolenaar assert_equal(3, g:glob) 1647585fea7bSBram Moolenaar 16486d69bf60SBram Moolenaar res = false 16496d69bf60SBram Moolenaar if g:bool_true ? true : false 16506d69bf60SBram Moolenaar res = true 16516d69bf60SBram Moolenaar endif 16526d69bf60SBram Moolenaar assert_equal(true, res) 16536d69bf60SBram Moolenaar 16546d69bf60SBram Moolenaar res = false 16556d69bf60SBram Moolenaar if true ? g:bool_true : false 16566d69bf60SBram Moolenaar res = true 16576d69bf60SBram Moolenaar endif 16586d69bf60SBram Moolenaar assert_equal(true, res) 16596d69bf60SBram Moolenaar 16606d69bf60SBram Moolenaar res = false 16616d69bf60SBram Moolenaar if true ? true : g:bool_false 16626d69bf60SBram Moolenaar res = true 16636d69bf60SBram Moolenaar endif 16646d69bf60SBram Moolenaar assert_equal(true, res) 16656d69bf60SBram Moolenaar 16666d69bf60SBram Moolenaar res = false 16676d69bf60SBram Moolenaar if true ? false : true 16686d69bf60SBram Moolenaar res = true 16696d69bf60SBram Moolenaar endif 16706d69bf60SBram Moolenaar assert_equal(false, res) 16716d69bf60SBram Moolenaar 16726d69bf60SBram Moolenaar res = false 16736d69bf60SBram Moolenaar if false ? false : true 16746d69bf60SBram Moolenaar res = true 16756d69bf60SBram Moolenaar endif 16766d69bf60SBram Moolenaar assert_equal(true, res) 16776d69bf60SBram Moolenaar 16786d69bf60SBram Moolenaar res = false 16796d69bf60SBram Moolenaar if false ? true : false 16806d69bf60SBram Moolenaar res = true 16816d69bf60SBram Moolenaar endif 16826d69bf60SBram Moolenaar assert_equal(false, res) 16836d69bf60SBram Moolenaar 16846d69bf60SBram Moolenaar res = false 1685e8c4abbbSBram Moolenaar if has('xyz') ? true : false 1686e8c4abbbSBram Moolenaar res = true 1687e8c4abbbSBram Moolenaar endif 1688e8c4abbbSBram Moolenaar assert_equal(false, res) 1689e8c4abbbSBram Moolenaar 1690e8c4abbbSBram Moolenaar res = false 16916d69bf60SBram Moolenaar if true && true 16926d69bf60SBram Moolenaar res = true 16936d69bf60SBram Moolenaar endif 16946d69bf60SBram Moolenaar assert_equal(true, res) 16956d69bf60SBram Moolenaar 16966d69bf60SBram Moolenaar res = false 16976d69bf60SBram Moolenaar if true && false 16986d69bf60SBram Moolenaar res = true 16996d69bf60SBram Moolenaar endif 17006d69bf60SBram Moolenaar assert_equal(false, res) 17016d69bf60SBram Moolenaar 17026d69bf60SBram Moolenaar res = false 17036d69bf60SBram Moolenaar if g:bool_true && false 17046d69bf60SBram Moolenaar res = true 17056d69bf60SBram Moolenaar endif 17066d69bf60SBram Moolenaar assert_equal(false, res) 17076d69bf60SBram Moolenaar 17086d69bf60SBram Moolenaar res = false 17096d69bf60SBram Moolenaar if true && g:bool_false 17106d69bf60SBram Moolenaar res = true 17116d69bf60SBram Moolenaar endif 17126d69bf60SBram Moolenaar assert_equal(false, res) 17136d69bf60SBram Moolenaar 17146d69bf60SBram Moolenaar res = false 17156d69bf60SBram Moolenaar if false && false 17166d69bf60SBram Moolenaar res = true 17176d69bf60SBram Moolenaar endif 17186d69bf60SBram Moolenaar assert_equal(false, res) 17196d69bf60SBram Moolenaar 17206d69bf60SBram Moolenaar res = false 17216d69bf60SBram Moolenaar if true || false 17226d69bf60SBram Moolenaar res = true 17236d69bf60SBram Moolenaar endif 17246d69bf60SBram Moolenaar assert_equal(true, res) 17256d69bf60SBram Moolenaar 17266d69bf60SBram Moolenaar res = false 17276d69bf60SBram Moolenaar if g:bool_true || false 17286d69bf60SBram Moolenaar res = true 17296d69bf60SBram Moolenaar endif 17306d69bf60SBram Moolenaar assert_equal(true, res) 17316d69bf60SBram Moolenaar 17326d69bf60SBram Moolenaar res = false 17336d69bf60SBram Moolenaar if true || g:bool_false 17346d69bf60SBram Moolenaar res = true 17356d69bf60SBram Moolenaar endif 17366d69bf60SBram Moolenaar assert_equal(true, res) 17376d69bf60SBram Moolenaar 17386d69bf60SBram Moolenaar res = false 17396d69bf60SBram Moolenaar if false || false 17406d69bf60SBram Moolenaar res = true 17416d69bf60SBram Moolenaar endif 17426d69bf60SBram Moolenaar assert_equal(false, res) 174380c34ca3SBram Moolenaarenddef 17446d69bf60SBram Moolenaar 174580c34ca3SBram Moolenaardef Test_if_const_expr_fails() 174680c34ca3SBram Moolenaar call CheckDefFailure(['if "aaa" == "bbb'], 'E114:') 174780c34ca3SBram Moolenaar call CheckDefFailure(["if 'aaa' == 'bbb"], 'E115:') 1748e8c4abbbSBram Moolenaar call CheckDefFailure(["if has('aaa'"], 'E110:') 1749e8c4abbbSBram Moolenaar call CheckDefFailure(["if has('aaa') ? true false"], 'E109:') 17506d69bf60SBram Moolenaarenddef 17516d69bf60SBram Moolenaar 175272abcf42SBram Moolenaardef RunNested(i: number): number 175372abcf42SBram Moolenaar let x: number = 0 175472abcf42SBram Moolenaar if i % 2 175572abcf42SBram Moolenaar if 1 1756f5be8cdbSBram Moolenaar # comment 175772abcf42SBram Moolenaar else 1758f5be8cdbSBram Moolenaar # comment 175972abcf42SBram Moolenaar endif 176072abcf42SBram Moolenaar x += 1 176172abcf42SBram Moolenaar else 176272abcf42SBram Moolenaar x += 1000 176372abcf42SBram Moolenaar endif 176472abcf42SBram Moolenaar return x 176572abcf42SBram Moolenaarenddef 176672abcf42SBram Moolenaar 176772abcf42SBram Moolenaardef Test_nested_if() 176872abcf42SBram Moolenaar assert_equal(1, RunNested(1)) 176972abcf42SBram Moolenaar assert_equal(1000, RunNested(2)) 177072abcf42SBram Moolenaarenddef 177172abcf42SBram Moolenaar 1772ad39c094SBram Moolenaardef Test_execute_cmd() 1773ad39c094SBram Moolenaar new 1774ad39c094SBram Moolenaar setline(1, 'default') 1775ad39c094SBram Moolenaar execute 'call setline(1, "execute-string")' 1776ad39c094SBram Moolenaar assert_equal('execute-string', getline(1)) 1777a72cfb80SBram Moolenaar 1778a72cfb80SBram Moolenaar execute "call setline(1, 'execute-string')" 1779a72cfb80SBram Moolenaar assert_equal('execute-string', getline(1)) 1780a72cfb80SBram Moolenaar 1781ad39c094SBram Moolenaar let cmd1 = 'call setline(1,' 1782ad39c094SBram Moolenaar let cmd2 = '"execute-var")' 1783a72cfb80SBram Moolenaar execute cmd1 cmd2 # comment 1784ad39c094SBram Moolenaar assert_equal('execute-var', getline(1)) 1785a72cfb80SBram Moolenaar 1786ad39c094SBram Moolenaar execute cmd1 cmd2 '|call setline(1, "execute-var-string")' 1787ad39c094SBram Moolenaar assert_equal('execute-var-string', getline(1)) 1788a72cfb80SBram Moolenaar 1789ad39c094SBram Moolenaar let cmd_first = 'call ' 1790ad39c094SBram Moolenaar let cmd_last = 'setline(1, "execute-var-var")' 1791ad39c094SBram Moolenaar execute cmd_first .. cmd_last 1792ad39c094SBram Moolenaar assert_equal('execute-var-var', getline(1)) 1793ad39c094SBram Moolenaar bwipe! 1794585fea7bSBram Moolenaar 17952d6b20d6SBram Moolenaar let n = true 17962d6b20d6SBram Moolenaar execute 'echomsg' (n ? '"true"' : '"no"') 17972d6b20d6SBram Moolenaar assert_match('^true$', Screenline(&lines)) 17982d6b20d6SBram Moolenaar 1799585fea7bSBram Moolenaar call CheckDefFailure(['execute xxx'], 'E1001:') 1800a72cfb80SBram Moolenaar call CheckDefFailure(['execute "cmd"# comment'], 'E488:') 1801ad39c094SBram Moolenaarenddef 1802ad39c094SBram Moolenaar 180347e880d6SBram Moolenaardef Test_execute_cmd_vimscript() 1804f5be8cdbSBram Moolenaar # only checks line continuation 180547e880d6SBram Moolenaar let lines =<< trim END 180647e880d6SBram Moolenaar vim9script 180747e880d6SBram Moolenaar execute 'g:someVar' 180847e880d6SBram Moolenaar .. ' = ' .. 180947e880d6SBram Moolenaar '28' 181047e880d6SBram Moolenaar assert_equal(28, g:someVar) 181147e880d6SBram Moolenaar unlet g:someVar 181247e880d6SBram Moolenaar END 181347e880d6SBram Moolenaar CheckScriptSuccess(lines) 181447e880d6SBram Moolenaarenddef 181547e880d6SBram Moolenaar 1816ad39c094SBram Moolenaardef Test_echo_cmd() 1817a72cfb80SBram Moolenaar echo 'some' # comment 1818585fea7bSBram Moolenaar echon 'thing' 1819ad39c094SBram Moolenaar assert_match('^something$', Screenline(&lines)) 1820ad39c094SBram Moolenaar 1821a72cfb80SBram Moolenaar echo "some" # comment 1822a72cfb80SBram Moolenaar echon "thing" 1823a72cfb80SBram Moolenaar assert_match('^something$', Screenline(&lines)) 1824a72cfb80SBram Moolenaar 1825ad39c094SBram Moolenaar let str1 = 'some' 1826ad39c094SBram Moolenaar let str2 = 'more' 1827ad39c094SBram Moolenaar echo str1 str2 1828ad39c094SBram Moolenaar assert_match('^some more$', Screenline(&lines)) 1829a72cfb80SBram Moolenaar 1830a72cfb80SBram Moolenaar call CheckDefFailure(['echo "xxx"# comment'], 'E488:') 1831ad39c094SBram Moolenaarenddef 1832ad39c094SBram Moolenaar 1833f93c7feaSBram Moolenaardef Test_echomsg_cmd() 1834f93c7feaSBram Moolenaar echomsg 'some' 'more' # comment 1835f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 1836f93c7feaSBram Moolenaar echo 'clear' 1837df069eecSBram Moolenaar :1messages 1838f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 1839f93c7feaSBram Moolenaar 1840f93c7feaSBram Moolenaar call CheckDefFailure(['echomsg "xxx"# comment'], 'E488:') 1841f93c7feaSBram Moolenaarenddef 1842f93c7feaSBram Moolenaar 184347e880d6SBram Moolenaardef Test_echomsg_cmd_vimscript() 1844f5be8cdbSBram Moolenaar # only checks line continuation 184547e880d6SBram Moolenaar let lines =<< trim END 184647e880d6SBram Moolenaar vim9script 184747e880d6SBram Moolenaar echomsg 'here' 184847e880d6SBram Moolenaar .. ' is ' .. 184947e880d6SBram Moolenaar 'a message' 185047e880d6SBram Moolenaar assert_match('^here is a message$', Screenline(&lines)) 185147e880d6SBram Moolenaar END 185247e880d6SBram Moolenaar CheckScriptSuccess(lines) 185347e880d6SBram Moolenaarenddef 185447e880d6SBram Moolenaar 1855f93c7feaSBram Moolenaardef Test_echoerr_cmd() 185640ee466cSBram Moolenaar try 185740ee466cSBram Moolenaar echoerr 'something' 'wrong' # comment 185840ee466cSBram Moolenaar catch 185940ee466cSBram Moolenaar assert_match('something wrong', v:exception) 186040ee466cSBram Moolenaar endtry 1861f93c7feaSBram Moolenaarenddef 1862f93c7feaSBram Moolenaar 186347e880d6SBram Moolenaardef Test_echoerr_cmd_vimscript() 1864f5be8cdbSBram Moolenaar # only checks line continuation 186547e880d6SBram Moolenaar let lines =<< trim END 186647e880d6SBram Moolenaar vim9script 186747e880d6SBram Moolenaar try 186847e880d6SBram Moolenaar echoerr 'this' 186947e880d6SBram Moolenaar .. ' is ' .. 187047e880d6SBram Moolenaar 'wrong' 187147e880d6SBram Moolenaar catch 187247e880d6SBram Moolenaar assert_match('this is wrong', v:exception) 187347e880d6SBram Moolenaar endtry 187447e880d6SBram Moolenaar END 187547e880d6SBram Moolenaar CheckScriptSuccess(lines) 187647e880d6SBram Moolenaarenddef 187747e880d6SBram Moolenaar 187841fe0617SBram Moolenaardef Test_for_outside_of_function() 187941fe0617SBram Moolenaar let lines =<< trim END 188041fe0617SBram Moolenaar vim9script 188141fe0617SBram Moolenaar new 188241fe0617SBram Moolenaar for var in range(0, 3) 188341fe0617SBram Moolenaar append(line('$'), var) 188441fe0617SBram Moolenaar endfor 188541fe0617SBram Moolenaar assert_equal(['', '0', '1', '2', '3'], getline(1, '$')) 188641fe0617SBram Moolenaar bwipe! 188741fe0617SBram Moolenaar END 188841fe0617SBram Moolenaar writefile(lines, 'Xvim9for.vim') 188941fe0617SBram Moolenaar source Xvim9for.vim 189041fe0617SBram Moolenaar delete('Xvim9for.vim') 189141fe0617SBram Moolenaarenddef 18928a7d6542SBram Moolenaar 1893e8c4abbbSBram Moolenaardef Test_for_loop() 1894e8c4abbbSBram Moolenaar let result = '' 1895e8c4abbbSBram Moolenaar for cnt in range(7) 1896e8c4abbbSBram Moolenaar if cnt == 4 1897e8c4abbbSBram Moolenaar break 1898e8c4abbbSBram Moolenaar endif 1899e8c4abbbSBram Moolenaar if cnt == 2 1900e8c4abbbSBram Moolenaar continue 1901e8c4abbbSBram Moolenaar endif 1902e8c4abbbSBram Moolenaar result ..= cnt .. '_' 1903e8c4abbbSBram Moolenaar endfor 1904e8c4abbbSBram Moolenaar assert_equal('0_1_3_', result) 19050ad3e894SBram Moolenaar 19060ad3e894SBram Moolenaar let concat = '' 19070ad3e894SBram Moolenaar for str in eval('["one", "two"]') 19080ad3e894SBram Moolenaar concat ..= str 19090ad3e894SBram Moolenaar endfor 19100ad3e894SBram Moolenaar assert_equal('onetwo', concat) 1911e8c4abbbSBram Moolenaarenddef 1912e8c4abbbSBram Moolenaar 1913e8c4abbbSBram Moolenaardef Test_for_loop_fails() 1914675f716eSBram Moolenaar CheckDefFailure(['for # in range(5)'], 'E690:') 1915675f716eSBram Moolenaar CheckDefFailure(['for i In range(5)'], 'E690:') 1916675f716eSBram Moolenaar CheckDefFailure(['let x = 5', 'for x in range(5)'], 'E1023:') 1917822ba247SBram Moolenaar CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef', 'defcompile'], 'E1006:') 19180ad3e894SBram Moolenaar CheckDefFailure(['for i in "text"'], 'E1013:') 1919675f716eSBram Moolenaar CheckDefFailure(['for i in xxx'], 'E1001:') 1920675f716eSBram Moolenaar CheckDefFailure(['endfor'], 'E588:') 1921675f716eSBram Moolenaar CheckDefFailure(['for i in range(3)', 'echo 3'], 'E170:') 1922e8c4abbbSBram Moolenaarenddef 1923e8c4abbbSBram Moolenaar 1924d0df1aacSBram Moolenaardef Test_while_loop() 1925d0df1aacSBram Moolenaar let result = '' 1926d0df1aacSBram Moolenaar let cnt = 0 1927d0df1aacSBram Moolenaar while cnt < 555 1928d0df1aacSBram Moolenaar if cnt == 3 1929d0df1aacSBram Moolenaar break 1930d0df1aacSBram Moolenaar endif 1931d0df1aacSBram Moolenaar cnt += 1 1932d0df1aacSBram Moolenaar if cnt == 2 1933d0df1aacSBram Moolenaar continue 1934d0df1aacSBram Moolenaar endif 1935d0df1aacSBram Moolenaar result ..= cnt .. '_' 1936d0df1aacSBram Moolenaar endwhile 1937d0df1aacSBram Moolenaar assert_equal('1_3_', result) 1938d0df1aacSBram Moolenaarenddef 1939d0df1aacSBram Moolenaar 1940e8c4abbbSBram Moolenaardef Test_while_loop_fails() 1941675f716eSBram Moolenaar CheckDefFailure(['while xxx'], 'E1001:') 1942675f716eSBram Moolenaar CheckDefFailure(['endwhile'], 'E588:') 1943675f716eSBram Moolenaar CheckDefFailure(['continue'], 'E586:') 1944675f716eSBram Moolenaar CheckDefFailure(['if true', 'continue'], 'E586:') 1945675f716eSBram Moolenaar CheckDefFailure(['break'], 'E587:') 1946675f716eSBram Moolenaar CheckDefFailure(['if true', 'break'], 'E587:') 1947675f716eSBram Moolenaar CheckDefFailure(['while 1', 'echo 3'], 'E170:') 1948bd5da371SBram Moolenaarenddef 1949bd5da371SBram Moolenaar 19509645e2d9SBram Moolenaardef Test_interrupt_loop() 195197acfc78SBram Moolenaar let caught = false 19529645e2d9SBram Moolenaar let x = 0 195397acfc78SBram Moolenaar try 19549645e2d9SBram Moolenaar while 1 19559645e2d9SBram Moolenaar x += 1 19569645e2d9SBram Moolenaar if x == 100 19579645e2d9SBram Moolenaar feedkeys("\<C-C>", 'Lt') 19589645e2d9SBram Moolenaar endif 19599645e2d9SBram Moolenaar endwhile 196097acfc78SBram Moolenaar catch 196197acfc78SBram Moolenaar caught = true 196297acfc78SBram Moolenaar assert_equal(100, x) 196397acfc78SBram Moolenaar endtry 196497acfc78SBram Moolenaar assert_true(caught, 'should have caught an exception') 19659645e2d9SBram Moolenaarenddef 196620431c9dSBram Moolenaar 19674fdae999SBram Moolenaardef Test_automatic_line_continuation() 19684fdae999SBram Moolenaar let mylist = [ 19694fdae999SBram Moolenaar 'one', 19704fdae999SBram Moolenaar 'two', 19714fdae999SBram Moolenaar 'three', 1972f5be8cdbSBram Moolenaar ] # comment 19734fdae999SBram Moolenaar assert_equal(['one', 'two', 'three'], mylist) 19744fdae999SBram Moolenaar 19754fdae999SBram Moolenaar let mydict = { 19764fdae999SBram Moolenaar 'one': 1, 19774fdae999SBram Moolenaar 'two': 2, 19784fdae999SBram Moolenaar 'three': 19794fdae999SBram Moolenaar 3, 1980f5be8cdbSBram Moolenaar } # comment 19814fdae999SBram Moolenaar assert_equal({'one': 1, 'two': 2, 'three': 3}, mydict) 19824fdae999SBram Moolenaar mydict = #{ 19832c330432SBram Moolenaar one: 1, # comment 19842c330432SBram Moolenaar two: # comment 19852c330432SBram Moolenaar 2, # comment 19862c330432SBram Moolenaar three: 3 # comment 19872c330432SBram Moolenaar } 19882c330432SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 19892c330432SBram Moolenaar mydict = #{ 19902c330432SBram Moolenaar one: 1, 19914fdae999SBram Moolenaar two: 19924fdae999SBram Moolenaar 2, 19932c330432SBram Moolenaar three: 3 19944fdae999SBram Moolenaar } 19954fdae999SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 1996e6085c53SBram Moolenaar 1997e6085c53SBram Moolenaar assert_equal( 1998e6085c53SBram Moolenaar ['one', 'two', 'three'], 1999e6085c53SBram Moolenaar split('one two three') 2000e6085c53SBram Moolenaar ) 20014fdae999SBram Moolenaarenddef 20024fdae999SBram Moolenaar 20037a092245SBram Moolenaardef Test_vim9_comment() 20047a092245SBram Moolenaar CheckScriptSuccess([ 20057a092245SBram Moolenaar 'vim9script', 20067a092245SBram Moolenaar '# something', 20077a092245SBram Moolenaar ]) 20087a092245SBram Moolenaar CheckScriptFailure([ 20097a092245SBram Moolenaar 'vim9script', 20107a092245SBram Moolenaar ':# something', 20117a092245SBram Moolenaar ], 'E488:') 20127a092245SBram Moolenaar CheckScriptFailure([ 20137a092245SBram Moolenaar '# something', 20147a092245SBram Moolenaar ], 'E488:') 20157a092245SBram Moolenaar CheckScriptFailure([ 20167a092245SBram Moolenaar ':# something', 20177a092245SBram Moolenaar ], 'E488:') 20187a092245SBram Moolenaar 20194a8d9f2eSBram Moolenaar { # block start 20204a8d9f2eSBram Moolenaar } # block end 20214a8d9f2eSBram Moolenaar CheckDefFailure([ 20224a8d9f2eSBram Moolenaar '{# comment', 20234a8d9f2eSBram Moolenaar ], 'E488:') 20244a8d9f2eSBram Moolenaar CheckDefFailure([ 20254a8d9f2eSBram Moolenaar '{', 20264a8d9f2eSBram Moolenaar '}# comment', 20274a8d9f2eSBram Moolenaar ], 'E488:') 20284a8d9f2eSBram Moolenaar 20294a8d9f2eSBram Moolenaar echo "yes" # comment 20304a8d9f2eSBram Moolenaar CheckDefFailure([ 20314a8d9f2eSBram Moolenaar 'echo "yes"# comment', 20324a8d9f2eSBram Moolenaar ], 'E488:') 20337a092245SBram Moolenaar CheckScriptSuccess([ 20347a092245SBram Moolenaar 'vim9script', 20357a092245SBram Moolenaar 'echo "yes" # something', 20367a092245SBram Moolenaar ]) 20377a092245SBram Moolenaar CheckScriptFailure([ 20387a092245SBram Moolenaar 'vim9script', 20397a092245SBram Moolenaar 'echo "yes"# something', 20407a092245SBram Moolenaar ], 'E121:') 20417a092245SBram Moolenaar CheckScriptFailure([ 20427a092245SBram Moolenaar 'vim9script', 20437a092245SBram Moolenaar 'echo# something', 20447a092245SBram Moolenaar ], 'E121:') 20457a092245SBram Moolenaar CheckScriptFailure([ 20467a092245SBram Moolenaar 'echo "yes" # something', 20477a092245SBram Moolenaar ], 'E121:') 20487a092245SBram Moolenaar 20494a8d9f2eSBram Moolenaar exe "echo" # comment 20504a8d9f2eSBram Moolenaar CheckDefFailure([ 20514a8d9f2eSBram Moolenaar 'exe "echo"# comment', 20524a8d9f2eSBram Moolenaar ], 'E488:') 20534a8d9f2eSBram Moolenaar CheckScriptSuccess([ 20544a8d9f2eSBram Moolenaar 'vim9script', 20554a8d9f2eSBram Moolenaar 'exe "echo" # something', 20564a8d9f2eSBram Moolenaar ]) 20574a8d9f2eSBram Moolenaar CheckScriptFailure([ 20584a8d9f2eSBram Moolenaar 'vim9script', 20594a8d9f2eSBram Moolenaar 'exe "echo"# something', 20604a8d9f2eSBram Moolenaar ], 'E121:') 20614a8d9f2eSBram Moolenaar CheckDefFailure([ 20624a8d9f2eSBram Moolenaar 'exe # comment', 20634a8d9f2eSBram Moolenaar ], 'E1015:') 20644a8d9f2eSBram Moolenaar CheckScriptFailure([ 20654a8d9f2eSBram Moolenaar 'vim9script', 20664a8d9f2eSBram Moolenaar 'exe# something', 20674a8d9f2eSBram Moolenaar ], 'E121:') 20684a8d9f2eSBram Moolenaar CheckScriptFailure([ 20694a8d9f2eSBram Moolenaar 'exe "echo" # something', 20704a8d9f2eSBram Moolenaar ], 'E121:') 20714a8d9f2eSBram Moolenaar 20727a092245SBram Moolenaar CheckDefFailure([ 20737a092245SBram Moolenaar 'try# comment', 20747a092245SBram Moolenaar ' echo "yes"', 20757a092245SBram Moolenaar 'catch', 20767a092245SBram Moolenaar 'endtry', 20777a092245SBram Moolenaar ], 'E488:') 20782c5ed4e3SBram Moolenaar CheckScriptFailure([ 20792c5ed4e3SBram Moolenaar 'vim9script', 20802c5ed4e3SBram Moolenaar 'try# comment', 20812c5ed4e3SBram Moolenaar 'echo "yes"', 20822c5ed4e3SBram Moolenaar ], 'E488:') 20837a092245SBram Moolenaar CheckDefFailure([ 20847a092245SBram Moolenaar 'try', 2085a72cfb80SBram Moolenaar ' throw#comment', 2086a72cfb80SBram Moolenaar 'catch', 2087a72cfb80SBram Moolenaar 'endtry', 2088a72cfb80SBram Moolenaar ], 'E1015:') 2089a72cfb80SBram Moolenaar CheckDefFailure([ 2090a72cfb80SBram Moolenaar 'try', 2091a72cfb80SBram Moolenaar ' throw "yes"#comment', 2092a72cfb80SBram Moolenaar 'catch', 2093a72cfb80SBram Moolenaar 'endtry', 2094a72cfb80SBram Moolenaar ], 'E488:') 2095a72cfb80SBram Moolenaar CheckDefFailure([ 2096a72cfb80SBram Moolenaar 'try', 20977a092245SBram Moolenaar ' echo "yes"', 20987a092245SBram Moolenaar 'catch# comment', 20997a092245SBram Moolenaar 'endtry', 21007a092245SBram Moolenaar ], 'E488:') 21012c5ed4e3SBram Moolenaar CheckScriptFailure([ 21022c5ed4e3SBram Moolenaar 'vim9script', 21032c5ed4e3SBram Moolenaar 'try', 21042c5ed4e3SBram Moolenaar ' echo "yes"', 21052c5ed4e3SBram Moolenaar 'catch# comment', 21062c5ed4e3SBram Moolenaar 'endtry', 21072c5ed4e3SBram Moolenaar ], 'E654:') 21082c5ed4e3SBram Moolenaar CheckDefFailure([ 21092c5ed4e3SBram Moolenaar 'try', 21102c5ed4e3SBram Moolenaar ' echo "yes"', 21112c5ed4e3SBram Moolenaar 'catch /pat/# comment', 21122c5ed4e3SBram Moolenaar 'endtry', 21132c5ed4e3SBram Moolenaar ], 'E488:') 21147a092245SBram Moolenaar CheckDefFailure([ 21157a092245SBram Moolenaar 'try', 21167a092245SBram Moolenaar 'echo "yes"', 21177a092245SBram Moolenaar 'catch', 21187a092245SBram Moolenaar 'endtry# comment', 21197a092245SBram Moolenaar ], 'E488:') 21202c5ed4e3SBram Moolenaar CheckScriptFailure([ 21212c5ed4e3SBram Moolenaar 'vim9script', 21222c5ed4e3SBram Moolenaar 'try', 21232c5ed4e3SBram Moolenaar ' echo "yes"', 21242c5ed4e3SBram Moolenaar 'catch', 21252c5ed4e3SBram Moolenaar 'endtry# comment', 21269b7bf9e9SBram Moolenaar ], 'E488:') 21272c5ed4e3SBram Moolenaar 21282c5ed4e3SBram Moolenaar CheckScriptSuccess([ 21292c5ed4e3SBram Moolenaar 'vim9script', 21302c5ed4e3SBram Moolenaar 'hi # comment', 21312c5ed4e3SBram Moolenaar ]) 21322c5ed4e3SBram Moolenaar CheckScriptFailure([ 21332c5ed4e3SBram Moolenaar 'vim9script', 21342c5ed4e3SBram Moolenaar 'hi# comment', 21352c5ed4e3SBram Moolenaar ], 'E416:') 21361966c248SBram Moolenaar CheckScriptSuccess([ 21371966c248SBram Moolenaar 'vim9script', 21381966c248SBram Moolenaar 'hi Search # comment', 21391966c248SBram Moolenaar ]) 21401966c248SBram Moolenaar CheckScriptFailure([ 21411966c248SBram Moolenaar 'vim9script', 21421966c248SBram Moolenaar 'hi Search# comment', 21431966c248SBram Moolenaar ], 'E416:') 21441966c248SBram Moolenaar CheckScriptSuccess([ 21451966c248SBram Moolenaar 'vim9script', 21461966c248SBram Moolenaar 'hi link This Search # comment', 21471966c248SBram Moolenaar ]) 21481966c248SBram Moolenaar CheckScriptFailure([ 21491966c248SBram Moolenaar 'vim9script', 21501966c248SBram Moolenaar 'hi link This That# comment', 21511966c248SBram Moolenaar ], 'E413:') 21521966c248SBram Moolenaar CheckScriptSuccess([ 21531966c248SBram Moolenaar 'vim9script', 21541966c248SBram Moolenaar 'hi clear This # comment', 21551966c248SBram Moolenaar 'hi clear # comment', 21561966c248SBram Moolenaar ]) 2157f5be8cdbSBram Moolenaar # not tested, because it doesn't give an error but a warning: 2158f5be8cdbSBram Moolenaar # hi clear This# comment', 21591966c248SBram Moolenaar CheckScriptFailure([ 21601966c248SBram Moolenaar 'vim9script', 21611966c248SBram Moolenaar 'hi clear# comment', 21621966c248SBram Moolenaar ], 'E416:') 21631966c248SBram Moolenaar 21641966c248SBram Moolenaar CheckScriptSuccess([ 21651966c248SBram Moolenaar 'vim9script', 21661966c248SBram Moolenaar 'hi Group term=bold', 21671966c248SBram Moolenaar 'match Group /todo/ # comment', 21681966c248SBram Moolenaar ]) 21691966c248SBram Moolenaar CheckScriptFailure([ 21701966c248SBram Moolenaar 'vim9script', 21711966c248SBram Moolenaar 'hi Group term=bold', 21721966c248SBram Moolenaar 'match Group /todo/# comment', 21731966c248SBram Moolenaar ], 'E488:') 21741966c248SBram Moolenaar CheckScriptSuccess([ 21751966c248SBram Moolenaar 'vim9script', 21761966c248SBram Moolenaar 'match # comment', 21771966c248SBram Moolenaar ]) 21781966c248SBram Moolenaar CheckScriptFailure([ 21791966c248SBram Moolenaar 'vim9script', 21801966c248SBram Moolenaar 'match# comment', 21811966c248SBram Moolenaar ], 'E475:') 21821966c248SBram Moolenaar CheckScriptSuccess([ 21831966c248SBram Moolenaar 'vim9script', 21841966c248SBram Moolenaar 'match none # comment', 21851966c248SBram Moolenaar ]) 21861966c248SBram Moolenaar CheckScriptFailure([ 21871966c248SBram Moolenaar 'vim9script', 21881966c248SBram Moolenaar 'match none# comment', 21891966c248SBram Moolenaar ], 'E475:') 21901966c248SBram Moolenaar 21911966c248SBram Moolenaar CheckScriptSuccess([ 21921966c248SBram Moolenaar 'vim9script', 21931966c248SBram Moolenaar 'menutrans clear # comment', 21941966c248SBram Moolenaar ]) 21951966c248SBram Moolenaar CheckScriptFailure([ 21961966c248SBram Moolenaar 'vim9script', 21971966c248SBram Moolenaar 'menutrans clear# comment text', 21981966c248SBram Moolenaar ], 'E474:') 21991966c248SBram Moolenaar 22001966c248SBram Moolenaar CheckScriptSuccess([ 22011966c248SBram Moolenaar 'vim9script', 22021966c248SBram Moolenaar 'syntax clear # comment', 22031966c248SBram Moolenaar ]) 22041966c248SBram Moolenaar CheckScriptFailure([ 22051966c248SBram Moolenaar 'vim9script', 22061966c248SBram Moolenaar 'syntax clear# comment text', 22071966c248SBram Moolenaar ], 'E28:') 22081966c248SBram Moolenaar CheckScriptSuccess([ 22091966c248SBram Moolenaar 'vim9script', 22101966c248SBram Moolenaar 'syntax keyword Word some', 22111966c248SBram Moolenaar 'syntax clear Word # comment', 22121966c248SBram Moolenaar ]) 22131966c248SBram Moolenaar CheckScriptFailure([ 22141966c248SBram Moolenaar 'vim9script', 22151966c248SBram Moolenaar 'syntax keyword Word some', 22161966c248SBram Moolenaar 'syntax clear Word# comment text', 22171966c248SBram Moolenaar ], 'E28:') 22181966c248SBram Moolenaar 22191966c248SBram Moolenaar CheckScriptSuccess([ 22201966c248SBram Moolenaar 'vim9script', 22211966c248SBram Moolenaar 'syntax list # comment', 22221966c248SBram Moolenaar ]) 22231966c248SBram Moolenaar CheckScriptFailure([ 22241966c248SBram Moolenaar 'vim9script', 22251966c248SBram Moolenaar 'syntax list# comment text', 22261966c248SBram Moolenaar ], 'E28:') 22271966c248SBram Moolenaar 22281966c248SBram Moolenaar CheckScriptSuccess([ 22291966c248SBram Moolenaar 'vim9script', 22301966c248SBram Moolenaar 'syntax match Word /pat/ oneline # comment', 22311966c248SBram Moolenaar ]) 22321966c248SBram Moolenaar CheckScriptFailure([ 22331966c248SBram Moolenaar 'vim9script', 22341966c248SBram Moolenaar 'syntax match Word /pat/ oneline# comment', 22351966c248SBram Moolenaar ], 'E475:') 22361966c248SBram Moolenaar 22371966c248SBram Moolenaar CheckScriptSuccess([ 22381966c248SBram Moolenaar 'vim9script', 22391966c248SBram Moolenaar 'syntax keyword Word word # comm[ent', 22401966c248SBram Moolenaar ]) 22411966c248SBram Moolenaar CheckScriptFailure([ 22421966c248SBram Moolenaar 'vim9script', 22431966c248SBram Moolenaar 'syntax keyword Word word# comm[ent', 22441966c248SBram Moolenaar ], 'E789:') 22451966c248SBram Moolenaar 22461966c248SBram Moolenaar CheckScriptSuccess([ 22471966c248SBram Moolenaar 'vim9script', 22481966c248SBram Moolenaar 'syntax match Word /pat/ # comment', 22491966c248SBram Moolenaar ]) 22501966c248SBram Moolenaar CheckScriptFailure([ 22511966c248SBram Moolenaar 'vim9script', 22521966c248SBram Moolenaar 'syntax match Word /pat/# comment', 22531966c248SBram Moolenaar ], 'E402:') 22541966c248SBram Moolenaar 22551966c248SBram Moolenaar CheckScriptSuccess([ 22561966c248SBram Moolenaar 'vim9script', 22571966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something # comment', 22581966c248SBram Moolenaar ]) 22591966c248SBram Moolenaar CheckScriptFailure([ 22601966c248SBram Moolenaar 'vim9script', 22611966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something# comment', 22621966c248SBram Moolenaar ], 'E475:') 22631966c248SBram Moolenaar CheckScriptFailure([ 22641966c248SBram Moolenaar 'vim9script', 22651966c248SBram Moolenaar 'syntax match Word /pat/ contains= # comment', 22661966c248SBram Moolenaar ], 'E406:') 22671966c248SBram Moolenaar CheckScriptFailure([ 22681966c248SBram Moolenaar 'vim9script', 22691966c248SBram Moolenaar 'syntax match Word /pat/ contains=# comment', 22701966c248SBram Moolenaar ], 'E475:') 22711966c248SBram Moolenaar 22721966c248SBram Moolenaar CheckScriptSuccess([ 22731966c248SBram Moolenaar 'vim9script', 22741966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/ # comment', 22751966c248SBram Moolenaar ]) 22761966c248SBram Moolenaar CheckScriptFailure([ 22771966c248SBram Moolenaar 'vim9script', 22781966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/# comment', 2279d032f34aSBram Moolenaar ], 'E402:') 22801966c248SBram Moolenaar 22811966c248SBram Moolenaar CheckScriptSuccess([ 22821966c248SBram Moolenaar 'vim9script', 22831966c248SBram Moolenaar 'syntax sync # comment', 22841966c248SBram Moolenaar ]) 22851966c248SBram Moolenaar CheckScriptFailure([ 22861966c248SBram Moolenaar 'vim9script', 22871966c248SBram Moolenaar 'syntax sync# comment', 22881966c248SBram Moolenaar ], 'E404:') 22891966c248SBram Moolenaar CheckScriptSuccess([ 22901966c248SBram Moolenaar 'vim9script', 22911966c248SBram Moolenaar 'syntax sync ccomment # comment', 22921966c248SBram Moolenaar ]) 22931966c248SBram Moolenaar CheckScriptFailure([ 22941966c248SBram Moolenaar 'vim9script', 22951966c248SBram Moolenaar 'syntax sync ccomment# comment', 22961966c248SBram Moolenaar ], 'E404:') 22971966c248SBram Moolenaar 22981966c248SBram Moolenaar CheckScriptSuccess([ 22991966c248SBram Moolenaar 'vim9script', 23001966c248SBram Moolenaar 'syntax cluster Some contains=Word # comment', 23011966c248SBram Moolenaar ]) 23021966c248SBram Moolenaar CheckScriptFailure([ 23031966c248SBram Moolenaar 'vim9script', 23041966c248SBram Moolenaar 'syntax cluster Some contains=Word# comment', 23051966c248SBram Moolenaar ], 'E475:') 2306a72cfb80SBram Moolenaar 2307a72cfb80SBram Moolenaar CheckScriptSuccess([ 2308a72cfb80SBram Moolenaar 'vim9script', 2309a72cfb80SBram Moolenaar 'command Echo echo # comment', 2310a72cfb80SBram Moolenaar 'command Echo # comment', 2311a72cfb80SBram Moolenaar ]) 2312a72cfb80SBram Moolenaar CheckScriptFailure([ 2313a72cfb80SBram Moolenaar 'vim9script', 2314a72cfb80SBram Moolenaar 'command Echo echo# comment', 2315a72cfb80SBram Moolenaar 'Echo', 2316a72cfb80SBram Moolenaar ], 'E121:') 2317a72cfb80SBram Moolenaar CheckScriptFailure([ 2318a72cfb80SBram Moolenaar 'vim9script', 2319a72cfb80SBram Moolenaar 'command Echo# comment', 2320a72cfb80SBram Moolenaar ], 'E182:') 2321a72cfb80SBram Moolenaar CheckScriptFailure([ 2322a72cfb80SBram Moolenaar 'vim9script', 2323a72cfb80SBram Moolenaar 'command Echo echo', 2324a72cfb80SBram Moolenaar 'command Echo# comment', 2325a72cfb80SBram Moolenaar ], 'E182:') 2326a72cfb80SBram Moolenaar 2327a72cfb80SBram Moolenaar CheckScriptSuccess([ 2328a72cfb80SBram Moolenaar 'vim9script', 2329a72cfb80SBram Moolenaar 'function # comment', 2330a72cfb80SBram Moolenaar ]) 2331a72cfb80SBram Moolenaar CheckScriptFailure([ 2332a72cfb80SBram Moolenaar 'vim9script', 23339898107fSBram Moolenaar 'function " comment', 23349898107fSBram Moolenaar ], 'E129:') 23359898107fSBram Moolenaar CheckScriptFailure([ 23369898107fSBram Moolenaar 'vim9script', 2337a72cfb80SBram Moolenaar 'function# comment', 2338a72cfb80SBram Moolenaar ], 'E129:') 2339a72cfb80SBram Moolenaar CheckScriptSuccess([ 2340a72cfb80SBram Moolenaar 'vim9script', 2341a72cfb80SBram Moolenaar 'function CheckScriptSuccess # comment', 2342a72cfb80SBram Moolenaar ]) 2343a72cfb80SBram Moolenaar CheckScriptFailure([ 2344a72cfb80SBram Moolenaar 'vim9script', 2345a72cfb80SBram Moolenaar 'function CheckScriptSuccess# comment', 2346a72cfb80SBram Moolenaar ], 'E488:') 2347a72cfb80SBram Moolenaar 2348a72cfb80SBram Moolenaar CheckScriptSuccess([ 2349a72cfb80SBram Moolenaar 'vim9script', 23504c17ad94SBram Moolenaar 'func g:DeleteMeA()', 2351a72cfb80SBram Moolenaar 'endfunc', 23524c17ad94SBram Moolenaar 'delfunction g:DeleteMeA # comment', 2353a72cfb80SBram Moolenaar ]) 2354a72cfb80SBram Moolenaar CheckScriptFailure([ 2355a72cfb80SBram Moolenaar 'vim9script', 23564c17ad94SBram Moolenaar 'func g:DeleteMeB()', 2357a72cfb80SBram Moolenaar 'endfunc', 23584c17ad94SBram Moolenaar 'delfunction g:DeleteMeB# comment', 2359a72cfb80SBram Moolenaar ], 'E488:') 2360a72cfb80SBram Moolenaar 2361a72cfb80SBram Moolenaar CheckScriptSuccess([ 2362a72cfb80SBram Moolenaar 'vim9script', 2363a72cfb80SBram Moolenaar 'call execute("ls") # comment', 2364a72cfb80SBram Moolenaar ]) 2365a72cfb80SBram Moolenaar CheckScriptFailure([ 2366a72cfb80SBram Moolenaar 'vim9script', 2367a72cfb80SBram Moolenaar 'call execute("ls")# comment', 2368a72cfb80SBram Moolenaar ], 'E488:') 2369e7e4838fSBram Moolenaar 2370e7e4838fSBram Moolenaar CheckScriptFailure([ 2371e7e4838fSBram Moolenaar 'def Test() " comment', 2372e7e4838fSBram Moolenaar 'enddef', 2373e7e4838fSBram Moolenaar ], 'E488:') 2374e7e4838fSBram Moolenaar CheckScriptFailure([ 2375e7e4838fSBram Moolenaar 'vim9script', 2376e7e4838fSBram Moolenaar 'def Test() " comment', 2377e7e4838fSBram Moolenaar 'enddef', 2378e7e4838fSBram Moolenaar ], 'E488:') 2379e7e4838fSBram Moolenaar 2380e7e4838fSBram Moolenaar CheckScriptSuccess([ 2381e7e4838fSBram Moolenaar 'func Test() " comment', 2382e7e4838fSBram Moolenaar 'endfunc', 2383e7e4838fSBram Moolenaar ]) 23849898107fSBram Moolenaar CheckScriptSuccess([ 2385e7e4838fSBram Moolenaar 'vim9script', 2386e7e4838fSBram Moolenaar 'func Test() " comment', 2387e7e4838fSBram Moolenaar 'endfunc', 23889898107fSBram Moolenaar ]) 2389e7e4838fSBram Moolenaar 2390e7e4838fSBram Moolenaar CheckScriptSuccess([ 2391e7e4838fSBram Moolenaar 'def Test() # comment', 2392e7e4838fSBram Moolenaar 'enddef', 2393e7e4838fSBram Moolenaar ]) 2394e7e4838fSBram Moolenaar CheckScriptFailure([ 2395e7e4838fSBram Moolenaar 'func Test() # comment', 2396e7e4838fSBram Moolenaar 'endfunc', 2397e7e4838fSBram Moolenaar ], 'E488:') 23982c5ed4e3SBram Moolenaarenddef 23992c5ed4e3SBram Moolenaar 24002c5ed4e3SBram Moolenaardef Test_vim9_comment_gui() 24012c5ed4e3SBram Moolenaar CheckCanRunGui 24022c5ed4e3SBram Moolenaar 24032c5ed4e3SBram Moolenaar CheckScriptFailure([ 24042c5ed4e3SBram Moolenaar 'vim9script', 24052c5ed4e3SBram Moolenaar 'gui#comment' 24062c5ed4e3SBram Moolenaar ], 'E499:') 24072c5ed4e3SBram Moolenaar CheckScriptFailure([ 24082c5ed4e3SBram Moolenaar 'vim9script', 24092c5ed4e3SBram Moolenaar 'gui -f#comment' 24102c5ed4e3SBram Moolenaar ], 'E499:') 24117a092245SBram Moolenaarenddef 24127a092245SBram Moolenaar 2413a26b9700SBram Moolenaardef Test_vim9_comment_not_compiled() 24146797966dSBram Moolenaar au TabEnter *.vim g:entered = 1 24156797966dSBram Moolenaar au TabEnter *.x g:entered = 2 2416a26b9700SBram Moolenaar 2417a26b9700SBram Moolenaar edit test.vim 2418a26b9700SBram Moolenaar doautocmd TabEnter #comment 2419a26b9700SBram Moolenaar assert_equal(1, g:entered) 2420a26b9700SBram Moolenaar 2421a26b9700SBram Moolenaar doautocmd TabEnter f.x 2422a26b9700SBram Moolenaar assert_equal(2, g:entered) 2423a26b9700SBram Moolenaar 2424a26b9700SBram Moolenaar g:entered = 0 2425a26b9700SBram Moolenaar doautocmd TabEnter f.x #comment 2426a26b9700SBram Moolenaar assert_equal(2, g:entered) 2427a26b9700SBram Moolenaar 2428a26b9700SBram Moolenaar assert_fails('doautocmd Syntax#comment', 'E216:') 2429a26b9700SBram Moolenaar 2430a26b9700SBram Moolenaar au! TabEnter 2431a26b9700SBram Moolenaar unlet g:entered 2432d72c1bf0SBram Moolenaar 2433d72c1bf0SBram Moolenaar CheckScriptSuccess([ 2434d72c1bf0SBram Moolenaar 'vim9script', 24356797966dSBram Moolenaar 'g:var = 123', 2436e55b1c09SBram Moolenaar 'b:var = 456', 2437e55b1c09SBram Moolenaar 'w:var = 777', 2438e55b1c09SBram Moolenaar 't:var = 888', 2439d72c1bf0SBram Moolenaar 'unlet g:var w:var # something', 2440d72c1bf0SBram Moolenaar ]) 2441d72c1bf0SBram Moolenaar 2442d72c1bf0SBram Moolenaar CheckScriptFailure([ 2443d72c1bf0SBram Moolenaar 'vim9script', 2444d72c1bf0SBram Moolenaar 'let g:var = 123', 2445e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a global variable:') 2446e55b1c09SBram Moolenaar 2447e55b1c09SBram Moolenaar CheckScriptFailure([ 2448e55b1c09SBram Moolenaar 'vim9script', 2449e55b1c09SBram Moolenaar 'let b:var = 123', 2450e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a buffer variable:') 2451e55b1c09SBram Moolenaar 2452e55b1c09SBram Moolenaar CheckScriptFailure([ 2453e55b1c09SBram Moolenaar 'vim9script', 2454e55b1c09SBram Moolenaar 'let w:var = 123', 2455e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a window variable:') 2456e55b1c09SBram Moolenaar 2457e55b1c09SBram Moolenaar CheckScriptFailure([ 2458e55b1c09SBram Moolenaar 'vim9script', 2459e55b1c09SBram Moolenaar 'let t:var = 123', 2460e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a tab variable:') 2461e55b1c09SBram Moolenaar 2462e55b1c09SBram Moolenaar CheckScriptFailure([ 2463e55b1c09SBram Moolenaar 'vim9script', 2464e55b1c09SBram Moolenaar 'let v:version = 123', 2465e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a v: variable:') 2466e55b1c09SBram Moolenaar 2467e55b1c09SBram Moolenaar CheckScriptFailure([ 2468e55b1c09SBram Moolenaar 'vim9script', 2469e55b1c09SBram Moolenaar 'let $VARIABLE = "text"', 2470e55b1c09SBram Moolenaar ], 'E1016: Cannot declare an environment variable:') 24716797966dSBram Moolenaar 24726797966dSBram Moolenaar CheckScriptFailure([ 24736797966dSBram Moolenaar 'vim9script', 24746797966dSBram Moolenaar 'g:var = 123', 247532e35117SBram Moolenaar 'unlet g:var# comment1', 2476d72c1bf0SBram Moolenaar ], 'E108:') 2477d72c1bf0SBram Moolenaar 2478d72c1bf0SBram Moolenaar CheckScriptFailure([ 2479d72c1bf0SBram Moolenaar 'let g:var = 123', 2480d72c1bf0SBram Moolenaar 'unlet g:var # something', 2481d72c1bf0SBram Moolenaar ], 'E488:') 2482faac4104SBram Moolenaar 2483faac4104SBram Moolenaar CheckScriptSuccess([ 2484faac4104SBram Moolenaar 'vim9script', 248532e35117SBram Moolenaar 'if 1 # comment2', 2486faac4104SBram Moolenaar ' echo "yes"', 2487faac4104SBram Moolenaar 'elseif 2 #comment', 2488faac4104SBram Moolenaar ' echo "no"', 2489faac4104SBram Moolenaar 'endif', 2490faac4104SBram Moolenaar ]) 2491faac4104SBram Moolenaar 2492faac4104SBram Moolenaar CheckScriptFailure([ 2493faac4104SBram Moolenaar 'vim9script', 249432e35117SBram Moolenaar 'if 1# comment3', 2495faac4104SBram Moolenaar ' echo "yes"', 2496faac4104SBram Moolenaar 'endif', 2497faac4104SBram Moolenaar ], 'E15:') 2498faac4104SBram Moolenaar 2499faac4104SBram Moolenaar CheckScriptFailure([ 2500faac4104SBram Moolenaar 'vim9script', 250132e35117SBram Moolenaar 'if 0 # comment4', 2502faac4104SBram Moolenaar ' echo "yes"', 2503faac4104SBram Moolenaar 'elseif 2#comment', 2504faac4104SBram Moolenaar ' echo "no"', 2505faac4104SBram Moolenaar 'endif', 2506faac4104SBram Moolenaar ], 'E15:') 2507faac4104SBram Moolenaar 2508faac4104SBram Moolenaar CheckScriptSuccess([ 2509faac4104SBram Moolenaar 'vim9script', 251032e35117SBram Moolenaar 'let v = 1 # comment5', 2511faac4104SBram Moolenaar ]) 2512faac4104SBram Moolenaar 2513faac4104SBram Moolenaar CheckScriptFailure([ 2514faac4104SBram Moolenaar 'vim9script', 251532e35117SBram Moolenaar 'let v = 1# comment6', 251632e35117SBram Moolenaar ], 'E15:') 2517faac4104SBram Moolenaar 2518faac4104SBram Moolenaar CheckScriptSuccess([ 2519faac4104SBram Moolenaar 'vim9script', 2520faac4104SBram Moolenaar 'new' 2521faac4104SBram Moolenaar 'call setline(1, ["# define pat", "last"])', 2522df069eecSBram Moolenaar ':$', 2523faac4104SBram Moolenaar 'dsearch /pat/ #comment', 2524faac4104SBram Moolenaar 'bwipe!', 2525faac4104SBram Moolenaar ]) 2526faac4104SBram Moolenaar 2527f5be8cdbSBram Moolenaar CheckScriptFailure([ 2528f5be8cdbSBram Moolenaar 'vim9script', 2529f5be8cdbSBram Moolenaar 'new' 2530f5be8cdbSBram Moolenaar 'call setline(1, ["# define pat", "last"])', 2531f5be8cdbSBram Moolenaar ':$', 2532f5be8cdbSBram Moolenaar 'dsearch /pat/#comment', 2533f5be8cdbSBram Moolenaar 'bwipe!', 2534f5be8cdbSBram Moolenaar ], 'E488:') 2535f5be8cdbSBram Moolenaar 2536f5be8cdbSBram Moolenaar CheckScriptFailure([ 2537f5be8cdbSBram Moolenaar 'vim9script', 2538f5be8cdbSBram Moolenaar 'func! SomeFunc()', 2539f5be8cdbSBram Moolenaar ], 'E477:') 2540a26b9700SBram Moolenaarenddef 2541a26b9700SBram Moolenaar 25427e5bd91dSBram Moolenaardef Test_finish() 25437e5bd91dSBram Moolenaar let lines =<< trim END 25447e5bd91dSBram Moolenaar vim9script 25456797966dSBram Moolenaar g:res = 'one' 25467e5bd91dSBram Moolenaar if v:false | finish | endif 25476797966dSBram Moolenaar g:res = 'two' 25487e5bd91dSBram Moolenaar finish 25496797966dSBram Moolenaar g:res = 'three' 25507e5bd91dSBram Moolenaar END 25517e5bd91dSBram Moolenaar writefile(lines, 'Xfinished') 25527e5bd91dSBram Moolenaar source Xfinished 25537e5bd91dSBram Moolenaar assert_equal('two', g:res) 25547e5bd91dSBram Moolenaar 25557e5bd91dSBram Moolenaar unlet g:res 25567e5bd91dSBram Moolenaar delete('Xfinished') 25577e5bd91dSBram Moolenaarenddef 25587e5bd91dSBram Moolenaar 255932e35117SBram Moolenaardef Test_let_func_call() 256032e35117SBram Moolenaar let lines =<< trim END 256132e35117SBram Moolenaar vim9script 256232e35117SBram Moolenaar func GetValue() 256332e35117SBram Moolenaar if exists('g:count') 256432e35117SBram Moolenaar let g:count += 1 256532e35117SBram Moolenaar else 256632e35117SBram Moolenaar let g:count = 1 256732e35117SBram Moolenaar endif 256832e35117SBram Moolenaar return 'this' 256932e35117SBram Moolenaar endfunc 257032e35117SBram Moolenaar let val: string = GetValue() 2571f5be8cdbSBram Moolenaar # env var is always a string 2572df671b46SBram Moolenaar let env = $TERM 257332e35117SBram Moolenaar END 257432e35117SBram Moolenaar writefile(lines, 'Xfinished') 257532e35117SBram Moolenaar source Xfinished 2576f5be8cdbSBram Moolenaar # GetValue() is not called during discovery phase 257732e35117SBram Moolenaar assert_equal(1, g:count) 257832e35117SBram Moolenaar 257932e35117SBram Moolenaar unlet g:count 258032e35117SBram Moolenaar delete('Xfinished') 258132e35117SBram Moolenaarenddef 258232e35117SBram Moolenaar 258332e35117SBram Moolenaardef Test_let_missing_type() 258432e35117SBram Moolenaar let lines =<< trim END 258532e35117SBram Moolenaar vim9script 2586df671b46SBram Moolenaar let var = g:unknown 2587227a69deSBram Moolenaar END 2588822ba247SBram Moolenaar CheckScriptFailure(lines, 'E121:') 2589227a69deSBram Moolenaar 2590227a69deSBram Moolenaar lines =<< trim END 2591227a69deSBram Moolenaar vim9script 2592227a69deSBram Moolenaar let nr: number = 123 2593227a69deSBram Moolenaar let var = nr 2594227a69deSBram Moolenaar END 2595822ba247SBram Moolenaar CheckScriptSuccess(lines) 259632e35117SBram Moolenaarenddef 259732e35117SBram Moolenaar 2598c82a5b5dSBram Moolenaardef Test_let_declaration() 2599c82a5b5dSBram Moolenaar let lines =<< trim END 2600c82a5b5dSBram Moolenaar vim9script 2601c82a5b5dSBram Moolenaar let var: string 2602c82a5b5dSBram Moolenaar g:var_uninit = var 2603c82a5b5dSBram Moolenaar var = 'text' 2604c82a5b5dSBram Moolenaar g:var_test = var 2605f5be8cdbSBram Moolenaar # prefixing s: is optional 2606984dddbeSBram Moolenaar s:var = 'prefixed' 2607984dddbeSBram Moolenaar g:var_prefixed = s:var 2608984dddbeSBram Moolenaar 2609984dddbeSBram Moolenaar let s:other: number 2610984dddbeSBram Moolenaar other = 1234 2611984dddbeSBram Moolenaar g:other_var = other 2612c82a5b5dSBram Moolenaar END 2613c82a5b5dSBram Moolenaar CheckScriptSuccess(lines) 2614c82a5b5dSBram Moolenaar assert_equal('', g:var_uninit) 2615c82a5b5dSBram Moolenaar assert_equal('text', g:var_test) 2616984dddbeSBram Moolenaar assert_equal('prefixed', g:var_prefixed) 2617984dddbeSBram Moolenaar assert_equal(1234, g:other_var) 2618c82a5b5dSBram Moolenaar 2619c82a5b5dSBram Moolenaar unlet g:var_uninit 2620c82a5b5dSBram Moolenaar unlet g:var_test 2621984dddbeSBram Moolenaar unlet g:var_prefixed 2622984dddbeSBram Moolenaar unlet g:other_var 2623c82a5b5dSBram Moolenaarenddef 2624c82a5b5dSBram Moolenaar 2625c5b1c20bSBram Moolenaardef Test_let_declaration_fails() 2626c5b1c20bSBram Moolenaar let lines =<< trim END 2627c5b1c20bSBram Moolenaar vim9script 2628c5b1c20bSBram Moolenaar const var: string 2629c5b1c20bSBram Moolenaar END 2630c5b1c20bSBram Moolenaar CheckScriptFailure(lines, 'E1021:') 2631c5b1c20bSBram Moolenaar 2632c5b1c20bSBram Moolenaar lines =<< trim END 2633c5b1c20bSBram Moolenaar vim9script 2634c5b1c20bSBram Moolenaar let 9var: string 2635c5b1c20bSBram Moolenaar END 2636c5b1c20bSBram Moolenaar CheckScriptFailure(lines, 'E475:') 2637c5b1c20bSBram Moolenaarenddef 2638c5b1c20bSBram Moolenaar 263934db91f7SBram Moolenaardef Test_let_type_check() 264034db91f7SBram Moolenaar let lines =<< trim END 264134db91f7SBram Moolenaar vim9script 264234db91f7SBram Moolenaar let var: string 264334db91f7SBram Moolenaar var = 1234 264434db91f7SBram Moolenaar END 264534db91f7SBram Moolenaar CheckScriptFailure(lines, 'E1013:') 2646984dddbeSBram Moolenaar 2647984dddbeSBram Moolenaar lines =<< trim END 2648984dddbeSBram Moolenaar vim9script 2649984dddbeSBram Moolenaar let var:string 2650984dddbeSBram Moolenaar END 2651984dddbeSBram Moolenaar CheckScriptFailure(lines, 'E1069:') 2652c5b1c20bSBram Moolenaar 2653c5b1c20bSBram Moolenaar lines =<< trim END 2654c5b1c20bSBram Moolenaar vim9script 2655c5b1c20bSBram Moolenaar let var: asdf 2656c5b1c20bSBram Moolenaar END 2657c5b1c20bSBram Moolenaar CheckScriptFailure(lines, 'E1010:') 265834db91f7SBram Moolenaarenddef 265934db91f7SBram Moolenaar 2660a5d0077eSBram Moolenaardef Test_forward_declaration() 2661a5d0077eSBram Moolenaar let lines =<< trim END 2662a5d0077eSBram Moolenaar vim9script 2663a5d0077eSBram Moolenaar def GetValue(): string 2664a5d0077eSBram Moolenaar return theVal 2665a5d0077eSBram Moolenaar enddef 2666a5d0077eSBram Moolenaar let theVal = 'something' 2667822ba247SBram Moolenaar g:initVal = GetValue() 2668a5d0077eSBram Moolenaar theVal = 'else' 2669a5d0077eSBram Moolenaar g:laterVal = GetValue() 2670a5d0077eSBram Moolenaar END 2671a5d0077eSBram Moolenaar writefile(lines, 'Xforward') 2672a5d0077eSBram Moolenaar source Xforward 2673a5d0077eSBram Moolenaar assert_equal('something', g:initVal) 2674a5d0077eSBram Moolenaar assert_equal('else', g:laterVal) 2675a5d0077eSBram Moolenaar 2676a5d0077eSBram Moolenaar unlet g:initVal 2677a5d0077eSBram Moolenaar unlet g:laterVal 2678a5d0077eSBram Moolenaar delete('Xforward') 2679a5d0077eSBram Moolenaarenddef 2680a5d0077eSBram Moolenaar 26819721fb4eSBram Moolenaardef Test_source_vim9_from_legacy() 26829721fb4eSBram Moolenaar let legacy_lines =<< trim END 26839721fb4eSBram Moolenaar source Xvim9_script.vim 26849721fb4eSBram Moolenaar 26859721fb4eSBram Moolenaar call assert_false(exists('local')) 26869721fb4eSBram Moolenaar call assert_false(exists('exported')) 26879721fb4eSBram Moolenaar call assert_false(exists('s:exported')) 26889721fb4eSBram Moolenaar call assert_equal('global', global) 26899721fb4eSBram Moolenaar call assert_equal('global', g:global) 26909721fb4eSBram Moolenaar 26919721fb4eSBram Moolenaar " imported variable becomes script-local 26929721fb4eSBram Moolenaar import exported from './Xvim9_script.vim' 26939721fb4eSBram Moolenaar call assert_equal('exported', s:exported) 26949721fb4eSBram Moolenaar call assert_false(exists('exported')) 26959721fb4eSBram Moolenaar 26969721fb4eSBram Moolenaar " imported function becomes script-local 26979721fb4eSBram Moolenaar import GetText from './Xvim9_script.vim' 26989721fb4eSBram Moolenaar call assert_equal('text', s:GetText()) 26999721fb4eSBram Moolenaar call assert_false(exists('*GetText')) 27009721fb4eSBram Moolenaar END 27019721fb4eSBram Moolenaar writefile(legacy_lines, 'Xlegacy_script.vim') 27029721fb4eSBram Moolenaar 27039721fb4eSBram Moolenaar let vim9_lines =<< trim END 27049721fb4eSBram Moolenaar vim9script 27059721fb4eSBram Moolenaar let local = 'local' 27069721fb4eSBram Moolenaar g:global = 'global' 27079721fb4eSBram Moolenaar export let exported = 'exported' 27089721fb4eSBram Moolenaar export def GetText(): string 27099721fb4eSBram Moolenaar return 'text' 27109721fb4eSBram Moolenaar enddef 27119721fb4eSBram Moolenaar END 27129721fb4eSBram Moolenaar writefile(vim9_lines, 'Xvim9_script.vim') 27139721fb4eSBram Moolenaar 27149721fb4eSBram Moolenaar source Xlegacy_script.vim 27159721fb4eSBram Moolenaar 27169721fb4eSBram Moolenaar assert_equal('global', g:global) 2717f5be8cdbSBram Moolenaar unlet g:global 27189721fb4eSBram Moolenaar 27199721fb4eSBram Moolenaar delete('Xlegacy_script.vim') 27209721fb4eSBram Moolenaar delete('Xvim9_script.vim') 27219721fb4eSBram Moolenaarenddef 2722a5d0077eSBram Moolenaar 2723eeb27bfeSBram Moolenaardef Test_vim9_copen() 2724eeb27bfeSBram Moolenaar # this was giving an error for setting w:quickfix_title 2725eeb27bfeSBram Moolenaar copen 2726eeb27bfeSBram Moolenaar quit 2727eeb27bfeSBram Moolenaarenddef 2728eeb27bfeSBram Moolenaar 27292d6b20d6SBram Moolenaar" test using a vim9script that is auto-loaded from an autocmd 27302d6b20d6SBram Moolenaardef Test_vim9_autoload() 27312d6b20d6SBram Moolenaar let lines =<< trim END 27322d6b20d6SBram Moolenaar vim9script 27332d6b20d6SBram Moolenaar def foo#test() 27342d6b20d6SBram Moolenaar echomsg getreg('"') 27352d6b20d6SBram Moolenaar enddef 27362d6b20d6SBram Moolenaar END 27372d6b20d6SBram Moolenaar 27382d6b20d6SBram Moolenaar mkdir('Xdir/autoload', 'p') 27392d6b20d6SBram Moolenaar writefile(lines, 'Xdir/autoload/foo.vim') 27402d6b20d6SBram Moolenaar let save_rtp = &rtp 27412d6b20d6SBram Moolenaar exe 'set rtp^=' .. getcwd() .. '/Xdir' 27422d6b20d6SBram Moolenaar augroup test 27432d6b20d6SBram Moolenaar autocmd TextYankPost * call foo#test() 27442d6b20d6SBram Moolenaar augroup END 27452d6b20d6SBram Moolenaar 27462d6b20d6SBram Moolenaar normal Y 27472d6b20d6SBram Moolenaar 27482d6b20d6SBram Moolenaar augroup test 27492d6b20d6SBram Moolenaar autocmd! 27502d6b20d6SBram Moolenaar augroup END 27512d6b20d6SBram Moolenaar delete('Xdir', 'rf') 27522d6b20d6SBram Moolenaar &rtp = save_rtp 27532d6b20d6SBram Moolenaarenddef 27542d6b20d6SBram Moolenaar 2755585fea7bSBram Moolenaar" Keep this last, it messes up highlighting. 2756585fea7bSBram Moolenaardef Test_substitute_cmd() 2757585fea7bSBram Moolenaar new 2758585fea7bSBram Moolenaar setline(1, 'something') 2759585fea7bSBram Moolenaar :substitute(some(other( 2760585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 2761585fea7bSBram Moolenaar bwipe! 2762585fea7bSBram Moolenaar 2763f5be8cdbSBram Moolenaar # also when the context is Vim9 script 2764585fea7bSBram Moolenaar let lines =<< trim END 2765585fea7bSBram Moolenaar vim9script 2766585fea7bSBram Moolenaar new 2767585fea7bSBram Moolenaar setline(1, 'something') 2768585fea7bSBram Moolenaar :substitute(some(other( 2769585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 2770585fea7bSBram Moolenaar bwipe! 2771585fea7bSBram Moolenaar END 2772585fea7bSBram Moolenaar writefile(lines, 'Xvim9lines') 2773585fea7bSBram Moolenaar source Xvim9lines 2774585fea7bSBram Moolenaar 2775585fea7bSBram Moolenaar delete('Xvim9lines') 2776585fea7bSBram Moolenaarenddef 2777585fea7bSBram Moolenaar 27788a7d6542SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker 2779