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 7e3d4685fSBram Moolenaarsource shared.vim 88a7d6542SBram Moolenaar 95d72ce69SBram Moolenaardef Test_range_only() 105d72ce69SBram Moolenaar new 115d72ce69SBram Moolenaar setline(1, ['blah', 'Blah']) 125d72ce69SBram Moolenaar :/Blah/ 135d72ce69SBram Moolenaar assert_equal(2, getcurpos()[1]) 14c2af0affSBram Moolenaar bwipe! 15c2af0affSBram Moolenaar 16c2af0affSBram Moolenaar # without range commands use current line 17c2af0affSBram Moolenaar new 18c2af0affSBram Moolenaar setline(1, ['one', 'two', 'three']) 19c2af0affSBram Moolenaar :2 20c2af0affSBram Moolenaar print 21c2af0affSBram Moolenaar assert_equal('two', Screenline(&lines)) 22c2af0affSBram Moolenaar :3 23c2af0affSBram Moolenaar list 24c2af0affSBram Moolenaar assert_equal('three$', Screenline(&lines)) 25c2af0affSBram Moolenaar bwipe! 265d72ce69SBram Moolenaarenddef 275d72ce69SBram Moolenaar 28a6e67e4fSBram Moolenaarlet g:alist = [7] 29a6e67e4fSBram Moolenaarlet g:astring = 'text' 30f0b9f43cSBram Moolenaarlet g:anumber = 123 316e587dcbSBram Moolenaar 324c17ad94SBram Moolenaardef Test_delfunction() 33f5be8cdbSBram Moolenaar # Check function is defined in script namespace 344c17ad94SBram Moolenaar CheckScriptSuccess([ 354c17ad94SBram Moolenaar 'vim9script', 364c17ad94SBram Moolenaar 'func CheckMe()', 374c17ad94SBram Moolenaar ' return 123', 384c17ad94SBram Moolenaar 'endfunc', 394c17ad94SBram Moolenaar 'assert_equal(123, s:CheckMe())', 404c17ad94SBram Moolenaar ]) 414c17ad94SBram Moolenaar 42f5be8cdbSBram Moolenaar # Check function in script namespace cannot be deleted 434c17ad94SBram Moolenaar CheckScriptFailure([ 444c17ad94SBram Moolenaar 'vim9script', 454c17ad94SBram Moolenaar 'func DeleteMe1()', 464c17ad94SBram Moolenaar 'endfunc', 474c17ad94SBram Moolenaar 'delfunction DeleteMe1', 484c17ad94SBram Moolenaar ], 'E1084:') 494c17ad94SBram Moolenaar CheckScriptFailure([ 504c17ad94SBram Moolenaar 'vim9script', 514c17ad94SBram Moolenaar 'func DeleteMe2()', 524c17ad94SBram Moolenaar 'endfunc', 534c17ad94SBram Moolenaar 'def DoThat()', 544c17ad94SBram Moolenaar ' delfunction DeleteMe2', 554c17ad94SBram Moolenaar 'enddef', 564c17ad94SBram Moolenaar 'DoThat()', 574c17ad94SBram Moolenaar ], 'E1084:') 584c17ad94SBram Moolenaar CheckScriptFailure([ 594c17ad94SBram Moolenaar 'vim9script', 604c17ad94SBram Moolenaar 'def DeleteMe3()', 614c17ad94SBram Moolenaar 'enddef', 624c17ad94SBram Moolenaar 'delfunction DeleteMe3', 634c17ad94SBram Moolenaar ], 'E1084:') 644c17ad94SBram Moolenaar CheckScriptFailure([ 654c17ad94SBram Moolenaar 'vim9script', 664c17ad94SBram Moolenaar 'def DeleteMe4()', 674c17ad94SBram Moolenaar 'enddef', 684c17ad94SBram Moolenaar 'def DoThat()', 694c17ad94SBram Moolenaar ' delfunction DeleteMe4', 704c17ad94SBram Moolenaar 'enddef', 714c17ad94SBram Moolenaar 'DoThat()', 724c17ad94SBram Moolenaar ], 'E1084:') 73925e9fd6SBram Moolenaar 74925e9fd6SBram Moolenaar # Check that global :def function can be replaced and deleted 75cfcd011fSBram Moolenaar var lines =<< trim END 76925e9fd6SBram Moolenaar vim9script 77925e9fd6SBram Moolenaar def g:Global(): string 78925e9fd6SBram Moolenaar return "yes" 79925e9fd6SBram Moolenaar enddef 80925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 81925e9fd6SBram Moolenaar def! g:Global(): string 82925e9fd6SBram Moolenaar return "no" 83925e9fd6SBram Moolenaar enddef 84925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 85925e9fd6SBram Moolenaar delfunc g:Global 86925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 87925e9fd6SBram Moolenaar END 88925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 89925e9fd6SBram Moolenaar 90925e9fd6SBram Moolenaar # Check that global function can be replaced by a :def function and deleted 91925e9fd6SBram Moolenaar lines =<< trim END 92925e9fd6SBram Moolenaar vim9script 93925e9fd6SBram Moolenaar func g:Global() 94925e9fd6SBram Moolenaar return "yes" 95925e9fd6SBram Moolenaar endfunc 96925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 97925e9fd6SBram Moolenaar def! g:Global(): string 98925e9fd6SBram Moolenaar return "no" 99925e9fd6SBram Moolenaar enddef 100925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 101925e9fd6SBram Moolenaar delfunc g:Global 102925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 103925e9fd6SBram Moolenaar END 104925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 105925e9fd6SBram Moolenaar 106925e9fd6SBram Moolenaar # Check that global :def function can be replaced by a function and deleted 107925e9fd6SBram Moolenaar lines =<< trim END 108925e9fd6SBram Moolenaar vim9script 109925e9fd6SBram Moolenaar def g:Global(): string 110925e9fd6SBram Moolenaar return "yes" 111925e9fd6SBram Moolenaar enddef 112925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 113925e9fd6SBram Moolenaar func! g:Global() 114925e9fd6SBram Moolenaar return "no" 115925e9fd6SBram Moolenaar endfunc 116925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 117925e9fd6SBram Moolenaar delfunc g:Global 118925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 119925e9fd6SBram Moolenaar END 120925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 1214c17ad94SBram Moolenaarenddef 1224c17ad94SBram Moolenaar 12308052228SBram Moolenaardef Test_wrong_type() 124cfcd011fSBram Moolenaar CheckDefFailure(['var name: list<nothing>'], 'E1010:') 125cfcd011fSBram Moolenaar CheckDefFailure(['var name: list<list<nothing>>'], 'E1010:') 126cfcd011fSBram Moolenaar CheckDefFailure(['var name: dict<nothing>'], 'E1010:') 127cfcd011fSBram Moolenaar CheckDefFailure(['var name: dict<dict<nothing>>'], 'E1010:') 128599c89c8SBram Moolenaar 129cfcd011fSBram Moolenaar CheckDefFailure(['var name: dict<number'], 'E1009:') 130cfcd011fSBram Moolenaar CheckDefFailure(['var name: dict<list<number>'], 'E1009:') 13142a480bfSBram Moolenaar 132cfcd011fSBram Moolenaar CheckDefFailure(['var name: ally'], 'E1010:') 133cfcd011fSBram Moolenaar CheckDefFailure(['var name: bram'], 'E1010:') 134cfcd011fSBram Moolenaar CheckDefFailure(['var name: cathy'], 'E1010:') 135cfcd011fSBram Moolenaar CheckDefFailure(['var name: dom'], 'E1010:') 136cfcd011fSBram Moolenaar CheckDefFailure(['var name: freddy'], 'E1010:') 137cfcd011fSBram Moolenaar CheckDefFailure(['var name: john'], 'E1010:') 138cfcd011fSBram Moolenaar CheckDefFailure(['var name: larry'], 'E1010:') 139cfcd011fSBram Moolenaar CheckDefFailure(['var name: ned'], 'E1010:') 140cfcd011fSBram Moolenaar CheckDefFailure(['var name: pam'], 'E1010:') 141cfcd011fSBram Moolenaar CheckDefFailure(['var name: sam'], 'E1010:') 142cfcd011fSBram Moolenaar CheckDefFailure(['var name: vim'], 'E1010:') 143a0a9f43aSBram Moolenaar 144cfcd011fSBram Moolenaar CheckDefFailure(['var Ref: number', 'Ref()'], 'E1085:') 145cfcd011fSBram Moolenaar CheckDefFailure(['var Ref: string', 'var res = Ref()'], 'E1085:') 14608052228SBram Moolenaarenddef 1478a7d6542SBram Moolenaar 14810c65860SBram Moolenaardef Test_script_wrong_type() 14910c65860SBram Moolenaar var lines =<< trim END 15010c65860SBram Moolenaar vim9script 15110c65860SBram Moolenaar var s:dict: dict<string> 15210c65860SBram Moolenaar s:dict['a'] = ['x'] 15310c65860SBram Moolenaar END 15410c65860SBram Moolenaar CheckScriptFailure(lines, 'E1012: Type mismatch; expected string but got list<string>', 3) 15510c65860SBram Moolenaarenddef 15610c65860SBram Moolenaar 15708052228SBram Moolenaardef Test_const() 158cfcd011fSBram Moolenaar CheckDefFailure(['final name = 234', 'name = 99'], 'E1018:') 159cfcd011fSBram Moolenaar CheckDefFailure(['final one = 234', 'var one = 99'], 'E1017:') 160cfcd011fSBram Moolenaar CheckDefFailure(['final list = [1, 2]', 'var list = [3, 4]'], 'E1017:') 16130fd8204SBram Moolenaar CheckDefFailure(['final two'], 'E1125:') 16230fd8204SBram Moolenaar CheckDefFailure(['final &option'], 'E996:') 163dbeecb2bSBram Moolenaar 164cfcd011fSBram Moolenaar var lines =<< trim END 16530fd8204SBram Moolenaar final list = [1, 2, 3] 166dbeecb2bSBram Moolenaar list[0] = 4 1670b4c66c6SBram Moolenaar list->assert_equal([4, 2, 3]) 16830fd8204SBram Moolenaar const other = [5, 6, 7] 1690b4c66c6SBram Moolenaar other->assert_equal([5, 6, 7]) 17071abe482SBram Moolenaar 171cfcd011fSBram Moolenaar var varlist = [7, 8] 17230fd8204SBram Moolenaar const constlist = [1, varlist, 3] 17371abe482SBram Moolenaar varlist[0] = 77 17471abe482SBram Moolenaar # TODO: does not work yet 17571abe482SBram Moolenaar # constlist[1][1] = 88 176cfcd011fSBram Moolenaar var cl = constlist[1] 17771abe482SBram Moolenaar cl[1] = 88 17871abe482SBram Moolenaar constlist->assert_equal([1, [77, 88], 3]) 17971abe482SBram Moolenaar 180cfcd011fSBram Moolenaar var vardict = #{five: 5, six: 6} 18130fd8204SBram Moolenaar const constdict = #{one: 1, two: vardict, three: 3} 18271abe482SBram Moolenaar vardict['five'] = 55 18371abe482SBram Moolenaar # TODO: does not work yet 18471abe482SBram Moolenaar # constdict['two']['six'] = 66 185cfcd011fSBram Moolenaar var cd = constdict['two'] 18671abe482SBram Moolenaar cd['six'] = 66 18771abe482SBram Moolenaar constdict->assert_equal(#{one: 1, two: #{five: 55, six: 66}, three: 3}) 188dbeecb2bSBram Moolenaar END 189dbeecb2bSBram Moolenaar CheckDefAndScriptSuccess(lines) 19008052228SBram Moolenaarenddef 1918a7d6542SBram Moolenaar 1920b4c66c6SBram Moolenaardef Test_const_bang() 193cfcd011fSBram Moolenaar var lines =<< trim END 19430fd8204SBram Moolenaar const var = 234 1950b4c66c6SBram Moolenaar var = 99 1960b4c66c6SBram Moolenaar END 1970b4c66c6SBram Moolenaar CheckDefExecFailure(lines, 'E1018:', 2) 1980b4c66c6SBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E46:', 3) 1990b4c66c6SBram Moolenaar 2000b4c66c6SBram Moolenaar lines =<< trim END 20130fd8204SBram Moolenaar const ll = [2, 3, 4] 2020b4c66c6SBram Moolenaar ll[0] = 99 2030b4c66c6SBram Moolenaar END 2040b4c66c6SBram Moolenaar CheckDefExecFailure(lines, 'E1119:', 2) 2050b4c66c6SBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E741:', 3) 2060b4c66c6SBram Moolenaar 2070b4c66c6SBram Moolenaar lines =<< trim END 20830fd8204SBram Moolenaar const ll = [2, 3, 4] 2090b4c66c6SBram Moolenaar ll[3] = 99 2100b4c66c6SBram Moolenaar END 2110b4c66c6SBram Moolenaar CheckDefExecFailure(lines, 'E1118:', 2) 2120b4c66c6SBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E684:', 3) 2130b4c66c6SBram Moolenaar 2140b4c66c6SBram Moolenaar lines =<< trim END 21530fd8204SBram Moolenaar const dd = #{one: 1, two: 2} 2160b4c66c6SBram Moolenaar dd["one"] = 99 2170b4c66c6SBram Moolenaar END 2180b4c66c6SBram Moolenaar CheckDefExecFailure(lines, 'E1121:', 2) 2190b4c66c6SBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E741:', 3) 2200b4c66c6SBram Moolenaar 2210b4c66c6SBram Moolenaar lines =<< trim END 22230fd8204SBram Moolenaar const dd = #{one: 1, two: 2} 2230b4c66c6SBram Moolenaar dd["three"] = 99 2240b4c66c6SBram Moolenaar END 2250b4c66c6SBram Moolenaar CheckDefExecFailure(lines, 'E1120:') 2260b4c66c6SBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E741:', 3) 2270b4c66c6SBram Moolenaarenddef 2280b4c66c6SBram Moolenaar 229df069eecSBram Moolenaardef Test_range_no_colon() 230d2c61705SBram Moolenaar CheckDefFailure(['%s/a/b/'], 'E1050:') 231d2c61705SBram Moolenaar CheckDefFailure(['+ s/a/b/'], 'E1050:') 232d2c61705SBram Moolenaar CheckDefFailure(['- s/a/b/'], 'E1050:') 233d2c61705SBram Moolenaar CheckDefFailure(['. s/a/b/'], 'E1050:') 234df069eecSBram Moolenaarenddef 235df069eecSBram Moolenaar 236df069eecSBram Moolenaar 2378a7d6542SBram Moolenaardef Test_block() 238cfcd011fSBram Moolenaar var outer = 1 2398a7d6542SBram Moolenaar { 240cfcd011fSBram Moolenaar var inner = 2 2418a7d6542SBram Moolenaar assert_equal(1, outer) 2428a7d6542SBram Moolenaar assert_equal(2, inner) 2438a7d6542SBram Moolenaar } 2448a7d6542SBram Moolenaar assert_equal(1, outer) 2458a7d6542SBram Moolenaarenddef 2468a7d6542SBram Moolenaar 24708052228SBram Moolenaardef Test_block_failure() 248cfcd011fSBram Moolenaar CheckDefFailure(['{', 'var inner = 1', '}', 'echo inner'], 'E1001:') 24908052228SBram Moolenaar CheckDefFailure(['}'], 'E1025:') 25008052228SBram Moolenaar CheckDefFailure(['{', 'echo 1'], 'E1026:') 25108052228SBram Moolenaarenddef 2528a7d6542SBram Moolenaar 253fbbcd003SBram Moolenaardef Test_block_local_vars() 254fbbcd003SBram Moolenaar var lines =<< trim END 255fbbcd003SBram Moolenaar vim9script 256ed234f24SBram Moolenaar v:testing = 1 257fbbcd003SBram Moolenaar if true 258ed234f24SBram Moolenaar var text = ['hello'] 259ed234f24SBram Moolenaar def SayHello(): list<string> 260fbbcd003SBram Moolenaar return text 261fbbcd003SBram Moolenaar enddef 262fbbcd003SBram Moolenaar def SetText(v: string) 263ed234f24SBram Moolenaar text = [v] 264fbbcd003SBram Moolenaar enddef 265fbbcd003SBram Moolenaar endif 266fbbcd003SBram Moolenaar 267fbbcd003SBram Moolenaar if true 268ed234f24SBram Moolenaar var text = ['again'] 269ed234f24SBram Moolenaar def SayAgain(): list<string> 270fbbcd003SBram Moolenaar return text 271fbbcd003SBram Moolenaar enddef 272fbbcd003SBram Moolenaar endif 273ed234f24SBram Moolenaar 274ed234f24SBram Moolenaar # test that the "text" variables are not cleaned up 275ed234f24SBram Moolenaar test_garbagecollect_now() 276ed234f24SBram Moolenaar 277fbbcd003SBram Moolenaar defcompile 278fbbcd003SBram Moolenaar 279ed234f24SBram Moolenaar assert_equal(['hello'], SayHello()) 280ed234f24SBram Moolenaar assert_equal(['again'], SayAgain()) 281fbbcd003SBram Moolenaar 282fbbcd003SBram Moolenaar SetText('foobar') 283ed234f24SBram Moolenaar assert_equal(['foobar'], SayHello()) 284ed234f24SBram Moolenaar 285ed234f24SBram Moolenaar call writefile(['ok'], 'Xdidit') 286ed234f24SBram Moolenaar qall! 287fbbcd003SBram Moolenaar END 288ed234f24SBram Moolenaar 289ed234f24SBram Moolenaar # need to execute this with a separate Vim instance to avoid the current 290ed234f24SBram Moolenaar # context gets garbage collected. 291ed234f24SBram Moolenaar writefile(lines, 'Xscript') 292ed234f24SBram Moolenaar RunVim([], [], '-S Xscript') 293ed234f24SBram Moolenaar assert_equal(['ok'], readfile('Xdidit')) 294ed234f24SBram Moolenaar 295ed234f24SBram Moolenaar delete('Xscript') 296ed234f24SBram Moolenaar delete('Xdidit') 297fbbcd003SBram Moolenaarenddef 298fbbcd003SBram Moolenaar 299d032f34aSBram Moolenaarfunc g:NoSuchFunc() 300d032f34aSBram Moolenaar echo 'none' 301d032f34aSBram Moolenaarendfunc 302d032f34aSBram Moolenaar 3038a7d6542SBram Moolenaardef Test_try_catch() 304cfcd011fSBram Moolenaar var l = [] 3057a092245SBram Moolenaar try # comment 3068a7d6542SBram Moolenaar add(l, '1') 3078a7d6542SBram Moolenaar throw 'wrong' 3088a7d6542SBram Moolenaar add(l, '2') 3097a092245SBram Moolenaar catch # comment 3108a7d6542SBram Moolenaar add(l, v:exception) 3117a092245SBram Moolenaar finally # comment 3128a7d6542SBram Moolenaar add(l, '3') 3137a092245SBram Moolenaar endtry # comment 3148a7d6542SBram Moolenaar assert_equal(['1', 'wrong', '3'], l) 31568d130c6SBram Moolenaar 316e859312eSBram Moolenaar l = [] 317e859312eSBram Moolenaar try 318e859312eSBram Moolenaar try 319e859312eSBram Moolenaar add(l, '1') 320e859312eSBram Moolenaar throw 'wrong' 321e859312eSBram Moolenaar add(l, '2') 322e859312eSBram Moolenaar catch /right/ 323e859312eSBram Moolenaar add(l, v:exception) 324e859312eSBram Moolenaar endtry 325e859312eSBram Moolenaar catch /wrong/ 326e859312eSBram Moolenaar add(l, 'caught') 327373863edSBram Moolenaar fina 328e859312eSBram Moolenaar add(l, 'finally') 329e859312eSBram Moolenaar endtry 330e859312eSBram Moolenaar assert_equal(['1', 'caught', 'finally'], l) 331e859312eSBram Moolenaar 332cfcd011fSBram Moolenaar var n: number 33368d130c6SBram Moolenaar try 33468d130c6SBram Moolenaar n = l[3] 33568d130c6SBram Moolenaar catch /E684:/ 33668d130c6SBram Moolenaar n = 99 33768d130c6SBram Moolenaar endtry 33868d130c6SBram Moolenaar assert_equal(99, n) 33968d130c6SBram Moolenaar 34068d130c6SBram Moolenaar try 341cc673e74SBram Moolenaar # string slice returns a string, not a number 34268d130c6SBram Moolenaar n = g:astring[3] 3435e654230SBram Moolenaar catch /E1012:/ 34468d130c6SBram Moolenaar n = 77 34568d130c6SBram Moolenaar endtry 34668d130c6SBram Moolenaar assert_equal(77, n) 34768d130c6SBram Moolenaar 34868d130c6SBram Moolenaar try 34968d130c6SBram Moolenaar n = l[g:astring] 3505e654230SBram Moolenaar catch /E1012:/ 35156acb094SBram Moolenaar n = 88 35268d130c6SBram Moolenaar endtry 35356acb094SBram Moolenaar assert_equal(88, n) 35468d130c6SBram Moolenaar 35568d130c6SBram Moolenaar try 35668d130c6SBram Moolenaar n = s:does_not_exist 35768d130c6SBram Moolenaar catch /E121:/ 358f0b9f43cSBram Moolenaar n = 111 359f0b9f43cSBram Moolenaar endtry 360f0b9f43cSBram Moolenaar assert_equal(111, n) 361f0b9f43cSBram Moolenaar 362f0b9f43cSBram Moolenaar try 363f0b9f43cSBram Moolenaar n = g:does_not_exist 364f0b9f43cSBram Moolenaar catch /E121:/ 36568d130c6SBram Moolenaar n = 121 36668d130c6SBram Moolenaar endtry 36768d130c6SBram Moolenaar assert_equal(121, n) 36868d130c6SBram Moolenaar 369cfcd011fSBram Moolenaar var d = #{one: 1} 37068d130c6SBram Moolenaar try 37168d130c6SBram Moolenaar n = d[g:astring] 37268d130c6SBram Moolenaar catch /E716:/ 37368d130c6SBram Moolenaar n = 222 37468d130c6SBram Moolenaar endtry 37568d130c6SBram Moolenaar assert_equal(222, n) 376f0b9f43cSBram Moolenaar 377f0b9f43cSBram Moolenaar try 378f0b9f43cSBram Moolenaar n = -g:astring 379f0b9f43cSBram Moolenaar catch /E39:/ 380f0b9f43cSBram Moolenaar n = 233 381f0b9f43cSBram Moolenaar endtry 382f0b9f43cSBram Moolenaar assert_equal(233, n) 383f0b9f43cSBram Moolenaar 384f0b9f43cSBram Moolenaar try 385f0b9f43cSBram Moolenaar n = +g:astring 386f0b9f43cSBram Moolenaar catch /E1030:/ 387f0b9f43cSBram Moolenaar n = 244 388f0b9f43cSBram Moolenaar endtry 389f0b9f43cSBram Moolenaar assert_equal(244, n) 390f0b9f43cSBram Moolenaar 391f0b9f43cSBram Moolenaar try 392f0b9f43cSBram Moolenaar n = +g:alist 393f0b9f43cSBram Moolenaar catch /E745:/ 394f0b9f43cSBram Moolenaar n = 255 395f0b9f43cSBram Moolenaar endtry 396f0b9f43cSBram Moolenaar assert_equal(255, n) 397f0b9f43cSBram Moolenaar 398cfcd011fSBram Moolenaar var nd: dict<any> 399f0b9f43cSBram Moolenaar try 400f0b9f43cSBram Moolenaar nd = {g:anumber: 1} 4015e654230SBram Moolenaar catch /E1012:/ 402f0b9f43cSBram Moolenaar n = 266 403f0b9f43cSBram Moolenaar endtry 404f0b9f43cSBram Moolenaar assert_equal(266, n) 405f0b9f43cSBram Moolenaar 406f0b9f43cSBram Moolenaar try 407f0b9f43cSBram Moolenaar [n] = [1, 2, 3] 408f0b9f43cSBram Moolenaar catch /E1093:/ 409f0b9f43cSBram Moolenaar n = 277 410f0b9f43cSBram Moolenaar endtry 411f0b9f43cSBram Moolenaar assert_equal(277, n) 412f0b9f43cSBram Moolenaar 413e859312eSBram Moolenaar try 414e859312eSBram Moolenaar &ts = g:astring 4155e654230SBram Moolenaar catch /E1012:/ 416e859312eSBram Moolenaar n = 288 417e859312eSBram Moolenaar endtry 418e859312eSBram Moolenaar assert_equal(288, n) 419e859312eSBram Moolenaar 420e859312eSBram Moolenaar try 421e859312eSBram Moolenaar &backspace = 'asdf' 422e859312eSBram Moolenaar catch /E474:/ 423e859312eSBram Moolenaar n = 299 424e859312eSBram Moolenaar endtry 425e859312eSBram Moolenaar assert_equal(299, n) 426e859312eSBram Moolenaar 427e859312eSBram Moolenaar l = [1] 428e859312eSBram Moolenaar try 429e859312eSBram Moolenaar l[3] = 3 430e859312eSBram Moolenaar catch /E684:/ 431e859312eSBram Moolenaar n = 300 432e859312eSBram Moolenaar endtry 433e859312eSBram Moolenaar assert_equal(300, n) 434e859312eSBram Moolenaar 435e859312eSBram Moolenaar try 436e859312eSBram Moolenaar unlet g:does_not_exist 437e859312eSBram Moolenaar catch /E108:/ 438e859312eSBram Moolenaar n = 322 439e859312eSBram Moolenaar endtry 440e859312eSBram Moolenaar assert_equal(322, n) 441e859312eSBram Moolenaar 442e859312eSBram Moolenaar try 443e859312eSBram Moolenaar d = {'text': 1, g:astring: 2} 444e859312eSBram Moolenaar catch /E721:/ 445e859312eSBram Moolenaar n = 333 446e859312eSBram Moolenaar endtry 447e859312eSBram Moolenaar assert_equal(333, n) 448e859312eSBram Moolenaar 449e859312eSBram Moolenaar try 450e859312eSBram Moolenaar l = DeletedFunc() 451e859312eSBram Moolenaar catch /E933:/ 452e859312eSBram Moolenaar n = 344 453e859312eSBram Moolenaar endtry 454e859312eSBram Moolenaar assert_equal(344, n) 455d032f34aSBram Moolenaar 456d032f34aSBram Moolenaar try 457d032f34aSBram Moolenaar echo len(v:true) 458d032f34aSBram Moolenaar catch /E701:/ 459d032f34aSBram Moolenaar n = 355 460d032f34aSBram Moolenaar endtry 461d032f34aSBram Moolenaar assert_equal(355, n) 462d032f34aSBram Moolenaar 463cfcd011fSBram Moolenaar var P = function('g:NoSuchFunc') 464d032f34aSBram Moolenaar delfunc g:NoSuchFunc 465d032f34aSBram Moolenaar try 466d032f34aSBram Moolenaar echo P() 467d032f34aSBram Moolenaar catch /E117:/ 468d032f34aSBram Moolenaar n = 366 469d032f34aSBram Moolenaar endtry 470d032f34aSBram Moolenaar assert_equal(366, n) 471d032f34aSBram Moolenaar 472d032f34aSBram Moolenaar try 473d032f34aSBram Moolenaar echo g:NoSuchFunc() 474d032f34aSBram Moolenaar catch /E117:/ 475d032f34aSBram Moolenaar n = 377 476d032f34aSBram Moolenaar endtry 477d032f34aSBram Moolenaar assert_equal(377, n) 478d032f34aSBram Moolenaar 479d032f34aSBram Moolenaar try 480d032f34aSBram Moolenaar echo g:alist + 4 481d032f34aSBram Moolenaar catch /E745:/ 482d032f34aSBram Moolenaar n = 388 483d032f34aSBram Moolenaar endtry 484d032f34aSBram Moolenaar assert_equal(388, n) 485d032f34aSBram Moolenaar 486d032f34aSBram Moolenaar try 487d032f34aSBram Moolenaar echo 4 + g:alist 488d032f34aSBram Moolenaar catch /E745:/ 489d032f34aSBram Moolenaar n = 399 490d032f34aSBram Moolenaar endtry 491d032f34aSBram Moolenaar assert_equal(399, n) 492d032f34aSBram Moolenaar 493d032f34aSBram Moolenaar try 494d032f34aSBram Moolenaar echo g:alist.member 495d032f34aSBram Moolenaar catch /E715:/ 496d032f34aSBram Moolenaar n = 400 497d032f34aSBram Moolenaar endtry 498d032f34aSBram Moolenaar assert_equal(400, n) 499d032f34aSBram Moolenaar 500d032f34aSBram Moolenaar try 501d032f34aSBram Moolenaar echo d.member 502d032f34aSBram Moolenaar catch /E716:/ 503d032f34aSBram Moolenaar n = 411 504d032f34aSBram Moolenaar endtry 505d032f34aSBram Moolenaar assert_equal(411, n) 5068a7d6542SBram Moolenaarenddef 5078a7d6542SBram Moolenaar 508e859312eSBram Moolenaardef DeletedFunc(): list<any> 509e859312eSBram Moolenaar return ['delete me'] 510e859312eSBram Moolenaarenddef 511e859312eSBram Moolenaardefcompile 512e859312eSBram Moolenaardelfunc DeletedFunc 513e859312eSBram Moolenaar 514257cc5eeSBram Moolenaardef ThrowFromDef() 515a72cfb80SBram Moolenaar throw "getout" # comment 516257cc5eeSBram Moolenaarenddef 517257cc5eeSBram Moolenaar 518257cc5eeSBram Moolenaarfunc CatchInFunc() 519257cc5eeSBram Moolenaar try 520257cc5eeSBram Moolenaar call ThrowFromDef() 521257cc5eeSBram Moolenaar catch 522257cc5eeSBram Moolenaar let g:thrown_func = v:exception 523257cc5eeSBram Moolenaar endtry 524257cc5eeSBram Moolenaarendfunc 525257cc5eeSBram Moolenaar 526257cc5eeSBram Moolenaardef CatchInDef() 527257cc5eeSBram Moolenaar try 528257cc5eeSBram Moolenaar ThrowFromDef() 529257cc5eeSBram Moolenaar catch 530257cc5eeSBram Moolenaar g:thrown_def = v:exception 531257cc5eeSBram Moolenaar endtry 532257cc5eeSBram Moolenaarenddef 533257cc5eeSBram Moolenaar 534f575adffSBram Moolenaardef ReturnFinally(): string 535f575adffSBram Moolenaar try 536f575adffSBram Moolenaar return 'intry' 537373863edSBram Moolenaar finall 538f575adffSBram Moolenaar g:in_finally = 'finally' 539f575adffSBram Moolenaar endtry 540f575adffSBram Moolenaar return 'end' 541f575adffSBram Moolenaarenddef 542f575adffSBram Moolenaar 543257cc5eeSBram Moolenaardef Test_try_catch_nested() 544257cc5eeSBram Moolenaar CatchInFunc() 545257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_func) 546257cc5eeSBram Moolenaar 547257cc5eeSBram Moolenaar CatchInDef() 548257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_def) 549f575adffSBram Moolenaar 550f575adffSBram Moolenaar assert_equal('intry', ReturnFinally()) 551f575adffSBram Moolenaar assert_equal('finally', g:in_finally) 552f575adffSBram Moolenaarenddef 553f575adffSBram Moolenaar 5549939f57bSBram Moolenaardef TryOne(): number 5559939f57bSBram Moolenaar try 5569939f57bSBram Moolenaar return 0 5579939f57bSBram Moolenaar catch 5589939f57bSBram Moolenaar endtry 5599939f57bSBram Moolenaar return 0 5609939f57bSBram Moolenaarenddef 5619939f57bSBram Moolenaar 5629939f57bSBram Moolenaardef TryTwo(n: number): string 5639939f57bSBram Moolenaar try 564cfcd011fSBram Moolenaar var x = {} 5659939f57bSBram Moolenaar catch 5669939f57bSBram Moolenaar endtry 5679939f57bSBram Moolenaar return 'text' 5689939f57bSBram Moolenaarenddef 5699939f57bSBram Moolenaar 5709939f57bSBram Moolenaardef Test_try_catch_twice() 5719939f57bSBram Moolenaar assert_equal('text', TryOne()->TryTwo()) 5729939f57bSBram Moolenaarenddef 5739939f57bSBram Moolenaar 574f575adffSBram Moolenaardef Test_try_catch_match() 575cfcd011fSBram Moolenaar var seq = 'a' 576f575adffSBram Moolenaar try 577f575adffSBram Moolenaar throw 'something' 578f575adffSBram Moolenaar catch /nothing/ 579f575adffSBram Moolenaar seq ..= 'x' 580f575adffSBram Moolenaar catch /some/ 581f575adffSBram Moolenaar seq ..= 'b' 582f575adffSBram Moolenaar catch /asdf/ 583f575adffSBram Moolenaar seq ..= 'x' 584e8c4abbbSBram Moolenaar catch ?a\?sdf? 585e8c4abbbSBram Moolenaar seq ..= 'y' 586f575adffSBram Moolenaar finally 587f575adffSBram Moolenaar seq ..= 'c' 588f575adffSBram Moolenaar endtry 589f575adffSBram Moolenaar assert_equal('abc', seq) 590257cc5eeSBram Moolenaarenddef 591257cc5eeSBram Moolenaar 592e8c4abbbSBram Moolenaardef Test_try_catch_fails() 593d2c61705SBram Moolenaar CheckDefFailure(['catch'], 'E603:') 594d2c61705SBram Moolenaar CheckDefFailure(['try', 'echo 0', 'catch', 'catch'], 'E1033:') 595d2c61705SBram Moolenaar CheckDefFailure(['try', 'echo 0', 'catch /pat'], 'E1067:') 596d2c61705SBram Moolenaar CheckDefFailure(['finally'], 'E606:') 597d2c61705SBram Moolenaar CheckDefFailure(['try', 'echo 0', 'finally', 'echo 1', 'finally'], 'E607:') 598d2c61705SBram Moolenaar CheckDefFailure(['endtry'], 'E602:') 599d2c61705SBram Moolenaar CheckDefFailure(['while 1', 'endtry'], 'E170:') 600d2c61705SBram Moolenaar CheckDefFailure(['for i in range(5)', 'endtry'], 'E170:') 60113106605SBram Moolenaar CheckDefFailure(['if 1', 'endtry'], 'E171:') 602d2c61705SBram Moolenaar CheckDefFailure(['try', 'echo 1', 'endtry'], 'E1032:') 603585fea7bSBram Moolenaar 604d2c61705SBram Moolenaar CheckDefFailure(['throw'], 'E1015:') 605d2c61705SBram Moolenaar CheckDefFailure(['throw xxx'], 'E1001:') 606e8c4abbbSBram Moolenaarenddef 607e8c4abbbSBram Moolenaar 608006ad48bSBram Moolenaardef Test_throw_vimscript() 609f5be8cdbSBram Moolenaar # only checks line continuation 610cfcd011fSBram Moolenaar var lines =<< trim END 611006ad48bSBram Moolenaar vim9script 612006ad48bSBram Moolenaar try 613006ad48bSBram Moolenaar throw 'one' 614006ad48bSBram Moolenaar .. 'two' 615006ad48bSBram Moolenaar catch 616006ad48bSBram Moolenaar assert_equal('onetwo', v:exception) 617006ad48bSBram Moolenaar endtry 618006ad48bSBram Moolenaar END 619006ad48bSBram Moolenaar CheckScriptSuccess(lines) 6201e021e63SBram Moolenaar 6211e021e63SBram Moolenaar lines =<< trim END 6221e021e63SBram Moolenaar vim9script 623*352134bbSBram Moolenaar @r = '' 6241e021e63SBram Moolenaar def Func() 6251e021e63SBram Moolenaar throw @r 6261e021e63SBram Moolenaar enddef 6271e021e63SBram Moolenaar var result = '' 6281e021e63SBram Moolenaar try 6291e021e63SBram Moolenaar Func() 6301e021e63SBram Moolenaar catch /E1129:/ 6311e021e63SBram Moolenaar result = 'caught' 6321e021e63SBram Moolenaar endtry 6331e021e63SBram Moolenaar assert_equal('caught', result) 6341e021e63SBram Moolenaar END 6351e021e63SBram Moolenaar CheckScriptSuccess(lines) 636006ad48bSBram Moolenaarenddef 637006ad48bSBram Moolenaar 638ed677f55SBram Moolenaardef Test_error_in_nested_function() 639ed677f55SBram Moolenaar # an error in a nested :function aborts executin in the calling :def function 640cfcd011fSBram Moolenaar var lines =<< trim END 641ed677f55SBram Moolenaar vim9script 642ed677f55SBram Moolenaar def Func() 643ed677f55SBram Moolenaar Error() 644ed677f55SBram Moolenaar g:test_var = 1 645ed677f55SBram Moolenaar enddef 646ed677f55SBram Moolenaar func Error() abort 647ed677f55SBram Moolenaar eval [][0] 648ed677f55SBram Moolenaar endfunc 649ed677f55SBram Moolenaar Func() 650ed677f55SBram Moolenaar END 651ed677f55SBram Moolenaar g:test_var = 0 652ed677f55SBram Moolenaar CheckScriptFailure(lines, 'E684:') 653ed677f55SBram Moolenaar assert_equal(0, g:test_var) 654ed677f55SBram Moolenaarenddef 655ed677f55SBram Moolenaar 65637c83711SBram Moolenaardef Test_cexpr_vimscript() 657f5be8cdbSBram Moolenaar # only checks line continuation 65837c83711SBram Moolenaar set errorformat=File\ %f\ line\ %l 659cfcd011fSBram Moolenaar var lines =<< trim END 66037c83711SBram Moolenaar vim9script 66137c83711SBram Moolenaar cexpr 'File' 66237c83711SBram Moolenaar .. ' someFile' .. 66337c83711SBram Moolenaar ' line 19' 66437c83711SBram Moolenaar assert_equal(19, getqflist()[0].lnum) 66537c83711SBram Moolenaar END 66637c83711SBram Moolenaar CheckScriptSuccess(lines) 66737c83711SBram Moolenaar set errorformat& 66837c83711SBram Moolenaarenddef 66937c83711SBram Moolenaar 670c9edd6b5SBram Moolenaardef Test_statusline_syntax() 671c9edd6b5SBram Moolenaar # legacy syntax is used for 'statusline' 672cfcd011fSBram Moolenaar var lines =<< trim END 673c9edd6b5SBram Moolenaar vim9script 674c9edd6b5SBram Moolenaar func g:Status() 675c9edd6b5SBram Moolenaar return '%{"x" is# "x"}' 676c9edd6b5SBram Moolenaar endfunc 677c9edd6b5SBram Moolenaar set laststatus=2 statusline=%!Status() 678c9edd6b5SBram Moolenaar redrawstatus 679c9edd6b5SBram Moolenaar set laststatus statusline= 680c9edd6b5SBram Moolenaar END 681c9edd6b5SBram Moolenaar CheckScriptSuccess(lines) 682c9edd6b5SBram Moolenaarenddef 683c9edd6b5SBram Moolenaar 684b209750bSBram Moolenaardef Test_list_vimscript() 685b209750bSBram Moolenaar # checks line continuation and comments 686cfcd011fSBram Moolenaar var lines =<< trim END 687b209750bSBram Moolenaar vim9script 688cfcd011fSBram Moolenaar var mylist = [ 689b209750bSBram Moolenaar 'one', 690b209750bSBram Moolenaar # comment 691b209750bSBram Moolenaar 'two', # empty line follows 692b209750bSBram Moolenaar 693b209750bSBram Moolenaar 'three', 694b209750bSBram Moolenaar ] 695b209750bSBram Moolenaar assert_equal(['one', 'two', 'three'], mylist) 696b209750bSBram Moolenaar END 697b209750bSBram Moolenaar CheckScriptSuccess(lines) 69866250c93SBram Moolenaar 69966250c93SBram Moolenaar # check all lines from heredoc are kept 70066250c93SBram Moolenaar lines =<< trim END 70166250c93SBram Moolenaar # comment 1 70266250c93SBram Moolenaar two 70366250c93SBram Moolenaar # comment 3 70466250c93SBram Moolenaar 70566250c93SBram Moolenaar five 70666250c93SBram Moolenaar # comment 6 70766250c93SBram Moolenaar END 70866250c93SBram Moolenaar assert_equal(['# comment 1', 'two', '# comment 3', '', 'five', '# comment 6'], lines) 709b209750bSBram Moolenaarenddef 710b209750bSBram Moolenaar 7112a1381c3SBram Moolenaarif has('channel') 71240ee466cSBram Moolenaar let someJob = test_null_job() 71340ee466cSBram Moolenaar 71440ee466cSBram Moolenaar def FuncWithError() 71540ee466cSBram Moolenaar echomsg g:someJob 71640ee466cSBram Moolenaar enddef 71740ee466cSBram Moolenaar 71840ee466cSBram Moolenaar func Test_convert_emsg_to_exception() 71940ee466cSBram Moolenaar try 72040ee466cSBram Moolenaar call FuncWithError() 72140ee466cSBram Moolenaar catch 72240ee466cSBram Moolenaar call assert_match('Vim:E908:', v:exception) 72340ee466cSBram Moolenaar endtry 72440ee466cSBram Moolenaar endfunc 7252a1381c3SBram Moolenaarendif 72640ee466cSBram Moolenaar 7278a7d6542SBram Moolenaarlet s:export_script_lines =<< trim END 7288a7d6542SBram Moolenaar vim9script 729cfcd011fSBram Moolenaar var name: string = 'bob' 7308a7d6542SBram Moolenaar def Concat(arg: string): string 7318a7d6542SBram Moolenaar return name .. arg 7328a7d6542SBram Moolenaar enddef 733227a69deSBram Moolenaar g:result = Concat('bie') 734227a69deSBram Moolenaar g:localname = name 7358a7d6542SBram Moolenaar 7368a7d6542SBram Moolenaar export const CONST = 1234 737cfcd011fSBram Moolenaar export var exported = 9876 738cfcd011fSBram Moolenaar export var exp_name = 'John' 7398a7d6542SBram Moolenaar export def Exported(): string 7408a7d6542SBram Moolenaar return 'Exported' 7418a7d6542SBram Moolenaar enddef 7428a7d6542SBram MoolenaarEND 7438a7d6542SBram Moolenaar 744b3ca9824SBram Moolenaardef Undo_export_script_lines() 745b3ca9824SBram Moolenaar unlet g:result 746b3ca9824SBram Moolenaar unlet g:localname 747b3ca9824SBram Moolenaarenddef 748b3ca9824SBram Moolenaar 7495269bd2aSBram Moolenaardef Test_vim9_import_export() 750cfcd011fSBram Moolenaar var import_script_lines =<< trim END 7518a7d6542SBram Moolenaar vim9script 7528a7d6542SBram Moolenaar import {exported, Exported} from './Xexport.vim' 7538a7d6542SBram Moolenaar g:imported = exported 7546e587dcbSBram Moolenaar exported += 3 7556e587dcbSBram Moolenaar g:imported_added = exported 7568a7d6542SBram Moolenaar g:imported_func = Exported() 7576e587dcbSBram Moolenaar 75840f4f7a4SBram Moolenaar def GetExported(): string 759cfcd011fSBram Moolenaar var local_dict = #{ref: Exported} 76040f4f7a4SBram Moolenaar return local_dict.ref() 76140f4f7a4SBram Moolenaar enddef 76240f4f7a4SBram Moolenaar g:funcref_result = GetExported() 76340f4f7a4SBram Moolenaar 7646e587dcbSBram Moolenaar import {exp_name} from './Xexport.vim' 7656e587dcbSBram Moolenaar g:imported_name = exp_name 7666e587dcbSBram Moolenaar exp_name ..= ' Doe' 7676e587dcbSBram Moolenaar g:imported_name_appended = exp_name 7685381c7a1SBram Moolenaar g:imported_later = exported 7698a7d6542SBram Moolenaar END 7708a7d6542SBram Moolenaar 7718a7d6542SBram Moolenaar writefile(import_script_lines, 'Ximport.vim') 7728a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport.vim') 7738a7d6542SBram Moolenaar 7748a7d6542SBram Moolenaar source Ximport.vim 7758a7d6542SBram Moolenaar 7768a7d6542SBram Moolenaar assert_equal('bobbie', g:result) 7778a7d6542SBram Moolenaar assert_equal('bob', g:localname) 7788a7d6542SBram Moolenaar assert_equal(9876, g:imported) 7796e587dcbSBram Moolenaar assert_equal(9879, g:imported_added) 7805381c7a1SBram Moolenaar assert_equal(9879, g:imported_later) 7818a7d6542SBram Moolenaar assert_equal('Exported', g:imported_func) 78240f4f7a4SBram Moolenaar assert_equal('Exported', g:funcref_result) 7836e587dcbSBram Moolenaar assert_equal('John', g:imported_name) 7846e587dcbSBram Moolenaar assert_equal('John Doe', g:imported_name_appended) 7858a7d6542SBram Moolenaar assert_false(exists('g:name')) 7868a7d6542SBram Moolenaar 787b3ca9824SBram Moolenaar Undo_export_script_lines() 7888a7d6542SBram Moolenaar unlet g:imported 7896e587dcbSBram Moolenaar unlet g:imported_added 7905381c7a1SBram Moolenaar unlet g:imported_later 7918a7d6542SBram Moolenaar unlet g:imported_func 7926e587dcbSBram Moolenaar unlet g:imported_name g:imported_name_appended 7938a7d6542SBram Moolenaar delete('Ximport.vim') 794f2d5c240SBram Moolenaar 7951c991144SBram Moolenaar # similar, with line breaks 796cfcd011fSBram Moolenaar var import_line_break_script_lines =<< trim END 7971c991144SBram Moolenaar vim9script 7981c991144SBram Moolenaar import { 7991c991144SBram Moolenaar exported, 8001c991144SBram Moolenaar Exported, 8011c991144SBram Moolenaar } 8021c991144SBram Moolenaar from 8031c991144SBram Moolenaar './Xexport.vim' 8041c991144SBram Moolenaar g:imported = exported 8051c991144SBram Moolenaar exported += 5 8061c991144SBram Moolenaar g:imported_added = exported 8071c991144SBram Moolenaar g:imported_func = Exported() 8081c991144SBram Moolenaar END 8091c991144SBram Moolenaar writefile(import_line_break_script_lines, 'Ximport_lbr.vim') 8101c991144SBram Moolenaar source Ximport_lbr.vim 8111c991144SBram Moolenaar 8121c991144SBram Moolenaar assert_equal(9876, g:imported) 8131c991144SBram Moolenaar assert_equal(9881, g:imported_added) 8141c991144SBram Moolenaar assert_equal('Exported', g:imported_func) 8151c991144SBram Moolenaar 8161c991144SBram Moolenaar # exported script not sourced again 8171c991144SBram Moolenaar assert_false(exists('g:result')) 8181c991144SBram Moolenaar unlet g:imported 8191c991144SBram Moolenaar unlet g:imported_added 8201c991144SBram Moolenaar unlet g:imported_func 8211c991144SBram Moolenaar delete('Ximport_lbr.vim') 8221c991144SBram Moolenaar 8231c991144SBram Moolenaar # import inside :def function 824cfcd011fSBram Moolenaar var import_in_def_lines =<< trim END 8255381c7a1SBram Moolenaar vim9script 8265381c7a1SBram Moolenaar def ImportInDef() 8275381c7a1SBram Moolenaar import exported from './Xexport.vim' 8285381c7a1SBram Moolenaar g:imported = exported 8295381c7a1SBram Moolenaar exported += 7 8305381c7a1SBram Moolenaar g:imported_added = exported 8315381c7a1SBram Moolenaar enddef 8325381c7a1SBram Moolenaar ImportInDef() 8335381c7a1SBram Moolenaar END 8345381c7a1SBram Moolenaar writefile(import_in_def_lines, 'Ximport2.vim') 8355381c7a1SBram Moolenaar source Ximport2.vim 836f5be8cdbSBram Moolenaar # TODO: this should be 9879 8375381c7a1SBram Moolenaar assert_equal(9876, g:imported) 8385381c7a1SBram Moolenaar assert_equal(9883, g:imported_added) 8395381c7a1SBram Moolenaar unlet g:imported 8405381c7a1SBram Moolenaar unlet g:imported_added 8415381c7a1SBram Moolenaar delete('Ximport2.vim') 8425381c7a1SBram Moolenaar 843cfcd011fSBram Moolenaar var import_star_as_lines =<< trim END 844f2d5c240SBram Moolenaar vim9script 845f2d5c240SBram Moolenaar import * as Export from './Xexport.vim' 846f2d5c240SBram Moolenaar def UseExport() 847f2d5c240SBram Moolenaar g:imported = Export.exported 848f2d5c240SBram Moolenaar enddef 849f2d5c240SBram Moolenaar UseExport() 850f2d5c240SBram Moolenaar END 851f2d5c240SBram Moolenaar writefile(import_star_as_lines, 'Ximport.vim') 852f2d5c240SBram Moolenaar source Ximport.vim 8535381c7a1SBram Moolenaar assert_equal(9883, g:imported) 854f2d5c240SBram Moolenaar 855cfcd011fSBram Moolenaar var import_star_as_lines_no_dot =<< trim END 856599c89c8SBram Moolenaar vim9script 857599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 858599c89c8SBram Moolenaar def Func() 859cfcd011fSBram Moolenaar var dummy = 1 860cfcd011fSBram Moolenaar var imported = Export + dummy 861599c89c8SBram Moolenaar enddef 862822ba247SBram Moolenaar defcompile 863599c89c8SBram Moolenaar END 864599c89c8SBram Moolenaar writefile(import_star_as_lines_no_dot, 'Ximport.vim') 86544d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1060:', '', 2, 'Func') 866599c89c8SBram Moolenaar 867cfcd011fSBram Moolenaar var import_star_as_lines_dot_space =<< trim END 868599c89c8SBram Moolenaar vim9script 869599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 870599c89c8SBram Moolenaar def Func() 871cfcd011fSBram Moolenaar var imported = Export . exported 872599c89c8SBram Moolenaar enddef 873822ba247SBram Moolenaar defcompile 874599c89c8SBram Moolenaar END 875599c89c8SBram Moolenaar writefile(import_star_as_lines_dot_space, 'Ximport.vim') 87644d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1074:', '', 1, 'Func') 877599c89c8SBram Moolenaar 878cfcd011fSBram Moolenaar var import_star_as_lines_missing_name =<< trim END 879599c89c8SBram Moolenaar vim9script 880599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 881599c89c8SBram Moolenaar def Func() 882cfcd011fSBram Moolenaar var imported = Export. 883599c89c8SBram Moolenaar enddef 884822ba247SBram Moolenaar defcompile 885599c89c8SBram Moolenaar END 886599c89c8SBram Moolenaar writefile(import_star_as_lines_missing_name, 'Ximport.vim') 88744d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1048:', '', 1, 'Func') 888599c89c8SBram Moolenaar 889cfcd011fSBram Moolenaar var import_star_as_lbr_lines =<< trim END 8901c991144SBram Moolenaar vim9script 8911c991144SBram Moolenaar import * 8921c991144SBram Moolenaar as Export 8931c991144SBram Moolenaar from 8941c991144SBram Moolenaar './Xexport.vim' 8951c991144SBram Moolenaar def UseExport() 8961c991144SBram Moolenaar g:imported = Export.exported 8971c991144SBram Moolenaar enddef 8981c991144SBram Moolenaar UseExport() 8991c991144SBram Moolenaar END 9001c991144SBram Moolenaar writefile(import_star_as_lbr_lines, 'Ximport.vim') 9011c991144SBram Moolenaar source Ximport.vim 9021c991144SBram Moolenaar assert_equal(9883, g:imported) 9031c991144SBram Moolenaar 904cfcd011fSBram Moolenaar var import_star_lines =<< trim END 905f2d5c240SBram Moolenaar vim9script 906f2d5c240SBram Moolenaar import * from './Xexport.vim' 907f2d5c240SBram Moolenaar END 908f2d5c240SBram Moolenaar writefile(import_star_lines, 'Ximport.vim') 90944d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1045:', '', 2, 'Ximport.vim') 910f2d5c240SBram Moolenaar 911f5be8cdbSBram Moolenaar # try to import something that exists but is not exported 912cfcd011fSBram Moolenaar var import_not_exported_lines =<< trim END 913fa29c8abSBram Moolenaar vim9script 914fa29c8abSBram Moolenaar import name from './Xexport.vim' 915fa29c8abSBram Moolenaar END 916fa29c8abSBram Moolenaar writefile(import_not_exported_lines, 'Ximport.vim') 91744d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1049:', '', 2, 'Ximport.vim') 918fa29c8abSBram Moolenaar 919f5be8cdbSBram Moolenaar # try to import something that is already defined 920cfcd011fSBram Moolenaar var import_already_defined =<< trim END 9215269bd2aSBram Moolenaar vim9script 922cfcd011fSBram Moolenaar var exported = 'something' 9235269bd2aSBram Moolenaar import exported from './Xexport.vim' 9245269bd2aSBram Moolenaar END 9255269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 92644d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:', '', 3, 'Ximport.vim') 9275269bd2aSBram Moolenaar 928f5be8cdbSBram Moolenaar # try to import something that is already defined 9295269bd2aSBram Moolenaar import_already_defined =<< trim END 9305269bd2aSBram Moolenaar vim9script 931cfcd011fSBram Moolenaar var exported = 'something' 9325269bd2aSBram Moolenaar import * as exported from './Xexport.vim' 9335269bd2aSBram Moolenaar END 9345269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 93544d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:', '', 3, 'Ximport.vim') 9365269bd2aSBram Moolenaar 937f5be8cdbSBram Moolenaar # try to import something that is already defined 9385269bd2aSBram Moolenaar import_already_defined =<< trim END 9395269bd2aSBram Moolenaar vim9script 940cfcd011fSBram Moolenaar var exported = 'something' 9415269bd2aSBram Moolenaar import {exported} from './Xexport.vim' 9425269bd2aSBram Moolenaar END 9435269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 94444d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:', '', 3, 'Ximport.vim') 9455269bd2aSBram Moolenaar 946f5be8cdbSBram Moolenaar # import a very long name, requires making a copy 947cfcd011fSBram Moolenaar var import_long_name_lines =<< trim END 948fa29c8abSBram Moolenaar vim9script 949fa29c8abSBram Moolenaar import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim' 950fa29c8abSBram Moolenaar END 951fa29c8abSBram Moolenaar writefile(import_long_name_lines, 'Ximport.vim') 95244d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1048:', '', 2, 'Ximport.vim') 953fa29c8abSBram Moolenaar 954cfcd011fSBram Moolenaar var import_no_from_lines =<< trim END 955fa29c8abSBram Moolenaar vim9script 956fa29c8abSBram Moolenaar import name './Xexport.vim' 957fa29c8abSBram Moolenaar END 958fa29c8abSBram Moolenaar writefile(import_no_from_lines, 'Ximport.vim') 95944d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1070:', '', 2, 'Ximport.vim') 960fa29c8abSBram Moolenaar 961cfcd011fSBram Moolenaar var import_invalid_string_lines =<< trim END 962fa29c8abSBram Moolenaar vim9script 963fa29c8abSBram Moolenaar import name from Xexport.vim 964fa29c8abSBram Moolenaar END 965fa29c8abSBram Moolenaar writefile(import_invalid_string_lines, 'Ximport.vim') 96644d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1071:', '', 2, 'Ximport.vim') 967fa29c8abSBram Moolenaar 968cfcd011fSBram Moolenaar var import_wrong_name_lines =<< trim END 969fa29c8abSBram Moolenaar vim9script 970fa29c8abSBram Moolenaar import name from './XnoExport.vim' 971fa29c8abSBram Moolenaar END 972fa29c8abSBram Moolenaar writefile(import_wrong_name_lines, 'Ximport.vim') 97344d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1053:', '', 2, 'Ximport.vim') 974fa29c8abSBram Moolenaar 975cfcd011fSBram Moolenaar var import_missing_comma_lines =<< trim END 976fa29c8abSBram Moolenaar vim9script 977fa29c8abSBram Moolenaar import {exported name} from './Xexport.vim' 978fa29c8abSBram Moolenaar END 9795269bd2aSBram Moolenaar writefile(import_missing_comma_lines, 'Ximport3.vim') 98044d6652dSBram Moolenaar assert_fails('source Ximport3.vim', 'E1046:', '', 2, 'Ximport3.vim') 981fa29c8abSBram Moolenaar 982f2d5c240SBram Moolenaar delete('Ximport.vim') 9835269bd2aSBram Moolenaar delete('Ximport3.vim') 9848a7d6542SBram Moolenaar delete('Xexport.vim') 9858a7d6542SBram Moolenaar 986f5be8cdbSBram Moolenaar # Check that in a Vim9 script 'cpo' is set to the Vim default. 987750802b5SBram Moolenaar set cpo&vi 988cfcd011fSBram Moolenaar var cpo_before = &cpo 989cfcd011fSBram Moolenaar var lines =<< trim END 990750802b5SBram Moolenaar vim9script 991750802b5SBram Moolenaar g:cpo_in_vim9script = &cpo 992750802b5SBram Moolenaar END 993750802b5SBram Moolenaar writefile(lines, 'Xvim9_script') 994750802b5SBram Moolenaar source Xvim9_script 995750802b5SBram Moolenaar assert_equal(cpo_before, &cpo) 996750802b5SBram Moolenaar set cpo&vim 997750802b5SBram Moolenaar assert_equal(&cpo, g:cpo_in_vim9script) 998750802b5SBram Moolenaar delete('Xvim9_script') 999750802b5SBram Moolenaarenddef 1000750802b5SBram Moolenaar 1001803af686SBram Moolenaarfunc g:Trigger() 1002803af686SBram Moolenaar source Ximport.vim 1003803af686SBram Moolenaar return "echo 'yes'\<CR>" 1004803af686SBram Moolenaarendfunc 1005803af686SBram Moolenaar 1006803af686SBram Moolenaardef Test_import_export_expr_map() 1007803af686SBram Moolenaar # check that :import and :export work when buffer is locked 1008cfcd011fSBram Moolenaar var export_lines =<< trim END 1009803af686SBram Moolenaar vim9script 1010803af686SBram Moolenaar export def That(): string 1011803af686SBram Moolenaar return 'yes' 1012803af686SBram Moolenaar enddef 1013803af686SBram Moolenaar END 1014803af686SBram Moolenaar writefile(export_lines, 'Xexport_that.vim') 1015803af686SBram Moolenaar 1016cfcd011fSBram Moolenaar var import_lines =<< trim END 1017803af686SBram Moolenaar vim9script 1018803af686SBram Moolenaar import That from './Xexport_that.vim' 1019803af686SBram Moolenaar assert_equal('yes', That()) 1020803af686SBram Moolenaar END 1021803af686SBram Moolenaar writefile(import_lines, 'Ximport.vim') 1022803af686SBram Moolenaar 1023803af686SBram Moolenaar nnoremap <expr> trigger g:Trigger() 1024803af686SBram Moolenaar feedkeys('trigger', "xt") 1025803af686SBram Moolenaar 1026730b2483SBram Moolenaar delete('Xexport_that.vim') 1027803af686SBram Moolenaar delete('Ximport.vim') 1028803af686SBram Moolenaar nunmap trigger 1029803af686SBram Moolenaarenddef 1030803af686SBram Moolenaar 10318e1986e3SBram Moolenaardef Test_import_in_filetype() 10328e1986e3SBram Moolenaar # check that :import works when the buffer is locked 10338e1986e3SBram Moolenaar mkdir('ftplugin', 'p') 1034cfcd011fSBram Moolenaar var export_lines =<< trim END 10358e1986e3SBram Moolenaar vim9script 1036cfcd011fSBram Moolenaar export var That = 'yes' 10378e1986e3SBram Moolenaar END 1038730b2483SBram Moolenaar writefile(export_lines, 'ftplugin/Xexport_ft.vim') 10398e1986e3SBram Moolenaar 1040cfcd011fSBram Moolenaar var import_lines =<< trim END 10418e1986e3SBram Moolenaar vim9script 1042730b2483SBram Moolenaar import That from './Xexport_ft.vim' 10438e1986e3SBram Moolenaar assert_equal('yes', That) 10448e1986e3SBram Moolenaar g:did_load_mytpe = 1 10458e1986e3SBram Moolenaar END 10468e1986e3SBram Moolenaar writefile(import_lines, 'ftplugin/qf.vim') 10478e1986e3SBram Moolenaar 1048cfcd011fSBram Moolenaar var save_rtp = &rtp 10498e1986e3SBram Moolenaar &rtp = getcwd() .. ',' .. &rtp 10508e1986e3SBram Moolenaar 10518e1986e3SBram Moolenaar filetype plugin on 10528e1986e3SBram Moolenaar copen 10538e1986e3SBram Moolenaar assert_equal(1, g:did_load_mytpe) 10548e1986e3SBram Moolenaar 10558e1986e3SBram Moolenaar quit! 1056730b2483SBram Moolenaar delete('Xexport_ft.vim') 10578e1986e3SBram Moolenaar delete('ftplugin', 'rf') 10588e1986e3SBram Moolenaar &rtp = save_rtp 10598e1986e3SBram Moolenaarenddef 10608e1986e3SBram Moolenaar 1061efa94447SBram Moolenaardef Test_use_import_in_mapping() 1062cfcd011fSBram Moolenaar var lines =<< trim END 1063efa94447SBram Moolenaar vim9script 1064efa94447SBram Moolenaar export def Funcx() 1065efa94447SBram Moolenaar g:result = 42 1066efa94447SBram Moolenaar enddef 1067efa94447SBram Moolenaar END 1068efa94447SBram Moolenaar writefile(lines, 'XsomeExport.vim') 1069efa94447SBram Moolenaar lines =<< trim END 1070efa94447SBram Moolenaar vim9script 1071efa94447SBram Moolenaar import Funcx from './XsomeExport.vim' 1072b3ca9824SBram Moolenaar nnoremap <F3> :call <sid>Funcx()<cr> 1073efa94447SBram Moolenaar END 1074efa94447SBram Moolenaar writefile(lines, 'Xmapscript.vim') 1075efa94447SBram Moolenaar 1076efa94447SBram Moolenaar source Xmapscript.vim 1077b3ca9824SBram Moolenaar feedkeys("\<F3>", "xt") 1078efa94447SBram Moolenaar assert_equal(42, g:result) 1079efa94447SBram Moolenaar 1080efa94447SBram Moolenaar unlet g:result 1081efa94447SBram Moolenaar delete('XsomeExport.vim') 1082efa94447SBram Moolenaar delete('Xmapscript.vim') 1083b3ca9824SBram Moolenaar nunmap <F3> 1084efa94447SBram Moolenaarenddef 1085efa94447SBram Moolenaar 1086750802b5SBram Moolenaardef Test_vim9script_fails() 10878a7d6542SBram Moolenaar CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:') 10888a7d6542SBram Moolenaar CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:') 1089cfcd011fSBram Moolenaar CheckScriptFailure(['export var some = 123'], 'E1042:') 10909721fb4eSBram Moolenaar CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1048:') 1091cfcd011fSBram Moolenaar CheckScriptFailure(['vim9script', 'export var g:some'], 'E1022:') 1092750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:') 1093750802b5SBram Moolenaar 1094cfcd011fSBram Moolenaar CheckScriptFailure(['vim9script', 'var str: string', 'str = 1234'], 'E1012:') 1095c785b9a7SBram Moolenaar CheckScriptFailure(['vim9script', 'const str = "asdf"', 'str = "xxx"'], 'E46:') 1096c785b9a7SBram Moolenaar 1097e2e4075fSBram Moolenaar assert_fails('vim9script', 'E1038:') 1098e2e4075fSBram Moolenaar assert_fails('export something', 'E1043:') 10998a7d6542SBram Moolenaarenddef 11008a7d6542SBram Moolenaar 1101f7d267efSBram Moolenaarfunc Test_import_fails_without_script() 1102101f4810SBram Moolenaar CheckRunVimInTerminal 1103101f4810SBram Moolenaar 11049bb3eb3eSBram Moolenaar " call indirectly to avoid compilation error for missing functions 1105c620c055SBram Moolenaar call Run_Test_import_fails_on_command_line() 11069bb3eb3eSBram Moolenaarendfunc 11079bb3eb3eSBram Moolenaar 1108c620c055SBram Moolenaardef Run_Test_import_fails_on_command_line() 1109cfcd011fSBram Moolenaar var export =<< trim END 1110101f4810SBram Moolenaar vim9script 1111101f4810SBram Moolenaar export def Foo(): number 1112101f4810SBram Moolenaar return 0 1113101f4810SBram Moolenaar enddef 1114101f4810SBram Moolenaar END 1115730b2483SBram Moolenaar writefile(export, 'XexportCmd.vim') 1116101f4810SBram Moolenaar 1117cfcd011fSBram Moolenaar var buf = RunVimInTerminal('-c "import Foo from ''./XexportCmd.vim''"', #{ 11189bb3eb3eSBram Moolenaar rows: 6, wait_for_ruler: 0}) 11199bb3eb3eSBram Moolenaar WaitForAssert({-> assert_match('^E1094:', term_getline(buf, 5))}) 1120101f4810SBram Moolenaar 1121730b2483SBram Moolenaar delete('XexportCmd.vim') 11229bb3eb3eSBram Moolenaar StopVimInTerminal(buf) 11239bb3eb3eSBram Moolenaarenddef 1124101f4810SBram Moolenaar 11254c17ad94SBram Moolenaardef Test_vim9script_reload_import() 1126cfcd011fSBram Moolenaar var lines =<< trim END 11278a7d6542SBram Moolenaar vim9script 11288a7d6542SBram Moolenaar const var = '' 1129cfcd011fSBram Moolenaar var valone = 1234 11308a7d6542SBram Moolenaar def MyFunc(arg: string) 11318a7d6542SBram Moolenaar valone = 5678 11328a7d6542SBram Moolenaar enddef 11338a7d6542SBram Moolenaar END 1134cfcd011fSBram Moolenaar var morelines =<< trim END 1135cfcd011fSBram Moolenaar var valtwo = 222 11368a7d6542SBram Moolenaar export def GetValtwo(): number 11378a7d6542SBram Moolenaar return valtwo 11388a7d6542SBram Moolenaar enddef 11398a7d6542SBram Moolenaar END 114003afdcf1SBram Moolenaar writefile(lines + morelines, 'Xreload.vim') 11418a7d6542SBram Moolenaar source Xreload.vim 11428a7d6542SBram Moolenaar source Xreload.vim 11438a7d6542SBram Moolenaar source Xreload.vim 11448a7d6542SBram Moolenaar 1145cfcd011fSBram Moolenaar var testlines =<< trim END 11468a7d6542SBram Moolenaar vim9script 11478a7d6542SBram Moolenaar def TheFunc() 11488a7d6542SBram Moolenaar import GetValtwo from './Xreload.vim' 11498a7d6542SBram Moolenaar assert_equal(222, GetValtwo()) 11508a7d6542SBram Moolenaar enddef 11518a7d6542SBram Moolenaar TheFunc() 11528a7d6542SBram Moolenaar END 11538a7d6542SBram Moolenaar writefile(testlines, 'Ximport.vim') 11548a7d6542SBram Moolenaar source Ximport.vim 11558a7d6542SBram Moolenaar 1156f5be8cdbSBram Moolenaar # Test that when not using "morelines" GetValtwo() and valtwo are still 1157f5be8cdbSBram Moolenaar # defined, because import doesn't reload a script. 11588a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 11598a7d6542SBram Moolenaar source Ximport.vim 11608a7d6542SBram Moolenaar 1161f5be8cdbSBram Moolenaar # cannot declare a var twice 11628a7d6542SBram Moolenaar lines =<< trim END 11638a7d6542SBram Moolenaar vim9script 1164cfcd011fSBram Moolenaar var valone = 1234 1165cfcd011fSBram Moolenaar var valone = 5678 11668a7d6542SBram Moolenaar END 11678a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 116844d6652dSBram Moolenaar assert_fails('source Xreload.vim', 'E1041:', '', 3, 'Xreload.vim') 11698a7d6542SBram Moolenaar 11708a7d6542SBram Moolenaar delete('Xreload.vim') 11718a7d6542SBram Moolenaar delete('Ximport.vim') 11728a7d6542SBram Moolenaarenddef 11738a7d6542SBram Moolenaar 117495006e3dSBram Moolenaardef s:RetSome(): string 117595006e3dSBram Moolenaar return 'some' 117695006e3dSBram Moolenaarenddef 117795006e3dSBram Moolenaar 1178fe465a01SBram Moolenaar" Not exported function that is referenced needs to be accessed by the 1179fe465a01SBram Moolenaar" script-local name. 1180fe465a01SBram Moolenaardef Test_vim9script_funcref() 1181cfcd011fSBram Moolenaar var sortlines =<< trim END 1182fe465a01SBram Moolenaar vim9script 1183fe465a01SBram Moolenaar def Compare(i1: number, i2: number): number 1184bed36b93SBram Moolenaar return i2 - i1 1185fe465a01SBram Moolenaar enddef 1186fe465a01SBram Moolenaar 1187fe465a01SBram Moolenaar export def FastSort(): list<number> 1188fe465a01SBram Moolenaar return range(5)->sort(Compare) 1189fe465a01SBram Moolenaar enddef 1190fe465a01SBram Moolenaar END 1191fe465a01SBram Moolenaar writefile(sortlines, 'Xsort.vim') 1192fe465a01SBram Moolenaar 1193cfcd011fSBram Moolenaar var lines =<< trim END 1194fe465a01SBram Moolenaar vim9script 1195fe465a01SBram Moolenaar import FastSort from './Xsort.vim' 1196fe465a01SBram Moolenaar def Test() 1197fe465a01SBram Moolenaar g:result = FastSort() 1198fe465a01SBram Moolenaar enddef 1199fe465a01SBram Moolenaar Test() 1200fe465a01SBram Moolenaar END 1201fe465a01SBram Moolenaar writefile(lines, 'Xscript.vim') 1202fe465a01SBram Moolenaar 1203fe465a01SBram Moolenaar source Xscript.vim 1204fe465a01SBram Moolenaar assert_equal([4, 3, 2, 1, 0], g:result) 1205fe465a01SBram Moolenaar 1206fe465a01SBram Moolenaar unlet g:result 1207fe465a01SBram Moolenaar delete('Xsort.vim') 1208fe465a01SBram Moolenaar delete('Xscript.vim') 120995006e3dSBram Moolenaar 1210cfcd011fSBram Moolenaar var Funcref = function('s:RetSome') 121195006e3dSBram Moolenaar assert_equal('some', Funcref()) 1212fe465a01SBram Moolenaarenddef 1213fe465a01SBram Moolenaar 1214601e76acSBram Moolenaar" Check that when searching for "FilterFunc" it finds the import in the 1215601e76acSBram Moolenaar" script where FastFilter() is called from, both as a string and as a direct 1216601e76acSBram Moolenaar" function reference. 1217c620c055SBram Moolenaardef Test_vim9script_funcref_other_script() 1218cfcd011fSBram Moolenaar var filterLines =<< trim END 1219c620c055SBram Moolenaar vim9script 1220c620c055SBram Moolenaar export def FilterFunc(idx: number, val: number): bool 1221c620c055SBram Moolenaar return idx % 2 == 1 1222c620c055SBram Moolenaar enddef 1223c620c055SBram Moolenaar export def FastFilter(): list<number> 1224c620c055SBram Moolenaar return range(10)->filter('FilterFunc') 1225c620c055SBram Moolenaar enddef 1226601e76acSBram Moolenaar export def FastFilterDirect(): list<number> 1227601e76acSBram Moolenaar return range(10)->filter(FilterFunc) 1228601e76acSBram Moolenaar enddef 1229c620c055SBram Moolenaar END 1230c620c055SBram Moolenaar writefile(filterLines, 'Xfilter.vim') 1231c620c055SBram Moolenaar 1232cfcd011fSBram Moolenaar var lines =<< trim END 1233c620c055SBram Moolenaar vim9script 1234601e76acSBram Moolenaar import {FilterFunc, FastFilter, FastFilterDirect} from './Xfilter.vim' 1235c620c055SBram Moolenaar def Test() 1236cfcd011fSBram Moolenaar var x: list<number> = FastFilter() 1237c620c055SBram Moolenaar enddef 1238c620c055SBram Moolenaar Test() 1239601e76acSBram Moolenaar def TestDirect() 1240cfcd011fSBram Moolenaar var x: list<number> = FastFilterDirect() 1241601e76acSBram Moolenaar enddef 1242601e76acSBram Moolenaar TestDirect() 1243c620c055SBram Moolenaar END 1244601e76acSBram Moolenaar CheckScriptSuccess(lines) 1245c620c055SBram Moolenaar delete('Xfilter.vim') 1246c620c055SBram Moolenaarenddef 1247c620c055SBram Moolenaar 12484c17ad94SBram Moolenaardef Test_vim9script_reload_delfunc() 1249cfcd011fSBram Moolenaar var first_lines =<< trim END 12504c17ad94SBram Moolenaar vim9script 12514c17ad94SBram Moolenaar def FuncYes(): string 12524c17ad94SBram Moolenaar return 'yes' 12534c17ad94SBram Moolenaar enddef 12544c17ad94SBram Moolenaar END 1255cfcd011fSBram Moolenaar var withno_lines =<< trim END 12564c17ad94SBram Moolenaar def FuncNo(): string 12574c17ad94SBram Moolenaar return 'no' 12584c17ad94SBram Moolenaar enddef 12594c17ad94SBram Moolenaar def g:DoCheck(no_exists: bool) 12604c17ad94SBram Moolenaar assert_equal('yes', FuncYes()) 12614c17ad94SBram Moolenaar assert_equal('no', FuncNo()) 126203afdcf1SBram Moolenaar enddef 126303afdcf1SBram Moolenaar END 1264cfcd011fSBram Moolenaar var nono_lines =<< trim END 126503afdcf1SBram Moolenaar def g:DoCheck(no_exists: bool) 126603afdcf1SBram Moolenaar assert_equal('yes', FuncYes()) 126744d6652dSBram Moolenaar assert_fails('FuncNo()', 'E117:', '', 2, 'DoCheck') 12684c17ad94SBram Moolenaar enddef 12694c17ad94SBram Moolenaar END 12704c17ad94SBram Moolenaar 12714c17ad94SBram Moolenaar # FuncNo() is defined 127203afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 12734c17ad94SBram Moolenaar source Xreloaded.vim 12744c17ad94SBram Moolenaar g:DoCheck(true) 12754c17ad94SBram Moolenaar 12764c17ad94SBram Moolenaar # FuncNo() is not redefined 127703afdcf1SBram Moolenaar writefile(first_lines + nono_lines, 'Xreloaded.vim') 12784c17ad94SBram Moolenaar source Xreloaded.vim 127903afdcf1SBram Moolenaar g:DoCheck() 12804c17ad94SBram Moolenaar 12814c17ad94SBram Moolenaar # FuncNo() is back 128203afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 12834c17ad94SBram Moolenaar source Xreloaded.vim 128403afdcf1SBram Moolenaar g:DoCheck() 12854c17ad94SBram Moolenaar 12864c17ad94SBram Moolenaar delete('Xreloaded.vim') 12874c17ad94SBram Moolenaarenddef 12884c17ad94SBram Moolenaar 128989483d40SBram Moolenaardef Test_vim9script_reload_delvar() 129089483d40SBram Moolenaar # write the script with a script-local variable 1291cfcd011fSBram Moolenaar var lines =<< trim END 129289483d40SBram Moolenaar vim9script 1293cfcd011fSBram Moolenaar var name = 'string' 129489483d40SBram Moolenaar END 129589483d40SBram Moolenaar writefile(lines, 'XreloadVar.vim') 129689483d40SBram Moolenaar source XreloadVar.vim 129789483d40SBram Moolenaar 129889483d40SBram Moolenaar # now write the script using the same variable locally - works 129989483d40SBram Moolenaar lines =<< trim END 130089483d40SBram Moolenaar vim9script 130189483d40SBram Moolenaar def Func() 1302cfcd011fSBram Moolenaar var name = 'string' 130389483d40SBram Moolenaar enddef 130489483d40SBram Moolenaar END 130589483d40SBram Moolenaar writefile(lines, 'XreloadVar.vim') 130689483d40SBram Moolenaar source XreloadVar.vim 130789483d40SBram Moolenaar 130889483d40SBram Moolenaar delete('XreloadVar.vim') 130989483d40SBram Moolenaarenddef 131089483d40SBram Moolenaar 13118a7d6542SBram Moolenaardef Test_import_absolute() 1312cfcd011fSBram Moolenaar var import_lines = [ 1313e6085c53SBram Moolenaar 'vim9script', 1314e6085c53SBram Moolenaar 'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"', 1315e6085c53SBram Moolenaar 'def UseExported()', 1316e6085c53SBram Moolenaar ' g:imported_abs = exported', 1317e6085c53SBram Moolenaar ' exported = 8888', 1318e6085c53SBram Moolenaar ' g:imported_after = exported', 1319e6085c53SBram Moolenaar 'enddef', 1320e6085c53SBram Moolenaar 'UseExported()', 1321e6085c53SBram Moolenaar 'g:import_disassembled = execute("disass UseExported")', 1322e6085c53SBram Moolenaar ] 13238a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_abs.vim') 13248a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport_abs.vim') 13258a7d6542SBram Moolenaar 13268a7d6542SBram Moolenaar source Ximport_abs.vim 13278a7d6542SBram Moolenaar 13288a7d6542SBram Moolenaar assert_equal(9876, g:imported_abs) 13294e12a5dfSBram Moolenaar assert_equal(8888, g:imported_after) 1330fbbcd003SBram Moolenaar assert_match('<SNR>\d\+_UseExported\_s*' .. 1331fbbcd003SBram Moolenaar 'g:imported_abs = exported\_s*' .. 1332fbbcd003SBram Moolenaar '0 LOADSCRIPT exported-2 from .*Xexport_abs.vim\_s*' .. 1333fbbcd003SBram Moolenaar '1 STOREG g:imported_abs\_s*' .. 1334fbbcd003SBram Moolenaar 'exported = 8888\_s*' .. 1335fbbcd003SBram Moolenaar '2 PUSHNR 8888\_s*' .. 1336fbbcd003SBram Moolenaar '3 STORESCRIPT exported-2 in .*Xexport_abs.vim\_s*' .. 1337fbbcd003SBram Moolenaar 'g:imported_after = exported\_s*' .. 1338fbbcd003SBram Moolenaar '4 LOADSCRIPT exported-2 from .*Xexport_abs.vim\_s*' .. 1339fbbcd003SBram Moolenaar '5 STOREG g:imported_after', 1340e6085c53SBram Moolenaar g:import_disassembled) 1341b3ca9824SBram Moolenaar 1342b3ca9824SBram Moolenaar Undo_export_script_lines() 13438a7d6542SBram Moolenaar unlet g:imported_abs 13444e12a5dfSBram Moolenaar unlet g:import_disassembled 13458a7d6542SBram Moolenaar 13468a7d6542SBram Moolenaar delete('Ximport_abs.vim') 13478a7d6542SBram Moolenaar delete('Xexport_abs.vim') 13488a7d6542SBram Moolenaarenddef 13498a7d6542SBram Moolenaar 13508a7d6542SBram Moolenaardef Test_import_rtp() 1351cfcd011fSBram Moolenaar var import_lines = [ 1352e6085c53SBram Moolenaar 'vim9script', 1353e6085c53SBram Moolenaar 'import exported from "Xexport_rtp.vim"', 1354e6085c53SBram Moolenaar 'g:imported_rtp = exported', 1355e6085c53SBram Moolenaar ] 13568a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_rtp.vim') 13578a7d6542SBram Moolenaar mkdir('import') 13588a7d6542SBram Moolenaar writefile(s:export_script_lines, 'import/Xexport_rtp.vim') 13598a7d6542SBram Moolenaar 1360cfcd011fSBram Moolenaar var save_rtp = &rtp 13618a7d6542SBram Moolenaar &rtp = getcwd() 13628a7d6542SBram Moolenaar source Ximport_rtp.vim 13638a7d6542SBram Moolenaar &rtp = save_rtp 13648a7d6542SBram Moolenaar 13658a7d6542SBram Moolenaar assert_equal(9876, g:imported_rtp) 13668a7d6542SBram Moolenaar 1367b3ca9824SBram Moolenaar Undo_export_script_lines() 1368b3ca9824SBram Moolenaar unlet g:imported_rtp 13698a7d6542SBram Moolenaar delete('Ximport_rtp.vim') 137089483d40SBram Moolenaar delete('import', 'rf') 13718a7d6542SBram Moolenaarenddef 13728a7d6542SBram Moolenaar 137325e0f586SBram Moolenaardef Test_import_compile_error() 1374cfcd011fSBram Moolenaar var export_lines = [ 137525e0f586SBram Moolenaar 'vim9script', 137625e0f586SBram Moolenaar 'export def ExpFunc(): string', 137725e0f586SBram Moolenaar ' return notDefined', 137825e0f586SBram Moolenaar 'enddef', 137925e0f586SBram Moolenaar ] 138025e0f586SBram Moolenaar writefile(export_lines, 'Xexported.vim') 138125e0f586SBram Moolenaar 1382cfcd011fSBram Moolenaar var import_lines = [ 138325e0f586SBram Moolenaar 'vim9script', 138425e0f586SBram Moolenaar 'import ExpFunc from "./Xexported.vim"', 138525e0f586SBram Moolenaar 'def ImpFunc()', 138625e0f586SBram Moolenaar ' echo ExpFunc()', 138725e0f586SBram Moolenaar 'enddef', 138825e0f586SBram Moolenaar 'defcompile', 138925e0f586SBram Moolenaar ] 139025e0f586SBram Moolenaar writefile(import_lines, 'Ximport.vim') 139125e0f586SBram Moolenaar 139225e0f586SBram Moolenaar try 139325e0f586SBram Moolenaar source Ximport.vim 139425e0f586SBram Moolenaar catch /E1001/ 1395f5be8cdbSBram Moolenaar # Error should be fore the Xexported.vim file. 13967707228aSBram Moolenaar assert_match('E1001: Variable not found: notDefined', v:exception) 139725e0f586SBram Moolenaar assert_match('function <SNR>\d\+_ImpFunc\[1\]..<SNR>\d\+_ExpFunc, line 1', v:throwpoint) 139825e0f586SBram Moolenaar endtry 139925e0f586SBram Moolenaar 140025e0f586SBram Moolenaar delete('Xexported.vim') 140125e0f586SBram Moolenaar delete('Ximport.vim') 140225e0f586SBram Moolenaarenddef 140325e0f586SBram Moolenaar 1404c4ce36d4SBram Moolenaardef Test_func_redefine_error() 1405cfcd011fSBram Moolenaar var lines = [ 1406c4ce36d4SBram Moolenaar 'vim9script', 1407c4ce36d4SBram Moolenaar 'def Func()', 1408c4ce36d4SBram Moolenaar ' eval [][0]', 1409c4ce36d4SBram Moolenaar 'enddef', 1410c4ce36d4SBram Moolenaar 'Func()', 1411c4ce36d4SBram Moolenaar ] 1412c4ce36d4SBram Moolenaar writefile(lines, 'Xtestscript.vim') 1413c4ce36d4SBram Moolenaar 1414c4ce36d4SBram Moolenaar for count in range(3) 1415c4ce36d4SBram Moolenaar try 1416c4ce36d4SBram Moolenaar source Xtestscript.vim 1417c4ce36d4SBram Moolenaar catch /E684/ 1418c4ce36d4SBram Moolenaar # function name should contain <SNR> every time 1419c4ce36d4SBram Moolenaar assert_match('E684: list index out of range', v:exception) 1420c4ce36d4SBram Moolenaar assert_match('function <SNR>\d\+_Func, line 1', v:throwpoint) 1421c4ce36d4SBram Moolenaar endtry 1422c4ce36d4SBram Moolenaar endfor 1423c4ce36d4SBram Moolenaar 1424c4ce36d4SBram Moolenaar delete('Xtestscript.vim') 1425c4ce36d4SBram Moolenaarenddef 1426c4ce36d4SBram Moolenaar 1427eef2102eSBram Moolenaardef Test_func_overrules_import_fails() 1428cfcd011fSBram Moolenaar var export_lines =<< trim END 1429eef2102eSBram Moolenaar vim9script 1430eef2102eSBram Moolenaar export def Func() 1431eef2102eSBram Moolenaar echo 'imported' 1432eef2102eSBram Moolenaar enddef 1433eef2102eSBram Moolenaar END 1434eef2102eSBram Moolenaar writefile(export_lines, 'XexportedFunc.vim') 1435eef2102eSBram Moolenaar 1436cfcd011fSBram Moolenaar var lines =<< trim END 1437eef2102eSBram Moolenaar vim9script 1438eef2102eSBram Moolenaar import Func from './XexportedFunc.vim' 1439eef2102eSBram Moolenaar def Func() 1440eef2102eSBram Moolenaar echo 'local to function' 1441eef2102eSBram Moolenaar enddef 1442eef2102eSBram Moolenaar END 1443eef2102eSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1444eef2102eSBram Moolenaar 1445eef2102eSBram Moolenaar lines =<< trim END 1446eef2102eSBram Moolenaar vim9script 1447eef2102eSBram Moolenaar import Func from './XexportedFunc.vim' 1448eef2102eSBram Moolenaar def Outer() 1449eef2102eSBram Moolenaar def Func() 1450eef2102eSBram Moolenaar echo 'local to function' 1451eef2102eSBram Moolenaar enddef 1452eef2102eSBram Moolenaar enddef 1453eef2102eSBram Moolenaar defcompile 1454eef2102eSBram Moolenaar END 1455eef2102eSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1456eef2102eSBram Moolenaar 1457eef2102eSBram Moolenaar delete('XexportedFunc.vim') 1458eef2102eSBram Moolenaarenddef 1459eef2102eSBram Moolenaar 1460b9a2cac3SBram Moolenaardef Test_func_redefine_fails() 1461cfcd011fSBram Moolenaar var lines =<< trim END 1462b9a2cac3SBram Moolenaar vim9script 1463b9a2cac3SBram Moolenaar def Func() 1464b9a2cac3SBram Moolenaar echo 'one' 1465b9a2cac3SBram Moolenaar enddef 1466b9a2cac3SBram Moolenaar def Func() 1467b9a2cac3SBram Moolenaar echo 'two' 1468b9a2cac3SBram Moolenaar enddef 1469b9a2cac3SBram Moolenaar END 1470b9a2cac3SBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1471fa211f3cSBram Moolenaar 1472fa211f3cSBram Moolenaar lines =<< trim END 1473fa211f3cSBram Moolenaar vim9script 1474fa211f3cSBram Moolenaar def Foo(): string 1475fa211f3cSBram Moolenaar return 'foo' 1476fa211f3cSBram Moolenaar enddef 1477fa211f3cSBram Moolenaar def Func() 1478cfcd011fSBram Moolenaar var Foo = {-> 'lambda'} 1479fa211f3cSBram Moolenaar enddef 1480fa211f3cSBram Moolenaar defcompile 1481fa211f3cSBram Moolenaar END 1482fa211f3cSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1483b9a2cac3SBram Moolenaarenddef 1484b9a2cac3SBram Moolenaar 14858a7d6542SBram Moolenaardef Test_fixed_size_list() 1486f5be8cdbSBram Moolenaar # will be allocated as one piece of memory, check that changes work 1487cfcd011fSBram Moolenaar var l = [1, 2, 3, 4] 14888a7d6542SBram Moolenaar l->remove(0) 14898a7d6542SBram Moolenaar l->add(5) 14908a7d6542SBram Moolenaar l->insert(99, 1) 14910f18b6d1SBram Moolenaar assert_equal([2, 99, 3, 4, 5], l) 14928a7d6542SBram Moolenaarenddef 14938a7d6542SBram Moolenaar 1494ae616494SBram Moolenaardef Test_no_insert_xit() 1495d2c61705SBram Moolenaar CheckDefExecFailure(['a = 1'], 'E1100:') 1496d2c61705SBram Moolenaar CheckDefExecFailure(['c = 1'], 'E1100:') 1497d2c61705SBram Moolenaar CheckDefExecFailure(['i = 1'], 'E1100:') 1498d2c61705SBram Moolenaar CheckDefExecFailure(['t = 1'], 'E1100:') 1499d2c61705SBram Moolenaar CheckDefExecFailure(['x = 1'], 'E1100:') 1500ae616494SBram Moolenaar 1501ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'a = 1'], 'E488:') 1502ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'a'], 'E1100:') 1503ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'c = 1'], 'E488:') 1504ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'c'], 'E1100:') 1505f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'i = 1'], 'E488:') 1506f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'i'], 'E1100:') 1507f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 't'], 'E1100:') 1508f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 't = 1'], 'E1100:') 1509f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'x = 1'], 'E1100:') 1510ae616494SBram Moolenaarenddef 1511ae616494SBram Moolenaar 1512158906cfSBram Moolenaardef IfElse(what: number): string 1513cfcd011fSBram Moolenaar var res = '' 1514158906cfSBram Moolenaar if what == 1 1515158906cfSBram Moolenaar res = "one" 1516158906cfSBram Moolenaar elseif what == 2 1517158906cfSBram Moolenaar res = "two" 1518a259d8d3SBram Moolenaar else 1519158906cfSBram Moolenaar res = "three" 1520a259d8d3SBram Moolenaar endif 1521158906cfSBram Moolenaar return res 1522a259d8d3SBram Moolenaarenddef 1523a259d8d3SBram Moolenaar 1524158906cfSBram Moolenaardef Test_if_elseif_else() 1525158906cfSBram Moolenaar assert_equal('one', IfElse(1)) 1526158906cfSBram Moolenaar assert_equal('two', IfElse(2)) 1527158906cfSBram Moolenaar assert_equal('three', IfElse(3)) 15280f18b6d1SBram Moolenaarenddef 15290f18b6d1SBram Moolenaar 1530e8c4abbbSBram Moolenaardef Test_if_elseif_else_fails() 1531d2c61705SBram Moolenaar CheckDefFailure(['elseif true'], 'E582:') 1532d2c61705SBram Moolenaar CheckDefFailure(['else'], 'E581:') 1533d2c61705SBram Moolenaar CheckDefFailure(['endif'], 'E580:') 1534d2c61705SBram Moolenaar CheckDefFailure(['if true', 'elseif xxx'], 'E1001:') 1535d2c61705SBram Moolenaar CheckDefFailure(['if true', 'echo 1'], 'E171:') 1536e8c4abbbSBram Moolenaarenddef 1537e8c4abbbSBram Moolenaar 15386d69bf60SBram Moolenaarlet g:bool_true = v:true 15396d69bf60SBram Moolenaarlet g:bool_false = v:false 15406d69bf60SBram Moolenaar 15416d69bf60SBram Moolenaardef Test_if_const_expr() 1542cfcd011fSBram Moolenaar var res = false 15436d69bf60SBram Moolenaar if true ? true : false 15446d69bf60SBram Moolenaar res = true 15456d69bf60SBram Moolenaar endif 15466d69bf60SBram Moolenaar assert_equal(true, res) 15476d69bf60SBram Moolenaar 1548585fea7bSBram Moolenaar g:glob = 2 1549585fea7bSBram Moolenaar if false 15506797966dSBram Moolenaar execute('g:glob = 3') 1551585fea7bSBram Moolenaar endif 1552585fea7bSBram Moolenaar assert_equal(2, g:glob) 1553585fea7bSBram Moolenaar if true 15546797966dSBram Moolenaar execute('g:glob = 3') 1555585fea7bSBram Moolenaar endif 1556585fea7bSBram Moolenaar assert_equal(3, g:glob) 1557585fea7bSBram Moolenaar 15586d69bf60SBram Moolenaar res = false 15596d69bf60SBram Moolenaar if g:bool_true ? true : false 15606d69bf60SBram Moolenaar res = true 15616d69bf60SBram Moolenaar endif 15626d69bf60SBram Moolenaar assert_equal(true, res) 15636d69bf60SBram Moolenaar 15646d69bf60SBram Moolenaar res = false 15656d69bf60SBram Moolenaar if true ? g:bool_true : false 15666d69bf60SBram Moolenaar res = true 15676d69bf60SBram Moolenaar endif 15686d69bf60SBram Moolenaar assert_equal(true, res) 15696d69bf60SBram Moolenaar 15706d69bf60SBram Moolenaar res = false 15716d69bf60SBram Moolenaar if true ? true : g:bool_false 15726d69bf60SBram Moolenaar res = true 15736d69bf60SBram Moolenaar endif 15746d69bf60SBram Moolenaar assert_equal(true, res) 15756d69bf60SBram Moolenaar 15766d69bf60SBram Moolenaar res = false 15776d69bf60SBram Moolenaar if true ? false : true 15786d69bf60SBram Moolenaar res = true 15796d69bf60SBram Moolenaar endif 15806d69bf60SBram Moolenaar assert_equal(false, res) 15816d69bf60SBram Moolenaar 15826d69bf60SBram Moolenaar res = false 15836d69bf60SBram Moolenaar if false ? false : true 15846d69bf60SBram Moolenaar res = true 15856d69bf60SBram Moolenaar endif 15866d69bf60SBram Moolenaar assert_equal(true, res) 15876d69bf60SBram Moolenaar 15886d69bf60SBram Moolenaar res = false 15896d69bf60SBram Moolenaar if false ? true : false 15906d69bf60SBram Moolenaar res = true 15916d69bf60SBram Moolenaar endif 15926d69bf60SBram Moolenaar assert_equal(false, res) 15936d69bf60SBram Moolenaar 15946d69bf60SBram Moolenaar res = false 1595e8c4abbbSBram Moolenaar if has('xyz') ? true : false 1596e8c4abbbSBram Moolenaar res = true 1597e8c4abbbSBram Moolenaar endif 1598e8c4abbbSBram Moolenaar assert_equal(false, res) 1599e8c4abbbSBram Moolenaar 1600e8c4abbbSBram Moolenaar res = false 16016d69bf60SBram Moolenaar if true && true 16026d69bf60SBram Moolenaar res = true 16036d69bf60SBram Moolenaar endif 16046d69bf60SBram Moolenaar assert_equal(true, res) 16056d69bf60SBram Moolenaar 16066d69bf60SBram Moolenaar res = false 16076d69bf60SBram Moolenaar if true && false 16086d69bf60SBram Moolenaar res = true 16096d69bf60SBram Moolenaar endif 16106d69bf60SBram Moolenaar assert_equal(false, res) 16116d69bf60SBram Moolenaar 16126d69bf60SBram Moolenaar res = false 16136d69bf60SBram Moolenaar if g:bool_true && false 16146d69bf60SBram Moolenaar res = true 16156d69bf60SBram Moolenaar endif 16166d69bf60SBram Moolenaar assert_equal(false, res) 16176d69bf60SBram Moolenaar 16186d69bf60SBram Moolenaar res = false 16196d69bf60SBram Moolenaar if true && g:bool_false 16206d69bf60SBram Moolenaar res = true 16216d69bf60SBram Moolenaar endif 16226d69bf60SBram Moolenaar assert_equal(false, res) 16236d69bf60SBram Moolenaar 16246d69bf60SBram Moolenaar res = false 16256d69bf60SBram Moolenaar if false && false 16266d69bf60SBram Moolenaar res = true 16276d69bf60SBram Moolenaar endif 16286d69bf60SBram Moolenaar assert_equal(false, res) 16296d69bf60SBram Moolenaar 16306d69bf60SBram Moolenaar res = false 16316d69bf60SBram Moolenaar if true || false 16326d69bf60SBram Moolenaar res = true 16336d69bf60SBram Moolenaar endif 16346d69bf60SBram Moolenaar assert_equal(true, res) 16356d69bf60SBram Moolenaar 16366d69bf60SBram Moolenaar res = false 16376d69bf60SBram Moolenaar if g:bool_true || false 16386d69bf60SBram Moolenaar res = true 16396d69bf60SBram Moolenaar endif 16406d69bf60SBram Moolenaar assert_equal(true, res) 16416d69bf60SBram Moolenaar 16426d69bf60SBram Moolenaar res = false 16436d69bf60SBram Moolenaar if true || g:bool_false 16446d69bf60SBram Moolenaar res = true 16456d69bf60SBram Moolenaar endif 16466d69bf60SBram Moolenaar assert_equal(true, res) 16476d69bf60SBram Moolenaar 16486d69bf60SBram Moolenaar res = false 16496d69bf60SBram Moolenaar if false || false 16506d69bf60SBram Moolenaar res = true 16516d69bf60SBram Moolenaar endif 16526d69bf60SBram Moolenaar assert_equal(false, res) 16533988f64fSBram Moolenaar 16543988f64fSBram Moolenaar # with constant "false" expression may be invalid so long as the syntax is OK 16553988f64fSBram Moolenaar if false | eval 0 | endif 16563988f64fSBram Moolenaar if false | eval burp + 234 | endif 16573988f64fSBram Moolenaar if false | echo burp 234 'asd' | endif 16583988f64fSBram Moolenaar if false 16593988f64fSBram Moolenaar burp 16603988f64fSBram Moolenaar endif 166180c34ca3SBram Moolenaarenddef 16626d69bf60SBram Moolenaar 166380c34ca3SBram Moolenaardef Test_if_const_expr_fails() 1664d2c61705SBram Moolenaar CheckDefFailure(['if "aaa" == "bbb'], 'E114:') 1665d2c61705SBram Moolenaar CheckDefFailure(["if 'aaa' == 'bbb"], 'E115:') 1666d2c61705SBram Moolenaar CheckDefFailure(["if has('aaa'"], 'E110:') 1667d2c61705SBram Moolenaar CheckDefFailure(["if has('aaa') ? true false"], 'E109:') 16686d69bf60SBram Moolenaarenddef 16696d69bf60SBram Moolenaar 167072abcf42SBram Moolenaardef RunNested(i: number): number 1671cfcd011fSBram Moolenaar var x: number = 0 167272abcf42SBram Moolenaar if i % 2 167372abcf42SBram Moolenaar if 1 1674f5be8cdbSBram Moolenaar # comment 167572abcf42SBram Moolenaar else 1676f5be8cdbSBram Moolenaar # comment 167772abcf42SBram Moolenaar endif 167872abcf42SBram Moolenaar x += 1 167972abcf42SBram Moolenaar else 168072abcf42SBram Moolenaar x += 1000 168172abcf42SBram Moolenaar endif 168272abcf42SBram Moolenaar return x 168372abcf42SBram Moolenaarenddef 168472abcf42SBram Moolenaar 168572abcf42SBram Moolenaardef Test_nested_if() 168672abcf42SBram Moolenaar assert_equal(1, RunNested(1)) 168772abcf42SBram Moolenaar assert_equal(1000, RunNested(2)) 168872abcf42SBram Moolenaarenddef 168972abcf42SBram Moolenaar 1690ad39c094SBram Moolenaardef Test_execute_cmd() 1691ad39c094SBram Moolenaar new 1692ad39c094SBram Moolenaar setline(1, 'default') 1693d2c61705SBram Moolenaar execute 'setline(1, "execute-string")' 1694ad39c094SBram Moolenaar assert_equal('execute-string', getline(1)) 1695a72cfb80SBram Moolenaar 1696d2c61705SBram Moolenaar execute "setline(1, 'execute-string')" 1697a72cfb80SBram Moolenaar assert_equal('execute-string', getline(1)) 1698a72cfb80SBram Moolenaar 1699cfcd011fSBram Moolenaar var cmd1 = 'setline(1,' 1700cfcd011fSBram Moolenaar var cmd2 = '"execute-var")' 1701a72cfb80SBram Moolenaar execute cmd1 cmd2 # comment 1702ad39c094SBram Moolenaar assert_equal('execute-var', getline(1)) 1703a72cfb80SBram Moolenaar 1704d2c61705SBram Moolenaar execute cmd1 cmd2 '|setline(1, "execute-var-string")' 1705ad39c094SBram Moolenaar assert_equal('execute-var-string', getline(1)) 1706a72cfb80SBram Moolenaar 1707cfcd011fSBram Moolenaar var cmd_first = 'call ' 1708cfcd011fSBram Moolenaar var cmd_last = 'setline(1, "execute-var-var")' 1709ad39c094SBram Moolenaar execute cmd_first .. cmd_last 1710ad39c094SBram Moolenaar assert_equal('execute-var-var', getline(1)) 1711ad39c094SBram Moolenaar bwipe! 1712585fea7bSBram Moolenaar 1713cfcd011fSBram Moolenaar var n = true 17142d6b20d6SBram Moolenaar execute 'echomsg' (n ? '"true"' : '"no"') 17152d6b20d6SBram Moolenaar assert_match('^true$', Screenline(&lines)) 17162d6b20d6SBram Moolenaar 1717e5abf7afSBram Moolenaar echomsg [1, 2, 3] #{a: 1, b: 2} 1718e5abf7afSBram Moolenaar assert_match('^\[1, 2, 3\] {''a'': 1, ''b'': 2}$', Screenline(&lines)) 1719e5abf7afSBram Moolenaar 1720d2c61705SBram Moolenaar CheckDefFailure(['execute xxx'], 'E1001:', 1) 1721d2c61705SBram Moolenaar CheckDefExecFailure(['execute "tabnext " .. 8'], 'E475:', 1) 1722d2c61705SBram Moolenaar CheckDefFailure(['execute "cmd"# comment'], 'E488:', 1) 1723ad39c094SBram Moolenaarenddef 1724ad39c094SBram Moolenaar 172547e880d6SBram Moolenaardef Test_execute_cmd_vimscript() 1726f5be8cdbSBram Moolenaar # only checks line continuation 1727cfcd011fSBram Moolenaar var lines =<< trim END 172847e880d6SBram Moolenaar vim9script 172947e880d6SBram Moolenaar execute 'g:someVar' 173047e880d6SBram Moolenaar .. ' = ' .. 173147e880d6SBram Moolenaar '28' 173247e880d6SBram Moolenaar assert_equal(28, g:someVar) 173347e880d6SBram Moolenaar unlet g:someVar 173447e880d6SBram Moolenaar END 173547e880d6SBram Moolenaar CheckScriptSuccess(lines) 173647e880d6SBram Moolenaarenddef 173747e880d6SBram Moolenaar 1738ad39c094SBram Moolenaardef Test_echo_cmd() 1739a72cfb80SBram Moolenaar echo 'some' # comment 1740585fea7bSBram Moolenaar echon 'thing' 1741ad39c094SBram Moolenaar assert_match('^something$', Screenline(&lines)) 1742ad39c094SBram Moolenaar 1743a72cfb80SBram Moolenaar echo "some" # comment 1744a72cfb80SBram Moolenaar echon "thing" 1745a72cfb80SBram Moolenaar assert_match('^something$', Screenline(&lines)) 1746a72cfb80SBram Moolenaar 1747cfcd011fSBram Moolenaar var str1 = 'some' 1748cfcd011fSBram Moolenaar var str2 = 'more' 1749ad39c094SBram Moolenaar echo str1 str2 1750ad39c094SBram Moolenaar assert_match('^some more$', Screenline(&lines)) 1751a72cfb80SBram Moolenaar 1752d2c61705SBram Moolenaar CheckDefFailure(['echo "xxx"# comment'], 'E488:') 1753ad39c094SBram Moolenaarenddef 1754ad39c094SBram Moolenaar 1755f93c7feaSBram Moolenaardef Test_echomsg_cmd() 1756f93c7feaSBram Moolenaar echomsg 'some' 'more' # comment 1757f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 1758f93c7feaSBram Moolenaar echo 'clear' 1759df069eecSBram Moolenaar :1messages 1760f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 1761f93c7feaSBram Moolenaar 1762d2c61705SBram Moolenaar CheckDefFailure(['echomsg "xxx"# comment'], 'E488:') 1763f93c7feaSBram Moolenaarenddef 1764f93c7feaSBram Moolenaar 176547e880d6SBram Moolenaardef Test_echomsg_cmd_vimscript() 1766f5be8cdbSBram Moolenaar # only checks line continuation 1767cfcd011fSBram Moolenaar var lines =<< trim END 176847e880d6SBram Moolenaar vim9script 176947e880d6SBram Moolenaar echomsg 'here' 177047e880d6SBram Moolenaar .. ' is ' .. 177147e880d6SBram Moolenaar 'a message' 177247e880d6SBram Moolenaar assert_match('^here is a message$', Screenline(&lines)) 177347e880d6SBram Moolenaar END 177447e880d6SBram Moolenaar CheckScriptSuccess(lines) 177547e880d6SBram Moolenaarenddef 177647e880d6SBram Moolenaar 1777f93c7feaSBram Moolenaardef Test_echoerr_cmd() 177840ee466cSBram Moolenaar try 177940ee466cSBram Moolenaar echoerr 'something' 'wrong' # comment 178040ee466cSBram Moolenaar catch 178140ee466cSBram Moolenaar assert_match('something wrong', v:exception) 178240ee466cSBram Moolenaar endtry 1783f93c7feaSBram Moolenaarenddef 1784f93c7feaSBram Moolenaar 178547e880d6SBram Moolenaardef Test_echoerr_cmd_vimscript() 1786f5be8cdbSBram Moolenaar # only checks line continuation 1787cfcd011fSBram Moolenaar var lines =<< trim END 178847e880d6SBram Moolenaar vim9script 178947e880d6SBram Moolenaar try 179047e880d6SBram Moolenaar echoerr 'this' 179147e880d6SBram Moolenaar .. ' is ' .. 179247e880d6SBram Moolenaar 'wrong' 179347e880d6SBram Moolenaar catch 179447e880d6SBram Moolenaar assert_match('this is wrong', v:exception) 179547e880d6SBram Moolenaar endtry 179647e880d6SBram Moolenaar END 179747e880d6SBram Moolenaar CheckScriptSuccess(lines) 179847e880d6SBram Moolenaarenddef 179947e880d6SBram Moolenaar 180041fe0617SBram Moolenaardef Test_for_outside_of_function() 1801cfcd011fSBram Moolenaar var lines =<< trim END 180241fe0617SBram Moolenaar vim9script 180341fe0617SBram Moolenaar new 180441fe0617SBram Moolenaar for var in range(0, 3) 180541fe0617SBram Moolenaar append(line('$'), var) 180641fe0617SBram Moolenaar endfor 180741fe0617SBram Moolenaar assert_equal(['', '0', '1', '2', '3'], getline(1, '$')) 180841fe0617SBram Moolenaar bwipe! 180941fe0617SBram Moolenaar END 181041fe0617SBram Moolenaar writefile(lines, 'Xvim9for.vim') 181141fe0617SBram Moolenaar source Xvim9for.vim 181241fe0617SBram Moolenaar delete('Xvim9for.vim') 181341fe0617SBram Moolenaarenddef 18148a7d6542SBram Moolenaar 1815e8c4abbbSBram Moolenaardef Test_for_loop() 1816cfcd011fSBram Moolenaar var result = '' 1817e8c4abbbSBram Moolenaar for cnt in range(7) 1818e8c4abbbSBram Moolenaar if cnt == 4 1819e8c4abbbSBram Moolenaar break 1820e8c4abbbSBram Moolenaar endif 1821e8c4abbbSBram Moolenaar if cnt == 2 1822e8c4abbbSBram Moolenaar continue 1823e8c4abbbSBram Moolenaar endif 1824e8c4abbbSBram Moolenaar result ..= cnt .. '_' 1825e8c4abbbSBram Moolenaar endfor 1826e8c4abbbSBram Moolenaar assert_equal('0_1_3_', result) 18270ad3e894SBram Moolenaar 1828cfcd011fSBram Moolenaar var concat = '' 18290ad3e894SBram Moolenaar for str in eval('["one", "two"]') 18300ad3e894SBram Moolenaar concat ..= str 18310ad3e894SBram Moolenaar endfor 18320ad3e894SBram Moolenaar assert_equal('onetwo', concat) 1833e8c4abbbSBram Moolenaarenddef 1834e8c4abbbSBram Moolenaar 1835e8c4abbbSBram Moolenaardef Test_for_loop_fails() 1836675f716eSBram Moolenaar CheckDefFailure(['for # in range(5)'], 'E690:') 1837675f716eSBram Moolenaar CheckDefFailure(['for i In range(5)'], 'E690:') 1838cfcd011fSBram Moolenaar CheckDefFailure(['var x = 5', 'for x in range(5)'], 'E1017:') 1839822ba247SBram Moolenaar CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef', 'defcompile'], 'E1006:') 1840451c2e35SBram Moolenaar CheckDefFailure(['for i in "text"'], 'E1012:') 1841675f716eSBram Moolenaar CheckDefFailure(['for i in xxx'], 'E1001:') 1842675f716eSBram Moolenaar CheckDefFailure(['endfor'], 'E588:') 1843675f716eSBram Moolenaar CheckDefFailure(['for i in range(3)', 'echo 3'], 'E170:') 1844e8c4abbbSBram Moolenaarenddef 1845e8c4abbbSBram Moolenaar 1846d0df1aacSBram Moolenaardef Test_while_loop() 1847cfcd011fSBram Moolenaar var result = '' 1848cfcd011fSBram Moolenaar var cnt = 0 1849d0df1aacSBram Moolenaar while cnt < 555 1850d0df1aacSBram Moolenaar if cnt == 3 1851d0df1aacSBram Moolenaar break 1852d0df1aacSBram Moolenaar endif 1853d0df1aacSBram Moolenaar cnt += 1 1854d0df1aacSBram Moolenaar if cnt == 2 1855d0df1aacSBram Moolenaar continue 1856d0df1aacSBram Moolenaar endif 1857d0df1aacSBram Moolenaar result ..= cnt .. '_' 1858d0df1aacSBram Moolenaar endwhile 1859d0df1aacSBram Moolenaar assert_equal('1_3_', result) 1860d0df1aacSBram Moolenaarenddef 1861d0df1aacSBram Moolenaar 1862e8c4abbbSBram Moolenaardef Test_while_loop_fails() 1863675f716eSBram Moolenaar CheckDefFailure(['while xxx'], 'E1001:') 1864675f716eSBram Moolenaar CheckDefFailure(['endwhile'], 'E588:') 1865675f716eSBram Moolenaar CheckDefFailure(['continue'], 'E586:') 1866675f716eSBram Moolenaar CheckDefFailure(['if true', 'continue'], 'E586:') 1867675f716eSBram Moolenaar CheckDefFailure(['break'], 'E587:') 1868675f716eSBram Moolenaar CheckDefFailure(['if true', 'break'], 'E587:') 1869675f716eSBram Moolenaar CheckDefFailure(['while 1', 'echo 3'], 'E170:') 1870bd5da371SBram Moolenaarenddef 1871bd5da371SBram Moolenaar 18729645e2d9SBram Moolenaardef Test_interrupt_loop() 1873cfcd011fSBram Moolenaar var caught = false 1874cfcd011fSBram Moolenaar var x = 0 187597acfc78SBram Moolenaar try 18769645e2d9SBram Moolenaar while 1 18779645e2d9SBram Moolenaar x += 1 18789645e2d9SBram Moolenaar if x == 100 18799645e2d9SBram Moolenaar feedkeys("\<C-C>", 'Lt') 18809645e2d9SBram Moolenaar endif 18819645e2d9SBram Moolenaar endwhile 188297acfc78SBram Moolenaar catch 188397acfc78SBram Moolenaar caught = true 188497acfc78SBram Moolenaar assert_equal(100, x) 188597acfc78SBram Moolenaar endtry 188697acfc78SBram Moolenaar assert_true(caught, 'should have caught an exception') 188725859dd7SBram Moolenaar # consume the CTRL-C 188825859dd7SBram Moolenaar getchar(0) 18899645e2d9SBram Moolenaarenddef 189020431c9dSBram Moolenaar 18914fdae999SBram Moolenaardef Test_automatic_line_continuation() 1892cfcd011fSBram Moolenaar var mylist = [ 18934fdae999SBram Moolenaar 'one', 18944fdae999SBram Moolenaar 'two', 18954fdae999SBram Moolenaar 'three', 1896f5be8cdbSBram Moolenaar ] # comment 18974fdae999SBram Moolenaar assert_equal(['one', 'two', 'three'], mylist) 18984fdae999SBram Moolenaar 1899cfcd011fSBram Moolenaar var mydict = { 19004fdae999SBram Moolenaar 'one': 1, 19014fdae999SBram Moolenaar 'two': 2, 19024fdae999SBram Moolenaar 'three': 19034fdae999SBram Moolenaar 3, 1904f5be8cdbSBram Moolenaar } # comment 19054fdae999SBram Moolenaar assert_equal({'one': 1, 'two': 2, 'three': 3}, mydict) 19064fdae999SBram Moolenaar mydict = #{ 19072c330432SBram Moolenaar one: 1, # comment 19082c330432SBram Moolenaar two: # comment 19092c330432SBram Moolenaar 2, # comment 19102c330432SBram Moolenaar three: 3 # comment 19112c330432SBram Moolenaar } 19122c330432SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 19132c330432SBram Moolenaar mydict = #{ 19142c330432SBram Moolenaar one: 1, 19154fdae999SBram Moolenaar two: 19164fdae999SBram Moolenaar 2, 19172c330432SBram Moolenaar three: 3 19184fdae999SBram Moolenaar } 19194fdae999SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 1920e6085c53SBram Moolenaar 1921e6085c53SBram Moolenaar assert_equal( 1922e6085c53SBram Moolenaar ['one', 'two', 'three'], 1923e6085c53SBram Moolenaar split('one two three') 1924e6085c53SBram Moolenaar ) 19254fdae999SBram Moolenaarenddef 19264fdae999SBram Moolenaar 19277a092245SBram Moolenaardef Test_vim9_comment() 19287a092245SBram Moolenaar CheckScriptSuccess([ 19297a092245SBram Moolenaar 'vim9script', 19307a092245SBram Moolenaar '# something', 19317a092245SBram Moolenaar ]) 19327a092245SBram Moolenaar CheckScriptFailure([ 19337a092245SBram Moolenaar 'vim9script', 19347a092245SBram Moolenaar ':# something', 19357a092245SBram Moolenaar ], 'E488:') 19367a092245SBram Moolenaar CheckScriptFailure([ 19377a092245SBram Moolenaar '# something', 19387a092245SBram Moolenaar ], 'E488:') 19397a092245SBram Moolenaar CheckScriptFailure([ 19407a092245SBram Moolenaar ':# something', 19417a092245SBram Moolenaar ], 'E488:') 19427a092245SBram Moolenaar 19434a8d9f2eSBram Moolenaar { # block start 19444a8d9f2eSBram Moolenaar } # block end 19454a8d9f2eSBram Moolenaar CheckDefFailure([ 19464a8d9f2eSBram Moolenaar '{# comment', 19474a8d9f2eSBram Moolenaar ], 'E488:') 19484a8d9f2eSBram Moolenaar CheckDefFailure([ 19494a8d9f2eSBram Moolenaar '{', 19504a8d9f2eSBram Moolenaar '}# comment', 19514a8d9f2eSBram Moolenaar ], 'E488:') 19524a8d9f2eSBram Moolenaar 19534a8d9f2eSBram Moolenaar echo "yes" # comment 19544a8d9f2eSBram Moolenaar CheckDefFailure([ 19554a8d9f2eSBram Moolenaar 'echo "yes"# comment', 19564a8d9f2eSBram Moolenaar ], 'E488:') 19577a092245SBram Moolenaar CheckScriptSuccess([ 19587a092245SBram Moolenaar 'vim9script', 19597a092245SBram Moolenaar 'echo "yes" # something', 19607a092245SBram Moolenaar ]) 19617a092245SBram Moolenaar CheckScriptFailure([ 19627a092245SBram Moolenaar 'vim9script', 19637a092245SBram Moolenaar 'echo "yes"# something', 19647a092245SBram Moolenaar ], 'E121:') 19657a092245SBram Moolenaar CheckScriptFailure([ 19667a092245SBram Moolenaar 'vim9script', 19677a092245SBram Moolenaar 'echo# something', 19687a092245SBram Moolenaar ], 'E121:') 19697a092245SBram Moolenaar CheckScriptFailure([ 19707a092245SBram Moolenaar 'echo "yes" # something', 19717a092245SBram Moolenaar ], 'E121:') 19727a092245SBram Moolenaar 19734a8d9f2eSBram Moolenaar exe "echo" # comment 19744a8d9f2eSBram Moolenaar CheckDefFailure([ 19754a8d9f2eSBram Moolenaar 'exe "echo"# comment', 19764a8d9f2eSBram Moolenaar ], 'E488:') 19774a8d9f2eSBram Moolenaar CheckScriptSuccess([ 19784a8d9f2eSBram Moolenaar 'vim9script', 19794a8d9f2eSBram Moolenaar 'exe "echo" # something', 19804a8d9f2eSBram Moolenaar ]) 19814a8d9f2eSBram Moolenaar CheckScriptFailure([ 19824a8d9f2eSBram Moolenaar 'vim9script', 19834a8d9f2eSBram Moolenaar 'exe "echo"# something', 19844a8d9f2eSBram Moolenaar ], 'E121:') 19854a8d9f2eSBram Moolenaar CheckDefFailure([ 19864a8d9f2eSBram Moolenaar 'exe # comment', 19874a8d9f2eSBram Moolenaar ], 'E1015:') 19884a8d9f2eSBram Moolenaar CheckScriptFailure([ 19894a8d9f2eSBram Moolenaar 'vim9script', 19904a8d9f2eSBram Moolenaar 'exe# something', 19914a8d9f2eSBram Moolenaar ], 'E121:') 19924a8d9f2eSBram Moolenaar CheckScriptFailure([ 19934a8d9f2eSBram Moolenaar 'exe "echo" # something', 19944a8d9f2eSBram Moolenaar ], 'E121:') 19954a8d9f2eSBram Moolenaar 19967a092245SBram Moolenaar CheckDefFailure([ 19977a092245SBram Moolenaar 'try# comment', 19987a092245SBram Moolenaar ' echo "yes"', 19997a092245SBram Moolenaar 'catch', 20007a092245SBram Moolenaar 'endtry', 20017a092245SBram Moolenaar ], 'E488:') 20022c5ed4e3SBram Moolenaar CheckScriptFailure([ 20032c5ed4e3SBram Moolenaar 'vim9script', 20042c5ed4e3SBram Moolenaar 'try# comment', 20052c5ed4e3SBram Moolenaar 'echo "yes"', 20062c5ed4e3SBram Moolenaar ], 'E488:') 20077a092245SBram Moolenaar CheckDefFailure([ 20087a092245SBram Moolenaar 'try', 2009a72cfb80SBram Moolenaar ' throw#comment', 2010a72cfb80SBram Moolenaar 'catch', 2011a72cfb80SBram Moolenaar 'endtry', 2012a72cfb80SBram Moolenaar ], 'E1015:') 2013a72cfb80SBram Moolenaar CheckDefFailure([ 2014a72cfb80SBram Moolenaar 'try', 2015a72cfb80SBram Moolenaar ' throw "yes"#comment', 2016a72cfb80SBram Moolenaar 'catch', 2017a72cfb80SBram Moolenaar 'endtry', 2018a72cfb80SBram Moolenaar ], 'E488:') 2019a72cfb80SBram Moolenaar CheckDefFailure([ 2020a72cfb80SBram Moolenaar 'try', 20217a092245SBram Moolenaar ' echo "yes"', 20227a092245SBram Moolenaar 'catch# comment', 20237a092245SBram Moolenaar 'endtry', 20247a092245SBram Moolenaar ], 'E488:') 20252c5ed4e3SBram Moolenaar CheckScriptFailure([ 20262c5ed4e3SBram Moolenaar 'vim9script', 20272c5ed4e3SBram Moolenaar 'try', 20282c5ed4e3SBram Moolenaar ' echo "yes"', 20292c5ed4e3SBram Moolenaar 'catch# comment', 20302c5ed4e3SBram Moolenaar 'endtry', 20312c5ed4e3SBram Moolenaar ], 'E654:') 20322c5ed4e3SBram Moolenaar CheckDefFailure([ 20332c5ed4e3SBram Moolenaar 'try', 20342c5ed4e3SBram Moolenaar ' echo "yes"', 20352c5ed4e3SBram Moolenaar 'catch /pat/# comment', 20362c5ed4e3SBram Moolenaar 'endtry', 20372c5ed4e3SBram Moolenaar ], 'E488:') 20387a092245SBram Moolenaar CheckDefFailure([ 20397a092245SBram Moolenaar 'try', 20407a092245SBram Moolenaar 'echo "yes"', 20417a092245SBram Moolenaar 'catch', 20427a092245SBram Moolenaar 'endtry# comment', 20437a092245SBram Moolenaar ], 'E488:') 20442c5ed4e3SBram Moolenaar CheckScriptFailure([ 20452c5ed4e3SBram Moolenaar 'vim9script', 20462c5ed4e3SBram Moolenaar 'try', 20472c5ed4e3SBram Moolenaar ' echo "yes"', 20482c5ed4e3SBram Moolenaar 'catch', 20492c5ed4e3SBram Moolenaar 'endtry# comment', 20509b7bf9e9SBram Moolenaar ], 'E488:') 20512c5ed4e3SBram Moolenaar 20522c5ed4e3SBram Moolenaar CheckScriptSuccess([ 20532c5ed4e3SBram Moolenaar 'vim9script', 20542c5ed4e3SBram Moolenaar 'hi # comment', 20552c5ed4e3SBram Moolenaar ]) 20562c5ed4e3SBram Moolenaar CheckScriptFailure([ 20572c5ed4e3SBram Moolenaar 'vim9script', 20582c5ed4e3SBram Moolenaar 'hi# comment', 20592c5ed4e3SBram Moolenaar ], 'E416:') 20601966c248SBram Moolenaar CheckScriptSuccess([ 20611966c248SBram Moolenaar 'vim9script', 20621966c248SBram Moolenaar 'hi Search # comment', 20631966c248SBram Moolenaar ]) 20641966c248SBram Moolenaar CheckScriptFailure([ 20651966c248SBram Moolenaar 'vim9script', 20661966c248SBram Moolenaar 'hi Search# comment', 20671966c248SBram Moolenaar ], 'E416:') 20681966c248SBram Moolenaar CheckScriptSuccess([ 20691966c248SBram Moolenaar 'vim9script', 20701966c248SBram Moolenaar 'hi link This Search # comment', 20711966c248SBram Moolenaar ]) 20721966c248SBram Moolenaar CheckScriptFailure([ 20731966c248SBram Moolenaar 'vim9script', 20741966c248SBram Moolenaar 'hi link This That# comment', 20751966c248SBram Moolenaar ], 'E413:') 20761966c248SBram Moolenaar CheckScriptSuccess([ 20771966c248SBram Moolenaar 'vim9script', 20781966c248SBram Moolenaar 'hi clear This # comment', 20791966c248SBram Moolenaar 'hi clear # comment', 20801966c248SBram Moolenaar ]) 2081f5be8cdbSBram Moolenaar # not tested, because it doesn't give an error but a warning: 2082f5be8cdbSBram Moolenaar # hi clear This# comment', 20831966c248SBram Moolenaar CheckScriptFailure([ 20841966c248SBram Moolenaar 'vim9script', 20851966c248SBram Moolenaar 'hi clear# comment', 20861966c248SBram Moolenaar ], 'E416:') 20871966c248SBram Moolenaar 20881966c248SBram Moolenaar CheckScriptSuccess([ 20891966c248SBram Moolenaar 'vim9script', 20901966c248SBram Moolenaar 'hi Group term=bold', 20911966c248SBram Moolenaar 'match Group /todo/ # comment', 20921966c248SBram Moolenaar ]) 20931966c248SBram Moolenaar CheckScriptFailure([ 20941966c248SBram Moolenaar 'vim9script', 20951966c248SBram Moolenaar 'hi Group term=bold', 20961966c248SBram Moolenaar 'match Group /todo/# comment', 20971966c248SBram Moolenaar ], 'E488:') 20981966c248SBram Moolenaar CheckScriptSuccess([ 20991966c248SBram Moolenaar 'vim9script', 21001966c248SBram Moolenaar 'match # comment', 21011966c248SBram Moolenaar ]) 21021966c248SBram Moolenaar CheckScriptFailure([ 21031966c248SBram Moolenaar 'vim9script', 21041966c248SBram Moolenaar 'match# comment', 21051966c248SBram Moolenaar ], 'E475:') 21061966c248SBram Moolenaar CheckScriptSuccess([ 21071966c248SBram Moolenaar 'vim9script', 21081966c248SBram Moolenaar 'match none # comment', 21091966c248SBram Moolenaar ]) 21101966c248SBram Moolenaar CheckScriptFailure([ 21111966c248SBram Moolenaar 'vim9script', 21121966c248SBram Moolenaar 'match none# comment', 21131966c248SBram Moolenaar ], 'E475:') 21141966c248SBram Moolenaar 21151966c248SBram Moolenaar CheckScriptSuccess([ 21161966c248SBram Moolenaar 'vim9script', 21171966c248SBram Moolenaar 'menutrans clear # comment', 21181966c248SBram Moolenaar ]) 21191966c248SBram Moolenaar CheckScriptFailure([ 21201966c248SBram Moolenaar 'vim9script', 21211966c248SBram Moolenaar 'menutrans clear# comment text', 21221966c248SBram Moolenaar ], 'E474:') 21231966c248SBram Moolenaar 21241966c248SBram Moolenaar CheckScriptSuccess([ 21251966c248SBram Moolenaar 'vim9script', 21261966c248SBram Moolenaar 'syntax clear # comment', 21271966c248SBram Moolenaar ]) 21281966c248SBram Moolenaar CheckScriptFailure([ 21291966c248SBram Moolenaar 'vim9script', 21301966c248SBram Moolenaar 'syntax clear# comment text', 21311966c248SBram Moolenaar ], 'E28:') 21321966c248SBram Moolenaar CheckScriptSuccess([ 21331966c248SBram Moolenaar 'vim9script', 21341966c248SBram Moolenaar 'syntax keyword Word some', 21351966c248SBram Moolenaar 'syntax clear Word # comment', 21361966c248SBram Moolenaar ]) 21371966c248SBram Moolenaar CheckScriptFailure([ 21381966c248SBram Moolenaar 'vim9script', 21391966c248SBram Moolenaar 'syntax keyword Word some', 21401966c248SBram Moolenaar 'syntax clear Word# comment text', 21411966c248SBram Moolenaar ], 'E28:') 21421966c248SBram Moolenaar 21431966c248SBram Moolenaar CheckScriptSuccess([ 21441966c248SBram Moolenaar 'vim9script', 21451966c248SBram Moolenaar 'syntax list # comment', 21461966c248SBram Moolenaar ]) 21471966c248SBram Moolenaar CheckScriptFailure([ 21481966c248SBram Moolenaar 'vim9script', 21491966c248SBram Moolenaar 'syntax list# comment text', 21501966c248SBram Moolenaar ], 'E28:') 21511966c248SBram Moolenaar 21521966c248SBram Moolenaar CheckScriptSuccess([ 21531966c248SBram Moolenaar 'vim9script', 21541966c248SBram Moolenaar 'syntax match Word /pat/ oneline # comment', 21551966c248SBram Moolenaar ]) 21561966c248SBram Moolenaar CheckScriptFailure([ 21571966c248SBram Moolenaar 'vim9script', 21581966c248SBram Moolenaar 'syntax match Word /pat/ oneline# comment', 21591966c248SBram Moolenaar ], 'E475:') 21601966c248SBram Moolenaar 21611966c248SBram Moolenaar CheckScriptSuccess([ 21621966c248SBram Moolenaar 'vim9script', 21631966c248SBram Moolenaar 'syntax keyword Word word # comm[ent', 21641966c248SBram Moolenaar ]) 21651966c248SBram Moolenaar CheckScriptFailure([ 21661966c248SBram Moolenaar 'vim9script', 21671966c248SBram Moolenaar 'syntax keyword Word word# comm[ent', 21681966c248SBram Moolenaar ], 'E789:') 21691966c248SBram Moolenaar 21701966c248SBram Moolenaar CheckScriptSuccess([ 21711966c248SBram Moolenaar 'vim9script', 21721966c248SBram Moolenaar 'syntax match Word /pat/ # comment', 21731966c248SBram Moolenaar ]) 21741966c248SBram Moolenaar CheckScriptFailure([ 21751966c248SBram Moolenaar 'vim9script', 21761966c248SBram Moolenaar 'syntax match Word /pat/# comment', 21771966c248SBram Moolenaar ], 'E402:') 21781966c248SBram Moolenaar 21791966c248SBram Moolenaar CheckScriptSuccess([ 21801966c248SBram Moolenaar 'vim9script', 21811966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something # comment', 21821966c248SBram Moolenaar ]) 21831966c248SBram Moolenaar CheckScriptFailure([ 21841966c248SBram Moolenaar 'vim9script', 21851966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something# comment', 21861966c248SBram Moolenaar ], 'E475:') 21871966c248SBram Moolenaar CheckScriptFailure([ 21881966c248SBram Moolenaar 'vim9script', 21891966c248SBram Moolenaar 'syntax match Word /pat/ contains= # comment', 21901966c248SBram Moolenaar ], 'E406:') 21911966c248SBram Moolenaar CheckScriptFailure([ 21921966c248SBram Moolenaar 'vim9script', 21931966c248SBram Moolenaar 'syntax match Word /pat/ contains=# comment', 21941966c248SBram Moolenaar ], 'E475:') 21951966c248SBram Moolenaar 21961966c248SBram Moolenaar CheckScriptSuccess([ 21971966c248SBram Moolenaar 'vim9script', 21981966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/ # comment', 21991966c248SBram Moolenaar ]) 22001966c248SBram Moolenaar CheckScriptFailure([ 22011966c248SBram Moolenaar 'vim9script', 22021966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/# comment', 2203d032f34aSBram Moolenaar ], 'E402:') 22041966c248SBram Moolenaar 22051966c248SBram Moolenaar CheckScriptSuccess([ 22061966c248SBram Moolenaar 'vim9script', 22071966c248SBram Moolenaar 'syntax sync # comment', 22081966c248SBram Moolenaar ]) 22091966c248SBram Moolenaar CheckScriptFailure([ 22101966c248SBram Moolenaar 'vim9script', 22111966c248SBram Moolenaar 'syntax sync# comment', 22121966c248SBram Moolenaar ], 'E404:') 22131966c248SBram Moolenaar CheckScriptSuccess([ 22141966c248SBram Moolenaar 'vim9script', 22151966c248SBram Moolenaar 'syntax sync ccomment # comment', 22161966c248SBram Moolenaar ]) 22171966c248SBram Moolenaar CheckScriptFailure([ 22181966c248SBram Moolenaar 'vim9script', 22191966c248SBram Moolenaar 'syntax sync ccomment# comment', 22201966c248SBram Moolenaar ], 'E404:') 22211966c248SBram Moolenaar 22221966c248SBram Moolenaar CheckScriptSuccess([ 22231966c248SBram Moolenaar 'vim9script', 22241966c248SBram Moolenaar 'syntax cluster Some contains=Word # comment', 22251966c248SBram Moolenaar ]) 22261966c248SBram Moolenaar CheckScriptFailure([ 22271966c248SBram Moolenaar 'vim9script', 22281966c248SBram Moolenaar 'syntax cluster Some contains=Word# comment', 22291966c248SBram Moolenaar ], 'E475:') 2230a72cfb80SBram Moolenaar 2231a72cfb80SBram Moolenaar CheckScriptSuccess([ 2232a72cfb80SBram Moolenaar 'vim9script', 2233a72cfb80SBram Moolenaar 'command Echo echo # comment', 2234a72cfb80SBram Moolenaar 'command Echo # comment', 2235a72cfb80SBram Moolenaar ]) 2236a72cfb80SBram Moolenaar CheckScriptFailure([ 2237a72cfb80SBram Moolenaar 'vim9script', 2238a72cfb80SBram Moolenaar 'command Echo echo# comment', 2239a72cfb80SBram Moolenaar 'Echo', 2240a72cfb80SBram Moolenaar ], 'E121:') 2241a72cfb80SBram Moolenaar CheckScriptFailure([ 2242a72cfb80SBram Moolenaar 'vim9script', 2243a72cfb80SBram Moolenaar 'command Echo# comment', 2244a72cfb80SBram Moolenaar ], 'E182:') 2245a72cfb80SBram Moolenaar CheckScriptFailure([ 2246a72cfb80SBram Moolenaar 'vim9script', 2247a72cfb80SBram Moolenaar 'command Echo echo', 2248a72cfb80SBram Moolenaar 'command Echo# comment', 2249a72cfb80SBram Moolenaar ], 'E182:') 2250a72cfb80SBram Moolenaar 2251a72cfb80SBram Moolenaar CheckScriptSuccess([ 2252a72cfb80SBram Moolenaar 'vim9script', 2253a72cfb80SBram Moolenaar 'function # comment', 2254a72cfb80SBram Moolenaar ]) 2255a72cfb80SBram Moolenaar CheckScriptFailure([ 2256a72cfb80SBram Moolenaar 'vim9script', 22579898107fSBram Moolenaar 'function " comment', 22589898107fSBram Moolenaar ], 'E129:') 22599898107fSBram Moolenaar CheckScriptFailure([ 22609898107fSBram Moolenaar 'vim9script', 2261a72cfb80SBram Moolenaar 'function# comment', 2262a72cfb80SBram Moolenaar ], 'E129:') 2263a72cfb80SBram Moolenaar CheckScriptSuccess([ 2264a72cfb80SBram Moolenaar 'vim9script', 2265a72cfb80SBram Moolenaar 'function CheckScriptSuccess # comment', 2266a72cfb80SBram Moolenaar ]) 2267a72cfb80SBram Moolenaar CheckScriptFailure([ 2268a72cfb80SBram Moolenaar 'vim9script', 2269a72cfb80SBram Moolenaar 'function CheckScriptSuccess# comment', 2270a72cfb80SBram Moolenaar ], 'E488:') 2271a72cfb80SBram Moolenaar 2272a72cfb80SBram Moolenaar CheckScriptSuccess([ 2273a72cfb80SBram Moolenaar 'vim9script', 22744c17ad94SBram Moolenaar 'func g:DeleteMeA()', 2275a72cfb80SBram Moolenaar 'endfunc', 22764c17ad94SBram Moolenaar 'delfunction g:DeleteMeA # comment', 2277a72cfb80SBram Moolenaar ]) 2278a72cfb80SBram Moolenaar CheckScriptFailure([ 2279a72cfb80SBram Moolenaar 'vim9script', 22804c17ad94SBram Moolenaar 'func g:DeleteMeB()', 2281a72cfb80SBram Moolenaar 'endfunc', 22824c17ad94SBram Moolenaar 'delfunction g:DeleteMeB# comment', 2283a72cfb80SBram Moolenaar ], 'E488:') 2284a72cfb80SBram Moolenaar 2285a72cfb80SBram Moolenaar CheckScriptSuccess([ 2286a72cfb80SBram Moolenaar 'vim9script', 2287a72cfb80SBram Moolenaar 'call execute("ls") # comment', 2288a72cfb80SBram Moolenaar ]) 2289a72cfb80SBram Moolenaar CheckScriptFailure([ 2290a72cfb80SBram Moolenaar 'vim9script', 2291a72cfb80SBram Moolenaar 'call execute("ls")# comment', 2292a72cfb80SBram Moolenaar ], 'E488:') 2293e7e4838fSBram Moolenaar 2294e7e4838fSBram Moolenaar CheckScriptFailure([ 2295e7e4838fSBram Moolenaar 'def Test() " comment', 2296e7e4838fSBram Moolenaar 'enddef', 2297e7e4838fSBram Moolenaar ], 'E488:') 2298e7e4838fSBram Moolenaar CheckScriptFailure([ 2299e7e4838fSBram Moolenaar 'vim9script', 2300e7e4838fSBram Moolenaar 'def Test() " comment', 2301e7e4838fSBram Moolenaar 'enddef', 2302e7e4838fSBram Moolenaar ], 'E488:') 2303e7e4838fSBram Moolenaar 2304e7e4838fSBram Moolenaar CheckScriptSuccess([ 2305e7e4838fSBram Moolenaar 'func Test() " comment', 2306e7e4838fSBram Moolenaar 'endfunc', 2307e7e4838fSBram Moolenaar ]) 23089898107fSBram Moolenaar CheckScriptSuccess([ 2309e7e4838fSBram Moolenaar 'vim9script', 2310e7e4838fSBram Moolenaar 'func Test() " comment', 2311e7e4838fSBram Moolenaar 'endfunc', 23129898107fSBram Moolenaar ]) 2313e7e4838fSBram Moolenaar 2314e7e4838fSBram Moolenaar CheckScriptSuccess([ 2315e7e4838fSBram Moolenaar 'def Test() # comment', 2316e7e4838fSBram Moolenaar 'enddef', 2317e7e4838fSBram Moolenaar ]) 2318e7e4838fSBram Moolenaar CheckScriptFailure([ 2319e7e4838fSBram Moolenaar 'func Test() # comment', 2320e7e4838fSBram Moolenaar 'endfunc', 2321e7e4838fSBram Moolenaar ], 'E488:') 23222c5ed4e3SBram Moolenaarenddef 23232c5ed4e3SBram Moolenaar 23242c5ed4e3SBram Moolenaardef Test_vim9_comment_gui() 23252c5ed4e3SBram Moolenaar CheckCanRunGui 23262c5ed4e3SBram Moolenaar 23272c5ed4e3SBram Moolenaar CheckScriptFailure([ 23282c5ed4e3SBram Moolenaar 'vim9script', 23292c5ed4e3SBram Moolenaar 'gui#comment' 23302c5ed4e3SBram Moolenaar ], 'E499:') 23312c5ed4e3SBram Moolenaar CheckScriptFailure([ 23322c5ed4e3SBram Moolenaar 'vim9script', 23332c5ed4e3SBram Moolenaar 'gui -f#comment' 23342c5ed4e3SBram Moolenaar ], 'E499:') 23357a092245SBram Moolenaarenddef 23367a092245SBram Moolenaar 2337a26b9700SBram Moolenaardef Test_vim9_comment_not_compiled() 23386797966dSBram Moolenaar au TabEnter *.vim g:entered = 1 23396797966dSBram Moolenaar au TabEnter *.x g:entered = 2 2340a26b9700SBram Moolenaar 2341a26b9700SBram Moolenaar edit test.vim 2342a26b9700SBram Moolenaar doautocmd TabEnter #comment 2343a26b9700SBram Moolenaar assert_equal(1, g:entered) 2344a26b9700SBram Moolenaar 2345a26b9700SBram Moolenaar doautocmd TabEnter f.x 2346a26b9700SBram Moolenaar assert_equal(2, g:entered) 2347a26b9700SBram Moolenaar 2348a26b9700SBram Moolenaar g:entered = 0 2349a26b9700SBram Moolenaar doautocmd TabEnter f.x #comment 2350a26b9700SBram Moolenaar assert_equal(2, g:entered) 2351a26b9700SBram Moolenaar 2352a26b9700SBram Moolenaar assert_fails('doautocmd Syntax#comment', 'E216:') 2353a26b9700SBram Moolenaar 2354a26b9700SBram Moolenaar au! TabEnter 2355a26b9700SBram Moolenaar unlet g:entered 2356d72c1bf0SBram Moolenaar 2357d72c1bf0SBram Moolenaar CheckScriptSuccess([ 2358d72c1bf0SBram Moolenaar 'vim9script', 23596797966dSBram Moolenaar 'g:var = 123', 2360e55b1c09SBram Moolenaar 'b:var = 456', 2361e55b1c09SBram Moolenaar 'w:var = 777', 2362e55b1c09SBram Moolenaar 't:var = 888', 2363d72c1bf0SBram Moolenaar 'unlet g:var w:var # something', 2364d72c1bf0SBram Moolenaar ]) 2365d72c1bf0SBram Moolenaar 2366d72c1bf0SBram Moolenaar CheckScriptFailure([ 2367d72c1bf0SBram Moolenaar 'vim9script', 2368cfcd011fSBram Moolenaar 'let var = 123', 2369cfcd011fSBram Moolenaar ], 'E1126: Cannot use :let in Vim9 script') 2370cfcd011fSBram Moolenaar 2371cfcd011fSBram Moolenaar CheckScriptFailure([ 2372cfcd011fSBram Moolenaar 'vim9script', 2373cfcd011fSBram Moolenaar 'var g:var = 123', 2374e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a global variable:') 2375e55b1c09SBram Moolenaar 2376e55b1c09SBram Moolenaar CheckScriptFailure([ 2377e55b1c09SBram Moolenaar 'vim9script', 2378cfcd011fSBram Moolenaar 'var b:var = 123', 2379e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a buffer variable:') 2380e55b1c09SBram Moolenaar 2381e55b1c09SBram Moolenaar CheckScriptFailure([ 2382e55b1c09SBram Moolenaar 'vim9script', 2383cfcd011fSBram Moolenaar 'var w:var = 123', 2384e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a window variable:') 2385e55b1c09SBram Moolenaar 2386e55b1c09SBram Moolenaar CheckScriptFailure([ 2387e55b1c09SBram Moolenaar 'vim9script', 2388cfcd011fSBram Moolenaar 'var t:var = 123', 2389e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a tab variable:') 2390e55b1c09SBram Moolenaar 2391e55b1c09SBram Moolenaar CheckScriptFailure([ 2392e55b1c09SBram Moolenaar 'vim9script', 2393cfcd011fSBram Moolenaar 'var v:version = 123', 2394e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a v: variable:') 2395e55b1c09SBram Moolenaar 2396e55b1c09SBram Moolenaar CheckScriptFailure([ 2397e55b1c09SBram Moolenaar 'vim9script', 2398cfcd011fSBram Moolenaar 'var $VARIABLE = "text"', 2399e55b1c09SBram Moolenaar ], 'E1016: Cannot declare an environment variable:') 24006797966dSBram Moolenaar 24016797966dSBram Moolenaar CheckScriptFailure([ 24026797966dSBram Moolenaar 'vim9script', 24036797966dSBram Moolenaar 'g:var = 123', 240432e35117SBram Moolenaar 'unlet g:var# comment1', 2405d72c1bf0SBram Moolenaar ], 'E108:') 2406d72c1bf0SBram Moolenaar 2407d72c1bf0SBram Moolenaar CheckScriptFailure([ 2408d72c1bf0SBram Moolenaar 'let g:var = 123', 2409d72c1bf0SBram Moolenaar 'unlet g:var # something', 2410d72c1bf0SBram Moolenaar ], 'E488:') 2411faac4104SBram Moolenaar 2412faac4104SBram Moolenaar CheckScriptSuccess([ 2413faac4104SBram Moolenaar 'vim9script', 241432e35117SBram Moolenaar 'if 1 # comment2', 2415faac4104SBram Moolenaar ' echo "yes"', 2416faac4104SBram Moolenaar 'elseif 2 #comment', 2417faac4104SBram Moolenaar ' echo "no"', 2418faac4104SBram Moolenaar 'endif', 2419faac4104SBram Moolenaar ]) 2420faac4104SBram Moolenaar 2421faac4104SBram Moolenaar CheckScriptFailure([ 2422faac4104SBram Moolenaar 'vim9script', 242332e35117SBram Moolenaar 'if 1# comment3', 2424faac4104SBram Moolenaar ' echo "yes"', 2425faac4104SBram Moolenaar 'endif', 2426faac4104SBram Moolenaar ], 'E15:') 2427faac4104SBram Moolenaar 2428faac4104SBram Moolenaar CheckScriptFailure([ 2429faac4104SBram Moolenaar 'vim9script', 243032e35117SBram Moolenaar 'if 0 # comment4', 2431faac4104SBram Moolenaar ' echo "yes"', 2432faac4104SBram Moolenaar 'elseif 2#comment', 2433faac4104SBram Moolenaar ' echo "no"', 2434faac4104SBram Moolenaar 'endif', 2435faac4104SBram Moolenaar ], 'E15:') 2436faac4104SBram Moolenaar 2437faac4104SBram Moolenaar CheckScriptSuccess([ 2438faac4104SBram Moolenaar 'vim9script', 2439cfcd011fSBram Moolenaar 'var v = 1 # comment5', 2440faac4104SBram Moolenaar ]) 2441faac4104SBram Moolenaar 2442faac4104SBram Moolenaar CheckScriptFailure([ 2443faac4104SBram Moolenaar 'vim9script', 2444cfcd011fSBram Moolenaar 'var v = 1# comment6', 244532e35117SBram Moolenaar ], 'E15:') 2446faac4104SBram Moolenaar 2447faac4104SBram Moolenaar CheckScriptSuccess([ 2448faac4104SBram Moolenaar 'vim9script', 2449faac4104SBram Moolenaar 'new' 2450d2c61705SBram Moolenaar 'setline(1, ["# define pat", "last"])', 2451df069eecSBram Moolenaar ':$', 2452faac4104SBram Moolenaar 'dsearch /pat/ #comment', 2453faac4104SBram Moolenaar 'bwipe!', 2454faac4104SBram Moolenaar ]) 2455faac4104SBram Moolenaar 2456f5be8cdbSBram Moolenaar CheckScriptFailure([ 2457f5be8cdbSBram Moolenaar 'vim9script', 2458f5be8cdbSBram Moolenaar 'new' 2459d2c61705SBram Moolenaar 'setline(1, ["# define pat", "last"])', 2460f5be8cdbSBram Moolenaar ':$', 2461f5be8cdbSBram Moolenaar 'dsearch /pat/#comment', 2462f5be8cdbSBram Moolenaar 'bwipe!', 2463f5be8cdbSBram Moolenaar ], 'E488:') 2464f5be8cdbSBram Moolenaar 2465f5be8cdbSBram Moolenaar CheckScriptFailure([ 2466f5be8cdbSBram Moolenaar 'vim9script', 2467f5be8cdbSBram Moolenaar 'func! SomeFunc()', 2468f5be8cdbSBram Moolenaar ], 'E477:') 2469a26b9700SBram Moolenaarenddef 2470a26b9700SBram Moolenaar 24717e5bd91dSBram Moolenaardef Test_finish() 2472cfcd011fSBram Moolenaar var lines =<< trim END 24737e5bd91dSBram Moolenaar vim9script 24746797966dSBram Moolenaar g:res = 'one' 24757e5bd91dSBram Moolenaar if v:false | finish | endif 24766797966dSBram Moolenaar g:res = 'two' 24777e5bd91dSBram Moolenaar finish 24786797966dSBram Moolenaar g:res = 'three' 24797e5bd91dSBram Moolenaar END 24807e5bd91dSBram Moolenaar writefile(lines, 'Xfinished') 24817e5bd91dSBram Moolenaar source Xfinished 24827e5bd91dSBram Moolenaar assert_equal('two', g:res) 24837e5bd91dSBram Moolenaar 24847e5bd91dSBram Moolenaar unlet g:res 24857e5bd91dSBram Moolenaar delete('Xfinished') 24867e5bd91dSBram Moolenaarenddef 24877e5bd91dSBram Moolenaar 2488a5d0077eSBram Moolenaardef Test_forward_declaration() 2489cfcd011fSBram Moolenaar var lines =<< trim END 2490a5d0077eSBram Moolenaar vim9script 2491a5d0077eSBram Moolenaar def GetValue(): string 2492a5d0077eSBram Moolenaar return theVal 2493a5d0077eSBram Moolenaar enddef 2494cfcd011fSBram Moolenaar var theVal = 'something' 2495822ba247SBram Moolenaar g:initVal = GetValue() 2496a5d0077eSBram Moolenaar theVal = 'else' 2497a5d0077eSBram Moolenaar g:laterVal = GetValue() 2498a5d0077eSBram Moolenaar END 2499a5d0077eSBram Moolenaar writefile(lines, 'Xforward') 2500a5d0077eSBram Moolenaar source Xforward 2501a5d0077eSBram Moolenaar assert_equal('something', g:initVal) 2502a5d0077eSBram Moolenaar assert_equal('else', g:laterVal) 2503a5d0077eSBram Moolenaar 2504a5d0077eSBram Moolenaar unlet g:initVal 2505a5d0077eSBram Moolenaar unlet g:laterVal 2506a5d0077eSBram Moolenaar delete('Xforward') 2507a5d0077eSBram Moolenaarenddef 2508a5d0077eSBram Moolenaar 25099721fb4eSBram Moolenaardef Test_source_vim9_from_legacy() 2510cfcd011fSBram Moolenaar var legacy_lines =<< trim END 25119721fb4eSBram Moolenaar source Xvim9_script.vim 25129721fb4eSBram Moolenaar 25139721fb4eSBram Moolenaar call assert_false(exists('local')) 25149721fb4eSBram Moolenaar call assert_false(exists('exported')) 25159721fb4eSBram Moolenaar call assert_false(exists('s:exported')) 25169721fb4eSBram Moolenaar call assert_equal('global', global) 25179721fb4eSBram Moolenaar call assert_equal('global', g:global) 25189721fb4eSBram Moolenaar 25199721fb4eSBram Moolenaar " imported variable becomes script-local 25209721fb4eSBram Moolenaar import exported from './Xvim9_script.vim' 25219721fb4eSBram Moolenaar call assert_equal('exported', s:exported) 25229721fb4eSBram Moolenaar call assert_false(exists('exported')) 25239721fb4eSBram Moolenaar 25249721fb4eSBram Moolenaar " imported function becomes script-local 25259721fb4eSBram Moolenaar import GetText from './Xvim9_script.vim' 25269721fb4eSBram Moolenaar call assert_equal('text', s:GetText()) 25279721fb4eSBram Moolenaar call assert_false(exists('*GetText')) 25289721fb4eSBram Moolenaar END 25299721fb4eSBram Moolenaar writefile(legacy_lines, 'Xlegacy_script.vim') 25309721fb4eSBram Moolenaar 2531cfcd011fSBram Moolenaar var vim9_lines =<< trim END 25329721fb4eSBram Moolenaar vim9script 2533cfcd011fSBram Moolenaar var local = 'local' 25349721fb4eSBram Moolenaar g:global = 'global' 2535cfcd011fSBram Moolenaar export var exported = 'exported' 25369721fb4eSBram Moolenaar export def GetText(): string 25379721fb4eSBram Moolenaar return 'text' 25389721fb4eSBram Moolenaar enddef 25399721fb4eSBram Moolenaar END 25409721fb4eSBram Moolenaar writefile(vim9_lines, 'Xvim9_script.vim') 25419721fb4eSBram Moolenaar 25429721fb4eSBram Moolenaar source Xlegacy_script.vim 25439721fb4eSBram Moolenaar 25449721fb4eSBram Moolenaar assert_equal('global', g:global) 2545f5be8cdbSBram Moolenaar unlet g:global 25469721fb4eSBram Moolenaar 25479721fb4eSBram Moolenaar delete('Xlegacy_script.vim') 25489721fb4eSBram Moolenaar delete('Xvim9_script.vim') 25499721fb4eSBram Moolenaarenddef 2550a5d0077eSBram Moolenaar 25517d699701SBram Moolenaarfunc Test_vim9script_not_global() 25527d699701SBram Moolenaar " check that items defined in Vim9 script are script-local, not global 25537d699701SBram Moolenaar let vim9lines =<< trim END 25547d699701SBram Moolenaar vim9script 2555cfcd011fSBram Moolenaar var name = 'local' 25567d699701SBram Moolenaar func TheFunc() 25577d699701SBram Moolenaar echo 'local' 25587d699701SBram Moolenaar endfunc 25597d699701SBram Moolenaar def DefFunc() 25607d699701SBram Moolenaar echo 'local' 25617d699701SBram Moolenaar enddef 25627d699701SBram Moolenaar END 25637d699701SBram Moolenaar call writefile(vim9lines, 'Xvim9script.vim') 25647d699701SBram Moolenaar source Xvim9script.vim 25657d699701SBram Moolenaar try 25667d699701SBram Moolenaar echo g:var 25677d699701SBram Moolenaar assert_report('did not fail') 25687d699701SBram Moolenaar catch /E121:/ 25697d699701SBram Moolenaar " caught 25707d699701SBram Moolenaar endtry 25717d699701SBram Moolenaar try 25727d699701SBram Moolenaar call TheFunc() 25737d699701SBram Moolenaar assert_report('did not fail') 25747d699701SBram Moolenaar catch /E117:/ 25757d699701SBram Moolenaar " caught 25767d699701SBram Moolenaar endtry 25777d699701SBram Moolenaar try 25787d699701SBram Moolenaar call DefFunc() 25797d699701SBram Moolenaar assert_report('did not fail') 25807d699701SBram Moolenaar catch /E117:/ 25817d699701SBram Moolenaar " caught 25827d699701SBram Moolenaar endtry 25837d699701SBram Moolenaar 258425859dd7SBram Moolenaar call delete('Xvim9script.vim') 25857d699701SBram Moolenaarendfunc 25867d699701SBram Moolenaar 2587eeb27bfeSBram Moolenaardef Test_vim9_copen() 2588eeb27bfeSBram Moolenaar # this was giving an error for setting w:quickfix_title 2589eeb27bfeSBram Moolenaar copen 2590eeb27bfeSBram Moolenaar quit 2591eeb27bfeSBram Moolenaarenddef 2592eeb27bfeSBram Moolenaar 25932d6b20d6SBram Moolenaar" test using a vim9script that is auto-loaded from an autocmd 25942d6b20d6SBram Moolenaardef Test_vim9_autoload() 2595cfcd011fSBram Moolenaar var lines =<< trim END 25962d6b20d6SBram Moolenaar vim9script 25972d6b20d6SBram Moolenaar def foo#test() 25982d6b20d6SBram Moolenaar echomsg getreg('"') 25992d6b20d6SBram Moolenaar enddef 26002d6b20d6SBram Moolenaar END 26012d6b20d6SBram Moolenaar 26022d6b20d6SBram Moolenaar mkdir('Xdir/autoload', 'p') 26032d6b20d6SBram Moolenaar writefile(lines, 'Xdir/autoload/foo.vim') 2604cfcd011fSBram Moolenaar var save_rtp = &rtp 26052d6b20d6SBram Moolenaar exe 'set rtp^=' .. getcwd() .. '/Xdir' 26062d6b20d6SBram Moolenaar augroup test 26072d6b20d6SBram Moolenaar autocmd TextYankPost * call foo#test() 26082d6b20d6SBram Moolenaar augroup END 26092d6b20d6SBram Moolenaar 26102d6b20d6SBram Moolenaar normal Y 26112d6b20d6SBram Moolenaar 26122d6b20d6SBram Moolenaar augroup test 26132d6b20d6SBram Moolenaar autocmd! 26142d6b20d6SBram Moolenaar augroup END 26152d6b20d6SBram Moolenaar delete('Xdir', 'rf') 26162d6b20d6SBram Moolenaar &rtp = save_rtp 26172d6b20d6SBram Moolenaarenddef 26182d6b20d6SBram Moolenaar 261977e5dcc3SBram Moolenaar" This was causing a crash because suppress_errthrow wasn't reset. 262077e5dcc3SBram Moolenaardef Test_vim9_autoload_error() 2621cfcd011fSBram Moolenaar var lines =<< trim END 262277e5dcc3SBram Moolenaar vim9script 262377e5dcc3SBram Moolenaar def crash#func() 262477e5dcc3SBram Moolenaar try 262577e5dcc3SBram Moolenaar for x in List() 262677e5dcc3SBram Moolenaar endfor 262777e5dcc3SBram Moolenaar catch 262877e5dcc3SBram Moolenaar endtry 262977e5dcc3SBram Moolenaar g:ok = true 263077e5dcc3SBram Moolenaar enddef 263177e5dcc3SBram Moolenaar fu List() 263277e5dcc3SBram Moolenaar invalid 263377e5dcc3SBram Moolenaar endfu 263477e5dcc3SBram Moolenaar try 263577e5dcc3SBram Moolenaar invalid 263677e5dcc3SBram Moolenaar catch /wontmatch/ 263777e5dcc3SBram Moolenaar endtry 263877e5dcc3SBram Moolenaar END 263977e5dcc3SBram Moolenaar call mkdir('Xruntime/autoload', 'p') 264077e5dcc3SBram Moolenaar call writefile(lines, 'Xruntime/autoload/crash.vim') 264177e5dcc3SBram Moolenaar 264277e5dcc3SBram Moolenaar # run in a separate Vim to avoid the side effects of assert_fails() 264377e5dcc3SBram Moolenaar lines =<< trim END 264477e5dcc3SBram Moolenaar exe 'set rtp^=' .. getcwd() .. '/Xruntime' 264577e5dcc3SBram Moolenaar call crash#func() 264677e5dcc3SBram Moolenaar call writefile(['ok'], 'Xdidit') 26479c4f5520SBram Moolenaar qall! 264877e5dcc3SBram Moolenaar END 264977e5dcc3SBram Moolenaar writefile(lines, 'Xscript') 265077e5dcc3SBram Moolenaar RunVim([], [], '-S Xscript') 265177e5dcc3SBram Moolenaar assert_equal(['ok'], readfile('Xdidit')) 265277e5dcc3SBram Moolenaar 265377e5dcc3SBram Moolenaar delete('Xdidit') 265477e5dcc3SBram Moolenaar delete('Xscript') 265577e5dcc3SBram Moolenaar delete('Xruntime', 'rf') 265677e5dcc3SBram Moolenaarenddef 265777e5dcc3SBram Moolenaar 265881e17fbeSBram Moolenaardef Test_script_var_in_autocmd() 265981e17fbeSBram Moolenaar # using a script variable from an autocommand, defined in a :def function in a 266081e17fbeSBram Moolenaar # legacy Vim script, cannot check the variable type. 2661cfcd011fSBram Moolenaar var lines =<< trim END 266281e17fbeSBram Moolenaar let s:counter = 1 266381e17fbeSBram Moolenaar def s:Func() 266481e17fbeSBram Moolenaar au! CursorHold 266581e17fbeSBram Moolenaar au CursorHold * s:counter += 1 266681e17fbeSBram Moolenaar enddef 266781e17fbeSBram Moolenaar call s:Func() 266881e17fbeSBram Moolenaar doau CursorHold 266981e17fbeSBram Moolenaar call assert_equal(2, s:counter) 267081e17fbeSBram Moolenaar au! CursorHold 267181e17fbeSBram Moolenaar END 267281e17fbeSBram Moolenaar CheckScriptSuccess(lines) 267381e17fbeSBram Moolenaarenddef 267481e17fbeSBram Moolenaar 26753896a105SBram Moolenaardef Test_cmdline_win() 26763896a105SBram Moolenaar # if the Vim syntax highlighting uses Vim9 constructs they can be used from 26773896a105SBram Moolenaar # the command line window. 26783896a105SBram Moolenaar mkdir('rtp/syntax', 'p') 2679cfcd011fSBram Moolenaar var export_lines =<< trim END 26803896a105SBram Moolenaar vim9script 2681cfcd011fSBram Moolenaar export var That = 'yes' 26823896a105SBram Moolenaar END 26833896a105SBram Moolenaar writefile(export_lines, 'rtp/syntax/Xexport.vim') 2684cfcd011fSBram Moolenaar var import_lines =<< trim END 26853896a105SBram Moolenaar vim9script 26863896a105SBram Moolenaar import That from './Xexport.vim' 26873896a105SBram Moolenaar END 26883896a105SBram Moolenaar writefile(import_lines, 'rtp/syntax/vim.vim') 2689cfcd011fSBram Moolenaar var save_rtp = &rtp 26903896a105SBram Moolenaar &rtp = getcwd() .. '/rtp' .. ',' .. &rtp 26913896a105SBram Moolenaar syntax on 26923896a105SBram Moolenaar augroup CmdWin 26933896a105SBram Moolenaar autocmd CmdwinEnter * g:got_there = 'yes' 26943896a105SBram Moolenaar augroup END 26953896a105SBram Moolenaar # this will open and also close the cmdline window 26963896a105SBram Moolenaar feedkeys('q:', 'xt') 26973896a105SBram Moolenaar assert_equal('yes', g:got_there) 26983896a105SBram Moolenaar 26993896a105SBram Moolenaar augroup CmdWin 27003896a105SBram Moolenaar au! 27013896a105SBram Moolenaar augroup END 27023896a105SBram Moolenaar &rtp = save_rtp 27033896a105SBram Moolenaar delete('rtp', 'rf') 27043896a105SBram Moolenaarenddef 27053896a105SBram Moolenaar 2706e3d4685fSBram Moolenaardef Test_invalid_sid() 2707e3d4685fSBram Moolenaar assert_fails('func <SNR>1234_func', 'E123:') 270825859dd7SBram Moolenaar 27099c4f5520SBram Moolenaar if RunVim([], ['wq! Xdidit'], '+"func <SNR>1_func"') 2710d2c61705SBram Moolenaar assert_equal([], readfile('Xdidit')) 2711e3d4685fSBram Moolenaar endif 2712e3d4685fSBram Moolenaar delete('Xdidit') 2713e3d4685fSBram Moolenaarenddef 2714e3d4685fSBram Moolenaar 2715f0afd9e1SBram Moolenaardef Test_unset_any_variable() 2716cfcd011fSBram Moolenaar var lines =<< trim END 2717cfcd011fSBram Moolenaar var name: any 2718cfcd011fSBram Moolenaar assert_equal(0, name) 2719f0afd9e1SBram Moolenaar END 2720f0afd9e1SBram Moolenaar CheckDefAndScriptSuccess(lines) 2721f0afd9e1SBram Moolenaarenddef 2722f0afd9e1SBram Moolenaar 27237e9210eaSBram Moolenaarfunc Test_define_func_at_command_line() 272458dbef33SBram Moolenaar CheckRunVimInTerminal 272558dbef33SBram Moolenaar 27267e9210eaSBram Moolenaar " call indirectly to avoid compilation error for missing functions 27277e9210eaSBram Moolenaar call Run_Test_define_func_at_command_line() 27287e9210eaSBram Moolenaarendfunc 27297e9210eaSBram Moolenaar 27307e9210eaSBram Moolenaardef Run_Test_define_func_at_command_line() 27319c4f5520SBram Moolenaar # run in a separate Vim instance to avoid the script context 2732cfcd011fSBram Moolenaar var lines =<< trim END 27339c4f5520SBram Moolenaar func CheckAndQuit() 27349c4f5520SBram Moolenaar call assert_fails('call Afunc()', 'E117: Unknown function: Bfunc') 27359c4f5520SBram Moolenaar call writefile(['errors: ' .. string(v:errors)], 'Xdidcmd') 27369c4f5520SBram Moolenaar endfunc 27379c4f5520SBram Moolenaar END 27389c4f5520SBram Moolenaar writefile([''], 'Xdidcmd') 27399c4f5520SBram Moolenaar writefile(lines, 'XcallFunc') 2740cfcd011fSBram Moolenaar var buf = RunVimInTerminal('-S XcallFunc', #{rows: 6}) 27419c4f5520SBram Moolenaar # define Afunc() on the command line 27429c4f5520SBram Moolenaar term_sendkeys(buf, ":def Afunc()\<CR>Bfunc()\<CR>enddef\<CR>") 27439c4f5520SBram Moolenaar term_sendkeys(buf, ":call CheckAndQuit()\<CR>") 27449c4f5520SBram Moolenaar WaitForAssert({-> assert_equal(['errors: []'], readfile('Xdidcmd'))}) 27459c4f5520SBram Moolenaar 27469c4f5520SBram Moolenaar call StopVimInTerminal(buf) 27479c4f5520SBram Moolenaar delete('XcallFunc') 27489c4f5520SBram Moolenaar delete('Xdidcmd') 27499c4f5520SBram Moolenaarenddef 27509c4f5520SBram Moolenaar 2751fcdc5d83SBram Moolenaardef Test_script_var_scope() 2752fcdc5d83SBram Moolenaar var lines =<< trim END 2753fcdc5d83SBram Moolenaar vim9script 2754fcdc5d83SBram Moolenaar if true 2755fcdc5d83SBram Moolenaar if true 2756fcdc5d83SBram Moolenaar var one = 'one' 2757fcdc5d83SBram Moolenaar echo one 2758fcdc5d83SBram Moolenaar endif 2759fcdc5d83SBram Moolenaar echo one 2760fcdc5d83SBram Moolenaar endif 2761fcdc5d83SBram Moolenaar END 2762fcdc5d83SBram Moolenaar CheckScriptFailure(lines, 'E121:', 7) 2763fcdc5d83SBram Moolenaar 2764fcdc5d83SBram Moolenaar lines =<< trim END 2765fcdc5d83SBram Moolenaar vim9script 2766fcdc5d83SBram Moolenaar if true 2767fcdc5d83SBram Moolenaar if false 2768fcdc5d83SBram Moolenaar var one = 'one' 2769fcdc5d83SBram Moolenaar echo one 2770fcdc5d83SBram Moolenaar else 2771fcdc5d83SBram Moolenaar var one = 'one' 2772fcdc5d83SBram Moolenaar echo one 2773fcdc5d83SBram Moolenaar endif 2774fcdc5d83SBram Moolenaar echo one 2775fcdc5d83SBram Moolenaar endif 2776fcdc5d83SBram Moolenaar END 2777fcdc5d83SBram Moolenaar CheckScriptFailure(lines, 'E121:', 10) 2778fcdc5d83SBram Moolenaar 2779fcdc5d83SBram Moolenaar lines =<< trim END 2780fcdc5d83SBram Moolenaar vim9script 2781fcdc5d83SBram Moolenaar while true 2782fcdc5d83SBram Moolenaar var one = 'one' 2783fcdc5d83SBram Moolenaar echo one 2784fcdc5d83SBram Moolenaar break 2785fcdc5d83SBram Moolenaar endwhile 2786fcdc5d83SBram Moolenaar echo one 2787fcdc5d83SBram Moolenaar END 2788fcdc5d83SBram Moolenaar CheckScriptFailure(lines, 'E121:', 7) 2789fcdc5d83SBram Moolenaar 2790fcdc5d83SBram Moolenaar lines =<< trim END 2791fcdc5d83SBram Moolenaar vim9script 2792fcdc5d83SBram Moolenaar for i in range(1) 2793fcdc5d83SBram Moolenaar var one = 'one' 2794fcdc5d83SBram Moolenaar echo one 2795fcdc5d83SBram Moolenaar endfor 2796fcdc5d83SBram Moolenaar echo one 2797fcdc5d83SBram Moolenaar END 2798fcdc5d83SBram Moolenaar CheckScriptFailure(lines, 'E121:', 6) 27999becdf2bSBram Moolenaar 28009becdf2bSBram Moolenaar lines =<< trim END 28019becdf2bSBram Moolenaar vim9script 28029becdf2bSBram Moolenaar { 28039becdf2bSBram Moolenaar var one = 'one' 28049becdf2bSBram Moolenaar assert_equal('one', one) 28059becdf2bSBram Moolenaar } 28069becdf2bSBram Moolenaar assert_false(exists('one')) 28079becdf2bSBram Moolenaar assert_false(exists('s:one')) 28089becdf2bSBram Moolenaar END 28099becdf2bSBram Moolenaar CheckScriptSuccess(lines) 28109becdf2bSBram Moolenaar 28119becdf2bSBram Moolenaar lines =<< trim END 28129becdf2bSBram Moolenaar vim9script 28139becdf2bSBram Moolenaar { 28149becdf2bSBram Moolenaar var one = 'one' 28159becdf2bSBram Moolenaar echo one 28169becdf2bSBram Moolenaar } 28179becdf2bSBram Moolenaar echo one 28189becdf2bSBram Moolenaar END 28199becdf2bSBram Moolenaar CheckScriptFailure(lines, 'E121:', 6) 2820fcdc5d83SBram Moolenaarenddef 2821fcdc5d83SBram Moolenaar 2822*352134bbSBram Moolenaardef Test_catch_exception_in_callback() 2823*352134bbSBram Moolenaar var lines =<< trim END 2824*352134bbSBram Moolenaar vim9script 2825*352134bbSBram Moolenaar def Callback(...l: any) 2826*352134bbSBram Moolenaar try 2827*352134bbSBram Moolenaar var x: string 2828*352134bbSBram Moolenaar var y: string 2829*352134bbSBram Moolenaar # this error should be caught with CHECKLEN 2830*352134bbSBram Moolenaar [x, y] = [''] 2831*352134bbSBram Moolenaar catch 2832*352134bbSBram Moolenaar g:caught = 'yes' 2833*352134bbSBram Moolenaar endtry 2834*352134bbSBram Moolenaar enddef 2835*352134bbSBram Moolenaar popup_menu('popup', #{callback: Callback}) 2836*352134bbSBram Moolenaar feedkeys("\r", 'xt') 2837*352134bbSBram Moolenaar END 2838*352134bbSBram Moolenaar CheckScriptSuccess(lines) 2839*352134bbSBram Moolenaar 2840*352134bbSBram Moolenaar unlet g:caught 2841*352134bbSBram Moolenaarenddef 2842*352134bbSBram Moolenaar 2843585fea7bSBram Moolenaar" Keep this last, it messes up highlighting. 2844585fea7bSBram Moolenaardef Test_substitute_cmd() 2845585fea7bSBram Moolenaar new 2846585fea7bSBram Moolenaar setline(1, 'something') 2847585fea7bSBram Moolenaar :substitute(some(other( 2848585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 2849585fea7bSBram Moolenaar bwipe! 2850585fea7bSBram Moolenaar 2851f5be8cdbSBram Moolenaar # also when the context is Vim9 script 2852cfcd011fSBram Moolenaar var lines =<< trim END 2853585fea7bSBram Moolenaar vim9script 2854585fea7bSBram Moolenaar new 2855585fea7bSBram Moolenaar setline(1, 'something') 2856585fea7bSBram Moolenaar :substitute(some(other( 2857585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 2858585fea7bSBram Moolenaar bwipe! 2859585fea7bSBram Moolenaar END 2860585fea7bSBram Moolenaar writefile(lines, 'Xvim9lines') 2861585fea7bSBram Moolenaar source Xvim9lines 2862585fea7bSBram Moolenaar 2863585fea7bSBram Moolenaar delete('Xvim9lines') 2864585fea7bSBram Moolenaarenddef 2865585fea7bSBram Moolenaar 28668a7d6542SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker 2867