18a7d6542SBram Moolenaar" Test various aspects of the Vim9 script language. 28a7d6542SBram Moolenaar 3673660abSBram Moolenaarsource check.vim 4ad39c094SBram Moolenaarsource view_util.vim 5cfe435d7SBram Moolenaarsource vim9.vim 68a7d6542SBram Moolenaar 78a7d6542SBram Moolenaardef Test_syntax() 88a7d6542SBram Moolenaar let var = 234 98a7d6542SBram Moolenaar let other: list<string> = ['asdf'] 108a7d6542SBram Moolenaarenddef 118a7d6542SBram Moolenaar 126e587dcbSBram Moolenaarlet s:appendToMe = 'xxx' 136e587dcbSBram Moolenaarlet s:addToMe = 111 14401d9ffbSBram Moolenaarlet g:existing = 'yes' 15a8c17704SBram Moolenaarlet g:inc_counter = 1 16a8c17704SBram Moolenaarlet $SOME_ENV_VAR = 'some' 176e587dcbSBram Moolenaar 188a7d6542SBram Moolenaardef Test_assignment() 198a7d6542SBram Moolenaar let bool1: bool = true 208a7d6542SBram Moolenaar assert_equal(v:true, bool1) 218a7d6542SBram Moolenaar let bool2: bool = false 228a7d6542SBram Moolenaar assert_equal(v:false, bool2) 238a7d6542SBram Moolenaar 240c2ca58eSBram Moolenaar let list1: list<bool> = [false, true, false] 258a7d6542SBram Moolenaar let list2: list<number> = [1, 2, 3] 260c2ca58eSBram Moolenaar let list3: list<string> = ['sdf', 'asdf'] 270c2ca58eSBram Moolenaar let list4: list<any> = ['yes', true, 1234] 280c2ca58eSBram Moolenaar let list5: list<blob> = [0z01, 0z02] 298a7d6542SBram Moolenaar 30436472f5SBram Moolenaar let listS: list<string> = [] 31436472f5SBram Moolenaar let listN: list<number> = [] 328a7d6542SBram Moolenaar 330c2ca58eSBram Moolenaar let dict1: dict<bool> = #{one: false, two: true} 348a7d6542SBram Moolenaar let dict2: dict<number> = #{one: 1, two: 2} 350c2ca58eSBram Moolenaar let dict3: dict<string> = #{key: 'value'} 360c2ca58eSBram Moolenaar let dict4: dict<any> = #{one: 1, two: '2'} 370c2ca58eSBram Moolenaar let dict5: dict<blob> = #{one: 0z01, tw: 0z02} 38b283a8a6SBram Moolenaar 39f93c7feaSBram Moolenaar call CheckDefFailure(['let x:string'], 'E1069:') 40f93c7feaSBram Moolenaar call CheckDefFailure(['let x:string = "x"'], 'E1069:') 41f93c7feaSBram Moolenaar call CheckDefFailure(['let a:string = "x"'], 'E1082:') 42f93c7feaSBram Moolenaar 439be61bbbSBram Moolenaar let a: number = 6 449be61bbbSBram Moolenaar assert_equal(6, a) 459be61bbbSBram Moolenaar 4642a480bfSBram Moolenaar if has('channel') 4742a480bfSBram Moolenaar let chan1: channel 48fbdd08edSBram Moolenaar let job1: job 49f51cb4e0SBram Moolenaar let job2: job = job_start('willfail') 5042a480bfSBram Moolenaar endif 51fbdd08edSBram Moolenaar if has('float') 52fbdd08edSBram Moolenaar let float1: float = 3.4 53fbdd08edSBram Moolenaar endif 545deeb3f1SBram Moolenaar let Funky1: func 555deeb3f1SBram Moolenaar let Funky2: func = function('len') 564c17ad94SBram Moolenaar let Party2: func = funcref('g:Test_syntax') 5742a480bfSBram Moolenaar 58cb711abfSBram Moolenaar # type becomes list<any> 5961a6d4e4SBram Moolenaar let somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c'] 60cb711abfSBram Moolenaar # type becomes dict<any> 615381c7a1SBram Moolenaar let somedict = rand() > 0 ? #{a: 1, b: 2} : #{a: 'a', b: 'b'} 6261a6d4e4SBram Moolenaar 63401d9ffbSBram Moolenaar g:newvar = 'new' 64401d9ffbSBram Moolenaar assert_equal('new', g:newvar) 65401d9ffbSBram Moolenaar 66401d9ffbSBram Moolenaar assert_equal('yes', g:existing) 67401d9ffbSBram Moolenaar g:existing = 'no' 68401d9ffbSBram Moolenaar assert_equal('no', g:existing) 69401d9ffbSBram Moolenaar 70b283a8a6SBram Moolenaar v:char = 'abc' 716e587dcbSBram Moolenaar assert_equal('abc', v:char) 72b283a8a6SBram Moolenaar 73b283a8a6SBram Moolenaar $ENVVAR = 'foobar' 746e587dcbSBram Moolenaar assert_equal('foobar', $ENVVAR) 75b283a8a6SBram Moolenaar $ENVVAR = '' 766e587dcbSBram Moolenaar 77fd1823e0SBram Moolenaar s:appendToMe ..= 'yyy' 78fd1823e0SBram Moolenaar assert_equal('xxxyyy', s:appendToMe) 79fd1823e0SBram Moolenaar s:addToMe += 222 80fd1823e0SBram Moolenaar assert_equal(333, s:addToMe) 810bbf722aSBram Moolenaar s:newVar = 'new' 820bbf722aSBram Moolenaar assert_equal('new', s:newVar) 83a8c17704SBram Moolenaar 84a8c17704SBram Moolenaar set ts=7 85a8c17704SBram Moolenaar &ts += 1 86a8c17704SBram Moolenaar assert_equal(8, &ts) 8780c34ca3SBram Moolenaar &ts -= 3 8880c34ca3SBram Moolenaar assert_equal(5, &ts) 8980c34ca3SBram Moolenaar &ts *= 2 9080c34ca3SBram Moolenaar assert_equal(10, &ts) 9180c34ca3SBram Moolenaar &ts /= 3 9280c34ca3SBram Moolenaar assert_equal(3, &ts) 9380c34ca3SBram Moolenaar set ts=10 9480c34ca3SBram Moolenaar &ts %= 4 9580c34ca3SBram Moolenaar assert_equal(2, &ts) 96a8c17704SBram Moolenaar call CheckDefFailure(['¬ex += 3'], 'E113:') 97a8c17704SBram Moolenaar call CheckDefFailure(['&ts ..= "xxx"'], 'E1019:') 98a8c17704SBram Moolenaar call CheckDefFailure(['&path += 3'], 'E1013:') 99cb711abfSBram Moolenaar # test freeing ISN_STOREOPT 100585fea7bSBram Moolenaar call CheckDefFailure(['&ts = 3', 'let asdf'], 'E1022:') 10180c34ca3SBram Moolenaar &ts = 8 102a8c17704SBram Moolenaar 103a8c17704SBram Moolenaar g:inc_counter += 1 104a8c17704SBram Moolenaar assert_equal(2, g:inc_counter) 105a8c17704SBram Moolenaar 106a8c17704SBram Moolenaar $SOME_ENV_VAR ..= 'more' 107a8c17704SBram Moolenaar assert_equal('somemore', $SOME_ENV_VAR) 108a8c17704SBram Moolenaar call CheckDefFailure(['$SOME_ENV_VAR += "more"'], 'E1013:') 109a8c17704SBram Moolenaar call CheckDefFailure(['$SOME_ENV_VAR += 123'], 'E1013:') 110a8c17704SBram Moolenaar 111a8c17704SBram Moolenaar @a = 'areg' 112a8c17704SBram Moolenaar @a ..= 'add' 113a8c17704SBram Moolenaar assert_equal('aregadd', @a) 114a8c17704SBram Moolenaar call CheckDefFailure(['@a += "more"'], 'E1013:') 115a8c17704SBram Moolenaar call CheckDefFailure(['@a += 123'], 'E1013:') 116e69f6d04SBram Moolenaar 117e69f6d04SBram Moolenaar v:errmsg = 'none' 118e69f6d04SBram Moolenaar v:errmsg ..= 'again' 119e69f6d04SBram Moolenaar assert_equal('noneagain', v:errmsg) 120e69f6d04SBram Moolenaar call CheckDefFailure(['v:errmsg += "more"'], 'E1013:') 121e69f6d04SBram Moolenaar call CheckDefFailure(['v:errmsg += 123'], 'E1013:') 1225deeb3f1SBram Moolenaarenddef 1235deeb3f1SBram Moolenaar 124d3aac291SBram Moolenaardef Test_assignment_local() 125d3aac291SBram Moolenaar " Test in a separated file in order not to the current buffer/window/tab is 126d3aac291SBram Moolenaar " changed. 127d3aac291SBram Moolenaar let script_lines: list<string> =<< trim END 128d3aac291SBram Moolenaar let b:existing = 'yes' 129d3aac291SBram Moolenaar let w:existing = 'yes' 130d3aac291SBram Moolenaar let t:existing = 'yes' 131d3aac291SBram Moolenaar 132d3aac291SBram Moolenaar def Test_assignment_local_internal() 133d3aac291SBram Moolenaar b:newvar = 'new' 134d3aac291SBram Moolenaar assert_equal('new', b:newvar) 135d3aac291SBram Moolenaar assert_equal('yes', b:existing) 136d3aac291SBram Moolenaar b:existing = 'no' 137d3aac291SBram Moolenaar assert_equal('no', b:existing) 138*396f3138SBram Moolenaar b:existing ..= 'NO' 139*396f3138SBram Moolenaar assert_equal('noNO', b:existing) 140d3aac291SBram Moolenaar 141d3aac291SBram Moolenaar w:newvar = 'new' 142d3aac291SBram Moolenaar assert_equal('new', w:newvar) 143d3aac291SBram Moolenaar assert_equal('yes', w:existing) 144d3aac291SBram Moolenaar w:existing = 'no' 145d3aac291SBram Moolenaar assert_equal('no', w:existing) 146*396f3138SBram Moolenaar w:existing ..= 'NO' 147*396f3138SBram Moolenaar assert_equal('noNO', w:existing) 148d3aac291SBram Moolenaar 149d3aac291SBram Moolenaar t:newvar = 'new' 150d3aac291SBram Moolenaar assert_equal('new', t:newvar) 151d3aac291SBram Moolenaar assert_equal('yes', t:existing) 152d3aac291SBram Moolenaar t:existing = 'no' 153d3aac291SBram Moolenaar assert_equal('no', t:existing) 154*396f3138SBram Moolenaar t:existing ..= 'NO' 155*396f3138SBram Moolenaar assert_equal('noNO', t:existing) 156d3aac291SBram Moolenaar enddef 157d3aac291SBram Moolenaar call Test_assignment_local_internal() 158d3aac291SBram Moolenaar END 159d3aac291SBram Moolenaar call CheckScriptSuccess(script_lines) 160d3aac291SBram Moolenaarenddef 161d3aac291SBram Moolenaar 1625deeb3f1SBram Moolenaardef Test_assignment_default() 163e69f6d04SBram Moolenaar 164cb711abfSBram Moolenaar # Test default values. 165e69f6d04SBram Moolenaar let thebool: bool 166e69f6d04SBram Moolenaar assert_equal(v:false, thebool) 167e69f6d04SBram Moolenaar 168e69f6d04SBram Moolenaar let thenumber: number 169e69f6d04SBram Moolenaar assert_equal(0, thenumber) 170e69f6d04SBram Moolenaar 171e69f6d04SBram Moolenaar if has('float') 172e69f6d04SBram Moolenaar let thefloat: float 173e69f6d04SBram Moolenaar assert_equal(0.0, thefloat) 174e69f6d04SBram Moolenaar endif 175e69f6d04SBram Moolenaar 176e69f6d04SBram Moolenaar let thestring: string 177e69f6d04SBram Moolenaar assert_equal('', thestring) 178e69f6d04SBram Moolenaar 179e69f6d04SBram Moolenaar let theblob: blob 180e69f6d04SBram Moolenaar assert_equal(0z, theblob) 181e69f6d04SBram Moolenaar 1825deeb3f1SBram Moolenaar let Thefunc: func 1835deeb3f1SBram Moolenaar assert_equal(test_null_function(), Thefunc) 184e69f6d04SBram Moolenaar 185e69f6d04SBram Moolenaar let thelist: list<any> 186e69f6d04SBram Moolenaar assert_equal([], thelist) 187e69f6d04SBram Moolenaar 188e69f6d04SBram Moolenaar let thedict: dict<any> 189e69f6d04SBram Moolenaar assert_equal({}, thedict) 190e69f6d04SBram Moolenaar 1912c869deeSBram Moolenaar if has('channel') 192e69f6d04SBram Moolenaar let thejob: job 193e69f6d04SBram Moolenaar assert_equal(test_null_job(), thejob) 194e69f6d04SBram Moolenaar 195e69f6d04SBram Moolenaar let thechannel: channel 196e69f6d04SBram Moolenaar assert_equal(test_null_channel(), thechannel) 1972c869deeSBram Moolenaar endif 198585fea7bSBram Moolenaar 199585fea7bSBram Moolenaar let nr = 1234 | nr = 5678 200585fea7bSBram Moolenaar assert_equal(5678, nr) 2018a7d6542SBram Moolenaarenddef 2028a7d6542SBram Moolenaar 203cab27678SBram Moolenaardef Mess(): string 204cab27678SBram Moolenaar v:foldstart = 123 205cab27678SBram Moolenaar return 'xxx' 206cab27678SBram Moolenaarenddef 207cab27678SBram Moolenaar 208d72c1bf0SBram Moolenaardef Test_assignment_failure() 2098a7d6542SBram Moolenaar call CheckDefFailure(['let var=234'], 'E1004:') 2108a7d6542SBram Moolenaar call CheckDefFailure(['let var =234'], 'E1004:') 2118a7d6542SBram Moolenaar call CheckDefFailure(['let var= 234'], 'E1004:') 2128a7d6542SBram Moolenaar 2138a7d6542SBram Moolenaar call CheckDefFailure(['let true = 1'], 'E1034:') 2148a7d6542SBram Moolenaar call CheckDefFailure(['let false = 1'], 'E1034:') 2158a7d6542SBram Moolenaar 2169be61bbbSBram Moolenaar call CheckDefFailure(['let [a; b; c] = g:list'], 'E452:') 2179be61bbbSBram Moolenaar 218e69f6d04SBram Moolenaar call CheckDefFailure(['let somevar'], "E1022:") 2199be61bbbSBram Moolenaar call CheckDefFailure(['let &option'], 'E1052:') 2209be61bbbSBram Moolenaar call CheckDefFailure(['&g:option = 5'], 'E113:') 2219be61bbbSBram Moolenaar 2229be61bbbSBram Moolenaar call CheckDefFailure(['let $VAR = 5'], 'E1065:') 2239be61bbbSBram Moolenaar 2249be61bbbSBram Moolenaar call CheckDefFailure(['let @~ = 5'], 'E354:') 2259be61bbbSBram Moolenaar call CheckDefFailure(['let @a = 5'], 'E1066:') 2269be61bbbSBram Moolenaar 2279be61bbbSBram Moolenaar call CheckDefFailure(['let g:var = 5'], 'E1016:') 228d3aac291SBram Moolenaar call CheckDefFailure(['let w:var = 5'], 'E1079:') 229d3aac291SBram Moolenaar call CheckDefFailure(['let b:var = 5'], 'E1078:') 230d3aac291SBram Moolenaar call CheckDefFailure(['let t:var = 5'], 'E1080:') 2319be61bbbSBram Moolenaar 2329be61bbbSBram Moolenaar call CheckDefFailure(['let anr = 4', 'anr ..= "text"'], 'E1019:') 2339be61bbbSBram Moolenaar call CheckDefFailure(['let xnr += 4'], 'E1020:') 2349be61bbbSBram Moolenaar 23533fa29cfSBram Moolenaar call CheckScriptFailure(['vim9script', 'def Func()', 'let dummy = s:notfound', 'enddef'], 'E1050:') 23633fa29cfSBram Moolenaar 2378a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<string> = [123]'], 'expected list<string> but got list<number>') 2388a7d6542SBram Moolenaar call CheckDefFailure(['let var: list<number> = ["xx"]'], 'expected list<number> but got list<string>') 2398a7d6542SBram Moolenaar 2408a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<string> = #{key: 123}'], 'expected dict<string> but got dict<number>') 2418a7d6542SBram Moolenaar call CheckDefFailure(['let var: dict<number> = #{key: "xx"}'], 'expected dict<number> but got dict<string>') 2428a7d6542SBram Moolenaar 2438a7d6542SBram Moolenaar call CheckDefFailure(['let var = feedkeys("0")'], 'E1031:') 2448a7d6542SBram Moolenaar call CheckDefFailure(['let var: number = feedkeys("0")'], 'expected number but got void') 24542a480bfSBram Moolenaar 246d77a8525SBram Moolenaar call CheckDefFailure(['let var: dict <number>'], 'E1068:') 24742a480bfSBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 248cab27678SBram Moolenaar 249cab27678SBram Moolenaar call assert_fails('s/^/\=Mess()/n', 'E794:') 250cab27678SBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 251d72c1bf0SBram Moolenaarenddef 252d72c1bf0SBram Moolenaar 253d72c1bf0SBram Moolenaardef Test_unlet() 254d72c1bf0SBram Moolenaar g:somevar = 'yes' 255d72c1bf0SBram Moolenaar assert_true(exists('g:somevar')) 256d72c1bf0SBram Moolenaar unlet g:somevar 257d72c1bf0SBram Moolenaar assert_false(exists('g:somevar')) 258d72c1bf0SBram Moolenaar unlet! g:somevar 259d72c1bf0SBram Moolenaar 260d72c1bf0SBram Moolenaar call CheckScriptFailure([ 261d72c1bf0SBram Moolenaar 'vim9script', 262d72c1bf0SBram Moolenaar 'let svar = 123', 263d72c1bf0SBram Moolenaar 'unlet svar', 264d72c1bf0SBram Moolenaar ], 'E1081:') 265d72c1bf0SBram Moolenaar call CheckScriptFailure([ 266d72c1bf0SBram Moolenaar 'vim9script', 267d72c1bf0SBram Moolenaar 'let svar = 123', 268d72c1bf0SBram Moolenaar 'unlet s:svar', 269d72c1bf0SBram Moolenaar ], 'E1081:') 270d72c1bf0SBram Moolenaar call CheckScriptFailure([ 271d72c1bf0SBram Moolenaar 'vim9script', 272d72c1bf0SBram Moolenaar 'let svar = 123', 273d72c1bf0SBram Moolenaar 'def Func()', 274d72c1bf0SBram Moolenaar ' unlet svar', 275d72c1bf0SBram Moolenaar 'enddef', 276d72c1bf0SBram Moolenaar ], 'E1081:') 277d72c1bf0SBram Moolenaar call CheckScriptFailure([ 278d72c1bf0SBram Moolenaar 'vim9script', 279d72c1bf0SBram Moolenaar 'let svar = 123', 280d72c1bf0SBram Moolenaar 'def Func()', 281d72c1bf0SBram Moolenaar ' unlet s:svar', 282d72c1bf0SBram Moolenaar 'enddef', 283d72c1bf0SBram Moolenaar ], 'E1081:') 2847bdaea6eSBram Moolenaar 2857bdaea6eSBram Moolenaar $ENVVAR = 'foobar' 2867bdaea6eSBram Moolenaar assert_equal('foobar', $ENVVAR) 2877bdaea6eSBram Moolenaar unlet $ENVVAR 2887bdaea6eSBram Moolenaar assert_equal('', $ENVVAR) 289d72c1bf0SBram Moolenaarenddef 290599c89c8SBram Moolenaar 2914c17ad94SBram Moolenaardef Test_delfunction() 2924c17ad94SBram Moolenaar " Check function is defined in script namespace 2934c17ad94SBram Moolenaar CheckScriptSuccess([ 2944c17ad94SBram Moolenaar 'vim9script', 2954c17ad94SBram Moolenaar 'func CheckMe()', 2964c17ad94SBram Moolenaar ' return 123', 2974c17ad94SBram Moolenaar 'endfunc', 2984c17ad94SBram Moolenaar 'assert_equal(123, s:CheckMe())', 2994c17ad94SBram Moolenaar ]) 3004c17ad94SBram Moolenaar 3014c17ad94SBram Moolenaar " Check function in script namespace cannot be deleted 3024c17ad94SBram Moolenaar CheckScriptFailure([ 3034c17ad94SBram Moolenaar 'vim9script', 3044c17ad94SBram Moolenaar 'func DeleteMe1()', 3054c17ad94SBram Moolenaar 'endfunc', 3064c17ad94SBram Moolenaar 'delfunction DeleteMe1', 3074c17ad94SBram Moolenaar ], 'E1084:') 3084c17ad94SBram Moolenaar CheckScriptFailure([ 3094c17ad94SBram Moolenaar 'vim9script', 3104c17ad94SBram Moolenaar 'func DeleteMe2()', 3114c17ad94SBram Moolenaar 'endfunc', 3124c17ad94SBram Moolenaar 'def DoThat()', 3134c17ad94SBram Moolenaar ' delfunction DeleteMe2', 3144c17ad94SBram Moolenaar 'enddef', 3154c17ad94SBram Moolenaar 'DoThat()', 3164c17ad94SBram Moolenaar ], 'E1084:') 3174c17ad94SBram Moolenaar CheckScriptFailure([ 3184c17ad94SBram Moolenaar 'vim9script', 3194c17ad94SBram Moolenaar 'def DeleteMe3()', 3204c17ad94SBram Moolenaar 'enddef', 3214c17ad94SBram Moolenaar 'delfunction DeleteMe3', 3224c17ad94SBram Moolenaar ], 'E1084:') 3234c17ad94SBram Moolenaar CheckScriptFailure([ 3244c17ad94SBram Moolenaar 'vim9script', 3254c17ad94SBram Moolenaar 'def DeleteMe4()', 3264c17ad94SBram Moolenaar 'enddef', 3274c17ad94SBram Moolenaar 'def DoThat()', 3284c17ad94SBram Moolenaar ' delfunction DeleteMe4', 3294c17ad94SBram Moolenaar 'enddef', 3304c17ad94SBram Moolenaar 'DoThat()', 3314c17ad94SBram Moolenaar ], 'E1084:') 3324c17ad94SBram Moolenaarenddef 3334c17ad94SBram Moolenaar 334599c89c8SBram Moolenaarfunc Test_wrong_type() 335599c89c8SBram Moolenaar call CheckDefFailure(['let var: list<nothing>'], 'E1010:') 336599c89c8SBram Moolenaar call CheckDefFailure(['let var: list<list<nothing>>'], 'E1010:') 337599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<nothing>'], 'E1010:') 338599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<dict<nothing>>'], 'E1010:') 339599c89c8SBram Moolenaar 340599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<number'], 'E1009:') 341599c89c8SBram Moolenaar call CheckDefFailure(['let var: dict<list<number>'], 'E1009:') 34242a480bfSBram Moolenaar 34342a480bfSBram Moolenaar call CheckDefFailure(['let var: ally'], 'E1010:') 34442a480bfSBram Moolenaar call CheckDefFailure(['let var: bram'], 'E1010:') 34542a480bfSBram Moolenaar call CheckDefFailure(['let var: cathy'], 'E1010:') 34642a480bfSBram Moolenaar call CheckDefFailure(['let var: dom'], 'E1010:') 34742a480bfSBram Moolenaar call CheckDefFailure(['let var: freddy'], 'E1010:') 34842a480bfSBram Moolenaar call CheckDefFailure(['let var: john'], 'E1010:') 34942a480bfSBram Moolenaar call CheckDefFailure(['let var: larry'], 'E1010:') 35042a480bfSBram Moolenaar call CheckDefFailure(['let var: ned'], 'E1010:') 35142a480bfSBram Moolenaar call CheckDefFailure(['let var: pam'], 'E1010:') 35242a480bfSBram Moolenaar call CheckDefFailure(['let var: sam'], 'E1010:') 35342a480bfSBram Moolenaar call CheckDefFailure(['let var: vim'], 'E1010:') 354a0a9f43aSBram Moolenaar 355a0a9f43aSBram Moolenaar call CheckDefFailure(['let Ref: number', 'Ref()'], 'E1085:') 356a0a9f43aSBram Moolenaar call CheckDefFailure(['let Ref: string', 'let res = Ref()'], 'E1085:') 3578a7d6542SBram Moolenaarendfunc 3588a7d6542SBram Moolenaar 3598a7d6542SBram Moolenaarfunc Test_const() 3608a7d6542SBram Moolenaar call CheckDefFailure(['const var = 234', 'var = 99'], 'E1018:') 3618a7d6542SBram Moolenaar call CheckDefFailure(['const one = 234', 'let one = 99'], 'E1017:') 3628a7d6542SBram Moolenaar call CheckDefFailure(['const two'], 'E1021:') 3639be61bbbSBram Moolenaar call CheckDefFailure(['const &option'], 'E996:') 3648a7d6542SBram Moolenaarendfunc 3658a7d6542SBram Moolenaar 3668a7d6542SBram Moolenaardef Test_block() 3678a7d6542SBram Moolenaar let outer = 1 3688a7d6542SBram Moolenaar { 3698a7d6542SBram Moolenaar let inner = 2 3708a7d6542SBram Moolenaar assert_equal(1, outer) 3718a7d6542SBram Moolenaar assert_equal(2, inner) 3728a7d6542SBram Moolenaar } 3738a7d6542SBram Moolenaar assert_equal(1, outer) 3748a7d6542SBram Moolenaarenddef 3758a7d6542SBram Moolenaar 3768a7d6542SBram Moolenaarfunc Test_block_failure() 3778a7d6542SBram Moolenaar call CheckDefFailure(['{', 'let inner = 1', '}', 'echo inner'], 'E1001:') 378585fea7bSBram Moolenaar call CheckDefFailure(['}'], 'E1025:') 379585fea7bSBram Moolenaar call CheckDefFailure(['{', 'echo 1'], 'E1026:') 3808a7d6542SBram Moolenaarendfunc 3818a7d6542SBram Moolenaar 382585fea7bSBram Moolenaardef Test_cmd_modifier() 383585fea7bSBram Moolenaar tab echo '0' 384585fea7bSBram Moolenaar call CheckDefFailure(['5tab echo 3'], 'E16:') 385585fea7bSBram Moolenaarenddef 386585fea7bSBram Moolenaar 3878a7d6542SBram Moolenaardef Test_try_catch() 3888a7d6542SBram Moolenaar let l = [] 3897a092245SBram Moolenaar try # comment 3908a7d6542SBram Moolenaar add(l, '1') 3918a7d6542SBram Moolenaar throw 'wrong' 3928a7d6542SBram Moolenaar add(l, '2') 3937a092245SBram Moolenaar catch # comment 3948a7d6542SBram Moolenaar add(l, v:exception) 3957a092245SBram Moolenaar finally # comment 3968a7d6542SBram Moolenaar add(l, '3') 3977a092245SBram Moolenaar endtry # comment 3988a7d6542SBram Moolenaar assert_equal(['1', 'wrong', '3'], l) 3998a7d6542SBram Moolenaarenddef 4008a7d6542SBram Moolenaar 401257cc5eeSBram Moolenaardef ThrowFromDef() 402a72cfb80SBram Moolenaar throw "getout" # comment 403257cc5eeSBram Moolenaarenddef 404257cc5eeSBram Moolenaar 405257cc5eeSBram Moolenaarfunc CatchInFunc() 406257cc5eeSBram Moolenaar try 407257cc5eeSBram Moolenaar call ThrowFromDef() 408257cc5eeSBram Moolenaar catch 409257cc5eeSBram Moolenaar let g:thrown_func = v:exception 410257cc5eeSBram Moolenaar endtry 411257cc5eeSBram Moolenaarendfunc 412257cc5eeSBram Moolenaar 413257cc5eeSBram Moolenaardef CatchInDef() 414257cc5eeSBram Moolenaar try 415257cc5eeSBram Moolenaar ThrowFromDef() 416257cc5eeSBram Moolenaar catch 417257cc5eeSBram Moolenaar g:thrown_def = v:exception 418257cc5eeSBram Moolenaar endtry 419257cc5eeSBram Moolenaarenddef 420257cc5eeSBram Moolenaar 421f575adffSBram Moolenaardef ReturnFinally(): string 422f575adffSBram Moolenaar try 423f575adffSBram Moolenaar return 'intry' 424f575adffSBram Moolenaar finally 425f575adffSBram Moolenaar g:in_finally = 'finally' 426f575adffSBram Moolenaar endtry 427f575adffSBram Moolenaar return 'end' 428f575adffSBram Moolenaarenddef 429f575adffSBram Moolenaar 430257cc5eeSBram Moolenaardef Test_try_catch_nested() 431257cc5eeSBram Moolenaar CatchInFunc() 432257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_func) 433257cc5eeSBram Moolenaar 434257cc5eeSBram Moolenaar CatchInDef() 435257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_def) 436f575adffSBram Moolenaar 437f575adffSBram Moolenaar assert_equal('intry', ReturnFinally()) 438f575adffSBram Moolenaar assert_equal('finally', g:in_finally) 439f575adffSBram Moolenaarenddef 440f575adffSBram Moolenaar 441f575adffSBram Moolenaardef Test_try_catch_match() 442f575adffSBram Moolenaar let seq = 'a' 443f575adffSBram Moolenaar try 444f575adffSBram Moolenaar throw 'something' 445f575adffSBram Moolenaar catch /nothing/ 446f575adffSBram Moolenaar seq ..= 'x' 447f575adffSBram Moolenaar catch /some/ 448f575adffSBram Moolenaar seq ..= 'b' 449f575adffSBram Moolenaar catch /asdf/ 450f575adffSBram Moolenaar seq ..= 'x' 451e8c4abbbSBram Moolenaar catch ?a\?sdf? 452e8c4abbbSBram Moolenaar seq ..= 'y' 453f575adffSBram Moolenaar finally 454f575adffSBram Moolenaar seq ..= 'c' 455f575adffSBram Moolenaar endtry 456f575adffSBram Moolenaar assert_equal('abc', seq) 457257cc5eeSBram Moolenaarenddef 458257cc5eeSBram Moolenaar 459e8c4abbbSBram Moolenaardef Test_try_catch_fails() 460e8c4abbbSBram Moolenaar call CheckDefFailure(['catch'], 'E603:') 461e8c4abbbSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'catch','catch'], 'E1033:') 462e8c4abbbSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'catch /pat'], 'E1067:') 463585fea7bSBram Moolenaar call CheckDefFailure(['finally'], 'E606:') 464585fea7bSBram Moolenaar call CheckDefFailure(['try', 'echo 0', 'finally', 'echo 1', 'finally'], 'E607:') 465585fea7bSBram Moolenaar call CheckDefFailure(['endtry'], 'E602:') 466585fea7bSBram Moolenaar call CheckDefFailure(['while 1', 'endtry'], 'E170:') 467585fea7bSBram Moolenaar call CheckDefFailure(['for i in range(5)', 'endtry'], 'E170:') 468585fea7bSBram Moolenaar call CheckDefFailure(['if 2', 'endtry'], 'E171:') 469585fea7bSBram Moolenaar call CheckDefFailure(['try', 'echo 1', 'endtry'], 'E1032:') 470585fea7bSBram Moolenaar 471a72cfb80SBram Moolenaar call CheckDefFailure(['throw'], 'E1015:') 472585fea7bSBram Moolenaar call CheckDefFailure(['throw xxx'], 'E1001:') 473e8c4abbbSBram Moolenaarenddef 474e8c4abbbSBram Moolenaar 4752a1381c3SBram Moolenaarif has('channel') 47640ee466cSBram Moolenaar let someJob = test_null_job() 47740ee466cSBram Moolenaar 47840ee466cSBram Moolenaar def FuncWithError() 47940ee466cSBram Moolenaar echomsg g:someJob 48040ee466cSBram Moolenaar enddef 48140ee466cSBram Moolenaar 48240ee466cSBram Moolenaar func Test_convert_emsg_to_exception() 48340ee466cSBram Moolenaar try 48440ee466cSBram Moolenaar call FuncWithError() 48540ee466cSBram Moolenaar catch 48640ee466cSBram Moolenaar call assert_match('Vim:E908:', v:exception) 48740ee466cSBram Moolenaar endtry 48840ee466cSBram Moolenaar endfunc 4892a1381c3SBram Moolenaarendif 49040ee466cSBram Moolenaar 4918a7d6542SBram Moolenaarlet s:export_script_lines =<< trim END 4928a7d6542SBram Moolenaar vim9script 4938a7d6542SBram Moolenaar let name: string = 'bob' 4948a7d6542SBram Moolenaar def Concat(arg: string): string 4958a7d6542SBram Moolenaar return name .. arg 4968a7d6542SBram Moolenaar enddef 4978a7d6542SBram Moolenaar let g:result = Concat('bie') 4988a7d6542SBram Moolenaar let g:localname = name 4998a7d6542SBram Moolenaar 5008a7d6542SBram Moolenaar export const CONST = 1234 5018a7d6542SBram Moolenaar export let exported = 9876 5026e587dcbSBram Moolenaar export let exp_name = 'John' 5038a7d6542SBram Moolenaar export def Exported(): string 5048a7d6542SBram Moolenaar return 'Exported' 5058a7d6542SBram Moolenaar enddef 5068a7d6542SBram MoolenaarEND 5078a7d6542SBram Moolenaar 5085269bd2aSBram Moolenaardef Test_vim9_import_export() 5098a7d6542SBram Moolenaar let import_script_lines =<< trim END 5108a7d6542SBram Moolenaar vim9script 5118a7d6542SBram Moolenaar import {exported, Exported} from './Xexport.vim' 5128a7d6542SBram Moolenaar g:imported = exported 5136e587dcbSBram Moolenaar exported += 3 5146e587dcbSBram Moolenaar g:imported_added = exported 5158a7d6542SBram Moolenaar g:imported_func = Exported() 5166e587dcbSBram Moolenaar 5176e587dcbSBram Moolenaar import {exp_name} from './Xexport.vim' 5186e587dcbSBram Moolenaar g:imported_name = exp_name 5196e587dcbSBram Moolenaar exp_name ..= ' Doe' 5206e587dcbSBram Moolenaar g:imported_name_appended = exp_name 5215381c7a1SBram Moolenaar g:imported_later = exported 5228a7d6542SBram Moolenaar END 5238a7d6542SBram Moolenaar 5248a7d6542SBram Moolenaar writefile(import_script_lines, 'Ximport.vim') 5258a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport.vim') 5268a7d6542SBram Moolenaar 5278a7d6542SBram Moolenaar source Ximport.vim 5288a7d6542SBram Moolenaar 5298a7d6542SBram Moolenaar assert_equal('bobbie', g:result) 5308a7d6542SBram Moolenaar assert_equal('bob', g:localname) 5318a7d6542SBram Moolenaar assert_equal(9876, g:imported) 5326e587dcbSBram Moolenaar assert_equal(9879, g:imported_added) 5335381c7a1SBram Moolenaar assert_equal(9879, g:imported_later) 5348a7d6542SBram Moolenaar assert_equal('Exported', g:imported_func) 5356e587dcbSBram Moolenaar assert_equal('John', g:imported_name) 5366e587dcbSBram Moolenaar assert_equal('John Doe', g:imported_name_appended) 5378a7d6542SBram Moolenaar assert_false(exists('g:name')) 5388a7d6542SBram Moolenaar 5398a7d6542SBram Moolenaar unlet g:result 5408a7d6542SBram Moolenaar unlet g:localname 5418a7d6542SBram Moolenaar unlet g:imported 5426e587dcbSBram Moolenaar unlet g:imported_added 5435381c7a1SBram Moolenaar unlet g:imported_later 5448a7d6542SBram Moolenaar unlet g:imported_func 5456e587dcbSBram Moolenaar unlet g:imported_name g:imported_name_appended 5468a7d6542SBram Moolenaar delete('Ximport.vim') 547f2d5c240SBram Moolenaar 5485381c7a1SBram Moolenaar let import_in_def_lines =<< trim END 5495381c7a1SBram Moolenaar vim9script 5505381c7a1SBram Moolenaar def ImportInDef() 5515381c7a1SBram Moolenaar import exported from './Xexport.vim' 5525381c7a1SBram Moolenaar g:imported = exported 5535381c7a1SBram Moolenaar exported += 7 5545381c7a1SBram Moolenaar g:imported_added = exported 5555381c7a1SBram Moolenaar enddef 5565381c7a1SBram Moolenaar ImportInDef() 5575381c7a1SBram Moolenaar END 5585381c7a1SBram Moolenaar writefile(import_in_def_lines, 'Ximport2.vim') 5595381c7a1SBram Moolenaar source Ximport2.vim 5605381c7a1SBram Moolenaar " TODO: this should be 9879 5615381c7a1SBram Moolenaar assert_equal(9876, g:imported) 5625381c7a1SBram Moolenaar assert_equal(9883, g:imported_added) 5635381c7a1SBram Moolenaar unlet g:imported 5645381c7a1SBram Moolenaar unlet g:imported_added 5655381c7a1SBram Moolenaar delete('Ximport2.vim') 5665381c7a1SBram Moolenaar 567f2d5c240SBram Moolenaar let import_star_as_lines =<< trim END 568f2d5c240SBram Moolenaar vim9script 569f2d5c240SBram Moolenaar import * as Export from './Xexport.vim' 570f2d5c240SBram Moolenaar def UseExport() 571f2d5c240SBram Moolenaar g:imported = Export.exported 572f2d5c240SBram Moolenaar enddef 573f2d5c240SBram Moolenaar UseExport() 574f2d5c240SBram Moolenaar END 575f2d5c240SBram Moolenaar writefile(import_star_as_lines, 'Ximport.vim') 576f2d5c240SBram Moolenaar source Ximport.vim 5775381c7a1SBram Moolenaar assert_equal(9883, g:imported) 578f2d5c240SBram Moolenaar 579599c89c8SBram Moolenaar let import_star_as_lines_no_dot =<< trim END 580599c89c8SBram Moolenaar vim9script 581599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 582599c89c8SBram Moolenaar def Func() 583599c89c8SBram Moolenaar let dummy = 1 584599c89c8SBram Moolenaar let imported = Export + dummy 585599c89c8SBram Moolenaar enddef 586599c89c8SBram Moolenaar END 587599c89c8SBram Moolenaar writefile(import_star_as_lines_no_dot, 'Ximport.vim') 588599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1060:') 589599c89c8SBram Moolenaar 590599c89c8SBram Moolenaar let import_star_as_lines_dot_space =<< trim END 591599c89c8SBram Moolenaar vim9script 592599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 593599c89c8SBram Moolenaar def Func() 594599c89c8SBram Moolenaar let imported = Export . exported 595599c89c8SBram Moolenaar enddef 596599c89c8SBram Moolenaar END 597599c89c8SBram Moolenaar writefile(import_star_as_lines_dot_space, 'Ximport.vim') 598599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1074:') 599599c89c8SBram Moolenaar 600599c89c8SBram Moolenaar let import_star_as_lines_missing_name =<< trim END 601599c89c8SBram Moolenaar vim9script 602599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 603599c89c8SBram Moolenaar def Func() 604599c89c8SBram Moolenaar let imported = Export. 605599c89c8SBram Moolenaar enddef 606599c89c8SBram Moolenaar END 607599c89c8SBram Moolenaar writefile(import_star_as_lines_missing_name, 'Ximport.vim') 608599c89c8SBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 609599c89c8SBram Moolenaar 610f2d5c240SBram Moolenaar let import_star_lines =<< trim END 611f2d5c240SBram Moolenaar vim9script 612f2d5c240SBram Moolenaar import * from './Xexport.vim' 613f2d5c240SBram Moolenaar g:imported = exported 614f2d5c240SBram Moolenaar END 615f2d5c240SBram Moolenaar writefile(import_star_lines, 'Ximport.vim') 616f2d5c240SBram Moolenaar assert_fails('source Ximport.vim', 'E1045:') 617f2d5c240SBram Moolenaar 618fa29c8abSBram Moolenaar " try to import something that exists but is not exported 619fa29c8abSBram Moolenaar let import_not_exported_lines =<< trim END 620fa29c8abSBram Moolenaar vim9script 621fa29c8abSBram Moolenaar import name from './Xexport.vim' 622fa29c8abSBram Moolenaar END 623fa29c8abSBram Moolenaar writefile(import_not_exported_lines, 'Ximport.vim') 624fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1049:') 625fa29c8abSBram Moolenaar 6265269bd2aSBram Moolenaar " try to import something that is already defined 6275269bd2aSBram Moolenaar let import_already_defined =<< trim END 6285269bd2aSBram Moolenaar vim9script 6295269bd2aSBram Moolenaar let exported = 'something' 6305269bd2aSBram Moolenaar import exported from './Xexport.vim' 6315269bd2aSBram Moolenaar END 6325269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 6335269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 6345269bd2aSBram Moolenaar 6355269bd2aSBram Moolenaar " try to import something that is already defined 6365269bd2aSBram Moolenaar import_already_defined =<< trim END 6375269bd2aSBram Moolenaar vim9script 6385269bd2aSBram Moolenaar let exported = 'something' 6395269bd2aSBram Moolenaar import * as exported from './Xexport.vim' 6405269bd2aSBram Moolenaar END 6415269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 6425269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 6435269bd2aSBram Moolenaar 6445269bd2aSBram Moolenaar " try to import something that is already defined 6455269bd2aSBram Moolenaar import_already_defined =<< trim END 6465269bd2aSBram Moolenaar vim9script 6475269bd2aSBram Moolenaar let exported = 'something' 6485269bd2aSBram Moolenaar import {exported} from './Xexport.vim' 6495269bd2aSBram Moolenaar END 6505269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 6515269bd2aSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:') 6525269bd2aSBram Moolenaar 653fa29c8abSBram Moolenaar " import a very long name, requires making a copy 654fa29c8abSBram Moolenaar let import_long_name_lines =<< trim END 655fa29c8abSBram Moolenaar vim9script 656fa29c8abSBram Moolenaar import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim' 657fa29c8abSBram Moolenaar END 658fa29c8abSBram Moolenaar writefile(import_long_name_lines, 'Ximport.vim') 659fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1048:') 660fa29c8abSBram Moolenaar 661fa29c8abSBram Moolenaar let import_no_from_lines =<< trim END 662fa29c8abSBram Moolenaar vim9script 663fa29c8abSBram Moolenaar import name './Xexport.vim' 664fa29c8abSBram Moolenaar END 665fa29c8abSBram Moolenaar writefile(import_no_from_lines, 'Ximport.vim') 666fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1070:') 667fa29c8abSBram Moolenaar 668fa29c8abSBram Moolenaar let import_invalid_string_lines =<< trim END 669fa29c8abSBram Moolenaar vim9script 670fa29c8abSBram Moolenaar import name from Xexport.vim 671fa29c8abSBram Moolenaar END 672fa29c8abSBram Moolenaar writefile(import_invalid_string_lines, 'Ximport.vim') 673fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1071:') 674fa29c8abSBram Moolenaar 675fa29c8abSBram Moolenaar let import_wrong_name_lines =<< trim END 676fa29c8abSBram Moolenaar vim9script 677fa29c8abSBram Moolenaar import name from './XnoExport.vim' 678fa29c8abSBram Moolenaar END 679fa29c8abSBram Moolenaar writefile(import_wrong_name_lines, 'Ximport.vim') 680fa29c8abSBram Moolenaar assert_fails('source Ximport.vim', 'E1053:') 681fa29c8abSBram Moolenaar 682fa29c8abSBram Moolenaar let import_missing_comma_lines =<< trim END 683fa29c8abSBram Moolenaar vim9script 684fa29c8abSBram Moolenaar import {exported name} from './Xexport.vim' 685fa29c8abSBram Moolenaar END 6865269bd2aSBram Moolenaar writefile(import_missing_comma_lines, 'Ximport3.vim') 6875269bd2aSBram Moolenaar assert_fails('source Ximport3.vim', 'E1046:') 688fa29c8abSBram Moolenaar 689f2d5c240SBram Moolenaar delete('Ximport.vim') 6905269bd2aSBram Moolenaar delete('Ximport3.vim') 6918a7d6542SBram Moolenaar delete('Xexport.vim') 6928a7d6542SBram Moolenaar 693750802b5SBram Moolenaar " Check that in a Vim9 script 'cpo' is set to the Vim default. 694750802b5SBram Moolenaar set cpo&vi 695750802b5SBram Moolenaar let cpo_before = &cpo 696750802b5SBram Moolenaar let lines =<< trim END 697750802b5SBram Moolenaar vim9script 698750802b5SBram Moolenaar g:cpo_in_vim9script = &cpo 699750802b5SBram Moolenaar END 700750802b5SBram Moolenaar writefile(lines, 'Xvim9_script') 701750802b5SBram Moolenaar source Xvim9_script 702750802b5SBram Moolenaar assert_equal(cpo_before, &cpo) 703750802b5SBram Moolenaar set cpo&vim 704750802b5SBram Moolenaar assert_equal(&cpo, g:cpo_in_vim9script) 705750802b5SBram Moolenaar delete('Xvim9_script') 706750802b5SBram Moolenaarenddef 707750802b5SBram Moolenaar 708750802b5SBram Moolenaardef Test_vim9script_fails() 7098a7d6542SBram Moolenaar CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:') 7108a7d6542SBram Moolenaar CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:') 711750802b5SBram Moolenaar CheckScriptFailure(['export let some = 123'], 'E1042:') 712f2d5c240SBram Moolenaar CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1042:') 713750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export let g:some'], 'E1044:') 714750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:') 715750802b5SBram Moolenaar 716750802b5SBram Moolenaar assert_fails('vim9script', 'E1038') 717a26b9700SBram Moolenaar assert_fails('export something', 'E1043') 7188a7d6542SBram Moolenaarenddef 7198a7d6542SBram Moolenaar 7204c17ad94SBram Moolenaardef Test_vim9script_reload_import() 7218a7d6542SBram Moolenaar let lines =<< trim END 7228a7d6542SBram Moolenaar vim9script 7238a7d6542SBram Moolenaar const var = '' 7248a7d6542SBram Moolenaar let valone = 1234 7258a7d6542SBram Moolenaar def MyFunc(arg: string) 7268a7d6542SBram Moolenaar valone = 5678 7278a7d6542SBram Moolenaar enddef 7288a7d6542SBram Moolenaar END 7298a7d6542SBram Moolenaar let morelines =<< trim END 7308a7d6542SBram Moolenaar let valtwo = 222 7318a7d6542SBram Moolenaar export def GetValtwo(): number 7328a7d6542SBram Moolenaar return valtwo 7338a7d6542SBram Moolenaar enddef 7348a7d6542SBram Moolenaar END 73503afdcf1SBram Moolenaar writefile(lines + morelines, 'Xreload.vim') 7368a7d6542SBram Moolenaar source Xreload.vim 7378a7d6542SBram Moolenaar source Xreload.vim 7388a7d6542SBram Moolenaar source Xreload.vim 7398a7d6542SBram Moolenaar 7408a7d6542SBram Moolenaar let testlines =<< trim END 7418a7d6542SBram Moolenaar vim9script 7428a7d6542SBram Moolenaar def TheFunc() 7438a7d6542SBram Moolenaar import GetValtwo from './Xreload.vim' 7448a7d6542SBram Moolenaar assert_equal(222, GetValtwo()) 7458a7d6542SBram Moolenaar enddef 7468a7d6542SBram Moolenaar TheFunc() 7478a7d6542SBram Moolenaar END 7488a7d6542SBram Moolenaar writefile(testlines, 'Ximport.vim') 7498a7d6542SBram Moolenaar source Ximport.vim 7508a7d6542SBram Moolenaar 75103afdcf1SBram Moolenaar " Test that when not using "morelines" GetValtwo() and valtwo are still 75203afdcf1SBram Moolenaar " defined, because import doesn't reload a script. 7538a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 7548a7d6542SBram Moolenaar source Ximport.vim 7558a7d6542SBram Moolenaar 7568a7d6542SBram Moolenaar " cannot declare a var twice 7578a7d6542SBram Moolenaar lines =<< trim END 7588a7d6542SBram Moolenaar vim9script 7598a7d6542SBram Moolenaar let valone = 1234 7608a7d6542SBram Moolenaar let valone = 5678 7618a7d6542SBram Moolenaar END 7628a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 7638a7d6542SBram Moolenaar assert_fails('source Xreload.vim', 'E1041:') 7648a7d6542SBram Moolenaar 7658a7d6542SBram Moolenaar delete('Xreload.vim') 7668a7d6542SBram Moolenaar delete('Ximport.vim') 7678a7d6542SBram Moolenaarenddef 7688a7d6542SBram Moolenaar 7694c17ad94SBram Moolenaardef Test_vim9script_reload_delfunc() 7704c17ad94SBram Moolenaar let first_lines =<< trim END 7714c17ad94SBram Moolenaar vim9script 7724c17ad94SBram Moolenaar def FuncYes(): string 7734c17ad94SBram Moolenaar return 'yes' 7744c17ad94SBram Moolenaar enddef 7754c17ad94SBram Moolenaar END 77603afdcf1SBram Moolenaar let withno_lines =<< trim END 7774c17ad94SBram Moolenaar def FuncNo(): string 7784c17ad94SBram Moolenaar return 'no' 7794c17ad94SBram Moolenaar enddef 7804c17ad94SBram Moolenaar def g:DoCheck(no_exists: bool) 7814c17ad94SBram Moolenaar assert_equal('yes', FuncYes()) 7824c17ad94SBram Moolenaar assert_equal('no', FuncNo()) 78303afdcf1SBram Moolenaar enddef 78403afdcf1SBram Moolenaar END 78503afdcf1SBram Moolenaar let nono_lines =<< trim END 78603afdcf1SBram Moolenaar def g:DoCheck(no_exists: bool) 78703afdcf1SBram Moolenaar assert_equal('yes', FuncYes()) 7884c17ad94SBram Moolenaar assert_fails('call FuncNo()', 'E117:') 7894c17ad94SBram Moolenaar enddef 7904c17ad94SBram Moolenaar END 7914c17ad94SBram Moolenaar 7924c17ad94SBram Moolenaar # FuncNo() is defined 79303afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 7944c17ad94SBram Moolenaar source Xreloaded.vim 7954c17ad94SBram Moolenaar g:DoCheck(true) 7964c17ad94SBram Moolenaar 7974c17ad94SBram Moolenaar # FuncNo() is not redefined 79803afdcf1SBram Moolenaar writefile(first_lines + nono_lines, 'Xreloaded.vim') 7994c17ad94SBram Moolenaar source Xreloaded.vim 80003afdcf1SBram Moolenaar g:DoCheck() 8014c17ad94SBram Moolenaar 8024c17ad94SBram Moolenaar # FuncNo() is back 80303afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 8044c17ad94SBram Moolenaar source Xreloaded.vim 80503afdcf1SBram Moolenaar g:DoCheck() 8064c17ad94SBram Moolenaar 8074c17ad94SBram Moolenaar delete('Xreloaded.vim') 8084c17ad94SBram Moolenaarenddef 8094c17ad94SBram Moolenaar 8108a7d6542SBram Moolenaardef Test_import_absolute() 8118a7d6542SBram Moolenaar let import_lines = [ 812e6085c53SBram Moolenaar 'vim9script', 813e6085c53SBram Moolenaar 'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"', 814e6085c53SBram Moolenaar 'def UseExported()', 815e6085c53SBram Moolenaar ' g:imported_abs = exported', 816e6085c53SBram Moolenaar ' exported = 8888', 817e6085c53SBram Moolenaar ' g:imported_after = exported', 818e6085c53SBram Moolenaar 'enddef', 819e6085c53SBram Moolenaar 'UseExported()', 820e6085c53SBram Moolenaar 'g:import_disassembled = execute("disass UseExported")', 821e6085c53SBram Moolenaar ] 8228a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_abs.vim') 8238a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport_abs.vim') 8248a7d6542SBram Moolenaar 8258a7d6542SBram Moolenaar source Ximport_abs.vim 8268a7d6542SBram Moolenaar 8278a7d6542SBram Moolenaar assert_equal(9876, g:imported_abs) 8284e12a5dfSBram Moolenaar assert_equal(8888, g:imported_after) 829675f716eSBram Moolenaar assert_match('<SNR>\d\+_UseExported.*' .. 830675f716eSBram Moolenaar 'g:imported_abs = exported.*' .. 831675f716eSBram Moolenaar '0 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 832675f716eSBram Moolenaar '1 STOREG g:imported_abs.*' .. 833675f716eSBram Moolenaar 'exported = 8888.*' .. 834675f716eSBram Moolenaar '3 STORESCRIPT exported in .*Xexport_abs.vim.*' .. 835675f716eSBram Moolenaar 'g:imported_after = exported.*' .. 836675f716eSBram Moolenaar '4 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 837675f716eSBram Moolenaar '5 STOREG g:imported_after.*', 838e6085c53SBram Moolenaar g:import_disassembled) 8398a7d6542SBram Moolenaar unlet g:imported_abs 8404e12a5dfSBram Moolenaar unlet g:import_disassembled 8418a7d6542SBram Moolenaar 8428a7d6542SBram Moolenaar delete('Ximport_abs.vim') 8438a7d6542SBram Moolenaar delete('Xexport_abs.vim') 8448a7d6542SBram Moolenaarenddef 8458a7d6542SBram Moolenaar 8468a7d6542SBram Moolenaardef Test_import_rtp() 8478a7d6542SBram Moolenaar let import_lines = [ 848e6085c53SBram Moolenaar 'vim9script', 849e6085c53SBram Moolenaar 'import exported from "Xexport_rtp.vim"', 850e6085c53SBram Moolenaar 'g:imported_rtp = exported', 851e6085c53SBram Moolenaar ] 8528a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_rtp.vim') 8538a7d6542SBram Moolenaar mkdir('import') 8548a7d6542SBram Moolenaar writefile(s:export_script_lines, 'import/Xexport_rtp.vim') 8558a7d6542SBram Moolenaar 8568a7d6542SBram Moolenaar let save_rtp = &rtp 8578a7d6542SBram Moolenaar &rtp = getcwd() 8588a7d6542SBram Moolenaar source Ximport_rtp.vim 8598a7d6542SBram Moolenaar &rtp = save_rtp 8608a7d6542SBram Moolenaar 8618a7d6542SBram Moolenaar assert_equal(9876, g:imported_rtp) 8628a7d6542SBram Moolenaar unlet g:imported_rtp 8638a7d6542SBram Moolenaar 8648a7d6542SBram Moolenaar delete('Ximport_rtp.vim') 8658a7d6542SBram Moolenaar delete('import/Xexport_rtp.vim') 8668a7d6542SBram Moolenaar delete('import', 'd') 8678a7d6542SBram Moolenaarenddef 8688a7d6542SBram Moolenaar 8698a7d6542SBram Moolenaardef Test_fixed_size_list() 8708a7d6542SBram Moolenaar " will be allocated as one piece of memory, check that changes work 8718a7d6542SBram Moolenaar let l = [1, 2, 3, 4] 8728a7d6542SBram Moolenaar l->remove(0) 8738a7d6542SBram Moolenaar l->add(5) 8748a7d6542SBram Moolenaar l->insert(99, 1) 8750f18b6d1SBram Moolenaar assert_equal([2, 99, 3, 4, 5], l) 8768a7d6542SBram Moolenaarenddef 8778a7d6542SBram Moolenaar 878158906cfSBram Moolenaardef IfElse(what: number): string 879158906cfSBram Moolenaar let res = '' 880158906cfSBram Moolenaar if what == 1 881158906cfSBram Moolenaar res = "one" 882158906cfSBram Moolenaar elseif what == 2 883158906cfSBram Moolenaar res = "two" 884a259d8d3SBram Moolenaar else 885158906cfSBram Moolenaar res = "three" 886a259d8d3SBram Moolenaar endif 887158906cfSBram Moolenaar return res 888a259d8d3SBram Moolenaarenddef 889a259d8d3SBram Moolenaar 890158906cfSBram Moolenaardef Test_if_elseif_else() 891158906cfSBram Moolenaar assert_equal('one', IfElse(1)) 892158906cfSBram Moolenaar assert_equal('two', IfElse(2)) 893158906cfSBram Moolenaar assert_equal('three', IfElse(3)) 8940f18b6d1SBram Moolenaarenddef 8950f18b6d1SBram Moolenaar 896e8c4abbbSBram Moolenaardef Test_if_elseif_else_fails() 897e8c4abbbSBram Moolenaar call CheckDefFailure(['elseif true'], 'E582:') 898e8c4abbbSBram Moolenaar call CheckDefFailure(['else'], 'E581:') 899e8c4abbbSBram Moolenaar call CheckDefFailure(['endif'], 'E580:') 900e8c4abbbSBram Moolenaar call CheckDefFailure(['if true', 'elseif xxx'], 'E1001:') 901585fea7bSBram Moolenaar call CheckDefFailure(['if true', 'echo 1'], 'E171:') 902e8c4abbbSBram Moolenaarenddef 903e8c4abbbSBram Moolenaar 9046d69bf60SBram Moolenaarlet g:bool_true = v:true 9056d69bf60SBram Moolenaarlet g:bool_false = v:false 9066d69bf60SBram Moolenaar 9076d69bf60SBram Moolenaardef Test_if_const_expr() 9086d69bf60SBram Moolenaar let res = false 9096d69bf60SBram Moolenaar if true ? true : false 9106d69bf60SBram Moolenaar res = true 9116d69bf60SBram Moolenaar endif 9126d69bf60SBram Moolenaar assert_equal(true, res) 9136d69bf60SBram Moolenaar 914585fea7bSBram Moolenaar g:glob = 2 915585fea7bSBram Moolenaar if false 916585fea7bSBram Moolenaar execute('let g:glob = 3') 917585fea7bSBram Moolenaar endif 918585fea7bSBram Moolenaar assert_equal(2, g:glob) 919585fea7bSBram Moolenaar if true 920585fea7bSBram Moolenaar execute('let g:glob = 3') 921585fea7bSBram Moolenaar endif 922585fea7bSBram Moolenaar assert_equal(3, g:glob) 923585fea7bSBram Moolenaar 9246d69bf60SBram Moolenaar res = false 9256d69bf60SBram Moolenaar if g:bool_true ? true : false 9266d69bf60SBram Moolenaar res = true 9276d69bf60SBram Moolenaar endif 9286d69bf60SBram Moolenaar assert_equal(true, res) 9296d69bf60SBram Moolenaar 9306d69bf60SBram Moolenaar res = false 9316d69bf60SBram Moolenaar if true ? g:bool_true : false 9326d69bf60SBram Moolenaar res = true 9336d69bf60SBram Moolenaar endif 9346d69bf60SBram Moolenaar assert_equal(true, res) 9356d69bf60SBram Moolenaar 9366d69bf60SBram Moolenaar res = false 9376d69bf60SBram Moolenaar if true ? true : g:bool_false 9386d69bf60SBram Moolenaar res = true 9396d69bf60SBram Moolenaar endif 9406d69bf60SBram Moolenaar assert_equal(true, res) 9416d69bf60SBram Moolenaar 9426d69bf60SBram Moolenaar res = false 9436d69bf60SBram Moolenaar if true ? false : true 9446d69bf60SBram Moolenaar res = true 9456d69bf60SBram Moolenaar endif 9466d69bf60SBram Moolenaar assert_equal(false, res) 9476d69bf60SBram Moolenaar 9486d69bf60SBram Moolenaar res = false 9496d69bf60SBram Moolenaar if false ? false : true 9506d69bf60SBram Moolenaar res = true 9516d69bf60SBram Moolenaar endif 9526d69bf60SBram Moolenaar assert_equal(true, res) 9536d69bf60SBram Moolenaar 9546d69bf60SBram Moolenaar res = false 9556d69bf60SBram Moolenaar if false ? true : false 9566d69bf60SBram Moolenaar res = true 9576d69bf60SBram Moolenaar endif 9586d69bf60SBram Moolenaar assert_equal(false, res) 9596d69bf60SBram Moolenaar 9606d69bf60SBram Moolenaar res = false 961e8c4abbbSBram Moolenaar if has('xyz') ? true : false 962e8c4abbbSBram Moolenaar res = true 963e8c4abbbSBram Moolenaar endif 964e8c4abbbSBram Moolenaar assert_equal(false, res) 965e8c4abbbSBram Moolenaar 966e8c4abbbSBram Moolenaar res = false 9676d69bf60SBram Moolenaar if true && true 9686d69bf60SBram Moolenaar res = true 9696d69bf60SBram Moolenaar endif 9706d69bf60SBram Moolenaar assert_equal(true, res) 9716d69bf60SBram Moolenaar 9726d69bf60SBram Moolenaar res = false 9736d69bf60SBram Moolenaar if true && false 9746d69bf60SBram Moolenaar res = true 9756d69bf60SBram Moolenaar endif 9766d69bf60SBram Moolenaar assert_equal(false, res) 9776d69bf60SBram Moolenaar 9786d69bf60SBram Moolenaar res = false 9796d69bf60SBram Moolenaar if g:bool_true && false 9806d69bf60SBram Moolenaar res = true 9816d69bf60SBram Moolenaar endif 9826d69bf60SBram Moolenaar assert_equal(false, res) 9836d69bf60SBram Moolenaar 9846d69bf60SBram Moolenaar res = false 9856d69bf60SBram Moolenaar if true && g:bool_false 9866d69bf60SBram Moolenaar res = true 9876d69bf60SBram Moolenaar endif 9886d69bf60SBram Moolenaar assert_equal(false, res) 9896d69bf60SBram Moolenaar 9906d69bf60SBram Moolenaar res = false 9916d69bf60SBram Moolenaar if false && false 9926d69bf60SBram Moolenaar res = true 9936d69bf60SBram Moolenaar endif 9946d69bf60SBram Moolenaar assert_equal(false, res) 9956d69bf60SBram Moolenaar 9966d69bf60SBram Moolenaar res = false 9976d69bf60SBram Moolenaar if true || false 9986d69bf60SBram Moolenaar res = true 9996d69bf60SBram Moolenaar endif 10006d69bf60SBram Moolenaar assert_equal(true, res) 10016d69bf60SBram Moolenaar 10026d69bf60SBram Moolenaar res = false 10036d69bf60SBram Moolenaar if g:bool_true || false 10046d69bf60SBram Moolenaar res = true 10056d69bf60SBram Moolenaar endif 10066d69bf60SBram Moolenaar assert_equal(true, res) 10076d69bf60SBram Moolenaar 10086d69bf60SBram Moolenaar res = false 10096d69bf60SBram Moolenaar if true || g:bool_false 10106d69bf60SBram Moolenaar res = true 10116d69bf60SBram Moolenaar endif 10126d69bf60SBram Moolenaar assert_equal(true, res) 10136d69bf60SBram Moolenaar 10146d69bf60SBram Moolenaar res = false 10156d69bf60SBram Moolenaar if false || false 10166d69bf60SBram Moolenaar res = true 10176d69bf60SBram Moolenaar endif 10186d69bf60SBram Moolenaar assert_equal(false, res) 101980c34ca3SBram Moolenaarenddef 10206d69bf60SBram Moolenaar 102180c34ca3SBram Moolenaardef Test_if_const_expr_fails() 102280c34ca3SBram Moolenaar call CheckDefFailure(['if "aaa" == "bbb'], 'E114:') 102380c34ca3SBram Moolenaar call CheckDefFailure(["if 'aaa' == 'bbb"], 'E115:') 1024e8c4abbbSBram Moolenaar call CheckDefFailure(["if has('aaa'"], 'E110:') 1025e8c4abbbSBram Moolenaar call CheckDefFailure(["if has('aaa') ? true false"], 'E109:') 10266d69bf60SBram Moolenaarenddef 10276d69bf60SBram Moolenaar 1028ad39c094SBram Moolenaardef Test_execute_cmd() 1029ad39c094SBram Moolenaar new 1030ad39c094SBram Moolenaar setline(1, 'default') 1031ad39c094SBram Moolenaar execute 'call setline(1, "execute-string")' 1032ad39c094SBram Moolenaar assert_equal('execute-string', getline(1)) 1033a72cfb80SBram Moolenaar 1034a72cfb80SBram Moolenaar execute "call setline(1, 'execute-string')" 1035a72cfb80SBram Moolenaar assert_equal('execute-string', getline(1)) 1036a72cfb80SBram Moolenaar 1037ad39c094SBram Moolenaar let cmd1 = 'call setline(1,' 1038ad39c094SBram Moolenaar let cmd2 = '"execute-var")' 1039a72cfb80SBram Moolenaar execute cmd1 cmd2 # comment 1040ad39c094SBram Moolenaar assert_equal('execute-var', getline(1)) 1041a72cfb80SBram Moolenaar 1042ad39c094SBram Moolenaar execute cmd1 cmd2 '|call setline(1, "execute-var-string")' 1043ad39c094SBram Moolenaar assert_equal('execute-var-string', getline(1)) 1044a72cfb80SBram Moolenaar 1045ad39c094SBram Moolenaar let cmd_first = 'call ' 1046ad39c094SBram Moolenaar let cmd_last = 'setline(1, "execute-var-var")' 1047ad39c094SBram Moolenaar execute cmd_first .. cmd_last 1048ad39c094SBram Moolenaar assert_equal('execute-var-var', getline(1)) 1049ad39c094SBram Moolenaar bwipe! 1050585fea7bSBram Moolenaar 1051585fea7bSBram Moolenaar call CheckDefFailure(['execute xxx'], 'E1001:') 1052a72cfb80SBram Moolenaar call CheckDefFailure(['execute "cmd"# comment'], 'E488:') 1053ad39c094SBram Moolenaarenddef 1054ad39c094SBram Moolenaar 1055ad39c094SBram Moolenaardef Test_echo_cmd() 1056a72cfb80SBram Moolenaar echo 'some' # comment 1057585fea7bSBram Moolenaar echon 'thing' 1058ad39c094SBram Moolenaar assert_match('^something$', Screenline(&lines)) 1059ad39c094SBram Moolenaar 1060a72cfb80SBram Moolenaar echo "some" # comment 1061a72cfb80SBram Moolenaar echon "thing" 1062a72cfb80SBram Moolenaar assert_match('^something$', Screenline(&lines)) 1063a72cfb80SBram Moolenaar 1064ad39c094SBram Moolenaar let str1 = 'some' 1065ad39c094SBram Moolenaar let str2 = 'more' 1066ad39c094SBram Moolenaar echo str1 str2 1067ad39c094SBram Moolenaar assert_match('^some more$', Screenline(&lines)) 1068a72cfb80SBram Moolenaar 1069a72cfb80SBram Moolenaar call CheckDefFailure(['echo "xxx"# comment'], 'E488:') 1070ad39c094SBram Moolenaarenddef 1071ad39c094SBram Moolenaar 1072f93c7feaSBram Moolenaardef Test_echomsg_cmd() 1073f93c7feaSBram Moolenaar echomsg 'some' 'more' # comment 1074f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 1075f93c7feaSBram Moolenaar echo 'clear' 1076f93c7feaSBram Moolenaar 1messages 1077f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 1078f93c7feaSBram Moolenaar 1079f93c7feaSBram Moolenaar call CheckDefFailure(['echomsg "xxx"# comment'], 'E488:') 1080f93c7feaSBram Moolenaarenddef 1081f93c7feaSBram Moolenaar 1082f93c7feaSBram Moolenaardef Test_echoerr_cmd() 108340ee466cSBram Moolenaar try 108440ee466cSBram Moolenaar echoerr 'something' 'wrong' # comment 108540ee466cSBram Moolenaar catch 108640ee466cSBram Moolenaar assert_match('something wrong', v:exception) 108740ee466cSBram Moolenaar endtry 1088f93c7feaSBram Moolenaarenddef 1089f93c7feaSBram Moolenaar 109041fe0617SBram Moolenaardef Test_for_outside_of_function() 109141fe0617SBram Moolenaar let lines =<< trim END 109241fe0617SBram Moolenaar vim9script 109341fe0617SBram Moolenaar new 109441fe0617SBram Moolenaar for var in range(0, 3) 109541fe0617SBram Moolenaar append(line('$'), var) 109641fe0617SBram Moolenaar endfor 109741fe0617SBram Moolenaar assert_equal(['', '0', '1', '2', '3'], getline(1, '$')) 109841fe0617SBram Moolenaar bwipe! 109941fe0617SBram Moolenaar END 110041fe0617SBram Moolenaar writefile(lines, 'Xvim9for.vim') 110141fe0617SBram Moolenaar source Xvim9for.vim 110241fe0617SBram Moolenaar delete('Xvim9for.vim') 110341fe0617SBram Moolenaarenddef 11048a7d6542SBram Moolenaar 1105e8c4abbbSBram Moolenaardef Test_for_loop() 1106e8c4abbbSBram Moolenaar let result = '' 1107e8c4abbbSBram Moolenaar for cnt in range(7) 1108e8c4abbbSBram Moolenaar if cnt == 4 1109e8c4abbbSBram Moolenaar break 1110e8c4abbbSBram Moolenaar endif 1111e8c4abbbSBram Moolenaar if cnt == 2 1112e8c4abbbSBram Moolenaar continue 1113e8c4abbbSBram Moolenaar endif 1114e8c4abbbSBram Moolenaar result ..= cnt .. '_' 1115e8c4abbbSBram Moolenaar endfor 1116e8c4abbbSBram Moolenaar assert_equal('0_1_3_', result) 1117e8c4abbbSBram Moolenaarenddef 1118e8c4abbbSBram Moolenaar 1119e8c4abbbSBram Moolenaardef Test_for_loop_fails() 1120675f716eSBram Moolenaar CheckDefFailure(['for # in range(5)'], 'E690:') 1121675f716eSBram Moolenaar CheckDefFailure(['for i In range(5)'], 'E690:') 1122675f716eSBram Moolenaar CheckDefFailure(['let x = 5', 'for x in range(5)'], 'E1023:') 11236e949784SBram Moolenaar CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef'], 'E1006:') 1124675f716eSBram Moolenaar CheckDefFailure(['for i in "text"'], 'E1024:') 1125675f716eSBram Moolenaar CheckDefFailure(['for i in xxx'], 'E1001:') 1126675f716eSBram Moolenaar CheckDefFailure(['endfor'], 'E588:') 1127675f716eSBram Moolenaar CheckDefFailure(['for i in range(3)', 'echo 3'], 'E170:') 1128e8c4abbbSBram Moolenaarenddef 1129e8c4abbbSBram Moolenaar 1130d0df1aacSBram Moolenaardef Test_while_loop() 1131d0df1aacSBram Moolenaar let result = '' 1132d0df1aacSBram Moolenaar let cnt = 0 1133d0df1aacSBram Moolenaar while cnt < 555 1134d0df1aacSBram Moolenaar if cnt == 3 1135d0df1aacSBram Moolenaar break 1136d0df1aacSBram Moolenaar endif 1137d0df1aacSBram Moolenaar cnt += 1 1138d0df1aacSBram Moolenaar if cnt == 2 1139d0df1aacSBram Moolenaar continue 1140d0df1aacSBram Moolenaar endif 1141d0df1aacSBram Moolenaar result ..= cnt .. '_' 1142d0df1aacSBram Moolenaar endwhile 1143d0df1aacSBram Moolenaar assert_equal('1_3_', result) 1144d0df1aacSBram Moolenaarenddef 1145d0df1aacSBram Moolenaar 1146e8c4abbbSBram Moolenaardef Test_while_loop_fails() 1147675f716eSBram Moolenaar CheckDefFailure(['while xxx'], 'E1001:') 1148675f716eSBram Moolenaar CheckDefFailure(['endwhile'], 'E588:') 1149675f716eSBram Moolenaar CheckDefFailure(['continue'], 'E586:') 1150675f716eSBram Moolenaar CheckDefFailure(['if true', 'continue'], 'E586:') 1151675f716eSBram Moolenaar CheckDefFailure(['break'], 'E587:') 1152675f716eSBram Moolenaar CheckDefFailure(['if true', 'break'], 'E587:') 1153675f716eSBram Moolenaar CheckDefFailure(['while 1', 'echo 3'], 'E170:') 1154bd5da371SBram Moolenaarenddef 1155bd5da371SBram Moolenaar 11569645e2d9SBram Moolenaardef Test_interrupt_loop() 115797acfc78SBram Moolenaar let caught = false 11589645e2d9SBram Moolenaar let x = 0 115997acfc78SBram Moolenaar try 11609645e2d9SBram Moolenaar while 1 11619645e2d9SBram Moolenaar x += 1 11629645e2d9SBram Moolenaar if x == 100 11639645e2d9SBram Moolenaar feedkeys("\<C-C>", 'Lt') 11649645e2d9SBram Moolenaar endif 11659645e2d9SBram Moolenaar endwhile 116697acfc78SBram Moolenaar catch 116797acfc78SBram Moolenaar caught = true 116897acfc78SBram Moolenaar assert_equal(100, x) 116997acfc78SBram Moolenaar endtry 117097acfc78SBram Moolenaar assert_true(caught, 'should have caught an exception') 11719645e2d9SBram Moolenaarenddef 117220431c9dSBram Moolenaar 11734fdae999SBram Moolenaardef Test_automatic_line_continuation() 11744fdae999SBram Moolenaar let mylist = [ 11754fdae999SBram Moolenaar 'one', 11764fdae999SBram Moolenaar 'two', 11774fdae999SBram Moolenaar 'three', 11784fdae999SBram Moolenaar ] " comment 11794fdae999SBram Moolenaar assert_equal(['one', 'two', 'three'], mylist) 11804fdae999SBram Moolenaar 11814fdae999SBram Moolenaar let mydict = { 11824fdae999SBram Moolenaar 'one': 1, 11834fdae999SBram Moolenaar 'two': 2, 11844fdae999SBram Moolenaar 'three': 11854fdae999SBram Moolenaar 3, 11864fdae999SBram Moolenaar } " comment 11874fdae999SBram Moolenaar assert_equal({'one': 1, 'two': 2, 'three': 3}, mydict) 11884fdae999SBram Moolenaar mydict = #{ 11892c330432SBram Moolenaar one: 1, # comment 11902c330432SBram Moolenaar two: # comment 11912c330432SBram Moolenaar 2, # comment 11922c330432SBram Moolenaar three: 3 # comment 11932c330432SBram Moolenaar } 11942c330432SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 11952c330432SBram Moolenaar mydict = #{ 11962c330432SBram Moolenaar one: 1, 11974fdae999SBram Moolenaar two: 11984fdae999SBram Moolenaar 2, 11992c330432SBram Moolenaar three: 3 12004fdae999SBram Moolenaar } 12014fdae999SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 1202e6085c53SBram Moolenaar 1203e6085c53SBram Moolenaar assert_equal( 1204e6085c53SBram Moolenaar ['one', 'two', 'three'], 1205e6085c53SBram Moolenaar split('one two three') 1206e6085c53SBram Moolenaar ) 12074fdae999SBram Moolenaarenddef 12084fdae999SBram Moolenaar 12097a092245SBram Moolenaardef Test_vim9_comment() 12107a092245SBram Moolenaar CheckScriptSuccess([ 12117a092245SBram Moolenaar 'vim9script', 12127a092245SBram Moolenaar '# something', 12137a092245SBram Moolenaar ]) 12147a092245SBram Moolenaar CheckScriptFailure([ 12157a092245SBram Moolenaar 'vim9script', 12167a092245SBram Moolenaar ':# something', 12177a092245SBram Moolenaar ], 'E488:') 12187a092245SBram Moolenaar CheckScriptFailure([ 12197a092245SBram Moolenaar '# something', 12207a092245SBram Moolenaar ], 'E488:') 12217a092245SBram Moolenaar CheckScriptFailure([ 12227a092245SBram Moolenaar ':# something', 12237a092245SBram Moolenaar ], 'E488:') 12247a092245SBram Moolenaar 12254a8d9f2eSBram Moolenaar { # block start 12264a8d9f2eSBram Moolenaar } # block end 12274a8d9f2eSBram Moolenaar CheckDefFailure([ 12284a8d9f2eSBram Moolenaar '{# comment', 12294a8d9f2eSBram Moolenaar ], 'E488:') 12304a8d9f2eSBram Moolenaar CheckDefFailure([ 12314a8d9f2eSBram Moolenaar '{', 12324a8d9f2eSBram Moolenaar '}# comment', 12334a8d9f2eSBram Moolenaar ], 'E488:') 12344a8d9f2eSBram Moolenaar 12354a8d9f2eSBram Moolenaar echo "yes" # comment 12364a8d9f2eSBram Moolenaar CheckDefFailure([ 12374a8d9f2eSBram Moolenaar 'echo "yes"# comment', 12384a8d9f2eSBram Moolenaar ], 'E488:') 12397a092245SBram Moolenaar CheckScriptSuccess([ 12407a092245SBram Moolenaar 'vim9script', 12417a092245SBram Moolenaar 'echo "yes" # something', 12427a092245SBram Moolenaar ]) 12437a092245SBram Moolenaar CheckScriptFailure([ 12447a092245SBram Moolenaar 'vim9script', 12457a092245SBram Moolenaar 'echo "yes"# something', 12467a092245SBram Moolenaar ], 'E121:') 12477a092245SBram Moolenaar CheckScriptFailure([ 12487a092245SBram Moolenaar 'vim9script', 12497a092245SBram Moolenaar 'echo# something', 12507a092245SBram Moolenaar ], 'E121:') 12517a092245SBram Moolenaar CheckScriptFailure([ 12527a092245SBram Moolenaar 'echo "yes" # something', 12537a092245SBram Moolenaar ], 'E121:') 12547a092245SBram Moolenaar 12554a8d9f2eSBram Moolenaar exe "echo" # comment 12564a8d9f2eSBram Moolenaar CheckDefFailure([ 12574a8d9f2eSBram Moolenaar 'exe "echo"# comment', 12584a8d9f2eSBram Moolenaar ], 'E488:') 12594a8d9f2eSBram Moolenaar CheckScriptSuccess([ 12604a8d9f2eSBram Moolenaar 'vim9script', 12614a8d9f2eSBram Moolenaar 'exe "echo" # something', 12624a8d9f2eSBram Moolenaar ]) 12634a8d9f2eSBram Moolenaar CheckScriptFailure([ 12644a8d9f2eSBram Moolenaar 'vim9script', 12654a8d9f2eSBram Moolenaar 'exe "echo"# something', 12664a8d9f2eSBram Moolenaar ], 'E121:') 12674a8d9f2eSBram Moolenaar CheckDefFailure([ 12684a8d9f2eSBram Moolenaar 'exe # comment', 12694a8d9f2eSBram Moolenaar ], 'E1015:') 12704a8d9f2eSBram Moolenaar CheckScriptFailure([ 12714a8d9f2eSBram Moolenaar 'vim9script', 12724a8d9f2eSBram Moolenaar 'exe# something', 12734a8d9f2eSBram Moolenaar ], 'E121:') 12744a8d9f2eSBram Moolenaar CheckScriptFailure([ 12754a8d9f2eSBram Moolenaar 'exe "echo" # something', 12764a8d9f2eSBram Moolenaar ], 'E121:') 12774a8d9f2eSBram Moolenaar 12787a092245SBram Moolenaar CheckDefFailure([ 12797a092245SBram Moolenaar 'try# comment', 12807a092245SBram Moolenaar ' echo "yes"', 12817a092245SBram Moolenaar 'catch', 12827a092245SBram Moolenaar 'endtry', 12837a092245SBram Moolenaar ], 'E488:') 12842c5ed4e3SBram Moolenaar CheckScriptFailure([ 12852c5ed4e3SBram Moolenaar 'vim9script', 12862c5ed4e3SBram Moolenaar 'try# comment', 12872c5ed4e3SBram Moolenaar 'echo "yes"', 12882c5ed4e3SBram Moolenaar ], 'E488:') 12897a092245SBram Moolenaar CheckDefFailure([ 12907a092245SBram Moolenaar 'try', 1291a72cfb80SBram Moolenaar ' throw#comment', 1292a72cfb80SBram Moolenaar 'catch', 1293a72cfb80SBram Moolenaar 'endtry', 1294a72cfb80SBram Moolenaar ], 'E1015:') 1295a72cfb80SBram Moolenaar CheckDefFailure([ 1296a72cfb80SBram Moolenaar 'try', 1297a72cfb80SBram Moolenaar ' throw "yes"#comment', 1298a72cfb80SBram Moolenaar 'catch', 1299a72cfb80SBram Moolenaar 'endtry', 1300a72cfb80SBram Moolenaar ], 'E488:') 1301a72cfb80SBram Moolenaar CheckDefFailure([ 1302a72cfb80SBram Moolenaar 'try', 13037a092245SBram Moolenaar ' echo "yes"', 13047a092245SBram Moolenaar 'catch# comment', 13057a092245SBram Moolenaar 'endtry', 13067a092245SBram Moolenaar ], 'E488:') 13072c5ed4e3SBram Moolenaar CheckScriptFailure([ 13082c5ed4e3SBram Moolenaar 'vim9script', 13092c5ed4e3SBram Moolenaar 'try', 13102c5ed4e3SBram Moolenaar ' echo "yes"', 13112c5ed4e3SBram Moolenaar 'catch# comment', 13122c5ed4e3SBram Moolenaar 'endtry', 13132c5ed4e3SBram Moolenaar ], 'E654:') 13142c5ed4e3SBram Moolenaar CheckDefFailure([ 13152c5ed4e3SBram Moolenaar 'try', 13162c5ed4e3SBram Moolenaar ' echo "yes"', 13172c5ed4e3SBram Moolenaar 'catch /pat/# comment', 13182c5ed4e3SBram Moolenaar 'endtry', 13192c5ed4e3SBram Moolenaar ], 'E488:') 13207a092245SBram Moolenaar CheckDefFailure([ 13217a092245SBram Moolenaar 'try', 13227a092245SBram Moolenaar 'echo "yes"', 13237a092245SBram Moolenaar 'catch', 13247a092245SBram Moolenaar 'endtry# comment', 13257a092245SBram Moolenaar ], 'E488:') 13262c5ed4e3SBram Moolenaar CheckScriptFailure([ 13272c5ed4e3SBram Moolenaar 'vim9script', 13282c5ed4e3SBram Moolenaar 'try', 13292c5ed4e3SBram Moolenaar ' echo "yes"', 13302c5ed4e3SBram Moolenaar 'catch', 13312c5ed4e3SBram Moolenaar 'endtry# comment', 13322c5ed4e3SBram Moolenaar ], 'E600:') 13332c5ed4e3SBram Moolenaar 13342c5ed4e3SBram Moolenaar CheckScriptSuccess([ 13352c5ed4e3SBram Moolenaar 'vim9script', 13362c5ed4e3SBram Moolenaar 'hi # comment', 13372c5ed4e3SBram Moolenaar ]) 13382c5ed4e3SBram Moolenaar CheckScriptFailure([ 13392c5ed4e3SBram Moolenaar 'vim9script', 13402c5ed4e3SBram Moolenaar 'hi# comment', 13412c5ed4e3SBram Moolenaar ], 'E416:') 13421966c248SBram Moolenaar CheckScriptSuccess([ 13431966c248SBram Moolenaar 'vim9script', 13441966c248SBram Moolenaar 'hi Search # comment', 13451966c248SBram Moolenaar ]) 13461966c248SBram Moolenaar CheckScriptFailure([ 13471966c248SBram Moolenaar 'vim9script', 13481966c248SBram Moolenaar 'hi Search# comment', 13491966c248SBram Moolenaar ], 'E416:') 13501966c248SBram Moolenaar CheckScriptSuccess([ 13511966c248SBram Moolenaar 'vim9script', 13521966c248SBram Moolenaar 'hi link This Search # comment', 13531966c248SBram Moolenaar ]) 13541966c248SBram Moolenaar CheckScriptFailure([ 13551966c248SBram Moolenaar 'vim9script', 13561966c248SBram Moolenaar 'hi link This That# comment', 13571966c248SBram Moolenaar ], 'E413:') 13581966c248SBram Moolenaar CheckScriptSuccess([ 13591966c248SBram Moolenaar 'vim9script', 13601966c248SBram Moolenaar 'hi clear This # comment', 13611966c248SBram Moolenaar 'hi clear # comment', 13621966c248SBram Moolenaar ]) 13631966c248SBram Moolenaar " not tested, because it doesn't give an error but a warning: 13641966c248SBram Moolenaar " hi clear This# comment', 13651966c248SBram Moolenaar CheckScriptFailure([ 13661966c248SBram Moolenaar 'vim9script', 13671966c248SBram Moolenaar 'hi clear# comment', 13681966c248SBram Moolenaar ], 'E416:') 13691966c248SBram Moolenaar 13701966c248SBram Moolenaar CheckScriptSuccess([ 13711966c248SBram Moolenaar 'vim9script', 13721966c248SBram Moolenaar 'hi Group term=bold', 13731966c248SBram Moolenaar 'match Group /todo/ # comment', 13741966c248SBram Moolenaar ]) 13751966c248SBram Moolenaar CheckScriptFailure([ 13761966c248SBram Moolenaar 'vim9script', 13771966c248SBram Moolenaar 'hi Group term=bold', 13781966c248SBram Moolenaar 'match Group /todo/# comment', 13791966c248SBram Moolenaar ], 'E488:') 13801966c248SBram Moolenaar CheckScriptSuccess([ 13811966c248SBram Moolenaar 'vim9script', 13821966c248SBram Moolenaar 'match # comment', 13831966c248SBram Moolenaar ]) 13841966c248SBram Moolenaar CheckScriptFailure([ 13851966c248SBram Moolenaar 'vim9script', 13861966c248SBram Moolenaar 'match# comment', 13871966c248SBram Moolenaar ], 'E475:') 13881966c248SBram Moolenaar CheckScriptSuccess([ 13891966c248SBram Moolenaar 'vim9script', 13901966c248SBram Moolenaar 'match none # comment', 13911966c248SBram Moolenaar ]) 13921966c248SBram Moolenaar CheckScriptFailure([ 13931966c248SBram Moolenaar 'vim9script', 13941966c248SBram Moolenaar 'match none# comment', 13951966c248SBram Moolenaar ], 'E475:') 13961966c248SBram Moolenaar 13971966c248SBram Moolenaar CheckScriptSuccess([ 13981966c248SBram Moolenaar 'vim9script', 13991966c248SBram Moolenaar 'menutrans clear # comment', 14001966c248SBram Moolenaar ]) 14011966c248SBram Moolenaar CheckScriptFailure([ 14021966c248SBram Moolenaar 'vim9script', 14031966c248SBram Moolenaar 'menutrans clear# comment text', 14041966c248SBram Moolenaar ], 'E474:') 14051966c248SBram Moolenaar 14061966c248SBram Moolenaar CheckScriptSuccess([ 14071966c248SBram Moolenaar 'vim9script', 14081966c248SBram Moolenaar 'syntax clear # comment', 14091966c248SBram Moolenaar ]) 14101966c248SBram Moolenaar CheckScriptFailure([ 14111966c248SBram Moolenaar 'vim9script', 14121966c248SBram Moolenaar 'syntax clear# comment text', 14131966c248SBram Moolenaar ], 'E28:') 14141966c248SBram Moolenaar CheckScriptSuccess([ 14151966c248SBram Moolenaar 'vim9script', 14161966c248SBram Moolenaar 'syntax keyword Word some', 14171966c248SBram Moolenaar 'syntax clear Word # comment', 14181966c248SBram Moolenaar ]) 14191966c248SBram Moolenaar CheckScriptFailure([ 14201966c248SBram Moolenaar 'vim9script', 14211966c248SBram Moolenaar 'syntax keyword Word some', 14221966c248SBram Moolenaar 'syntax clear Word# comment text', 14231966c248SBram Moolenaar ], 'E28:') 14241966c248SBram Moolenaar 14251966c248SBram Moolenaar CheckScriptSuccess([ 14261966c248SBram Moolenaar 'vim9script', 14271966c248SBram Moolenaar 'syntax list # comment', 14281966c248SBram Moolenaar ]) 14291966c248SBram Moolenaar CheckScriptFailure([ 14301966c248SBram Moolenaar 'vim9script', 14311966c248SBram Moolenaar 'syntax list# comment text', 14321966c248SBram Moolenaar ], 'E28:') 14331966c248SBram Moolenaar 14341966c248SBram Moolenaar CheckScriptSuccess([ 14351966c248SBram Moolenaar 'vim9script', 14361966c248SBram Moolenaar 'syntax match Word /pat/ oneline # comment', 14371966c248SBram Moolenaar ]) 14381966c248SBram Moolenaar CheckScriptFailure([ 14391966c248SBram Moolenaar 'vim9script', 14401966c248SBram Moolenaar 'syntax match Word /pat/ oneline# comment', 14411966c248SBram Moolenaar ], 'E475:') 14421966c248SBram Moolenaar 14431966c248SBram Moolenaar CheckScriptSuccess([ 14441966c248SBram Moolenaar 'vim9script', 14451966c248SBram Moolenaar 'syntax keyword Word word # comm[ent', 14461966c248SBram Moolenaar ]) 14471966c248SBram Moolenaar CheckScriptFailure([ 14481966c248SBram Moolenaar 'vim9script', 14491966c248SBram Moolenaar 'syntax keyword Word word# comm[ent', 14501966c248SBram Moolenaar ], 'E789:') 14511966c248SBram Moolenaar 14521966c248SBram Moolenaar CheckScriptSuccess([ 14531966c248SBram Moolenaar 'vim9script', 14541966c248SBram Moolenaar 'syntax match Word /pat/ # comment', 14551966c248SBram Moolenaar ]) 14561966c248SBram Moolenaar CheckScriptFailure([ 14571966c248SBram Moolenaar 'vim9script', 14581966c248SBram Moolenaar 'syntax match Word /pat/# comment', 14591966c248SBram Moolenaar ], 'E402:') 14601966c248SBram Moolenaar 14611966c248SBram Moolenaar CheckScriptSuccess([ 14621966c248SBram Moolenaar 'vim9script', 14631966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something # comment', 14641966c248SBram Moolenaar ]) 14651966c248SBram Moolenaar CheckScriptFailure([ 14661966c248SBram Moolenaar 'vim9script', 14671966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something# comment', 14681966c248SBram Moolenaar ], 'E475:') 14691966c248SBram Moolenaar CheckScriptFailure([ 14701966c248SBram Moolenaar 'vim9script', 14711966c248SBram Moolenaar 'syntax match Word /pat/ contains= # comment', 14721966c248SBram Moolenaar ], 'E406:') 14731966c248SBram Moolenaar CheckScriptFailure([ 14741966c248SBram Moolenaar 'vim9script', 14751966c248SBram Moolenaar 'syntax match Word /pat/ contains=# comment', 14761966c248SBram Moolenaar ], 'E475:') 14771966c248SBram Moolenaar 14781966c248SBram Moolenaar CheckScriptSuccess([ 14791966c248SBram Moolenaar 'vim9script', 14801966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/ # comment', 14811966c248SBram Moolenaar ]) 14821966c248SBram Moolenaar CheckScriptFailure([ 14831966c248SBram Moolenaar 'vim9script', 14841966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/# comment', 14851966c248SBram Moolenaar ], 'E475:') 14861966c248SBram Moolenaar 14871966c248SBram Moolenaar CheckScriptSuccess([ 14881966c248SBram Moolenaar 'vim9script', 14891966c248SBram Moolenaar 'syntax sync # comment', 14901966c248SBram Moolenaar ]) 14911966c248SBram Moolenaar CheckScriptFailure([ 14921966c248SBram Moolenaar 'vim9script', 14931966c248SBram Moolenaar 'syntax sync# comment', 14941966c248SBram Moolenaar ], 'E404:') 14951966c248SBram Moolenaar CheckScriptSuccess([ 14961966c248SBram Moolenaar 'vim9script', 14971966c248SBram Moolenaar 'syntax sync ccomment # comment', 14981966c248SBram Moolenaar ]) 14991966c248SBram Moolenaar CheckScriptFailure([ 15001966c248SBram Moolenaar 'vim9script', 15011966c248SBram Moolenaar 'syntax sync ccomment# comment', 15021966c248SBram Moolenaar ], 'E404:') 15031966c248SBram Moolenaar 15041966c248SBram Moolenaar CheckScriptSuccess([ 15051966c248SBram Moolenaar 'vim9script', 15061966c248SBram Moolenaar 'syntax cluster Some contains=Word # comment', 15071966c248SBram Moolenaar ]) 15081966c248SBram Moolenaar CheckScriptFailure([ 15091966c248SBram Moolenaar 'vim9script', 15101966c248SBram Moolenaar 'syntax cluster Some contains=Word# comment', 15111966c248SBram Moolenaar ], 'E475:') 1512a72cfb80SBram Moolenaar 1513a72cfb80SBram Moolenaar CheckScriptSuccess([ 1514a72cfb80SBram Moolenaar 'vim9script', 1515a72cfb80SBram Moolenaar 'command Echo echo # comment', 1516a72cfb80SBram Moolenaar 'command Echo # comment', 1517a72cfb80SBram Moolenaar ]) 1518a72cfb80SBram Moolenaar CheckScriptFailure([ 1519a72cfb80SBram Moolenaar 'vim9script', 1520a72cfb80SBram Moolenaar 'command Echo echo# comment', 1521a72cfb80SBram Moolenaar 'Echo', 1522a72cfb80SBram Moolenaar ], 'E121:') 1523a72cfb80SBram Moolenaar CheckScriptFailure([ 1524a72cfb80SBram Moolenaar 'vim9script', 1525a72cfb80SBram Moolenaar 'command Echo# comment', 1526a72cfb80SBram Moolenaar ], 'E182:') 1527a72cfb80SBram Moolenaar CheckScriptFailure([ 1528a72cfb80SBram Moolenaar 'vim9script', 1529a72cfb80SBram Moolenaar 'command Echo echo', 1530a72cfb80SBram Moolenaar 'command Echo# comment', 1531a72cfb80SBram Moolenaar ], 'E182:') 1532a72cfb80SBram Moolenaar 1533a72cfb80SBram Moolenaar CheckScriptSuccess([ 1534a72cfb80SBram Moolenaar 'vim9script', 1535a72cfb80SBram Moolenaar 'function # comment', 1536a72cfb80SBram Moolenaar ]) 1537a72cfb80SBram Moolenaar CheckScriptFailure([ 1538a72cfb80SBram Moolenaar 'vim9script', 1539a72cfb80SBram Moolenaar 'function# comment', 1540a72cfb80SBram Moolenaar ], 'E129:') 1541a72cfb80SBram Moolenaar CheckScriptSuccess([ 1542a72cfb80SBram Moolenaar 'vim9script', 1543a72cfb80SBram Moolenaar 'function CheckScriptSuccess # comment', 1544a72cfb80SBram Moolenaar ]) 1545a72cfb80SBram Moolenaar CheckScriptFailure([ 1546a72cfb80SBram Moolenaar 'vim9script', 1547a72cfb80SBram Moolenaar 'function CheckScriptSuccess# comment', 1548a72cfb80SBram Moolenaar ], 'E488:') 1549a72cfb80SBram Moolenaar 1550a72cfb80SBram Moolenaar CheckScriptSuccess([ 1551a72cfb80SBram Moolenaar 'vim9script', 15524c17ad94SBram Moolenaar 'func g:DeleteMeA()', 1553a72cfb80SBram Moolenaar 'endfunc', 15544c17ad94SBram Moolenaar 'delfunction g:DeleteMeA # comment', 1555a72cfb80SBram Moolenaar ]) 1556a72cfb80SBram Moolenaar CheckScriptFailure([ 1557a72cfb80SBram Moolenaar 'vim9script', 15584c17ad94SBram Moolenaar 'func g:DeleteMeB()', 1559a72cfb80SBram Moolenaar 'endfunc', 15604c17ad94SBram Moolenaar 'delfunction g:DeleteMeB# comment', 1561a72cfb80SBram Moolenaar ], 'E488:') 1562a72cfb80SBram Moolenaar 1563a72cfb80SBram Moolenaar CheckScriptSuccess([ 1564a72cfb80SBram Moolenaar 'vim9script', 1565a72cfb80SBram Moolenaar 'call execute("ls") # comment', 1566a72cfb80SBram Moolenaar ]) 1567a72cfb80SBram Moolenaar CheckScriptFailure([ 1568a72cfb80SBram Moolenaar 'vim9script', 1569a72cfb80SBram Moolenaar 'call execute("ls")# comment', 1570a72cfb80SBram Moolenaar ], 'E488:') 15712c5ed4e3SBram Moolenaarenddef 15722c5ed4e3SBram Moolenaar 15732c5ed4e3SBram Moolenaardef Test_vim9_comment_gui() 15742c5ed4e3SBram Moolenaar CheckCanRunGui 15752c5ed4e3SBram Moolenaar 15762c5ed4e3SBram Moolenaar CheckScriptFailure([ 15772c5ed4e3SBram Moolenaar 'vim9script', 15782c5ed4e3SBram Moolenaar 'gui#comment' 15792c5ed4e3SBram Moolenaar ], 'E499:') 15802c5ed4e3SBram Moolenaar CheckScriptFailure([ 15812c5ed4e3SBram Moolenaar 'vim9script', 15822c5ed4e3SBram Moolenaar 'gui -f#comment' 15832c5ed4e3SBram Moolenaar ], 'E499:') 15847a092245SBram Moolenaarenddef 15857a092245SBram Moolenaar 1586a26b9700SBram Moolenaardef Test_vim9_comment_not_compiled() 1587a26b9700SBram Moolenaar au TabEnter *.vim let g:entered = 1 1588a26b9700SBram Moolenaar au TabEnter *.x let g:entered = 2 1589a26b9700SBram Moolenaar 1590a26b9700SBram Moolenaar edit test.vim 1591a26b9700SBram Moolenaar doautocmd TabEnter #comment 1592a26b9700SBram Moolenaar assert_equal(1, g:entered) 1593a26b9700SBram Moolenaar 1594a26b9700SBram Moolenaar doautocmd TabEnter f.x 1595a26b9700SBram Moolenaar assert_equal(2, g:entered) 1596a26b9700SBram Moolenaar 1597a26b9700SBram Moolenaar g:entered = 0 1598a26b9700SBram Moolenaar doautocmd TabEnter f.x #comment 1599a26b9700SBram Moolenaar assert_equal(2, g:entered) 1600a26b9700SBram Moolenaar 1601a26b9700SBram Moolenaar assert_fails('doautocmd Syntax#comment', 'E216:') 1602a26b9700SBram Moolenaar 1603a26b9700SBram Moolenaar au! TabEnter 1604a26b9700SBram Moolenaar unlet g:entered 1605d72c1bf0SBram Moolenaar 1606d72c1bf0SBram Moolenaar CheckScriptSuccess([ 1607d72c1bf0SBram Moolenaar 'vim9script', 1608d72c1bf0SBram Moolenaar 'let g:var = 123', 1609d72c1bf0SBram Moolenaar 'let w:var = 777', 1610d72c1bf0SBram Moolenaar 'unlet g:var w:var # something', 1611d72c1bf0SBram Moolenaar ]) 1612d72c1bf0SBram Moolenaar 1613d72c1bf0SBram Moolenaar CheckScriptFailure([ 1614d72c1bf0SBram Moolenaar 'vim9script', 1615d72c1bf0SBram Moolenaar 'let g:var = 123', 1616d72c1bf0SBram Moolenaar 'unlet g:var# comment', 1617d72c1bf0SBram Moolenaar ], 'E108:') 1618d72c1bf0SBram Moolenaar 1619d72c1bf0SBram Moolenaar CheckScriptFailure([ 1620d72c1bf0SBram Moolenaar 'let g:var = 123', 1621d72c1bf0SBram Moolenaar 'unlet g:var # something', 1622d72c1bf0SBram Moolenaar ], 'E488:') 1623faac4104SBram Moolenaar 1624faac4104SBram Moolenaar CheckScriptSuccess([ 1625faac4104SBram Moolenaar 'vim9script', 1626faac4104SBram Moolenaar 'if 1 # comment', 1627faac4104SBram Moolenaar ' echo "yes"', 1628faac4104SBram Moolenaar 'elseif 2 #comment', 1629faac4104SBram Moolenaar ' echo "no"', 1630faac4104SBram Moolenaar 'endif', 1631faac4104SBram Moolenaar ]) 1632faac4104SBram Moolenaar 1633faac4104SBram Moolenaar CheckScriptFailure([ 1634faac4104SBram Moolenaar 'vim9script', 1635faac4104SBram Moolenaar 'if 1# comment', 1636faac4104SBram Moolenaar ' echo "yes"', 1637faac4104SBram Moolenaar 'endif', 1638faac4104SBram Moolenaar ], 'E15:') 1639faac4104SBram Moolenaar 1640faac4104SBram Moolenaar CheckScriptFailure([ 1641faac4104SBram Moolenaar 'vim9script', 1642faac4104SBram Moolenaar 'if 0 # comment', 1643faac4104SBram Moolenaar ' echo "yes"', 1644faac4104SBram Moolenaar 'elseif 2#comment', 1645faac4104SBram Moolenaar ' echo "no"', 1646faac4104SBram Moolenaar 'endif', 1647faac4104SBram Moolenaar ], 'E15:') 1648faac4104SBram Moolenaar 1649faac4104SBram Moolenaar CheckScriptSuccess([ 1650faac4104SBram Moolenaar 'vim9script', 1651faac4104SBram Moolenaar 'let # comment', 1652faac4104SBram Moolenaar ]) 1653faac4104SBram Moolenaar 1654faac4104SBram Moolenaar CheckScriptFailure([ 1655faac4104SBram Moolenaar 'vim9script', 1656faac4104SBram Moolenaar 'let# comment', 1657faac4104SBram Moolenaar ], 'E121:') 1658faac4104SBram Moolenaar 1659faac4104SBram Moolenaar CheckScriptSuccess([ 1660faac4104SBram Moolenaar 'vim9script', 1661faac4104SBram Moolenaar 'let v:version # comment', 1662faac4104SBram Moolenaar ]) 1663faac4104SBram Moolenaar 1664faac4104SBram Moolenaar CheckScriptFailure([ 1665faac4104SBram Moolenaar 'vim9script', 1666faac4104SBram Moolenaar 'let v:version# comment', 1667faac4104SBram Moolenaar ], 'E121:') 1668faac4104SBram Moolenaar 1669faac4104SBram Moolenaar CheckScriptSuccess([ 1670faac4104SBram Moolenaar 'vim9script', 1671faac4104SBram Moolenaar 'new' 1672faac4104SBram Moolenaar 'call setline(1, ["# define pat", "last"])', 1673faac4104SBram Moolenaar '$', 1674faac4104SBram Moolenaar 'dsearch /pat/ #comment', 1675faac4104SBram Moolenaar 'bwipe!', 1676faac4104SBram Moolenaar ]) 1677faac4104SBram Moolenaar 1678faac4104SBram Moolenaar CheckScriptFailure([ 1679faac4104SBram Moolenaar 'vim9script', 1680faac4104SBram Moolenaar 'new' 1681faac4104SBram Moolenaar 'call setline(1, ["# define pat", "last"])', 1682faac4104SBram Moolenaar '$', 1683faac4104SBram Moolenaar 'dsearch /pat/#comment', 1684faac4104SBram Moolenaar 'bwipe!', 1685faac4104SBram Moolenaar ], 'E488:') 1686a26b9700SBram Moolenaarenddef 1687a26b9700SBram Moolenaar 1688585fea7bSBram Moolenaar" Keep this last, it messes up highlighting. 1689585fea7bSBram Moolenaardef Test_substitute_cmd() 1690585fea7bSBram Moolenaar new 1691585fea7bSBram Moolenaar setline(1, 'something') 1692585fea7bSBram Moolenaar :substitute(some(other( 1693585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 1694585fea7bSBram Moolenaar bwipe! 1695585fea7bSBram Moolenaar 1696585fea7bSBram Moolenaar " also when the context is Vim9 script 1697585fea7bSBram Moolenaar let lines =<< trim END 1698585fea7bSBram Moolenaar vim9script 1699585fea7bSBram Moolenaar new 1700585fea7bSBram Moolenaar setline(1, 'something') 1701585fea7bSBram Moolenaar :substitute(some(other( 1702585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 1703585fea7bSBram Moolenaar bwipe! 1704585fea7bSBram Moolenaar END 1705585fea7bSBram Moolenaar writefile(lines, 'Xvim9lines') 1706585fea7bSBram Moolenaar source Xvim9lines 1707585fea7bSBram Moolenaar 1708585fea7bSBram Moolenaar delete('Xvim9lines') 1709585fea7bSBram Moolenaarenddef 1710585fea7bSBram Moolenaar 17118a7d6542SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker 1712