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 9*cfcd011fSBram Moolenaar" TODO: remove later 10*cfcd011fSBram Moolenaarlet v:disallow_let = 1 11*cfcd011fSBram Moolenaar 125d72ce69SBram Moolenaardef Test_range_only() 135d72ce69SBram Moolenaar new 145d72ce69SBram Moolenaar setline(1, ['blah', 'Blah']) 155d72ce69SBram Moolenaar :/Blah/ 165d72ce69SBram Moolenaar assert_equal(2, getcurpos()[1]) 17c2af0affSBram Moolenaar bwipe! 18c2af0affSBram Moolenaar 19c2af0affSBram Moolenaar # without range commands use current line 20c2af0affSBram Moolenaar new 21c2af0affSBram Moolenaar setline(1, ['one', 'two', 'three']) 22c2af0affSBram Moolenaar :2 23c2af0affSBram Moolenaar print 24c2af0affSBram Moolenaar assert_equal('two', Screenline(&lines)) 25c2af0affSBram Moolenaar :3 26c2af0affSBram Moolenaar list 27c2af0affSBram Moolenaar assert_equal('three$', Screenline(&lines)) 28c2af0affSBram Moolenaar bwipe! 295d72ce69SBram Moolenaarenddef 305d72ce69SBram Moolenaar 31a6e67e4fSBram Moolenaarlet g:alist = [7] 32a6e67e4fSBram Moolenaarlet g:astring = 'text' 33f0b9f43cSBram Moolenaarlet g:anumber = 123 346e587dcbSBram Moolenaar 35d72c1bf0SBram Moolenaardef Test_unlet() 36d72c1bf0SBram Moolenaar g:somevar = 'yes' 37d72c1bf0SBram Moolenaar assert_true(exists('g:somevar')) 38d72c1bf0SBram Moolenaar unlet g:somevar 39d72c1bf0SBram Moolenaar assert_false(exists('g:somevar')) 40d72c1bf0SBram Moolenaar unlet! g:somevar 41d72c1bf0SBram Moolenaar 428436773fSBram Moolenaar # also works for script-local variable in legacy Vim script 438436773fSBram Moolenaar s:somevar = 'legacy' 448436773fSBram Moolenaar assert_true(exists('s:somevar')) 458436773fSBram Moolenaar unlet s:somevar 468436773fSBram Moolenaar assert_false(exists('s:somevar')) 478436773fSBram Moolenaar unlet! s:somevar 488436773fSBram Moolenaar 49d2c61705SBram Moolenaar CheckScriptFailure([ 50d72c1bf0SBram Moolenaar 'vim9script', 51*cfcd011fSBram Moolenaar 'var svar = 123', 52d72c1bf0SBram Moolenaar 'unlet svar', 53d72c1bf0SBram Moolenaar ], 'E1081:') 54d2c61705SBram Moolenaar CheckScriptFailure([ 55d72c1bf0SBram Moolenaar 'vim9script', 56*cfcd011fSBram Moolenaar 'var svar = 123', 57d72c1bf0SBram Moolenaar 'unlet s:svar', 58d72c1bf0SBram Moolenaar ], 'E1081:') 59d2c61705SBram Moolenaar CheckScriptFailure([ 60d72c1bf0SBram Moolenaar 'vim9script', 61*cfcd011fSBram Moolenaar 'var svar = 123', 62d72c1bf0SBram Moolenaar 'def Func()', 63d72c1bf0SBram Moolenaar ' unlet svar', 64d72c1bf0SBram Moolenaar 'enddef', 65822ba247SBram Moolenaar 'defcompile', 66d72c1bf0SBram Moolenaar ], 'E1081:') 67d2c61705SBram Moolenaar CheckScriptFailure([ 68d72c1bf0SBram Moolenaar 'vim9script', 69*cfcd011fSBram Moolenaar 'var svar = 123', 70d72c1bf0SBram Moolenaar 'def Func()', 71d72c1bf0SBram Moolenaar ' unlet s:svar', 72d72c1bf0SBram Moolenaar 'enddef', 73822ba247SBram Moolenaar 'defcompile', 74d72c1bf0SBram Moolenaar ], 'E1081:') 757bdaea6eSBram Moolenaar 767bdaea6eSBram Moolenaar $ENVVAR = 'foobar' 777bdaea6eSBram Moolenaar assert_equal('foobar', $ENVVAR) 787bdaea6eSBram Moolenaar unlet $ENVVAR 797bdaea6eSBram Moolenaar assert_equal('', $ENVVAR) 80d72c1bf0SBram Moolenaarenddef 81599c89c8SBram Moolenaar 824c17ad94SBram Moolenaardef Test_delfunction() 83f5be8cdbSBram Moolenaar # Check function is defined in script namespace 844c17ad94SBram Moolenaar CheckScriptSuccess([ 854c17ad94SBram Moolenaar 'vim9script', 864c17ad94SBram Moolenaar 'func CheckMe()', 874c17ad94SBram Moolenaar ' return 123', 884c17ad94SBram Moolenaar 'endfunc', 894c17ad94SBram Moolenaar 'assert_equal(123, s:CheckMe())', 904c17ad94SBram Moolenaar ]) 914c17ad94SBram Moolenaar 92f5be8cdbSBram Moolenaar # Check function in script namespace cannot be deleted 934c17ad94SBram Moolenaar CheckScriptFailure([ 944c17ad94SBram Moolenaar 'vim9script', 954c17ad94SBram Moolenaar 'func DeleteMe1()', 964c17ad94SBram Moolenaar 'endfunc', 974c17ad94SBram Moolenaar 'delfunction DeleteMe1', 984c17ad94SBram Moolenaar ], 'E1084:') 994c17ad94SBram Moolenaar CheckScriptFailure([ 1004c17ad94SBram Moolenaar 'vim9script', 1014c17ad94SBram Moolenaar 'func DeleteMe2()', 1024c17ad94SBram Moolenaar 'endfunc', 1034c17ad94SBram Moolenaar 'def DoThat()', 1044c17ad94SBram Moolenaar ' delfunction DeleteMe2', 1054c17ad94SBram Moolenaar 'enddef', 1064c17ad94SBram Moolenaar 'DoThat()', 1074c17ad94SBram Moolenaar ], 'E1084:') 1084c17ad94SBram Moolenaar CheckScriptFailure([ 1094c17ad94SBram Moolenaar 'vim9script', 1104c17ad94SBram Moolenaar 'def DeleteMe3()', 1114c17ad94SBram Moolenaar 'enddef', 1124c17ad94SBram Moolenaar 'delfunction DeleteMe3', 1134c17ad94SBram Moolenaar ], 'E1084:') 1144c17ad94SBram Moolenaar CheckScriptFailure([ 1154c17ad94SBram Moolenaar 'vim9script', 1164c17ad94SBram Moolenaar 'def DeleteMe4()', 1174c17ad94SBram Moolenaar 'enddef', 1184c17ad94SBram Moolenaar 'def DoThat()', 1194c17ad94SBram Moolenaar ' delfunction DeleteMe4', 1204c17ad94SBram Moolenaar 'enddef', 1214c17ad94SBram Moolenaar 'DoThat()', 1224c17ad94SBram Moolenaar ], 'E1084:') 123925e9fd6SBram Moolenaar 124925e9fd6SBram Moolenaar # Check that global :def function can be replaced and deleted 125*cfcd011fSBram Moolenaar var lines =<< trim END 126925e9fd6SBram Moolenaar vim9script 127925e9fd6SBram Moolenaar def g:Global(): string 128925e9fd6SBram Moolenaar return "yes" 129925e9fd6SBram Moolenaar enddef 130925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 131925e9fd6SBram Moolenaar def! g:Global(): string 132925e9fd6SBram Moolenaar return "no" 133925e9fd6SBram Moolenaar enddef 134925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 135925e9fd6SBram Moolenaar delfunc g:Global 136925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 137925e9fd6SBram Moolenaar END 138925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 139925e9fd6SBram Moolenaar 140925e9fd6SBram Moolenaar # Check that global function can be replaced by a :def function and deleted 141925e9fd6SBram Moolenaar lines =<< trim END 142925e9fd6SBram Moolenaar vim9script 143925e9fd6SBram Moolenaar func g:Global() 144925e9fd6SBram Moolenaar return "yes" 145925e9fd6SBram Moolenaar endfunc 146925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 147925e9fd6SBram Moolenaar def! g:Global(): string 148925e9fd6SBram Moolenaar return "no" 149925e9fd6SBram Moolenaar enddef 150925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 151925e9fd6SBram Moolenaar delfunc g:Global 152925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 153925e9fd6SBram Moolenaar END 154925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 155925e9fd6SBram Moolenaar 156925e9fd6SBram Moolenaar # Check that global :def function can be replaced by a function and deleted 157925e9fd6SBram Moolenaar lines =<< trim END 158925e9fd6SBram Moolenaar vim9script 159925e9fd6SBram Moolenaar def g:Global(): string 160925e9fd6SBram Moolenaar return "yes" 161925e9fd6SBram Moolenaar enddef 162925e9fd6SBram Moolenaar assert_equal("yes", g:Global()) 163925e9fd6SBram Moolenaar func! g:Global() 164925e9fd6SBram Moolenaar return "no" 165925e9fd6SBram Moolenaar endfunc 166925e9fd6SBram Moolenaar assert_equal("no", g:Global()) 167925e9fd6SBram Moolenaar delfunc g:Global 168925e9fd6SBram Moolenaar assert_false(exists('*g:Global')) 169925e9fd6SBram Moolenaar END 170925e9fd6SBram Moolenaar CheckScriptSuccess(lines) 1714c17ad94SBram Moolenaarenddef 1724c17ad94SBram Moolenaar 17308052228SBram Moolenaardef Test_wrong_type() 174*cfcd011fSBram Moolenaar CheckDefFailure(['var name: list<nothing>'], 'E1010:') 175*cfcd011fSBram Moolenaar CheckDefFailure(['var name: list<list<nothing>>'], 'E1010:') 176*cfcd011fSBram Moolenaar CheckDefFailure(['var name: dict<nothing>'], 'E1010:') 177*cfcd011fSBram Moolenaar CheckDefFailure(['var name: dict<dict<nothing>>'], 'E1010:') 178599c89c8SBram Moolenaar 179*cfcd011fSBram Moolenaar CheckDefFailure(['var name: dict<number'], 'E1009:') 180*cfcd011fSBram Moolenaar CheckDefFailure(['var name: dict<list<number>'], 'E1009:') 18142a480bfSBram Moolenaar 182*cfcd011fSBram Moolenaar CheckDefFailure(['var name: ally'], 'E1010:') 183*cfcd011fSBram Moolenaar CheckDefFailure(['var name: bram'], 'E1010:') 184*cfcd011fSBram Moolenaar CheckDefFailure(['var name: cathy'], 'E1010:') 185*cfcd011fSBram Moolenaar CheckDefFailure(['var name: dom'], 'E1010:') 186*cfcd011fSBram Moolenaar CheckDefFailure(['var name: freddy'], 'E1010:') 187*cfcd011fSBram Moolenaar CheckDefFailure(['var name: john'], 'E1010:') 188*cfcd011fSBram Moolenaar CheckDefFailure(['var name: larry'], 'E1010:') 189*cfcd011fSBram Moolenaar CheckDefFailure(['var name: ned'], 'E1010:') 190*cfcd011fSBram Moolenaar CheckDefFailure(['var name: pam'], 'E1010:') 191*cfcd011fSBram Moolenaar CheckDefFailure(['var name: sam'], 'E1010:') 192*cfcd011fSBram Moolenaar CheckDefFailure(['var name: vim'], 'E1010:') 193a0a9f43aSBram Moolenaar 194*cfcd011fSBram Moolenaar CheckDefFailure(['var Ref: number', 'Ref()'], 'E1085:') 195*cfcd011fSBram Moolenaar CheckDefFailure(['var Ref: string', 'var res = Ref()'], 'E1085:') 19608052228SBram Moolenaarenddef 1978a7d6542SBram Moolenaar 19808052228SBram Moolenaardef Test_const() 199*cfcd011fSBram Moolenaar CheckDefFailure(['final name = 234', 'name = 99'], 'E1018:') 200*cfcd011fSBram Moolenaar CheckDefFailure(['final one = 234', 'var one = 99'], 'E1017:') 201*cfcd011fSBram Moolenaar CheckDefFailure(['final list = [1, 2]', 'var list = [3, 4]'], 'E1017:') 20230fd8204SBram Moolenaar CheckDefFailure(['final two'], 'E1125:') 20330fd8204SBram Moolenaar CheckDefFailure(['final &option'], 'E996:') 204dbeecb2bSBram Moolenaar 205*cfcd011fSBram Moolenaar var lines =<< trim END 20630fd8204SBram Moolenaar final list = [1, 2, 3] 207dbeecb2bSBram Moolenaar list[0] = 4 2080b4c66c6SBram Moolenaar list->assert_equal([4, 2, 3]) 20930fd8204SBram Moolenaar const other = [5, 6, 7] 2100b4c66c6SBram Moolenaar other->assert_equal([5, 6, 7]) 21171abe482SBram Moolenaar 212*cfcd011fSBram Moolenaar var varlist = [7, 8] 21330fd8204SBram Moolenaar const constlist = [1, varlist, 3] 21471abe482SBram Moolenaar varlist[0] = 77 21571abe482SBram Moolenaar # TODO: does not work yet 21671abe482SBram Moolenaar # constlist[1][1] = 88 217*cfcd011fSBram Moolenaar var cl = constlist[1] 21871abe482SBram Moolenaar cl[1] = 88 21971abe482SBram Moolenaar constlist->assert_equal([1, [77, 88], 3]) 22071abe482SBram Moolenaar 221*cfcd011fSBram Moolenaar var vardict = #{five: 5, six: 6} 22230fd8204SBram Moolenaar const constdict = #{one: 1, two: vardict, three: 3} 22371abe482SBram Moolenaar vardict['five'] = 55 22471abe482SBram Moolenaar # TODO: does not work yet 22571abe482SBram Moolenaar # constdict['two']['six'] = 66 226*cfcd011fSBram Moolenaar var cd = constdict['two'] 22771abe482SBram Moolenaar cd['six'] = 66 22871abe482SBram Moolenaar constdict->assert_equal(#{one: 1, two: #{five: 55, six: 66}, three: 3}) 229dbeecb2bSBram Moolenaar END 230dbeecb2bSBram Moolenaar CheckDefAndScriptSuccess(lines) 23108052228SBram Moolenaarenddef 2328a7d6542SBram Moolenaar 2330b4c66c6SBram Moolenaardef Test_const_bang() 234*cfcd011fSBram Moolenaar var lines =<< trim END 23530fd8204SBram Moolenaar const var = 234 2360b4c66c6SBram Moolenaar var = 99 2370b4c66c6SBram Moolenaar END 2380b4c66c6SBram Moolenaar CheckDefExecFailure(lines, 'E1018:', 2) 2390b4c66c6SBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E46:', 3) 2400b4c66c6SBram Moolenaar 2410b4c66c6SBram Moolenaar lines =<< trim END 24230fd8204SBram Moolenaar const ll = [2, 3, 4] 2430b4c66c6SBram Moolenaar ll[0] = 99 2440b4c66c6SBram Moolenaar END 2450b4c66c6SBram Moolenaar CheckDefExecFailure(lines, 'E1119:', 2) 2460b4c66c6SBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E741:', 3) 2470b4c66c6SBram Moolenaar 2480b4c66c6SBram Moolenaar lines =<< trim END 24930fd8204SBram Moolenaar const ll = [2, 3, 4] 2500b4c66c6SBram Moolenaar ll[3] = 99 2510b4c66c6SBram Moolenaar END 2520b4c66c6SBram Moolenaar CheckDefExecFailure(lines, 'E1118:', 2) 2530b4c66c6SBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E684:', 3) 2540b4c66c6SBram Moolenaar 2550b4c66c6SBram Moolenaar lines =<< trim END 25630fd8204SBram Moolenaar const dd = #{one: 1, two: 2} 2570b4c66c6SBram Moolenaar dd["one"] = 99 2580b4c66c6SBram Moolenaar END 2590b4c66c6SBram Moolenaar CheckDefExecFailure(lines, 'E1121:', 2) 2600b4c66c6SBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E741:', 3) 2610b4c66c6SBram Moolenaar 2620b4c66c6SBram Moolenaar lines =<< trim END 26330fd8204SBram Moolenaar const dd = #{one: 1, two: 2} 2640b4c66c6SBram Moolenaar dd["three"] = 99 2650b4c66c6SBram Moolenaar END 2660b4c66c6SBram Moolenaar CheckDefExecFailure(lines, 'E1120:') 2670b4c66c6SBram Moolenaar CheckScriptFailure(['vim9script'] + lines, 'E741:', 3) 2680b4c66c6SBram Moolenaarenddef 2690b4c66c6SBram Moolenaar 270df069eecSBram Moolenaardef Test_range_no_colon() 271d2c61705SBram Moolenaar CheckDefFailure(['%s/a/b/'], 'E1050:') 272d2c61705SBram Moolenaar CheckDefFailure(['+ s/a/b/'], 'E1050:') 273d2c61705SBram Moolenaar CheckDefFailure(['- s/a/b/'], 'E1050:') 274d2c61705SBram Moolenaar CheckDefFailure(['. s/a/b/'], 'E1050:') 275df069eecSBram Moolenaarenddef 276df069eecSBram Moolenaar 277df069eecSBram Moolenaar 2788a7d6542SBram Moolenaardef Test_block() 279*cfcd011fSBram Moolenaar var outer = 1 2808a7d6542SBram Moolenaar { 281*cfcd011fSBram Moolenaar var inner = 2 2828a7d6542SBram Moolenaar assert_equal(1, outer) 2838a7d6542SBram Moolenaar assert_equal(2, inner) 2848a7d6542SBram Moolenaar } 2858a7d6542SBram Moolenaar assert_equal(1, outer) 2868a7d6542SBram Moolenaarenddef 2878a7d6542SBram Moolenaar 28808052228SBram Moolenaardef Test_block_failure() 289*cfcd011fSBram Moolenaar CheckDefFailure(['{', 'var inner = 1', '}', 'echo inner'], 'E1001:') 29008052228SBram Moolenaar CheckDefFailure(['}'], 'E1025:') 29108052228SBram Moolenaar CheckDefFailure(['{', 'echo 1'], 'E1026:') 29208052228SBram Moolenaarenddef 2938a7d6542SBram Moolenaar 294d032f34aSBram Moolenaarfunc g:NoSuchFunc() 295d032f34aSBram Moolenaar echo 'none' 296d032f34aSBram Moolenaarendfunc 297d032f34aSBram Moolenaar 2988a7d6542SBram Moolenaardef Test_try_catch() 299*cfcd011fSBram Moolenaar var l = [] 3007a092245SBram Moolenaar try # comment 3018a7d6542SBram Moolenaar add(l, '1') 3028a7d6542SBram Moolenaar throw 'wrong' 3038a7d6542SBram Moolenaar add(l, '2') 3047a092245SBram Moolenaar catch # comment 3058a7d6542SBram Moolenaar add(l, v:exception) 3067a092245SBram Moolenaar finally # comment 3078a7d6542SBram Moolenaar add(l, '3') 3087a092245SBram Moolenaar endtry # comment 3098a7d6542SBram Moolenaar assert_equal(['1', 'wrong', '3'], l) 31068d130c6SBram Moolenaar 311e859312eSBram Moolenaar l = [] 312e859312eSBram Moolenaar try 313e859312eSBram Moolenaar try 314e859312eSBram Moolenaar add(l, '1') 315e859312eSBram Moolenaar throw 'wrong' 316e859312eSBram Moolenaar add(l, '2') 317e859312eSBram Moolenaar catch /right/ 318e859312eSBram Moolenaar add(l, v:exception) 319e859312eSBram Moolenaar endtry 320e859312eSBram Moolenaar catch /wrong/ 321e859312eSBram Moolenaar add(l, 'caught') 322373863edSBram Moolenaar fina 323e859312eSBram Moolenaar add(l, 'finally') 324e859312eSBram Moolenaar endtry 325e859312eSBram Moolenaar assert_equal(['1', 'caught', 'finally'], l) 326e859312eSBram Moolenaar 327*cfcd011fSBram Moolenaar var n: number 32868d130c6SBram Moolenaar try 32968d130c6SBram Moolenaar n = l[3] 33068d130c6SBram Moolenaar catch /E684:/ 33168d130c6SBram Moolenaar n = 99 33268d130c6SBram Moolenaar endtry 33368d130c6SBram Moolenaar assert_equal(99, n) 33468d130c6SBram Moolenaar 33568d130c6SBram Moolenaar try 336cc673e74SBram Moolenaar # string slice returns a string, not a number 33768d130c6SBram Moolenaar n = g:astring[3] 3385e654230SBram Moolenaar catch /E1012:/ 33968d130c6SBram Moolenaar n = 77 34068d130c6SBram Moolenaar endtry 34168d130c6SBram Moolenaar assert_equal(77, n) 34268d130c6SBram Moolenaar 34368d130c6SBram Moolenaar try 34468d130c6SBram Moolenaar n = l[g:astring] 3455e654230SBram Moolenaar catch /E1012:/ 34656acb094SBram Moolenaar n = 88 34768d130c6SBram Moolenaar endtry 34856acb094SBram Moolenaar assert_equal(88, n) 34968d130c6SBram Moolenaar 35068d130c6SBram Moolenaar try 35168d130c6SBram Moolenaar n = s:does_not_exist 35268d130c6SBram Moolenaar catch /E121:/ 353f0b9f43cSBram Moolenaar n = 111 354f0b9f43cSBram Moolenaar endtry 355f0b9f43cSBram Moolenaar assert_equal(111, n) 356f0b9f43cSBram Moolenaar 357f0b9f43cSBram Moolenaar try 358f0b9f43cSBram Moolenaar n = g:does_not_exist 359f0b9f43cSBram Moolenaar catch /E121:/ 36068d130c6SBram Moolenaar n = 121 36168d130c6SBram Moolenaar endtry 36268d130c6SBram Moolenaar assert_equal(121, n) 36368d130c6SBram Moolenaar 364*cfcd011fSBram Moolenaar var d = #{one: 1} 36568d130c6SBram Moolenaar try 36668d130c6SBram Moolenaar n = d[g:astring] 36768d130c6SBram Moolenaar catch /E716:/ 36868d130c6SBram Moolenaar n = 222 36968d130c6SBram Moolenaar endtry 37068d130c6SBram Moolenaar assert_equal(222, n) 371f0b9f43cSBram Moolenaar 372f0b9f43cSBram Moolenaar try 373f0b9f43cSBram Moolenaar n = -g:astring 374f0b9f43cSBram Moolenaar catch /E39:/ 375f0b9f43cSBram Moolenaar n = 233 376f0b9f43cSBram Moolenaar endtry 377f0b9f43cSBram Moolenaar assert_equal(233, n) 378f0b9f43cSBram Moolenaar 379f0b9f43cSBram Moolenaar try 380f0b9f43cSBram Moolenaar n = +g:astring 381f0b9f43cSBram Moolenaar catch /E1030:/ 382f0b9f43cSBram Moolenaar n = 244 383f0b9f43cSBram Moolenaar endtry 384f0b9f43cSBram Moolenaar assert_equal(244, n) 385f0b9f43cSBram Moolenaar 386f0b9f43cSBram Moolenaar try 387f0b9f43cSBram Moolenaar n = +g:alist 388f0b9f43cSBram Moolenaar catch /E745:/ 389f0b9f43cSBram Moolenaar n = 255 390f0b9f43cSBram Moolenaar endtry 391f0b9f43cSBram Moolenaar assert_equal(255, n) 392f0b9f43cSBram Moolenaar 393*cfcd011fSBram Moolenaar var nd: dict<any> 394f0b9f43cSBram Moolenaar try 395f0b9f43cSBram Moolenaar nd = {g:anumber: 1} 3965e654230SBram Moolenaar catch /E1012:/ 397f0b9f43cSBram Moolenaar n = 266 398f0b9f43cSBram Moolenaar endtry 399f0b9f43cSBram Moolenaar assert_equal(266, n) 400f0b9f43cSBram Moolenaar 401f0b9f43cSBram Moolenaar try 402f0b9f43cSBram Moolenaar [n] = [1, 2, 3] 403f0b9f43cSBram Moolenaar catch /E1093:/ 404f0b9f43cSBram Moolenaar n = 277 405f0b9f43cSBram Moolenaar endtry 406f0b9f43cSBram Moolenaar assert_equal(277, n) 407f0b9f43cSBram Moolenaar 408e859312eSBram Moolenaar try 409e859312eSBram Moolenaar &ts = g:astring 4105e654230SBram Moolenaar catch /E1012:/ 411e859312eSBram Moolenaar n = 288 412e859312eSBram Moolenaar endtry 413e859312eSBram Moolenaar assert_equal(288, n) 414e859312eSBram Moolenaar 415e859312eSBram Moolenaar try 416e859312eSBram Moolenaar &backspace = 'asdf' 417e859312eSBram Moolenaar catch /E474:/ 418e859312eSBram Moolenaar n = 299 419e859312eSBram Moolenaar endtry 420e859312eSBram Moolenaar assert_equal(299, n) 421e859312eSBram Moolenaar 422e859312eSBram Moolenaar l = [1] 423e859312eSBram Moolenaar try 424e859312eSBram Moolenaar l[3] = 3 425e859312eSBram Moolenaar catch /E684:/ 426e859312eSBram Moolenaar n = 300 427e859312eSBram Moolenaar endtry 428e859312eSBram Moolenaar assert_equal(300, n) 429e859312eSBram Moolenaar 430e859312eSBram Moolenaar try 431e859312eSBram Moolenaar unlet g:does_not_exist 432e859312eSBram Moolenaar catch /E108:/ 433e859312eSBram Moolenaar n = 322 434e859312eSBram Moolenaar endtry 435e859312eSBram Moolenaar assert_equal(322, n) 436e859312eSBram Moolenaar 437e859312eSBram Moolenaar try 438e859312eSBram Moolenaar d = {'text': 1, g:astring: 2} 439e859312eSBram Moolenaar catch /E721:/ 440e859312eSBram Moolenaar n = 333 441e859312eSBram Moolenaar endtry 442e859312eSBram Moolenaar assert_equal(333, n) 443e859312eSBram Moolenaar 444e859312eSBram Moolenaar try 445e859312eSBram Moolenaar l = DeletedFunc() 446e859312eSBram Moolenaar catch /E933:/ 447e859312eSBram Moolenaar n = 344 448e859312eSBram Moolenaar endtry 449e859312eSBram Moolenaar assert_equal(344, n) 450d032f34aSBram Moolenaar 451d032f34aSBram Moolenaar try 452d032f34aSBram Moolenaar echo len(v:true) 453d032f34aSBram Moolenaar catch /E701:/ 454d032f34aSBram Moolenaar n = 355 455d032f34aSBram Moolenaar endtry 456d032f34aSBram Moolenaar assert_equal(355, n) 457d032f34aSBram Moolenaar 458*cfcd011fSBram Moolenaar var P = function('g:NoSuchFunc') 459d032f34aSBram Moolenaar delfunc g:NoSuchFunc 460d032f34aSBram Moolenaar try 461d032f34aSBram Moolenaar echo P() 462d032f34aSBram Moolenaar catch /E117:/ 463d032f34aSBram Moolenaar n = 366 464d032f34aSBram Moolenaar endtry 465d032f34aSBram Moolenaar assert_equal(366, n) 466d032f34aSBram Moolenaar 467d032f34aSBram Moolenaar try 468d032f34aSBram Moolenaar echo g:NoSuchFunc() 469d032f34aSBram Moolenaar catch /E117:/ 470d032f34aSBram Moolenaar n = 377 471d032f34aSBram Moolenaar endtry 472d032f34aSBram Moolenaar assert_equal(377, n) 473d032f34aSBram Moolenaar 474d032f34aSBram Moolenaar try 475d032f34aSBram Moolenaar echo g:alist + 4 476d032f34aSBram Moolenaar catch /E745:/ 477d032f34aSBram Moolenaar n = 388 478d032f34aSBram Moolenaar endtry 479d032f34aSBram Moolenaar assert_equal(388, n) 480d032f34aSBram Moolenaar 481d032f34aSBram Moolenaar try 482d032f34aSBram Moolenaar echo 4 + g:alist 483d032f34aSBram Moolenaar catch /E745:/ 484d032f34aSBram Moolenaar n = 399 485d032f34aSBram Moolenaar endtry 486d032f34aSBram Moolenaar assert_equal(399, n) 487d032f34aSBram Moolenaar 488d032f34aSBram Moolenaar try 489d032f34aSBram Moolenaar echo g:alist.member 490d032f34aSBram Moolenaar catch /E715:/ 491d032f34aSBram Moolenaar n = 400 492d032f34aSBram Moolenaar endtry 493d032f34aSBram Moolenaar assert_equal(400, n) 494d032f34aSBram Moolenaar 495d032f34aSBram Moolenaar try 496d032f34aSBram Moolenaar echo d.member 497d032f34aSBram Moolenaar catch /E716:/ 498d032f34aSBram Moolenaar n = 411 499d032f34aSBram Moolenaar endtry 500d032f34aSBram Moolenaar assert_equal(411, n) 5018a7d6542SBram Moolenaarenddef 5028a7d6542SBram Moolenaar 503e859312eSBram Moolenaardef DeletedFunc(): list<any> 504e859312eSBram Moolenaar return ['delete me'] 505e859312eSBram Moolenaarenddef 506e859312eSBram Moolenaardefcompile 507e859312eSBram Moolenaardelfunc DeletedFunc 508e859312eSBram Moolenaar 509257cc5eeSBram Moolenaardef ThrowFromDef() 510a72cfb80SBram Moolenaar throw "getout" # comment 511257cc5eeSBram Moolenaarenddef 512257cc5eeSBram Moolenaar 513257cc5eeSBram Moolenaarfunc CatchInFunc() 514257cc5eeSBram Moolenaar try 515257cc5eeSBram Moolenaar call ThrowFromDef() 516257cc5eeSBram Moolenaar catch 517257cc5eeSBram Moolenaar let g:thrown_func = v:exception 518257cc5eeSBram Moolenaar endtry 519257cc5eeSBram Moolenaarendfunc 520257cc5eeSBram Moolenaar 521257cc5eeSBram Moolenaardef CatchInDef() 522257cc5eeSBram Moolenaar try 523257cc5eeSBram Moolenaar ThrowFromDef() 524257cc5eeSBram Moolenaar catch 525257cc5eeSBram Moolenaar g:thrown_def = v:exception 526257cc5eeSBram Moolenaar endtry 527257cc5eeSBram Moolenaarenddef 528257cc5eeSBram Moolenaar 529f575adffSBram Moolenaardef ReturnFinally(): string 530f575adffSBram Moolenaar try 531f575adffSBram Moolenaar return 'intry' 532373863edSBram Moolenaar finall 533f575adffSBram Moolenaar g:in_finally = 'finally' 534f575adffSBram Moolenaar endtry 535f575adffSBram Moolenaar return 'end' 536f575adffSBram Moolenaarenddef 537f575adffSBram Moolenaar 538257cc5eeSBram Moolenaardef Test_try_catch_nested() 539257cc5eeSBram Moolenaar CatchInFunc() 540257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_func) 541257cc5eeSBram Moolenaar 542257cc5eeSBram Moolenaar CatchInDef() 543257cc5eeSBram Moolenaar assert_equal('getout', g:thrown_def) 544f575adffSBram Moolenaar 545f575adffSBram Moolenaar assert_equal('intry', ReturnFinally()) 546f575adffSBram Moolenaar assert_equal('finally', g:in_finally) 547f575adffSBram Moolenaarenddef 548f575adffSBram Moolenaar 5499939f57bSBram Moolenaardef TryOne(): number 5509939f57bSBram Moolenaar try 5519939f57bSBram Moolenaar return 0 5529939f57bSBram Moolenaar catch 5539939f57bSBram Moolenaar endtry 5549939f57bSBram Moolenaar return 0 5559939f57bSBram Moolenaarenddef 5569939f57bSBram Moolenaar 5579939f57bSBram Moolenaardef TryTwo(n: number): string 5589939f57bSBram Moolenaar try 559*cfcd011fSBram Moolenaar var x = {} 5609939f57bSBram Moolenaar catch 5619939f57bSBram Moolenaar endtry 5629939f57bSBram Moolenaar return 'text' 5639939f57bSBram Moolenaarenddef 5649939f57bSBram Moolenaar 5659939f57bSBram Moolenaardef Test_try_catch_twice() 5669939f57bSBram Moolenaar assert_equal('text', TryOne()->TryTwo()) 5679939f57bSBram Moolenaarenddef 5689939f57bSBram Moolenaar 569f575adffSBram Moolenaardef Test_try_catch_match() 570*cfcd011fSBram Moolenaar var seq = 'a' 571f575adffSBram Moolenaar try 572f575adffSBram Moolenaar throw 'something' 573f575adffSBram Moolenaar catch /nothing/ 574f575adffSBram Moolenaar seq ..= 'x' 575f575adffSBram Moolenaar catch /some/ 576f575adffSBram Moolenaar seq ..= 'b' 577f575adffSBram Moolenaar catch /asdf/ 578f575adffSBram Moolenaar seq ..= 'x' 579e8c4abbbSBram Moolenaar catch ?a\?sdf? 580e8c4abbbSBram Moolenaar seq ..= 'y' 581f575adffSBram Moolenaar finally 582f575adffSBram Moolenaar seq ..= 'c' 583f575adffSBram Moolenaar endtry 584f575adffSBram Moolenaar assert_equal('abc', seq) 585257cc5eeSBram Moolenaarenddef 586257cc5eeSBram Moolenaar 587e8c4abbbSBram Moolenaardef Test_try_catch_fails() 588d2c61705SBram Moolenaar CheckDefFailure(['catch'], 'E603:') 589d2c61705SBram Moolenaar CheckDefFailure(['try', 'echo 0', 'catch', 'catch'], 'E1033:') 590d2c61705SBram Moolenaar CheckDefFailure(['try', 'echo 0', 'catch /pat'], 'E1067:') 591d2c61705SBram Moolenaar CheckDefFailure(['finally'], 'E606:') 592d2c61705SBram Moolenaar CheckDefFailure(['try', 'echo 0', 'finally', 'echo 1', 'finally'], 'E607:') 593d2c61705SBram Moolenaar CheckDefFailure(['endtry'], 'E602:') 594d2c61705SBram Moolenaar CheckDefFailure(['while 1', 'endtry'], 'E170:') 595d2c61705SBram Moolenaar CheckDefFailure(['for i in range(5)', 'endtry'], 'E170:') 596d2c61705SBram Moolenaar CheckDefFailure(['if 2', 'endtry'], 'E171:') 597d2c61705SBram Moolenaar CheckDefFailure(['try', 'echo 1', 'endtry'], 'E1032:') 598585fea7bSBram Moolenaar 599d2c61705SBram Moolenaar CheckDefFailure(['throw'], 'E1015:') 600d2c61705SBram Moolenaar CheckDefFailure(['throw xxx'], 'E1001:') 601e8c4abbbSBram Moolenaarenddef 602e8c4abbbSBram Moolenaar 603006ad48bSBram Moolenaardef Test_throw_vimscript() 604f5be8cdbSBram Moolenaar # only checks line continuation 605*cfcd011fSBram Moolenaar var lines =<< trim END 606006ad48bSBram Moolenaar vim9script 607006ad48bSBram Moolenaar try 608006ad48bSBram Moolenaar throw 'one' 609006ad48bSBram Moolenaar .. 'two' 610006ad48bSBram Moolenaar catch 611006ad48bSBram Moolenaar assert_equal('onetwo', v:exception) 612006ad48bSBram Moolenaar endtry 613006ad48bSBram Moolenaar END 614006ad48bSBram Moolenaar CheckScriptSuccess(lines) 615006ad48bSBram Moolenaarenddef 616006ad48bSBram Moolenaar 617ed677f55SBram Moolenaardef Test_error_in_nested_function() 618ed677f55SBram Moolenaar # an error in a nested :function aborts executin in the calling :def function 619*cfcd011fSBram Moolenaar var lines =<< trim END 620ed677f55SBram Moolenaar vim9script 621ed677f55SBram Moolenaar def Func() 622ed677f55SBram Moolenaar Error() 623ed677f55SBram Moolenaar g:test_var = 1 624ed677f55SBram Moolenaar enddef 625ed677f55SBram Moolenaar func Error() abort 626ed677f55SBram Moolenaar eval [][0] 627ed677f55SBram Moolenaar endfunc 628ed677f55SBram Moolenaar Func() 629ed677f55SBram Moolenaar END 630ed677f55SBram Moolenaar g:test_var = 0 631ed677f55SBram Moolenaar CheckScriptFailure(lines, 'E684:') 632ed677f55SBram Moolenaar assert_equal(0, g:test_var) 633ed677f55SBram Moolenaarenddef 634ed677f55SBram Moolenaar 63537c83711SBram Moolenaardef Test_cexpr_vimscript() 636f5be8cdbSBram Moolenaar # only checks line continuation 63737c83711SBram Moolenaar set errorformat=File\ %f\ line\ %l 638*cfcd011fSBram Moolenaar var lines =<< trim END 63937c83711SBram Moolenaar vim9script 64037c83711SBram Moolenaar cexpr 'File' 64137c83711SBram Moolenaar .. ' someFile' .. 64237c83711SBram Moolenaar ' line 19' 64337c83711SBram Moolenaar assert_equal(19, getqflist()[0].lnum) 64437c83711SBram Moolenaar END 64537c83711SBram Moolenaar CheckScriptSuccess(lines) 64637c83711SBram Moolenaar set errorformat& 64737c83711SBram Moolenaarenddef 64837c83711SBram Moolenaar 649c9edd6b5SBram Moolenaardef Test_statusline_syntax() 650c9edd6b5SBram Moolenaar # legacy syntax is used for 'statusline' 651*cfcd011fSBram Moolenaar var lines =<< trim END 652c9edd6b5SBram Moolenaar vim9script 653c9edd6b5SBram Moolenaar func g:Status() 654c9edd6b5SBram Moolenaar return '%{"x" is# "x"}' 655c9edd6b5SBram Moolenaar endfunc 656c9edd6b5SBram Moolenaar set laststatus=2 statusline=%!Status() 657c9edd6b5SBram Moolenaar redrawstatus 658c9edd6b5SBram Moolenaar set laststatus statusline= 659c9edd6b5SBram Moolenaar END 660c9edd6b5SBram Moolenaar CheckScriptSuccess(lines) 661c9edd6b5SBram Moolenaarenddef 662c9edd6b5SBram Moolenaar 663b209750bSBram Moolenaardef Test_list_vimscript() 664b209750bSBram Moolenaar # checks line continuation and comments 665*cfcd011fSBram Moolenaar var lines =<< trim END 666b209750bSBram Moolenaar vim9script 667*cfcd011fSBram Moolenaar var mylist = [ 668b209750bSBram Moolenaar 'one', 669b209750bSBram Moolenaar # comment 670b209750bSBram Moolenaar 'two', # empty line follows 671b209750bSBram Moolenaar 672b209750bSBram Moolenaar 'three', 673b209750bSBram Moolenaar ] 674b209750bSBram Moolenaar assert_equal(['one', 'two', 'three'], mylist) 675b209750bSBram Moolenaar END 676b209750bSBram Moolenaar CheckScriptSuccess(lines) 67766250c93SBram Moolenaar 67866250c93SBram Moolenaar # check all lines from heredoc are kept 67966250c93SBram Moolenaar lines =<< trim END 68066250c93SBram Moolenaar # comment 1 68166250c93SBram Moolenaar two 68266250c93SBram Moolenaar # comment 3 68366250c93SBram Moolenaar 68466250c93SBram Moolenaar five 68566250c93SBram Moolenaar # comment 6 68666250c93SBram Moolenaar END 68766250c93SBram Moolenaar assert_equal(['# comment 1', 'two', '# comment 3', '', 'five', '# comment 6'], lines) 688b209750bSBram Moolenaarenddef 689b209750bSBram Moolenaar 6902a1381c3SBram Moolenaarif has('channel') 69140ee466cSBram Moolenaar let someJob = test_null_job() 69240ee466cSBram Moolenaar 69340ee466cSBram Moolenaar def FuncWithError() 69440ee466cSBram Moolenaar echomsg g:someJob 69540ee466cSBram Moolenaar enddef 69640ee466cSBram Moolenaar 69740ee466cSBram Moolenaar func Test_convert_emsg_to_exception() 69840ee466cSBram Moolenaar try 69940ee466cSBram Moolenaar call FuncWithError() 70040ee466cSBram Moolenaar catch 70140ee466cSBram Moolenaar call assert_match('Vim:E908:', v:exception) 70240ee466cSBram Moolenaar endtry 70340ee466cSBram Moolenaar endfunc 7042a1381c3SBram Moolenaarendif 70540ee466cSBram Moolenaar 7068a7d6542SBram Moolenaarlet s:export_script_lines =<< trim END 7078a7d6542SBram Moolenaar vim9script 708*cfcd011fSBram Moolenaar var name: string = 'bob' 7098a7d6542SBram Moolenaar def Concat(arg: string): string 7108a7d6542SBram Moolenaar return name .. arg 7118a7d6542SBram Moolenaar enddef 712227a69deSBram Moolenaar g:result = Concat('bie') 713227a69deSBram Moolenaar g:localname = name 7148a7d6542SBram Moolenaar 7158a7d6542SBram Moolenaar export const CONST = 1234 716*cfcd011fSBram Moolenaar export var exported = 9876 717*cfcd011fSBram Moolenaar export var exp_name = 'John' 7188a7d6542SBram Moolenaar export def Exported(): string 7198a7d6542SBram Moolenaar return 'Exported' 7208a7d6542SBram Moolenaar enddef 7218a7d6542SBram MoolenaarEND 7228a7d6542SBram Moolenaar 723b3ca9824SBram Moolenaardef Undo_export_script_lines() 724b3ca9824SBram Moolenaar unlet g:result 725b3ca9824SBram Moolenaar unlet g:localname 726b3ca9824SBram Moolenaarenddef 727b3ca9824SBram Moolenaar 7285269bd2aSBram Moolenaardef Test_vim9_import_export() 729*cfcd011fSBram Moolenaar var import_script_lines =<< trim END 7308a7d6542SBram Moolenaar vim9script 7318a7d6542SBram Moolenaar import {exported, Exported} from './Xexport.vim' 7328a7d6542SBram Moolenaar g:imported = exported 7336e587dcbSBram Moolenaar exported += 3 7346e587dcbSBram Moolenaar g:imported_added = exported 7358a7d6542SBram Moolenaar g:imported_func = Exported() 7366e587dcbSBram Moolenaar 73740f4f7a4SBram Moolenaar def GetExported(): string 738*cfcd011fSBram Moolenaar var local_dict = #{ref: Exported} 73940f4f7a4SBram Moolenaar return local_dict.ref() 74040f4f7a4SBram Moolenaar enddef 74140f4f7a4SBram Moolenaar g:funcref_result = GetExported() 74240f4f7a4SBram Moolenaar 7436e587dcbSBram Moolenaar import {exp_name} from './Xexport.vim' 7446e587dcbSBram Moolenaar g:imported_name = exp_name 7456e587dcbSBram Moolenaar exp_name ..= ' Doe' 7466e587dcbSBram Moolenaar g:imported_name_appended = exp_name 7475381c7a1SBram Moolenaar g:imported_later = exported 7488a7d6542SBram Moolenaar END 7498a7d6542SBram Moolenaar 7508a7d6542SBram Moolenaar writefile(import_script_lines, 'Ximport.vim') 7518a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport.vim') 7528a7d6542SBram Moolenaar 7538a7d6542SBram Moolenaar source Ximport.vim 7548a7d6542SBram Moolenaar 7558a7d6542SBram Moolenaar assert_equal('bobbie', g:result) 7568a7d6542SBram Moolenaar assert_equal('bob', g:localname) 7578a7d6542SBram Moolenaar assert_equal(9876, g:imported) 7586e587dcbSBram Moolenaar assert_equal(9879, g:imported_added) 7595381c7a1SBram Moolenaar assert_equal(9879, g:imported_later) 7608a7d6542SBram Moolenaar assert_equal('Exported', g:imported_func) 76140f4f7a4SBram Moolenaar assert_equal('Exported', g:funcref_result) 7626e587dcbSBram Moolenaar assert_equal('John', g:imported_name) 7636e587dcbSBram Moolenaar assert_equal('John Doe', g:imported_name_appended) 7648a7d6542SBram Moolenaar assert_false(exists('g:name')) 7658a7d6542SBram Moolenaar 766b3ca9824SBram Moolenaar Undo_export_script_lines() 7678a7d6542SBram Moolenaar unlet g:imported 7686e587dcbSBram Moolenaar unlet g:imported_added 7695381c7a1SBram Moolenaar unlet g:imported_later 7708a7d6542SBram Moolenaar unlet g:imported_func 7716e587dcbSBram Moolenaar unlet g:imported_name g:imported_name_appended 7728a7d6542SBram Moolenaar delete('Ximport.vim') 773f2d5c240SBram Moolenaar 7741c991144SBram Moolenaar # similar, with line breaks 775*cfcd011fSBram Moolenaar var import_line_break_script_lines =<< trim END 7761c991144SBram Moolenaar vim9script 7771c991144SBram Moolenaar import { 7781c991144SBram Moolenaar exported, 7791c991144SBram Moolenaar Exported, 7801c991144SBram Moolenaar } 7811c991144SBram Moolenaar from 7821c991144SBram Moolenaar './Xexport.vim' 7831c991144SBram Moolenaar g:imported = exported 7841c991144SBram Moolenaar exported += 5 7851c991144SBram Moolenaar g:imported_added = exported 7861c991144SBram Moolenaar g:imported_func = Exported() 7871c991144SBram Moolenaar END 7881c991144SBram Moolenaar writefile(import_line_break_script_lines, 'Ximport_lbr.vim') 7891c991144SBram Moolenaar source Ximport_lbr.vim 7901c991144SBram Moolenaar 7911c991144SBram Moolenaar assert_equal(9876, g:imported) 7921c991144SBram Moolenaar assert_equal(9881, g:imported_added) 7931c991144SBram Moolenaar assert_equal('Exported', g:imported_func) 7941c991144SBram Moolenaar 7951c991144SBram Moolenaar # exported script not sourced again 7961c991144SBram Moolenaar assert_false(exists('g:result')) 7971c991144SBram Moolenaar unlet g:imported 7981c991144SBram Moolenaar unlet g:imported_added 7991c991144SBram Moolenaar unlet g:imported_func 8001c991144SBram Moolenaar delete('Ximport_lbr.vim') 8011c991144SBram Moolenaar 8021c991144SBram Moolenaar # import inside :def function 803*cfcd011fSBram Moolenaar var import_in_def_lines =<< trim END 8045381c7a1SBram Moolenaar vim9script 8055381c7a1SBram Moolenaar def ImportInDef() 8065381c7a1SBram Moolenaar import exported from './Xexport.vim' 8075381c7a1SBram Moolenaar g:imported = exported 8085381c7a1SBram Moolenaar exported += 7 8095381c7a1SBram Moolenaar g:imported_added = exported 8105381c7a1SBram Moolenaar enddef 8115381c7a1SBram Moolenaar ImportInDef() 8125381c7a1SBram Moolenaar END 8135381c7a1SBram Moolenaar writefile(import_in_def_lines, 'Ximport2.vim') 8145381c7a1SBram Moolenaar source Ximport2.vim 815f5be8cdbSBram Moolenaar # TODO: this should be 9879 8165381c7a1SBram Moolenaar assert_equal(9876, g:imported) 8175381c7a1SBram Moolenaar assert_equal(9883, g:imported_added) 8185381c7a1SBram Moolenaar unlet g:imported 8195381c7a1SBram Moolenaar unlet g:imported_added 8205381c7a1SBram Moolenaar delete('Ximport2.vim') 8215381c7a1SBram Moolenaar 822*cfcd011fSBram Moolenaar var import_star_as_lines =<< trim END 823f2d5c240SBram Moolenaar vim9script 824f2d5c240SBram Moolenaar import * as Export from './Xexport.vim' 825f2d5c240SBram Moolenaar def UseExport() 826f2d5c240SBram Moolenaar g:imported = Export.exported 827f2d5c240SBram Moolenaar enddef 828f2d5c240SBram Moolenaar UseExport() 829f2d5c240SBram Moolenaar END 830f2d5c240SBram Moolenaar writefile(import_star_as_lines, 'Ximport.vim') 831f2d5c240SBram Moolenaar source Ximport.vim 8325381c7a1SBram Moolenaar assert_equal(9883, g:imported) 833f2d5c240SBram Moolenaar 834*cfcd011fSBram Moolenaar var import_star_as_lines_no_dot =<< trim END 835599c89c8SBram Moolenaar vim9script 836599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 837599c89c8SBram Moolenaar def Func() 838*cfcd011fSBram Moolenaar var dummy = 1 839*cfcd011fSBram Moolenaar var imported = Export + dummy 840599c89c8SBram Moolenaar enddef 841822ba247SBram Moolenaar defcompile 842599c89c8SBram Moolenaar END 843599c89c8SBram Moolenaar writefile(import_star_as_lines_no_dot, 'Ximport.vim') 84444d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1060:', '', 2, 'Func') 845599c89c8SBram Moolenaar 846*cfcd011fSBram Moolenaar var import_star_as_lines_dot_space =<< trim END 847599c89c8SBram Moolenaar vim9script 848599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 849599c89c8SBram Moolenaar def Func() 850*cfcd011fSBram Moolenaar var imported = Export . exported 851599c89c8SBram Moolenaar enddef 852822ba247SBram Moolenaar defcompile 853599c89c8SBram Moolenaar END 854599c89c8SBram Moolenaar writefile(import_star_as_lines_dot_space, 'Ximport.vim') 85544d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1074:', '', 1, 'Func') 856599c89c8SBram Moolenaar 857*cfcd011fSBram Moolenaar var import_star_as_lines_missing_name =<< trim END 858599c89c8SBram Moolenaar vim9script 859599c89c8SBram Moolenaar import * as Export from './Xexport.vim' 860599c89c8SBram Moolenaar def Func() 861*cfcd011fSBram Moolenaar var imported = Export. 862599c89c8SBram Moolenaar enddef 863822ba247SBram Moolenaar defcompile 864599c89c8SBram Moolenaar END 865599c89c8SBram Moolenaar writefile(import_star_as_lines_missing_name, 'Ximport.vim') 86644d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1048:', '', 1, 'Func') 867599c89c8SBram Moolenaar 868*cfcd011fSBram Moolenaar var import_star_as_lbr_lines =<< trim END 8691c991144SBram Moolenaar vim9script 8701c991144SBram Moolenaar import * 8711c991144SBram Moolenaar as Export 8721c991144SBram Moolenaar from 8731c991144SBram Moolenaar './Xexport.vim' 8741c991144SBram Moolenaar def UseExport() 8751c991144SBram Moolenaar g:imported = Export.exported 8761c991144SBram Moolenaar enddef 8771c991144SBram Moolenaar UseExport() 8781c991144SBram Moolenaar END 8791c991144SBram Moolenaar writefile(import_star_as_lbr_lines, 'Ximport.vim') 8801c991144SBram Moolenaar source Ximport.vim 8811c991144SBram Moolenaar assert_equal(9883, g:imported) 8821c991144SBram Moolenaar 883*cfcd011fSBram Moolenaar var import_star_lines =<< trim END 884f2d5c240SBram Moolenaar vim9script 885f2d5c240SBram Moolenaar import * from './Xexport.vim' 886f2d5c240SBram Moolenaar END 887f2d5c240SBram Moolenaar writefile(import_star_lines, 'Ximport.vim') 88844d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1045:', '', 2, 'Ximport.vim') 889f2d5c240SBram Moolenaar 890f5be8cdbSBram Moolenaar # try to import something that exists but is not exported 891*cfcd011fSBram Moolenaar var import_not_exported_lines =<< trim END 892fa29c8abSBram Moolenaar vim9script 893fa29c8abSBram Moolenaar import name from './Xexport.vim' 894fa29c8abSBram Moolenaar END 895fa29c8abSBram Moolenaar writefile(import_not_exported_lines, 'Ximport.vim') 89644d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1049:', '', 2, 'Ximport.vim') 897fa29c8abSBram Moolenaar 898f5be8cdbSBram Moolenaar # try to import something that is already defined 899*cfcd011fSBram Moolenaar var import_already_defined =<< trim END 9005269bd2aSBram Moolenaar vim9script 901*cfcd011fSBram Moolenaar var exported = 'something' 9025269bd2aSBram Moolenaar import exported from './Xexport.vim' 9035269bd2aSBram Moolenaar END 9045269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 90544d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:', '', 3, 'Ximport.vim') 9065269bd2aSBram Moolenaar 907f5be8cdbSBram Moolenaar # try to import something that is already defined 9085269bd2aSBram Moolenaar import_already_defined =<< trim END 9095269bd2aSBram Moolenaar vim9script 910*cfcd011fSBram Moolenaar var exported = 'something' 9115269bd2aSBram Moolenaar import * as exported from './Xexport.vim' 9125269bd2aSBram Moolenaar END 9135269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 91444d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:', '', 3, 'Ximport.vim') 9155269bd2aSBram Moolenaar 916f5be8cdbSBram Moolenaar # try to import something that is already defined 9175269bd2aSBram Moolenaar import_already_defined =<< trim END 9185269bd2aSBram Moolenaar vim9script 919*cfcd011fSBram Moolenaar var exported = 'something' 9205269bd2aSBram Moolenaar import {exported} from './Xexport.vim' 9215269bd2aSBram Moolenaar END 9225269bd2aSBram Moolenaar writefile(import_already_defined, 'Ximport.vim') 92344d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1073:', '', 3, 'Ximport.vim') 9245269bd2aSBram Moolenaar 925f5be8cdbSBram Moolenaar # import a very long name, requires making a copy 926*cfcd011fSBram Moolenaar var import_long_name_lines =<< trim END 927fa29c8abSBram Moolenaar vim9script 928fa29c8abSBram Moolenaar import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim' 929fa29c8abSBram Moolenaar END 930fa29c8abSBram Moolenaar writefile(import_long_name_lines, 'Ximport.vim') 93144d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1048:', '', 2, 'Ximport.vim') 932fa29c8abSBram Moolenaar 933*cfcd011fSBram Moolenaar var import_no_from_lines =<< trim END 934fa29c8abSBram Moolenaar vim9script 935fa29c8abSBram Moolenaar import name './Xexport.vim' 936fa29c8abSBram Moolenaar END 937fa29c8abSBram Moolenaar writefile(import_no_from_lines, 'Ximport.vim') 93844d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1070:', '', 2, 'Ximport.vim') 939fa29c8abSBram Moolenaar 940*cfcd011fSBram Moolenaar var import_invalid_string_lines =<< trim END 941fa29c8abSBram Moolenaar vim9script 942fa29c8abSBram Moolenaar import name from Xexport.vim 943fa29c8abSBram Moolenaar END 944fa29c8abSBram Moolenaar writefile(import_invalid_string_lines, 'Ximport.vim') 94544d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1071:', '', 2, 'Ximport.vim') 946fa29c8abSBram Moolenaar 947*cfcd011fSBram Moolenaar var import_wrong_name_lines =<< trim END 948fa29c8abSBram Moolenaar vim9script 949fa29c8abSBram Moolenaar import name from './XnoExport.vim' 950fa29c8abSBram Moolenaar END 951fa29c8abSBram Moolenaar writefile(import_wrong_name_lines, 'Ximport.vim') 95244d6652dSBram Moolenaar assert_fails('source Ximport.vim', 'E1053:', '', 2, 'Ximport.vim') 953fa29c8abSBram Moolenaar 954*cfcd011fSBram Moolenaar var import_missing_comma_lines =<< trim END 955fa29c8abSBram Moolenaar vim9script 956fa29c8abSBram Moolenaar import {exported name} from './Xexport.vim' 957fa29c8abSBram Moolenaar END 9585269bd2aSBram Moolenaar writefile(import_missing_comma_lines, 'Ximport3.vim') 95944d6652dSBram Moolenaar assert_fails('source Ximport3.vim', 'E1046:', '', 2, 'Ximport3.vim') 960fa29c8abSBram Moolenaar 961f2d5c240SBram Moolenaar delete('Ximport.vim') 9625269bd2aSBram Moolenaar delete('Ximport3.vim') 9638a7d6542SBram Moolenaar delete('Xexport.vim') 9648a7d6542SBram Moolenaar 965f5be8cdbSBram Moolenaar # Check that in a Vim9 script 'cpo' is set to the Vim default. 966750802b5SBram Moolenaar set cpo&vi 967*cfcd011fSBram Moolenaar var cpo_before = &cpo 968*cfcd011fSBram Moolenaar var lines =<< trim END 969750802b5SBram Moolenaar vim9script 970750802b5SBram Moolenaar g:cpo_in_vim9script = &cpo 971750802b5SBram Moolenaar END 972750802b5SBram Moolenaar writefile(lines, 'Xvim9_script') 973750802b5SBram Moolenaar source Xvim9_script 974750802b5SBram Moolenaar assert_equal(cpo_before, &cpo) 975750802b5SBram Moolenaar set cpo&vim 976750802b5SBram Moolenaar assert_equal(&cpo, g:cpo_in_vim9script) 977750802b5SBram Moolenaar delete('Xvim9_script') 978750802b5SBram Moolenaarenddef 979750802b5SBram Moolenaar 980803af686SBram Moolenaarfunc g:Trigger() 981803af686SBram Moolenaar source Ximport.vim 982803af686SBram Moolenaar return "echo 'yes'\<CR>" 983803af686SBram Moolenaarendfunc 984803af686SBram Moolenaar 985803af686SBram Moolenaardef Test_import_export_expr_map() 986803af686SBram Moolenaar # check that :import and :export work when buffer is locked 987*cfcd011fSBram Moolenaar var export_lines =<< trim END 988803af686SBram Moolenaar vim9script 989803af686SBram Moolenaar export def That(): string 990803af686SBram Moolenaar return 'yes' 991803af686SBram Moolenaar enddef 992803af686SBram Moolenaar END 993803af686SBram Moolenaar writefile(export_lines, 'Xexport_that.vim') 994803af686SBram Moolenaar 995*cfcd011fSBram Moolenaar var import_lines =<< trim END 996803af686SBram Moolenaar vim9script 997803af686SBram Moolenaar import That from './Xexport_that.vim' 998803af686SBram Moolenaar assert_equal('yes', That()) 999803af686SBram Moolenaar END 1000803af686SBram Moolenaar writefile(import_lines, 'Ximport.vim') 1001803af686SBram Moolenaar 1002803af686SBram Moolenaar nnoremap <expr> trigger g:Trigger() 1003803af686SBram Moolenaar feedkeys('trigger', "xt") 1004803af686SBram Moolenaar 1005730b2483SBram Moolenaar delete('Xexport_that.vim') 1006803af686SBram Moolenaar delete('Ximport.vim') 1007803af686SBram Moolenaar nunmap trigger 1008803af686SBram Moolenaarenddef 1009803af686SBram Moolenaar 10108e1986e3SBram Moolenaardef Test_import_in_filetype() 10118e1986e3SBram Moolenaar # check that :import works when the buffer is locked 10128e1986e3SBram Moolenaar mkdir('ftplugin', 'p') 1013*cfcd011fSBram Moolenaar var export_lines =<< trim END 10148e1986e3SBram Moolenaar vim9script 1015*cfcd011fSBram Moolenaar export var That = 'yes' 10168e1986e3SBram Moolenaar END 1017730b2483SBram Moolenaar writefile(export_lines, 'ftplugin/Xexport_ft.vim') 10188e1986e3SBram Moolenaar 1019*cfcd011fSBram Moolenaar var import_lines =<< trim END 10208e1986e3SBram Moolenaar vim9script 1021730b2483SBram Moolenaar import That from './Xexport_ft.vim' 10228e1986e3SBram Moolenaar assert_equal('yes', That) 10238e1986e3SBram Moolenaar g:did_load_mytpe = 1 10248e1986e3SBram Moolenaar END 10258e1986e3SBram Moolenaar writefile(import_lines, 'ftplugin/qf.vim') 10268e1986e3SBram Moolenaar 1027*cfcd011fSBram Moolenaar var save_rtp = &rtp 10288e1986e3SBram Moolenaar &rtp = getcwd() .. ',' .. &rtp 10298e1986e3SBram Moolenaar 10308e1986e3SBram Moolenaar filetype plugin on 10318e1986e3SBram Moolenaar copen 10328e1986e3SBram Moolenaar assert_equal(1, g:did_load_mytpe) 10338e1986e3SBram Moolenaar 10348e1986e3SBram Moolenaar quit! 1035730b2483SBram Moolenaar delete('Xexport_ft.vim') 10368e1986e3SBram Moolenaar delete('ftplugin', 'rf') 10378e1986e3SBram Moolenaar &rtp = save_rtp 10388e1986e3SBram Moolenaarenddef 10398e1986e3SBram Moolenaar 1040efa94447SBram Moolenaardef Test_use_import_in_mapping() 1041*cfcd011fSBram Moolenaar var lines =<< trim END 1042efa94447SBram Moolenaar vim9script 1043efa94447SBram Moolenaar export def Funcx() 1044efa94447SBram Moolenaar g:result = 42 1045efa94447SBram Moolenaar enddef 1046efa94447SBram Moolenaar END 1047efa94447SBram Moolenaar writefile(lines, 'XsomeExport.vim') 1048efa94447SBram Moolenaar lines =<< trim END 1049efa94447SBram Moolenaar vim9script 1050efa94447SBram Moolenaar import Funcx from './XsomeExport.vim' 1051b3ca9824SBram Moolenaar nnoremap <F3> :call <sid>Funcx()<cr> 1052efa94447SBram Moolenaar END 1053efa94447SBram Moolenaar writefile(lines, 'Xmapscript.vim') 1054efa94447SBram Moolenaar 1055efa94447SBram Moolenaar source Xmapscript.vim 1056b3ca9824SBram Moolenaar feedkeys("\<F3>", "xt") 1057efa94447SBram Moolenaar assert_equal(42, g:result) 1058efa94447SBram Moolenaar 1059efa94447SBram Moolenaar unlet g:result 1060efa94447SBram Moolenaar delete('XsomeExport.vim') 1061efa94447SBram Moolenaar delete('Xmapscript.vim') 1062b3ca9824SBram Moolenaar nunmap <F3> 1063efa94447SBram Moolenaarenddef 1064efa94447SBram Moolenaar 1065750802b5SBram Moolenaardef Test_vim9script_fails() 10668a7d6542SBram Moolenaar CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:') 10678a7d6542SBram Moolenaar CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:') 1068*cfcd011fSBram Moolenaar CheckScriptFailure(['export var some = 123'], 'E1042:') 10699721fb4eSBram Moolenaar CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1048:') 1070*cfcd011fSBram Moolenaar CheckScriptFailure(['vim9script', 'export var g:some'], 'E1022:') 1071750802b5SBram Moolenaar CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:') 1072750802b5SBram Moolenaar 1073*cfcd011fSBram Moolenaar CheckScriptFailure(['vim9script', 'var str: string', 'str = 1234'], 'E1012:') 1074c785b9a7SBram Moolenaar CheckScriptFailure(['vim9script', 'const str = "asdf"', 'str = "xxx"'], 'E46:') 1075c785b9a7SBram Moolenaar 1076e2e4075fSBram Moolenaar assert_fails('vim9script', 'E1038:') 1077e2e4075fSBram Moolenaar assert_fails('export something', 'E1043:') 10788a7d6542SBram Moolenaarenddef 10798a7d6542SBram Moolenaar 1080f7d267efSBram Moolenaarfunc Test_import_fails_without_script() 1081101f4810SBram Moolenaar CheckRunVimInTerminal 1082101f4810SBram Moolenaar 10839bb3eb3eSBram Moolenaar " call indirectly to avoid compilation error for missing functions 1084c620c055SBram Moolenaar call Run_Test_import_fails_on_command_line() 10859bb3eb3eSBram Moolenaarendfunc 10869bb3eb3eSBram Moolenaar 1087c620c055SBram Moolenaardef Run_Test_import_fails_on_command_line() 1088*cfcd011fSBram Moolenaar var export =<< trim END 1089101f4810SBram Moolenaar vim9script 1090101f4810SBram Moolenaar export def Foo(): number 1091101f4810SBram Moolenaar return 0 1092101f4810SBram Moolenaar enddef 1093101f4810SBram Moolenaar END 1094730b2483SBram Moolenaar writefile(export, 'XexportCmd.vim') 1095101f4810SBram Moolenaar 1096*cfcd011fSBram Moolenaar var buf = RunVimInTerminal('-c "import Foo from ''./XexportCmd.vim''"', #{ 10979bb3eb3eSBram Moolenaar rows: 6, wait_for_ruler: 0}) 10989bb3eb3eSBram Moolenaar WaitForAssert({-> assert_match('^E1094:', term_getline(buf, 5))}) 1099101f4810SBram Moolenaar 1100730b2483SBram Moolenaar delete('XexportCmd.vim') 11019bb3eb3eSBram Moolenaar StopVimInTerminal(buf) 11029bb3eb3eSBram Moolenaarenddef 1103101f4810SBram Moolenaar 11044c17ad94SBram Moolenaardef Test_vim9script_reload_import() 1105*cfcd011fSBram Moolenaar var lines =<< trim END 11068a7d6542SBram Moolenaar vim9script 11078a7d6542SBram Moolenaar const var = '' 1108*cfcd011fSBram Moolenaar var valone = 1234 11098a7d6542SBram Moolenaar def MyFunc(arg: string) 11108a7d6542SBram Moolenaar valone = 5678 11118a7d6542SBram Moolenaar enddef 11128a7d6542SBram Moolenaar END 1113*cfcd011fSBram Moolenaar var morelines =<< trim END 1114*cfcd011fSBram Moolenaar var valtwo = 222 11158a7d6542SBram Moolenaar export def GetValtwo(): number 11168a7d6542SBram Moolenaar return valtwo 11178a7d6542SBram Moolenaar enddef 11188a7d6542SBram Moolenaar END 111903afdcf1SBram Moolenaar writefile(lines + morelines, 'Xreload.vim') 11208a7d6542SBram Moolenaar source Xreload.vim 11218a7d6542SBram Moolenaar source Xreload.vim 11228a7d6542SBram Moolenaar source Xreload.vim 11238a7d6542SBram Moolenaar 1124*cfcd011fSBram Moolenaar var testlines =<< trim END 11258a7d6542SBram Moolenaar vim9script 11268a7d6542SBram Moolenaar def TheFunc() 11278a7d6542SBram Moolenaar import GetValtwo from './Xreload.vim' 11288a7d6542SBram Moolenaar assert_equal(222, GetValtwo()) 11298a7d6542SBram Moolenaar enddef 11308a7d6542SBram Moolenaar TheFunc() 11318a7d6542SBram Moolenaar END 11328a7d6542SBram Moolenaar writefile(testlines, 'Ximport.vim') 11338a7d6542SBram Moolenaar source Ximport.vim 11348a7d6542SBram Moolenaar 1135f5be8cdbSBram Moolenaar # Test that when not using "morelines" GetValtwo() and valtwo are still 1136f5be8cdbSBram Moolenaar # defined, because import doesn't reload a script. 11378a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 11388a7d6542SBram Moolenaar source Ximport.vim 11398a7d6542SBram Moolenaar 1140f5be8cdbSBram Moolenaar # cannot declare a var twice 11418a7d6542SBram Moolenaar lines =<< trim END 11428a7d6542SBram Moolenaar vim9script 1143*cfcd011fSBram Moolenaar var valone = 1234 1144*cfcd011fSBram Moolenaar var valone = 5678 11458a7d6542SBram Moolenaar END 11468a7d6542SBram Moolenaar writefile(lines, 'Xreload.vim') 114744d6652dSBram Moolenaar assert_fails('source Xreload.vim', 'E1041:', '', 3, 'Xreload.vim') 11488a7d6542SBram Moolenaar 11498a7d6542SBram Moolenaar delete('Xreload.vim') 11508a7d6542SBram Moolenaar delete('Ximport.vim') 11518a7d6542SBram Moolenaarenddef 11528a7d6542SBram Moolenaar 115395006e3dSBram Moolenaardef s:RetSome(): string 115495006e3dSBram Moolenaar return 'some' 115595006e3dSBram Moolenaarenddef 115695006e3dSBram Moolenaar 1157fe465a01SBram Moolenaar" Not exported function that is referenced needs to be accessed by the 1158fe465a01SBram Moolenaar" script-local name. 1159fe465a01SBram Moolenaardef Test_vim9script_funcref() 1160*cfcd011fSBram Moolenaar var sortlines =<< trim END 1161fe465a01SBram Moolenaar vim9script 1162fe465a01SBram Moolenaar def Compare(i1: number, i2: number): number 1163bed36b93SBram Moolenaar return i2 - i1 1164fe465a01SBram Moolenaar enddef 1165fe465a01SBram Moolenaar 1166fe465a01SBram Moolenaar export def FastSort(): list<number> 1167fe465a01SBram Moolenaar return range(5)->sort(Compare) 1168fe465a01SBram Moolenaar enddef 1169fe465a01SBram Moolenaar END 1170fe465a01SBram Moolenaar writefile(sortlines, 'Xsort.vim') 1171fe465a01SBram Moolenaar 1172*cfcd011fSBram Moolenaar var lines =<< trim END 1173fe465a01SBram Moolenaar vim9script 1174fe465a01SBram Moolenaar import FastSort from './Xsort.vim' 1175fe465a01SBram Moolenaar def Test() 1176fe465a01SBram Moolenaar g:result = FastSort() 1177fe465a01SBram Moolenaar enddef 1178fe465a01SBram Moolenaar Test() 1179fe465a01SBram Moolenaar END 1180fe465a01SBram Moolenaar writefile(lines, 'Xscript.vim') 1181fe465a01SBram Moolenaar 1182fe465a01SBram Moolenaar source Xscript.vim 1183fe465a01SBram Moolenaar assert_equal([4, 3, 2, 1, 0], g:result) 1184fe465a01SBram Moolenaar 1185fe465a01SBram Moolenaar unlet g:result 1186fe465a01SBram Moolenaar delete('Xsort.vim') 1187fe465a01SBram Moolenaar delete('Xscript.vim') 118895006e3dSBram Moolenaar 1189*cfcd011fSBram Moolenaar var Funcref = function('s:RetSome') 119095006e3dSBram Moolenaar assert_equal('some', Funcref()) 1191fe465a01SBram Moolenaarenddef 1192fe465a01SBram Moolenaar 1193601e76acSBram Moolenaar" Check that when searching for "FilterFunc" it finds the import in the 1194601e76acSBram Moolenaar" script where FastFilter() is called from, both as a string and as a direct 1195601e76acSBram Moolenaar" function reference. 1196c620c055SBram Moolenaardef Test_vim9script_funcref_other_script() 1197*cfcd011fSBram Moolenaar var filterLines =<< trim END 1198c620c055SBram Moolenaar vim9script 1199c620c055SBram Moolenaar export def FilterFunc(idx: number, val: number): bool 1200c620c055SBram Moolenaar return idx % 2 == 1 1201c620c055SBram Moolenaar enddef 1202c620c055SBram Moolenaar export def FastFilter(): list<number> 1203c620c055SBram Moolenaar return range(10)->filter('FilterFunc') 1204c620c055SBram Moolenaar enddef 1205601e76acSBram Moolenaar export def FastFilterDirect(): list<number> 1206601e76acSBram Moolenaar return range(10)->filter(FilterFunc) 1207601e76acSBram Moolenaar enddef 1208c620c055SBram Moolenaar END 1209c620c055SBram Moolenaar writefile(filterLines, 'Xfilter.vim') 1210c620c055SBram Moolenaar 1211*cfcd011fSBram Moolenaar var lines =<< trim END 1212c620c055SBram Moolenaar vim9script 1213601e76acSBram Moolenaar import {FilterFunc, FastFilter, FastFilterDirect} from './Xfilter.vim' 1214c620c055SBram Moolenaar def Test() 1215*cfcd011fSBram Moolenaar var x: list<number> = FastFilter() 1216c620c055SBram Moolenaar enddef 1217c620c055SBram Moolenaar Test() 1218601e76acSBram Moolenaar def TestDirect() 1219*cfcd011fSBram Moolenaar var x: list<number> = FastFilterDirect() 1220601e76acSBram Moolenaar enddef 1221601e76acSBram Moolenaar TestDirect() 1222c620c055SBram Moolenaar END 1223601e76acSBram Moolenaar CheckScriptSuccess(lines) 1224c620c055SBram Moolenaar delete('Xfilter.vim') 1225c620c055SBram Moolenaarenddef 1226c620c055SBram Moolenaar 12274c17ad94SBram Moolenaardef Test_vim9script_reload_delfunc() 1228*cfcd011fSBram Moolenaar var first_lines =<< trim END 12294c17ad94SBram Moolenaar vim9script 12304c17ad94SBram Moolenaar def FuncYes(): string 12314c17ad94SBram Moolenaar return 'yes' 12324c17ad94SBram Moolenaar enddef 12334c17ad94SBram Moolenaar END 1234*cfcd011fSBram Moolenaar var withno_lines =<< trim END 12354c17ad94SBram Moolenaar def FuncNo(): string 12364c17ad94SBram Moolenaar return 'no' 12374c17ad94SBram Moolenaar enddef 12384c17ad94SBram Moolenaar def g:DoCheck(no_exists: bool) 12394c17ad94SBram Moolenaar assert_equal('yes', FuncYes()) 12404c17ad94SBram Moolenaar assert_equal('no', FuncNo()) 124103afdcf1SBram Moolenaar enddef 124203afdcf1SBram Moolenaar END 1243*cfcd011fSBram Moolenaar var nono_lines =<< trim END 124403afdcf1SBram Moolenaar def g:DoCheck(no_exists: bool) 124503afdcf1SBram Moolenaar assert_equal('yes', FuncYes()) 124644d6652dSBram Moolenaar assert_fails('FuncNo()', 'E117:', '', 2, 'DoCheck') 12474c17ad94SBram Moolenaar enddef 12484c17ad94SBram Moolenaar END 12494c17ad94SBram Moolenaar 12504c17ad94SBram Moolenaar # FuncNo() is defined 125103afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 12524c17ad94SBram Moolenaar source Xreloaded.vim 12534c17ad94SBram Moolenaar g:DoCheck(true) 12544c17ad94SBram Moolenaar 12554c17ad94SBram Moolenaar # FuncNo() is not redefined 125603afdcf1SBram Moolenaar writefile(first_lines + nono_lines, 'Xreloaded.vim') 12574c17ad94SBram Moolenaar source Xreloaded.vim 125803afdcf1SBram Moolenaar g:DoCheck() 12594c17ad94SBram Moolenaar 12604c17ad94SBram Moolenaar # FuncNo() is back 126103afdcf1SBram Moolenaar writefile(first_lines + withno_lines, 'Xreloaded.vim') 12624c17ad94SBram Moolenaar source Xreloaded.vim 126303afdcf1SBram Moolenaar g:DoCheck() 12644c17ad94SBram Moolenaar 12654c17ad94SBram Moolenaar delete('Xreloaded.vim') 12664c17ad94SBram Moolenaarenddef 12674c17ad94SBram Moolenaar 126889483d40SBram Moolenaardef Test_vim9script_reload_delvar() 126989483d40SBram Moolenaar # write the script with a script-local variable 1270*cfcd011fSBram Moolenaar var lines =<< trim END 127189483d40SBram Moolenaar vim9script 1272*cfcd011fSBram Moolenaar var name = 'string' 127389483d40SBram Moolenaar END 127489483d40SBram Moolenaar writefile(lines, 'XreloadVar.vim') 127589483d40SBram Moolenaar source XreloadVar.vim 127689483d40SBram Moolenaar 127789483d40SBram Moolenaar # now write the script using the same variable locally - works 127889483d40SBram Moolenaar lines =<< trim END 127989483d40SBram Moolenaar vim9script 128089483d40SBram Moolenaar def Func() 1281*cfcd011fSBram Moolenaar var name = 'string' 128289483d40SBram Moolenaar enddef 128389483d40SBram Moolenaar END 128489483d40SBram Moolenaar writefile(lines, 'XreloadVar.vim') 128589483d40SBram Moolenaar source XreloadVar.vim 128689483d40SBram Moolenaar 128789483d40SBram Moolenaar delete('XreloadVar.vim') 128889483d40SBram Moolenaarenddef 128989483d40SBram Moolenaar 12908a7d6542SBram Moolenaardef Test_import_absolute() 1291*cfcd011fSBram Moolenaar var import_lines = [ 1292e6085c53SBram Moolenaar 'vim9script', 1293e6085c53SBram Moolenaar 'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"', 1294e6085c53SBram Moolenaar 'def UseExported()', 1295e6085c53SBram Moolenaar ' g:imported_abs = exported', 1296e6085c53SBram Moolenaar ' exported = 8888', 1297e6085c53SBram Moolenaar ' g:imported_after = exported', 1298e6085c53SBram Moolenaar 'enddef', 1299e6085c53SBram Moolenaar 'UseExported()', 1300e6085c53SBram Moolenaar 'g:import_disassembled = execute("disass UseExported")', 1301e6085c53SBram Moolenaar ] 13028a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_abs.vim') 13038a7d6542SBram Moolenaar writefile(s:export_script_lines, 'Xexport_abs.vim') 13048a7d6542SBram Moolenaar 13058a7d6542SBram Moolenaar source Ximport_abs.vim 13068a7d6542SBram Moolenaar 13078a7d6542SBram Moolenaar assert_equal(9876, g:imported_abs) 13084e12a5dfSBram Moolenaar assert_equal(8888, g:imported_after) 1309675f716eSBram Moolenaar assert_match('<SNR>\d\+_UseExported.*' .. 1310675f716eSBram Moolenaar 'g:imported_abs = exported.*' .. 1311675f716eSBram Moolenaar '0 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 1312675f716eSBram Moolenaar '1 STOREG g:imported_abs.*' .. 1313675f716eSBram Moolenaar 'exported = 8888.*' .. 1314675f716eSBram Moolenaar '3 STORESCRIPT exported in .*Xexport_abs.vim.*' .. 1315675f716eSBram Moolenaar 'g:imported_after = exported.*' .. 1316675f716eSBram Moolenaar '4 LOADSCRIPT exported from .*Xexport_abs.vim.*' .. 1317675f716eSBram Moolenaar '5 STOREG g:imported_after.*', 1318e6085c53SBram Moolenaar g:import_disassembled) 1319b3ca9824SBram Moolenaar 1320b3ca9824SBram Moolenaar Undo_export_script_lines() 13218a7d6542SBram Moolenaar unlet g:imported_abs 13224e12a5dfSBram Moolenaar unlet g:import_disassembled 13238a7d6542SBram Moolenaar 13248a7d6542SBram Moolenaar delete('Ximport_abs.vim') 13258a7d6542SBram Moolenaar delete('Xexport_abs.vim') 13268a7d6542SBram Moolenaarenddef 13278a7d6542SBram Moolenaar 13288a7d6542SBram Moolenaardef Test_import_rtp() 1329*cfcd011fSBram Moolenaar var import_lines = [ 1330e6085c53SBram Moolenaar 'vim9script', 1331e6085c53SBram Moolenaar 'import exported from "Xexport_rtp.vim"', 1332e6085c53SBram Moolenaar 'g:imported_rtp = exported', 1333e6085c53SBram Moolenaar ] 13348a7d6542SBram Moolenaar writefile(import_lines, 'Ximport_rtp.vim') 13358a7d6542SBram Moolenaar mkdir('import') 13368a7d6542SBram Moolenaar writefile(s:export_script_lines, 'import/Xexport_rtp.vim') 13378a7d6542SBram Moolenaar 1338*cfcd011fSBram Moolenaar var save_rtp = &rtp 13398a7d6542SBram Moolenaar &rtp = getcwd() 13408a7d6542SBram Moolenaar source Ximport_rtp.vim 13418a7d6542SBram Moolenaar &rtp = save_rtp 13428a7d6542SBram Moolenaar 13438a7d6542SBram Moolenaar assert_equal(9876, g:imported_rtp) 13448a7d6542SBram Moolenaar 1345b3ca9824SBram Moolenaar Undo_export_script_lines() 1346b3ca9824SBram Moolenaar unlet g:imported_rtp 13478a7d6542SBram Moolenaar delete('Ximport_rtp.vim') 134889483d40SBram Moolenaar delete('import', 'rf') 13498a7d6542SBram Moolenaarenddef 13508a7d6542SBram Moolenaar 135125e0f586SBram Moolenaardef Test_import_compile_error() 1352*cfcd011fSBram Moolenaar var export_lines = [ 135325e0f586SBram Moolenaar 'vim9script', 135425e0f586SBram Moolenaar 'export def ExpFunc(): string', 135525e0f586SBram Moolenaar ' return notDefined', 135625e0f586SBram Moolenaar 'enddef', 135725e0f586SBram Moolenaar ] 135825e0f586SBram Moolenaar writefile(export_lines, 'Xexported.vim') 135925e0f586SBram Moolenaar 1360*cfcd011fSBram Moolenaar var import_lines = [ 136125e0f586SBram Moolenaar 'vim9script', 136225e0f586SBram Moolenaar 'import ExpFunc from "./Xexported.vim"', 136325e0f586SBram Moolenaar 'def ImpFunc()', 136425e0f586SBram Moolenaar ' echo ExpFunc()', 136525e0f586SBram Moolenaar 'enddef', 136625e0f586SBram Moolenaar 'defcompile', 136725e0f586SBram Moolenaar ] 136825e0f586SBram Moolenaar writefile(import_lines, 'Ximport.vim') 136925e0f586SBram Moolenaar 137025e0f586SBram Moolenaar try 137125e0f586SBram Moolenaar source Ximport.vim 137225e0f586SBram Moolenaar catch /E1001/ 1373f5be8cdbSBram Moolenaar # Error should be fore the Xexported.vim file. 13747707228aSBram Moolenaar assert_match('E1001: Variable not found: notDefined', v:exception) 137525e0f586SBram Moolenaar assert_match('function <SNR>\d\+_ImpFunc\[1\]..<SNR>\d\+_ExpFunc, line 1', v:throwpoint) 137625e0f586SBram Moolenaar endtry 137725e0f586SBram Moolenaar 137825e0f586SBram Moolenaar delete('Xexported.vim') 137925e0f586SBram Moolenaar delete('Ximport.vim') 138025e0f586SBram Moolenaarenddef 138125e0f586SBram Moolenaar 1382c4ce36d4SBram Moolenaardef Test_func_redefine_error() 1383*cfcd011fSBram Moolenaar var lines = [ 1384c4ce36d4SBram Moolenaar 'vim9script', 1385c4ce36d4SBram Moolenaar 'def Func()', 1386c4ce36d4SBram Moolenaar ' eval [][0]', 1387c4ce36d4SBram Moolenaar 'enddef', 1388c4ce36d4SBram Moolenaar 'Func()', 1389c4ce36d4SBram Moolenaar ] 1390c4ce36d4SBram Moolenaar writefile(lines, 'Xtestscript.vim') 1391c4ce36d4SBram Moolenaar 1392c4ce36d4SBram Moolenaar for count in range(3) 1393c4ce36d4SBram Moolenaar try 1394c4ce36d4SBram Moolenaar source Xtestscript.vim 1395c4ce36d4SBram Moolenaar catch /E684/ 1396c4ce36d4SBram Moolenaar # function name should contain <SNR> every time 1397c4ce36d4SBram Moolenaar assert_match('E684: list index out of range', v:exception) 1398c4ce36d4SBram Moolenaar assert_match('function <SNR>\d\+_Func, line 1', v:throwpoint) 1399c4ce36d4SBram Moolenaar endtry 1400c4ce36d4SBram Moolenaar endfor 1401c4ce36d4SBram Moolenaar 1402c4ce36d4SBram Moolenaar delete('Xtestscript.vim') 1403c4ce36d4SBram Moolenaarenddef 1404c4ce36d4SBram Moolenaar 1405eef2102eSBram Moolenaardef Test_func_overrules_import_fails() 1406*cfcd011fSBram Moolenaar var export_lines =<< trim END 1407eef2102eSBram Moolenaar vim9script 1408eef2102eSBram Moolenaar export def Func() 1409eef2102eSBram Moolenaar echo 'imported' 1410eef2102eSBram Moolenaar enddef 1411eef2102eSBram Moolenaar END 1412eef2102eSBram Moolenaar writefile(export_lines, 'XexportedFunc.vim') 1413eef2102eSBram Moolenaar 1414*cfcd011fSBram Moolenaar var lines =<< trim END 1415eef2102eSBram Moolenaar vim9script 1416eef2102eSBram Moolenaar import Func from './XexportedFunc.vim' 1417eef2102eSBram Moolenaar def Func() 1418eef2102eSBram Moolenaar echo 'local to function' 1419eef2102eSBram Moolenaar enddef 1420eef2102eSBram Moolenaar END 1421eef2102eSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1422eef2102eSBram Moolenaar 1423eef2102eSBram Moolenaar lines =<< trim END 1424eef2102eSBram Moolenaar vim9script 1425eef2102eSBram Moolenaar import Func from './XexportedFunc.vim' 1426eef2102eSBram Moolenaar def Outer() 1427eef2102eSBram Moolenaar def Func() 1428eef2102eSBram Moolenaar echo 'local to function' 1429eef2102eSBram Moolenaar enddef 1430eef2102eSBram Moolenaar enddef 1431eef2102eSBram Moolenaar defcompile 1432eef2102eSBram Moolenaar END 1433eef2102eSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1434eef2102eSBram Moolenaar 1435eef2102eSBram Moolenaar delete('XexportedFunc.vim') 1436eef2102eSBram Moolenaarenddef 1437eef2102eSBram Moolenaar 1438b9a2cac3SBram Moolenaardef Test_func_redefine_fails() 1439*cfcd011fSBram Moolenaar var lines =<< trim END 1440b9a2cac3SBram Moolenaar vim9script 1441b9a2cac3SBram Moolenaar def Func() 1442b9a2cac3SBram Moolenaar echo 'one' 1443b9a2cac3SBram Moolenaar enddef 1444b9a2cac3SBram Moolenaar def Func() 1445b9a2cac3SBram Moolenaar echo 'two' 1446b9a2cac3SBram Moolenaar enddef 1447b9a2cac3SBram Moolenaar END 1448b9a2cac3SBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1449fa211f3cSBram Moolenaar 1450fa211f3cSBram Moolenaar lines =<< trim END 1451fa211f3cSBram Moolenaar vim9script 1452fa211f3cSBram Moolenaar def Foo(): string 1453fa211f3cSBram Moolenaar return 'foo' 1454fa211f3cSBram Moolenaar enddef 1455fa211f3cSBram Moolenaar def Func() 1456*cfcd011fSBram Moolenaar var Foo = {-> 'lambda'} 1457fa211f3cSBram Moolenaar enddef 1458fa211f3cSBram Moolenaar defcompile 1459fa211f3cSBram Moolenaar END 1460fa211f3cSBram Moolenaar CheckScriptFailure(lines, 'E1073:') 1461b9a2cac3SBram Moolenaarenddef 1462b9a2cac3SBram Moolenaar 14638a7d6542SBram Moolenaardef Test_fixed_size_list() 1464f5be8cdbSBram Moolenaar # will be allocated as one piece of memory, check that changes work 1465*cfcd011fSBram Moolenaar var l = [1, 2, 3, 4] 14668a7d6542SBram Moolenaar l->remove(0) 14678a7d6542SBram Moolenaar l->add(5) 14688a7d6542SBram Moolenaar l->insert(99, 1) 14690f18b6d1SBram Moolenaar assert_equal([2, 99, 3, 4, 5], l) 14708a7d6542SBram Moolenaarenddef 14718a7d6542SBram Moolenaar 1472ae616494SBram Moolenaardef Test_no_insert_xit() 1473d2c61705SBram Moolenaar CheckDefExecFailure(['a = 1'], 'E1100:') 1474d2c61705SBram Moolenaar CheckDefExecFailure(['c = 1'], 'E1100:') 1475d2c61705SBram Moolenaar CheckDefExecFailure(['i = 1'], 'E1100:') 1476d2c61705SBram Moolenaar CheckDefExecFailure(['t = 1'], 'E1100:') 1477d2c61705SBram Moolenaar CheckDefExecFailure(['x = 1'], 'E1100:') 1478ae616494SBram Moolenaar 1479ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'a = 1'], 'E488:') 1480ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'a'], 'E1100:') 1481ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'c = 1'], 'E488:') 1482ae616494SBram Moolenaar CheckScriptFailure(['vim9script', 'c'], 'E1100:') 1483f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'i = 1'], 'E488:') 1484f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'i'], 'E1100:') 1485f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 't'], 'E1100:') 1486f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 't = 1'], 'E1100:') 1487f5a48010SBram Moolenaar CheckScriptFailure(['vim9script', 'x = 1'], 'E1100:') 1488ae616494SBram Moolenaarenddef 1489ae616494SBram Moolenaar 1490158906cfSBram Moolenaardef IfElse(what: number): string 1491*cfcd011fSBram Moolenaar var res = '' 1492158906cfSBram Moolenaar if what == 1 1493158906cfSBram Moolenaar res = "one" 1494158906cfSBram Moolenaar elseif what == 2 1495158906cfSBram Moolenaar res = "two" 1496a259d8d3SBram Moolenaar else 1497158906cfSBram Moolenaar res = "three" 1498a259d8d3SBram Moolenaar endif 1499158906cfSBram Moolenaar return res 1500a259d8d3SBram Moolenaarenddef 1501a259d8d3SBram Moolenaar 1502158906cfSBram Moolenaardef Test_if_elseif_else() 1503158906cfSBram Moolenaar assert_equal('one', IfElse(1)) 1504158906cfSBram Moolenaar assert_equal('two', IfElse(2)) 1505158906cfSBram Moolenaar assert_equal('three', IfElse(3)) 15060f18b6d1SBram Moolenaarenddef 15070f18b6d1SBram Moolenaar 1508e8c4abbbSBram Moolenaardef Test_if_elseif_else_fails() 1509d2c61705SBram Moolenaar CheckDefFailure(['elseif true'], 'E582:') 1510d2c61705SBram Moolenaar CheckDefFailure(['else'], 'E581:') 1511d2c61705SBram Moolenaar CheckDefFailure(['endif'], 'E580:') 1512d2c61705SBram Moolenaar CheckDefFailure(['if true', 'elseif xxx'], 'E1001:') 1513d2c61705SBram Moolenaar CheckDefFailure(['if true', 'echo 1'], 'E171:') 1514e8c4abbbSBram Moolenaarenddef 1515e8c4abbbSBram Moolenaar 15166d69bf60SBram Moolenaarlet g:bool_true = v:true 15176d69bf60SBram Moolenaarlet g:bool_false = v:false 15186d69bf60SBram Moolenaar 15196d69bf60SBram Moolenaardef Test_if_const_expr() 1520*cfcd011fSBram Moolenaar var res = false 15216d69bf60SBram Moolenaar if true ? true : false 15226d69bf60SBram Moolenaar res = true 15236d69bf60SBram Moolenaar endif 15246d69bf60SBram Moolenaar assert_equal(true, res) 15256d69bf60SBram Moolenaar 1526585fea7bSBram Moolenaar g:glob = 2 1527585fea7bSBram Moolenaar if false 15286797966dSBram Moolenaar execute('g:glob = 3') 1529585fea7bSBram Moolenaar endif 1530585fea7bSBram Moolenaar assert_equal(2, g:glob) 1531585fea7bSBram Moolenaar if true 15326797966dSBram Moolenaar execute('g:glob = 3') 1533585fea7bSBram Moolenaar endif 1534585fea7bSBram Moolenaar assert_equal(3, g:glob) 1535585fea7bSBram Moolenaar 15366d69bf60SBram Moolenaar res = false 15376d69bf60SBram Moolenaar if g:bool_true ? true : false 15386d69bf60SBram Moolenaar res = true 15396d69bf60SBram Moolenaar endif 15406d69bf60SBram Moolenaar assert_equal(true, res) 15416d69bf60SBram Moolenaar 15426d69bf60SBram Moolenaar res = false 15436d69bf60SBram Moolenaar if true ? g:bool_true : false 15446d69bf60SBram Moolenaar res = true 15456d69bf60SBram Moolenaar endif 15466d69bf60SBram Moolenaar assert_equal(true, res) 15476d69bf60SBram Moolenaar 15486d69bf60SBram Moolenaar res = false 15496d69bf60SBram Moolenaar if true ? true : g:bool_false 15506d69bf60SBram Moolenaar res = true 15516d69bf60SBram Moolenaar endif 15526d69bf60SBram Moolenaar assert_equal(true, res) 15536d69bf60SBram Moolenaar 15546d69bf60SBram Moolenaar res = false 15556d69bf60SBram Moolenaar if true ? false : true 15566d69bf60SBram Moolenaar res = true 15576d69bf60SBram Moolenaar endif 15586d69bf60SBram Moolenaar assert_equal(false, res) 15596d69bf60SBram Moolenaar 15606d69bf60SBram Moolenaar res = false 15616d69bf60SBram Moolenaar if false ? false : true 15626d69bf60SBram Moolenaar res = true 15636d69bf60SBram Moolenaar endif 15646d69bf60SBram Moolenaar assert_equal(true, res) 15656d69bf60SBram Moolenaar 15666d69bf60SBram Moolenaar res = false 15676d69bf60SBram Moolenaar if false ? true : false 15686d69bf60SBram Moolenaar res = true 15696d69bf60SBram Moolenaar endif 15706d69bf60SBram Moolenaar assert_equal(false, res) 15716d69bf60SBram Moolenaar 15726d69bf60SBram Moolenaar res = false 1573e8c4abbbSBram Moolenaar if has('xyz') ? true : false 1574e8c4abbbSBram Moolenaar res = true 1575e8c4abbbSBram Moolenaar endif 1576e8c4abbbSBram Moolenaar assert_equal(false, res) 1577e8c4abbbSBram Moolenaar 1578e8c4abbbSBram Moolenaar res = false 15796d69bf60SBram Moolenaar if true && true 15806d69bf60SBram Moolenaar res = true 15816d69bf60SBram Moolenaar endif 15826d69bf60SBram Moolenaar assert_equal(true, res) 15836d69bf60SBram Moolenaar 15846d69bf60SBram Moolenaar res = false 15856d69bf60SBram Moolenaar if true && false 15866d69bf60SBram Moolenaar res = true 15876d69bf60SBram Moolenaar endif 15886d69bf60SBram Moolenaar assert_equal(false, res) 15896d69bf60SBram Moolenaar 15906d69bf60SBram Moolenaar res = false 15916d69bf60SBram Moolenaar if g:bool_true && false 15926d69bf60SBram Moolenaar res = true 15936d69bf60SBram Moolenaar endif 15946d69bf60SBram Moolenaar assert_equal(false, res) 15956d69bf60SBram Moolenaar 15966d69bf60SBram Moolenaar res = false 15976d69bf60SBram Moolenaar if true && g:bool_false 15986d69bf60SBram Moolenaar res = true 15996d69bf60SBram Moolenaar endif 16006d69bf60SBram Moolenaar assert_equal(false, res) 16016d69bf60SBram Moolenaar 16026d69bf60SBram Moolenaar res = false 16036d69bf60SBram Moolenaar if false && false 16046d69bf60SBram Moolenaar res = true 16056d69bf60SBram Moolenaar endif 16066d69bf60SBram Moolenaar assert_equal(false, res) 16076d69bf60SBram Moolenaar 16086d69bf60SBram Moolenaar res = false 16096d69bf60SBram Moolenaar if true || false 16106d69bf60SBram Moolenaar res = true 16116d69bf60SBram Moolenaar endif 16126d69bf60SBram Moolenaar assert_equal(true, res) 16136d69bf60SBram Moolenaar 16146d69bf60SBram Moolenaar res = false 16156d69bf60SBram Moolenaar if g:bool_true || false 16166d69bf60SBram Moolenaar res = true 16176d69bf60SBram Moolenaar endif 16186d69bf60SBram Moolenaar assert_equal(true, res) 16196d69bf60SBram Moolenaar 16206d69bf60SBram Moolenaar res = false 16216d69bf60SBram Moolenaar if true || g:bool_false 16226d69bf60SBram Moolenaar res = true 16236d69bf60SBram Moolenaar endif 16246d69bf60SBram Moolenaar assert_equal(true, res) 16256d69bf60SBram Moolenaar 16266d69bf60SBram Moolenaar res = false 16276d69bf60SBram Moolenaar if false || false 16286d69bf60SBram Moolenaar res = true 16296d69bf60SBram Moolenaar endif 16306d69bf60SBram Moolenaar assert_equal(false, res) 16313988f64fSBram Moolenaar 16323988f64fSBram Moolenaar # with constant "false" expression may be invalid so long as the syntax is OK 16333988f64fSBram Moolenaar if false | eval 0 | endif 16343988f64fSBram Moolenaar if false | eval burp + 234 | endif 16353988f64fSBram Moolenaar if false | echo burp 234 'asd' | endif 16363988f64fSBram Moolenaar if false 16373988f64fSBram Moolenaar burp 16383988f64fSBram Moolenaar endif 163980c34ca3SBram Moolenaarenddef 16406d69bf60SBram Moolenaar 164180c34ca3SBram Moolenaardef Test_if_const_expr_fails() 1642d2c61705SBram Moolenaar CheckDefFailure(['if "aaa" == "bbb'], 'E114:') 1643d2c61705SBram Moolenaar CheckDefFailure(["if 'aaa' == 'bbb"], 'E115:') 1644d2c61705SBram Moolenaar CheckDefFailure(["if has('aaa'"], 'E110:') 1645d2c61705SBram Moolenaar CheckDefFailure(["if has('aaa') ? true false"], 'E109:') 16466d69bf60SBram Moolenaarenddef 16476d69bf60SBram Moolenaar 164872abcf42SBram Moolenaardef RunNested(i: number): number 1649*cfcd011fSBram Moolenaar var x: number = 0 165072abcf42SBram Moolenaar if i % 2 165172abcf42SBram Moolenaar if 1 1652f5be8cdbSBram Moolenaar # comment 165372abcf42SBram Moolenaar else 1654f5be8cdbSBram Moolenaar # comment 165572abcf42SBram Moolenaar endif 165672abcf42SBram Moolenaar x += 1 165772abcf42SBram Moolenaar else 165872abcf42SBram Moolenaar x += 1000 165972abcf42SBram Moolenaar endif 166072abcf42SBram Moolenaar return x 166172abcf42SBram Moolenaarenddef 166272abcf42SBram Moolenaar 166372abcf42SBram Moolenaardef Test_nested_if() 166472abcf42SBram Moolenaar assert_equal(1, RunNested(1)) 166572abcf42SBram Moolenaar assert_equal(1000, RunNested(2)) 166672abcf42SBram Moolenaarenddef 166772abcf42SBram Moolenaar 1668ad39c094SBram Moolenaardef Test_execute_cmd() 1669ad39c094SBram Moolenaar new 1670ad39c094SBram Moolenaar setline(1, 'default') 1671d2c61705SBram Moolenaar execute 'setline(1, "execute-string")' 1672ad39c094SBram Moolenaar assert_equal('execute-string', getline(1)) 1673a72cfb80SBram Moolenaar 1674d2c61705SBram Moolenaar execute "setline(1, 'execute-string')" 1675a72cfb80SBram Moolenaar assert_equal('execute-string', getline(1)) 1676a72cfb80SBram Moolenaar 1677*cfcd011fSBram Moolenaar var cmd1 = 'setline(1,' 1678*cfcd011fSBram Moolenaar var cmd2 = '"execute-var")' 1679a72cfb80SBram Moolenaar execute cmd1 cmd2 # comment 1680ad39c094SBram Moolenaar assert_equal('execute-var', getline(1)) 1681a72cfb80SBram Moolenaar 1682d2c61705SBram Moolenaar execute cmd1 cmd2 '|setline(1, "execute-var-string")' 1683ad39c094SBram Moolenaar assert_equal('execute-var-string', getline(1)) 1684a72cfb80SBram Moolenaar 1685*cfcd011fSBram Moolenaar var cmd_first = 'call ' 1686*cfcd011fSBram Moolenaar var cmd_last = 'setline(1, "execute-var-var")' 1687ad39c094SBram Moolenaar execute cmd_first .. cmd_last 1688ad39c094SBram Moolenaar assert_equal('execute-var-var', getline(1)) 1689ad39c094SBram Moolenaar bwipe! 1690585fea7bSBram Moolenaar 1691*cfcd011fSBram Moolenaar var n = true 16922d6b20d6SBram Moolenaar execute 'echomsg' (n ? '"true"' : '"no"') 16932d6b20d6SBram Moolenaar assert_match('^true$', Screenline(&lines)) 16942d6b20d6SBram Moolenaar 1695e5abf7afSBram Moolenaar echomsg [1, 2, 3] #{a: 1, b: 2} 1696e5abf7afSBram Moolenaar assert_match('^\[1, 2, 3\] {''a'': 1, ''b'': 2}$', Screenline(&lines)) 1697e5abf7afSBram Moolenaar 1698d2c61705SBram Moolenaar CheckDefFailure(['execute xxx'], 'E1001:', 1) 1699d2c61705SBram Moolenaar CheckDefExecFailure(['execute "tabnext " .. 8'], 'E475:', 1) 1700d2c61705SBram Moolenaar CheckDefFailure(['execute "cmd"# comment'], 'E488:', 1) 1701ad39c094SBram Moolenaarenddef 1702ad39c094SBram Moolenaar 170347e880d6SBram Moolenaardef Test_execute_cmd_vimscript() 1704f5be8cdbSBram Moolenaar # only checks line continuation 1705*cfcd011fSBram Moolenaar var lines =<< trim END 170647e880d6SBram Moolenaar vim9script 170747e880d6SBram Moolenaar execute 'g:someVar' 170847e880d6SBram Moolenaar .. ' = ' .. 170947e880d6SBram Moolenaar '28' 171047e880d6SBram Moolenaar assert_equal(28, g:someVar) 171147e880d6SBram Moolenaar unlet g:someVar 171247e880d6SBram Moolenaar END 171347e880d6SBram Moolenaar CheckScriptSuccess(lines) 171447e880d6SBram Moolenaarenddef 171547e880d6SBram Moolenaar 1716ad39c094SBram Moolenaardef Test_echo_cmd() 1717a72cfb80SBram Moolenaar echo 'some' # comment 1718585fea7bSBram Moolenaar echon 'thing' 1719ad39c094SBram Moolenaar assert_match('^something$', Screenline(&lines)) 1720ad39c094SBram Moolenaar 1721a72cfb80SBram Moolenaar echo "some" # comment 1722a72cfb80SBram Moolenaar echon "thing" 1723a72cfb80SBram Moolenaar assert_match('^something$', Screenline(&lines)) 1724a72cfb80SBram Moolenaar 1725*cfcd011fSBram Moolenaar var str1 = 'some' 1726*cfcd011fSBram Moolenaar var str2 = 'more' 1727ad39c094SBram Moolenaar echo str1 str2 1728ad39c094SBram Moolenaar assert_match('^some more$', Screenline(&lines)) 1729a72cfb80SBram Moolenaar 1730d2c61705SBram Moolenaar CheckDefFailure(['echo "xxx"# comment'], 'E488:') 1731ad39c094SBram Moolenaarenddef 1732ad39c094SBram Moolenaar 1733f93c7feaSBram Moolenaardef Test_echomsg_cmd() 1734f93c7feaSBram Moolenaar echomsg 'some' 'more' # comment 1735f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 1736f93c7feaSBram Moolenaar echo 'clear' 1737df069eecSBram Moolenaar :1messages 1738f93c7feaSBram Moolenaar assert_match('^some more$', Screenline(&lines)) 1739f93c7feaSBram Moolenaar 1740d2c61705SBram Moolenaar CheckDefFailure(['echomsg "xxx"# comment'], 'E488:') 1741f93c7feaSBram Moolenaarenddef 1742f93c7feaSBram Moolenaar 174347e880d6SBram Moolenaardef Test_echomsg_cmd_vimscript() 1744f5be8cdbSBram Moolenaar # only checks line continuation 1745*cfcd011fSBram Moolenaar var lines =<< trim END 174647e880d6SBram Moolenaar vim9script 174747e880d6SBram Moolenaar echomsg 'here' 174847e880d6SBram Moolenaar .. ' is ' .. 174947e880d6SBram Moolenaar 'a message' 175047e880d6SBram Moolenaar assert_match('^here is a message$', Screenline(&lines)) 175147e880d6SBram Moolenaar END 175247e880d6SBram Moolenaar CheckScriptSuccess(lines) 175347e880d6SBram Moolenaarenddef 175447e880d6SBram Moolenaar 1755f93c7feaSBram Moolenaardef Test_echoerr_cmd() 175640ee466cSBram Moolenaar try 175740ee466cSBram Moolenaar echoerr 'something' 'wrong' # comment 175840ee466cSBram Moolenaar catch 175940ee466cSBram Moolenaar assert_match('something wrong', v:exception) 176040ee466cSBram Moolenaar endtry 1761f93c7feaSBram Moolenaarenddef 1762f93c7feaSBram Moolenaar 176347e880d6SBram Moolenaardef Test_echoerr_cmd_vimscript() 1764f5be8cdbSBram Moolenaar # only checks line continuation 1765*cfcd011fSBram Moolenaar var lines =<< trim END 176647e880d6SBram Moolenaar vim9script 176747e880d6SBram Moolenaar try 176847e880d6SBram Moolenaar echoerr 'this' 176947e880d6SBram Moolenaar .. ' is ' .. 177047e880d6SBram Moolenaar 'wrong' 177147e880d6SBram Moolenaar catch 177247e880d6SBram Moolenaar assert_match('this is wrong', v:exception) 177347e880d6SBram Moolenaar endtry 177447e880d6SBram Moolenaar END 177547e880d6SBram Moolenaar CheckScriptSuccess(lines) 177647e880d6SBram Moolenaarenddef 177747e880d6SBram Moolenaar 177841fe0617SBram Moolenaardef Test_for_outside_of_function() 1779*cfcd011fSBram Moolenaar var lines =<< trim END 178041fe0617SBram Moolenaar vim9script 178141fe0617SBram Moolenaar new 178241fe0617SBram Moolenaar for var in range(0, 3) 178341fe0617SBram Moolenaar append(line('$'), var) 178441fe0617SBram Moolenaar endfor 178541fe0617SBram Moolenaar assert_equal(['', '0', '1', '2', '3'], getline(1, '$')) 178641fe0617SBram Moolenaar bwipe! 178741fe0617SBram Moolenaar END 178841fe0617SBram Moolenaar writefile(lines, 'Xvim9for.vim') 178941fe0617SBram Moolenaar source Xvim9for.vim 179041fe0617SBram Moolenaar delete('Xvim9for.vim') 179141fe0617SBram Moolenaarenddef 17928a7d6542SBram Moolenaar 1793e8c4abbbSBram Moolenaardef Test_for_loop() 1794*cfcd011fSBram Moolenaar var result = '' 1795e8c4abbbSBram Moolenaar for cnt in range(7) 1796e8c4abbbSBram Moolenaar if cnt == 4 1797e8c4abbbSBram Moolenaar break 1798e8c4abbbSBram Moolenaar endif 1799e8c4abbbSBram Moolenaar if cnt == 2 1800e8c4abbbSBram Moolenaar continue 1801e8c4abbbSBram Moolenaar endif 1802e8c4abbbSBram Moolenaar result ..= cnt .. '_' 1803e8c4abbbSBram Moolenaar endfor 1804e8c4abbbSBram Moolenaar assert_equal('0_1_3_', result) 18050ad3e894SBram Moolenaar 1806*cfcd011fSBram Moolenaar var concat = '' 18070ad3e894SBram Moolenaar for str in eval('["one", "two"]') 18080ad3e894SBram Moolenaar concat ..= str 18090ad3e894SBram Moolenaar endfor 18100ad3e894SBram Moolenaar assert_equal('onetwo', concat) 1811e8c4abbbSBram Moolenaarenddef 1812e8c4abbbSBram Moolenaar 1813e8c4abbbSBram Moolenaardef Test_for_loop_fails() 1814675f716eSBram Moolenaar CheckDefFailure(['for # in range(5)'], 'E690:') 1815675f716eSBram Moolenaar CheckDefFailure(['for i In range(5)'], 'E690:') 1816*cfcd011fSBram Moolenaar CheckDefFailure(['var x = 5', 'for x in range(5)'], 'E1017:') 1817822ba247SBram Moolenaar CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef', 'defcompile'], 'E1006:') 1818451c2e35SBram Moolenaar CheckDefFailure(['for i in "text"'], 'E1012:') 1819675f716eSBram Moolenaar CheckDefFailure(['for i in xxx'], 'E1001:') 1820675f716eSBram Moolenaar CheckDefFailure(['endfor'], 'E588:') 1821675f716eSBram Moolenaar CheckDefFailure(['for i in range(3)', 'echo 3'], 'E170:') 1822e8c4abbbSBram Moolenaarenddef 1823e8c4abbbSBram Moolenaar 1824d0df1aacSBram Moolenaardef Test_while_loop() 1825*cfcd011fSBram Moolenaar var result = '' 1826*cfcd011fSBram Moolenaar var cnt = 0 1827d0df1aacSBram Moolenaar while cnt < 555 1828d0df1aacSBram Moolenaar if cnt == 3 1829d0df1aacSBram Moolenaar break 1830d0df1aacSBram Moolenaar endif 1831d0df1aacSBram Moolenaar cnt += 1 1832d0df1aacSBram Moolenaar if cnt == 2 1833d0df1aacSBram Moolenaar continue 1834d0df1aacSBram Moolenaar endif 1835d0df1aacSBram Moolenaar result ..= cnt .. '_' 1836d0df1aacSBram Moolenaar endwhile 1837d0df1aacSBram Moolenaar assert_equal('1_3_', result) 1838d0df1aacSBram Moolenaarenddef 1839d0df1aacSBram Moolenaar 1840e8c4abbbSBram Moolenaardef Test_while_loop_fails() 1841675f716eSBram Moolenaar CheckDefFailure(['while xxx'], 'E1001:') 1842675f716eSBram Moolenaar CheckDefFailure(['endwhile'], 'E588:') 1843675f716eSBram Moolenaar CheckDefFailure(['continue'], 'E586:') 1844675f716eSBram Moolenaar CheckDefFailure(['if true', 'continue'], 'E586:') 1845675f716eSBram Moolenaar CheckDefFailure(['break'], 'E587:') 1846675f716eSBram Moolenaar CheckDefFailure(['if true', 'break'], 'E587:') 1847675f716eSBram Moolenaar CheckDefFailure(['while 1', 'echo 3'], 'E170:') 1848bd5da371SBram Moolenaarenddef 1849bd5da371SBram Moolenaar 18509645e2d9SBram Moolenaardef Test_interrupt_loop() 1851*cfcd011fSBram Moolenaar var caught = false 1852*cfcd011fSBram Moolenaar var x = 0 185397acfc78SBram Moolenaar try 18549645e2d9SBram Moolenaar while 1 18559645e2d9SBram Moolenaar x += 1 18569645e2d9SBram Moolenaar if x == 100 18579645e2d9SBram Moolenaar feedkeys("\<C-C>", 'Lt') 18589645e2d9SBram Moolenaar endif 18599645e2d9SBram Moolenaar endwhile 186097acfc78SBram Moolenaar catch 186197acfc78SBram Moolenaar caught = true 186297acfc78SBram Moolenaar assert_equal(100, x) 186397acfc78SBram Moolenaar endtry 186497acfc78SBram Moolenaar assert_true(caught, 'should have caught an exception') 186525859dd7SBram Moolenaar # consume the CTRL-C 186625859dd7SBram Moolenaar getchar(0) 18679645e2d9SBram Moolenaarenddef 186820431c9dSBram Moolenaar 18694fdae999SBram Moolenaardef Test_automatic_line_continuation() 1870*cfcd011fSBram Moolenaar var mylist = [ 18714fdae999SBram Moolenaar 'one', 18724fdae999SBram Moolenaar 'two', 18734fdae999SBram Moolenaar 'three', 1874f5be8cdbSBram Moolenaar ] # comment 18754fdae999SBram Moolenaar assert_equal(['one', 'two', 'three'], mylist) 18764fdae999SBram Moolenaar 1877*cfcd011fSBram Moolenaar var mydict = { 18784fdae999SBram Moolenaar 'one': 1, 18794fdae999SBram Moolenaar 'two': 2, 18804fdae999SBram Moolenaar 'three': 18814fdae999SBram Moolenaar 3, 1882f5be8cdbSBram Moolenaar } # comment 18834fdae999SBram Moolenaar assert_equal({'one': 1, 'two': 2, 'three': 3}, mydict) 18844fdae999SBram Moolenaar mydict = #{ 18852c330432SBram Moolenaar one: 1, # comment 18862c330432SBram Moolenaar two: # comment 18872c330432SBram Moolenaar 2, # comment 18882c330432SBram Moolenaar three: 3 # comment 18892c330432SBram Moolenaar } 18902c330432SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 18912c330432SBram Moolenaar mydict = #{ 18922c330432SBram Moolenaar one: 1, 18934fdae999SBram Moolenaar two: 18944fdae999SBram Moolenaar 2, 18952c330432SBram Moolenaar three: 3 18964fdae999SBram Moolenaar } 18974fdae999SBram Moolenaar assert_equal(#{one: 1, two: 2, three: 3}, mydict) 1898e6085c53SBram Moolenaar 1899e6085c53SBram Moolenaar assert_equal( 1900e6085c53SBram Moolenaar ['one', 'two', 'three'], 1901e6085c53SBram Moolenaar split('one two three') 1902e6085c53SBram Moolenaar ) 19034fdae999SBram Moolenaarenddef 19044fdae999SBram Moolenaar 19057a092245SBram Moolenaardef Test_vim9_comment() 19067a092245SBram Moolenaar CheckScriptSuccess([ 19077a092245SBram Moolenaar 'vim9script', 19087a092245SBram Moolenaar '# something', 19097a092245SBram Moolenaar ]) 19107a092245SBram Moolenaar CheckScriptFailure([ 19117a092245SBram Moolenaar 'vim9script', 19127a092245SBram Moolenaar ':# something', 19137a092245SBram Moolenaar ], 'E488:') 19147a092245SBram Moolenaar CheckScriptFailure([ 19157a092245SBram Moolenaar '# something', 19167a092245SBram Moolenaar ], 'E488:') 19177a092245SBram Moolenaar CheckScriptFailure([ 19187a092245SBram Moolenaar ':# something', 19197a092245SBram Moolenaar ], 'E488:') 19207a092245SBram Moolenaar 19214a8d9f2eSBram Moolenaar { # block start 19224a8d9f2eSBram Moolenaar } # block end 19234a8d9f2eSBram Moolenaar CheckDefFailure([ 19244a8d9f2eSBram Moolenaar '{# comment', 19254a8d9f2eSBram Moolenaar ], 'E488:') 19264a8d9f2eSBram Moolenaar CheckDefFailure([ 19274a8d9f2eSBram Moolenaar '{', 19284a8d9f2eSBram Moolenaar '}# comment', 19294a8d9f2eSBram Moolenaar ], 'E488:') 19304a8d9f2eSBram Moolenaar 19314a8d9f2eSBram Moolenaar echo "yes" # comment 19324a8d9f2eSBram Moolenaar CheckDefFailure([ 19334a8d9f2eSBram Moolenaar 'echo "yes"# comment', 19344a8d9f2eSBram Moolenaar ], 'E488:') 19357a092245SBram Moolenaar CheckScriptSuccess([ 19367a092245SBram Moolenaar 'vim9script', 19377a092245SBram Moolenaar 'echo "yes" # something', 19387a092245SBram Moolenaar ]) 19397a092245SBram Moolenaar CheckScriptFailure([ 19407a092245SBram Moolenaar 'vim9script', 19417a092245SBram Moolenaar 'echo "yes"# something', 19427a092245SBram Moolenaar ], 'E121:') 19437a092245SBram Moolenaar CheckScriptFailure([ 19447a092245SBram Moolenaar 'vim9script', 19457a092245SBram Moolenaar 'echo# something', 19467a092245SBram Moolenaar ], 'E121:') 19477a092245SBram Moolenaar CheckScriptFailure([ 19487a092245SBram Moolenaar 'echo "yes" # something', 19497a092245SBram Moolenaar ], 'E121:') 19507a092245SBram Moolenaar 19514a8d9f2eSBram Moolenaar exe "echo" # comment 19524a8d9f2eSBram Moolenaar CheckDefFailure([ 19534a8d9f2eSBram Moolenaar 'exe "echo"# comment', 19544a8d9f2eSBram Moolenaar ], 'E488:') 19554a8d9f2eSBram Moolenaar CheckScriptSuccess([ 19564a8d9f2eSBram Moolenaar 'vim9script', 19574a8d9f2eSBram Moolenaar 'exe "echo" # something', 19584a8d9f2eSBram Moolenaar ]) 19594a8d9f2eSBram Moolenaar CheckScriptFailure([ 19604a8d9f2eSBram Moolenaar 'vim9script', 19614a8d9f2eSBram Moolenaar 'exe "echo"# something', 19624a8d9f2eSBram Moolenaar ], 'E121:') 19634a8d9f2eSBram Moolenaar CheckDefFailure([ 19644a8d9f2eSBram Moolenaar 'exe # comment', 19654a8d9f2eSBram Moolenaar ], 'E1015:') 19664a8d9f2eSBram Moolenaar CheckScriptFailure([ 19674a8d9f2eSBram Moolenaar 'vim9script', 19684a8d9f2eSBram Moolenaar 'exe# something', 19694a8d9f2eSBram Moolenaar ], 'E121:') 19704a8d9f2eSBram Moolenaar CheckScriptFailure([ 19714a8d9f2eSBram Moolenaar 'exe "echo" # something', 19724a8d9f2eSBram Moolenaar ], 'E121:') 19734a8d9f2eSBram Moolenaar 19747a092245SBram Moolenaar CheckDefFailure([ 19757a092245SBram Moolenaar 'try# comment', 19767a092245SBram Moolenaar ' echo "yes"', 19777a092245SBram Moolenaar 'catch', 19787a092245SBram Moolenaar 'endtry', 19797a092245SBram Moolenaar ], 'E488:') 19802c5ed4e3SBram Moolenaar CheckScriptFailure([ 19812c5ed4e3SBram Moolenaar 'vim9script', 19822c5ed4e3SBram Moolenaar 'try# comment', 19832c5ed4e3SBram Moolenaar 'echo "yes"', 19842c5ed4e3SBram Moolenaar ], 'E488:') 19857a092245SBram Moolenaar CheckDefFailure([ 19867a092245SBram Moolenaar 'try', 1987a72cfb80SBram Moolenaar ' throw#comment', 1988a72cfb80SBram Moolenaar 'catch', 1989a72cfb80SBram Moolenaar 'endtry', 1990a72cfb80SBram Moolenaar ], 'E1015:') 1991a72cfb80SBram Moolenaar CheckDefFailure([ 1992a72cfb80SBram Moolenaar 'try', 1993a72cfb80SBram Moolenaar ' throw "yes"#comment', 1994a72cfb80SBram Moolenaar 'catch', 1995a72cfb80SBram Moolenaar 'endtry', 1996a72cfb80SBram Moolenaar ], 'E488:') 1997a72cfb80SBram Moolenaar CheckDefFailure([ 1998a72cfb80SBram Moolenaar 'try', 19997a092245SBram Moolenaar ' echo "yes"', 20007a092245SBram Moolenaar 'catch# comment', 20017a092245SBram Moolenaar 'endtry', 20027a092245SBram Moolenaar ], 'E488:') 20032c5ed4e3SBram Moolenaar CheckScriptFailure([ 20042c5ed4e3SBram Moolenaar 'vim9script', 20052c5ed4e3SBram Moolenaar 'try', 20062c5ed4e3SBram Moolenaar ' echo "yes"', 20072c5ed4e3SBram Moolenaar 'catch# comment', 20082c5ed4e3SBram Moolenaar 'endtry', 20092c5ed4e3SBram Moolenaar ], 'E654:') 20102c5ed4e3SBram Moolenaar CheckDefFailure([ 20112c5ed4e3SBram Moolenaar 'try', 20122c5ed4e3SBram Moolenaar ' echo "yes"', 20132c5ed4e3SBram Moolenaar 'catch /pat/# comment', 20142c5ed4e3SBram Moolenaar 'endtry', 20152c5ed4e3SBram Moolenaar ], 'E488:') 20167a092245SBram Moolenaar CheckDefFailure([ 20177a092245SBram Moolenaar 'try', 20187a092245SBram Moolenaar 'echo "yes"', 20197a092245SBram Moolenaar 'catch', 20207a092245SBram Moolenaar 'endtry# comment', 20217a092245SBram Moolenaar ], 'E488:') 20222c5ed4e3SBram Moolenaar CheckScriptFailure([ 20232c5ed4e3SBram Moolenaar 'vim9script', 20242c5ed4e3SBram Moolenaar 'try', 20252c5ed4e3SBram Moolenaar ' echo "yes"', 20262c5ed4e3SBram Moolenaar 'catch', 20272c5ed4e3SBram Moolenaar 'endtry# comment', 20289b7bf9e9SBram Moolenaar ], 'E488:') 20292c5ed4e3SBram Moolenaar 20302c5ed4e3SBram Moolenaar CheckScriptSuccess([ 20312c5ed4e3SBram Moolenaar 'vim9script', 20322c5ed4e3SBram Moolenaar 'hi # comment', 20332c5ed4e3SBram Moolenaar ]) 20342c5ed4e3SBram Moolenaar CheckScriptFailure([ 20352c5ed4e3SBram Moolenaar 'vim9script', 20362c5ed4e3SBram Moolenaar 'hi# comment', 20372c5ed4e3SBram Moolenaar ], 'E416:') 20381966c248SBram Moolenaar CheckScriptSuccess([ 20391966c248SBram Moolenaar 'vim9script', 20401966c248SBram Moolenaar 'hi Search # comment', 20411966c248SBram Moolenaar ]) 20421966c248SBram Moolenaar CheckScriptFailure([ 20431966c248SBram Moolenaar 'vim9script', 20441966c248SBram Moolenaar 'hi Search# comment', 20451966c248SBram Moolenaar ], 'E416:') 20461966c248SBram Moolenaar CheckScriptSuccess([ 20471966c248SBram Moolenaar 'vim9script', 20481966c248SBram Moolenaar 'hi link This Search # comment', 20491966c248SBram Moolenaar ]) 20501966c248SBram Moolenaar CheckScriptFailure([ 20511966c248SBram Moolenaar 'vim9script', 20521966c248SBram Moolenaar 'hi link This That# comment', 20531966c248SBram Moolenaar ], 'E413:') 20541966c248SBram Moolenaar CheckScriptSuccess([ 20551966c248SBram Moolenaar 'vim9script', 20561966c248SBram Moolenaar 'hi clear This # comment', 20571966c248SBram Moolenaar 'hi clear # comment', 20581966c248SBram Moolenaar ]) 2059f5be8cdbSBram Moolenaar # not tested, because it doesn't give an error but a warning: 2060f5be8cdbSBram Moolenaar # hi clear This# comment', 20611966c248SBram Moolenaar CheckScriptFailure([ 20621966c248SBram Moolenaar 'vim9script', 20631966c248SBram Moolenaar 'hi clear# comment', 20641966c248SBram Moolenaar ], 'E416:') 20651966c248SBram Moolenaar 20661966c248SBram Moolenaar CheckScriptSuccess([ 20671966c248SBram Moolenaar 'vim9script', 20681966c248SBram Moolenaar 'hi Group term=bold', 20691966c248SBram Moolenaar 'match Group /todo/ # comment', 20701966c248SBram Moolenaar ]) 20711966c248SBram Moolenaar CheckScriptFailure([ 20721966c248SBram Moolenaar 'vim9script', 20731966c248SBram Moolenaar 'hi Group term=bold', 20741966c248SBram Moolenaar 'match Group /todo/# comment', 20751966c248SBram Moolenaar ], 'E488:') 20761966c248SBram Moolenaar CheckScriptSuccess([ 20771966c248SBram Moolenaar 'vim9script', 20781966c248SBram Moolenaar 'match # comment', 20791966c248SBram Moolenaar ]) 20801966c248SBram Moolenaar CheckScriptFailure([ 20811966c248SBram Moolenaar 'vim9script', 20821966c248SBram Moolenaar 'match# comment', 20831966c248SBram Moolenaar ], 'E475:') 20841966c248SBram Moolenaar CheckScriptSuccess([ 20851966c248SBram Moolenaar 'vim9script', 20861966c248SBram Moolenaar 'match none # comment', 20871966c248SBram Moolenaar ]) 20881966c248SBram Moolenaar CheckScriptFailure([ 20891966c248SBram Moolenaar 'vim9script', 20901966c248SBram Moolenaar 'match none# comment', 20911966c248SBram Moolenaar ], 'E475:') 20921966c248SBram Moolenaar 20931966c248SBram Moolenaar CheckScriptSuccess([ 20941966c248SBram Moolenaar 'vim9script', 20951966c248SBram Moolenaar 'menutrans clear # comment', 20961966c248SBram Moolenaar ]) 20971966c248SBram Moolenaar CheckScriptFailure([ 20981966c248SBram Moolenaar 'vim9script', 20991966c248SBram Moolenaar 'menutrans clear# comment text', 21001966c248SBram Moolenaar ], 'E474:') 21011966c248SBram Moolenaar 21021966c248SBram Moolenaar CheckScriptSuccess([ 21031966c248SBram Moolenaar 'vim9script', 21041966c248SBram Moolenaar 'syntax clear # comment', 21051966c248SBram Moolenaar ]) 21061966c248SBram Moolenaar CheckScriptFailure([ 21071966c248SBram Moolenaar 'vim9script', 21081966c248SBram Moolenaar 'syntax clear# comment text', 21091966c248SBram Moolenaar ], 'E28:') 21101966c248SBram Moolenaar CheckScriptSuccess([ 21111966c248SBram Moolenaar 'vim9script', 21121966c248SBram Moolenaar 'syntax keyword Word some', 21131966c248SBram Moolenaar 'syntax clear Word # comment', 21141966c248SBram Moolenaar ]) 21151966c248SBram Moolenaar CheckScriptFailure([ 21161966c248SBram Moolenaar 'vim9script', 21171966c248SBram Moolenaar 'syntax keyword Word some', 21181966c248SBram Moolenaar 'syntax clear Word# comment text', 21191966c248SBram Moolenaar ], 'E28:') 21201966c248SBram Moolenaar 21211966c248SBram Moolenaar CheckScriptSuccess([ 21221966c248SBram Moolenaar 'vim9script', 21231966c248SBram Moolenaar 'syntax list # comment', 21241966c248SBram Moolenaar ]) 21251966c248SBram Moolenaar CheckScriptFailure([ 21261966c248SBram Moolenaar 'vim9script', 21271966c248SBram Moolenaar 'syntax list# comment text', 21281966c248SBram Moolenaar ], 'E28:') 21291966c248SBram Moolenaar 21301966c248SBram Moolenaar CheckScriptSuccess([ 21311966c248SBram Moolenaar 'vim9script', 21321966c248SBram Moolenaar 'syntax match Word /pat/ oneline # comment', 21331966c248SBram Moolenaar ]) 21341966c248SBram Moolenaar CheckScriptFailure([ 21351966c248SBram Moolenaar 'vim9script', 21361966c248SBram Moolenaar 'syntax match Word /pat/ oneline# comment', 21371966c248SBram Moolenaar ], 'E475:') 21381966c248SBram Moolenaar 21391966c248SBram Moolenaar CheckScriptSuccess([ 21401966c248SBram Moolenaar 'vim9script', 21411966c248SBram Moolenaar 'syntax keyword Word word # comm[ent', 21421966c248SBram Moolenaar ]) 21431966c248SBram Moolenaar CheckScriptFailure([ 21441966c248SBram Moolenaar 'vim9script', 21451966c248SBram Moolenaar 'syntax keyword Word word# comm[ent', 21461966c248SBram Moolenaar ], 'E789:') 21471966c248SBram Moolenaar 21481966c248SBram Moolenaar CheckScriptSuccess([ 21491966c248SBram Moolenaar 'vim9script', 21501966c248SBram Moolenaar 'syntax match Word /pat/ # comment', 21511966c248SBram Moolenaar ]) 21521966c248SBram Moolenaar CheckScriptFailure([ 21531966c248SBram Moolenaar 'vim9script', 21541966c248SBram Moolenaar 'syntax match Word /pat/# comment', 21551966c248SBram Moolenaar ], 'E402:') 21561966c248SBram Moolenaar 21571966c248SBram Moolenaar CheckScriptSuccess([ 21581966c248SBram Moolenaar 'vim9script', 21591966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something # comment', 21601966c248SBram Moolenaar ]) 21611966c248SBram Moolenaar CheckScriptFailure([ 21621966c248SBram Moolenaar 'vim9script', 21631966c248SBram Moolenaar 'syntax match Word /pat/ contains=Something# comment', 21641966c248SBram Moolenaar ], 'E475:') 21651966c248SBram Moolenaar CheckScriptFailure([ 21661966c248SBram Moolenaar 'vim9script', 21671966c248SBram Moolenaar 'syntax match Word /pat/ contains= # comment', 21681966c248SBram Moolenaar ], 'E406:') 21691966c248SBram Moolenaar CheckScriptFailure([ 21701966c248SBram Moolenaar 'vim9script', 21711966c248SBram Moolenaar 'syntax match Word /pat/ contains=# comment', 21721966c248SBram Moolenaar ], 'E475:') 21731966c248SBram Moolenaar 21741966c248SBram Moolenaar CheckScriptSuccess([ 21751966c248SBram Moolenaar 'vim9script', 21761966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/ # comment', 21771966c248SBram Moolenaar ]) 21781966c248SBram Moolenaar CheckScriptFailure([ 21791966c248SBram Moolenaar 'vim9script', 21801966c248SBram Moolenaar 'syntax region Word start=/pat/ end=/pat/# comment', 2181d032f34aSBram Moolenaar ], 'E402:') 21821966c248SBram Moolenaar 21831966c248SBram Moolenaar CheckScriptSuccess([ 21841966c248SBram Moolenaar 'vim9script', 21851966c248SBram Moolenaar 'syntax sync # comment', 21861966c248SBram Moolenaar ]) 21871966c248SBram Moolenaar CheckScriptFailure([ 21881966c248SBram Moolenaar 'vim9script', 21891966c248SBram Moolenaar 'syntax sync# comment', 21901966c248SBram Moolenaar ], 'E404:') 21911966c248SBram Moolenaar CheckScriptSuccess([ 21921966c248SBram Moolenaar 'vim9script', 21931966c248SBram Moolenaar 'syntax sync ccomment # comment', 21941966c248SBram Moolenaar ]) 21951966c248SBram Moolenaar CheckScriptFailure([ 21961966c248SBram Moolenaar 'vim9script', 21971966c248SBram Moolenaar 'syntax sync ccomment# comment', 21981966c248SBram Moolenaar ], 'E404:') 21991966c248SBram Moolenaar 22001966c248SBram Moolenaar CheckScriptSuccess([ 22011966c248SBram Moolenaar 'vim9script', 22021966c248SBram Moolenaar 'syntax cluster Some contains=Word # comment', 22031966c248SBram Moolenaar ]) 22041966c248SBram Moolenaar CheckScriptFailure([ 22051966c248SBram Moolenaar 'vim9script', 22061966c248SBram Moolenaar 'syntax cluster Some contains=Word# comment', 22071966c248SBram Moolenaar ], 'E475:') 2208a72cfb80SBram Moolenaar 2209a72cfb80SBram Moolenaar CheckScriptSuccess([ 2210a72cfb80SBram Moolenaar 'vim9script', 2211a72cfb80SBram Moolenaar 'command Echo echo # comment', 2212a72cfb80SBram Moolenaar 'command Echo # comment', 2213a72cfb80SBram Moolenaar ]) 2214a72cfb80SBram Moolenaar CheckScriptFailure([ 2215a72cfb80SBram Moolenaar 'vim9script', 2216a72cfb80SBram Moolenaar 'command Echo echo# comment', 2217a72cfb80SBram Moolenaar 'Echo', 2218a72cfb80SBram Moolenaar ], 'E121:') 2219a72cfb80SBram Moolenaar CheckScriptFailure([ 2220a72cfb80SBram Moolenaar 'vim9script', 2221a72cfb80SBram Moolenaar 'command Echo# comment', 2222a72cfb80SBram Moolenaar ], 'E182:') 2223a72cfb80SBram Moolenaar CheckScriptFailure([ 2224a72cfb80SBram Moolenaar 'vim9script', 2225a72cfb80SBram Moolenaar 'command Echo echo', 2226a72cfb80SBram Moolenaar 'command Echo# comment', 2227a72cfb80SBram Moolenaar ], 'E182:') 2228a72cfb80SBram Moolenaar 2229a72cfb80SBram Moolenaar CheckScriptSuccess([ 2230a72cfb80SBram Moolenaar 'vim9script', 2231a72cfb80SBram Moolenaar 'function # comment', 2232a72cfb80SBram Moolenaar ]) 2233a72cfb80SBram Moolenaar CheckScriptFailure([ 2234a72cfb80SBram Moolenaar 'vim9script', 22359898107fSBram Moolenaar 'function " comment', 22369898107fSBram Moolenaar ], 'E129:') 22379898107fSBram Moolenaar CheckScriptFailure([ 22389898107fSBram Moolenaar 'vim9script', 2239a72cfb80SBram Moolenaar 'function# comment', 2240a72cfb80SBram Moolenaar ], 'E129:') 2241a72cfb80SBram Moolenaar CheckScriptSuccess([ 2242a72cfb80SBram Moolenaar 'vim9script', 2243a72cfb80SBram Moolenaar 'function CheckScriptSuccess # comment', 2244a72cfb80SBram Moolenaar ]) 2245a72cfb80SBram Moolenaar CheckScriptFailure([ 2246a72cfb80SBram Moolenaar 'vim9script', 2247a72cfb80SBram Moolenaar 'function CheckScriptSuccess# comment', 2248a72cfb80SBram Moolenaar ], 'E488:') 2249a72cfb80SBram Moolenaar 2250a72cfb80SBram Moolenaar CheckScriptSuccess([ 2251a72cfb80SBram Moolenaar 'vim9script', 22524c17ad94SBram Moolenaar 'func g:DeleteMeA()', 2253a72cfb80SBram Moolenaar 'endfunc', 22544c17ad94SBram Moolenaar 'delfunction g:DeleteMeA # comment', 2255a72cfb80SBram Moolenaar ]) 2256a72cfb80SBram Moolenaar CheckScriptFailure([ 2257a72cfb80SBram Moolenaar 'vim9script', 22584c17ad94SBram Moolenaar 'func g:DeleteMeB()', 2259a72cfb80SBram Moolenaar 'endfunc', 22604c17ad94SBram Moolenaar 'delfunction g:DeleteMeB# comment', 2261a72cfb80SBram Moolenaar ], 'E488:') 2262a72cfb80SBram Moolenaar 2263a72cfb80SBram Moolenaar CheckScriptSuccess([ 2264a72cfb80SBram Moolenaar 'vim9script', 2265a72cfb80SBram Moolenaar 'call execute("ls") # comment', 2266a72cfb80SBram Moolenaar ]) 2267a72cfb80SBram Moolenaar CheckScriptFailure([ 2268a72cfb80SBram Moolenaar 'vim9script', 2269a72cfb80SBram Moolenaar 'call execute("ls")# comment', 2270a72cfb80SBram Moolenaar ], 'E488:') 2271e7e4838fSBram Moolenaar 2272e7e4838fSBram Moolenaar CheckScriptFailure([ 2273e7e4838fSBram Moolenaar 'def Test() " comment', 2274e7e4838fSBram Moolenaar 'enddef', 2275e7e4838fSBram Moolenaar ], 'E488:') 2276e7e4838fSBram Moolenaar CheckScriptFailure([ 2277e7e4838fSBram Moolenaar 'vim9script', 2278e7e4838fSBram Moolenaar 'def Test() " comment', 2279e7e4838fSBram Moolenaar 'enddef', 2280e7e4838fSBram Moolenaar ], 'E488:') 2281e7e4838fSBram Moolenaar 2282e7e4838fSBram Moolenaar CheckScriptSuccess([ 2283e7e4838fSBram Moolenaar 'func Test() " comment', 2284e7e4838fSBram Moolenaar 'endfunc', 2285e7e4838fSBram Moolenaar ]) 22869898107fSBram Moolenaar CheckScriptSuccess([ 2287e7e4838fSBram Moolenaar 'vim9script', 2288e7e4838fSBram Moolenaar 'func Test() " comment', 2289e7e4838fSBram Moolenaar 'endfunc', 22909898107fSBram Moolenaar ]) 2291e7e4838fSBram Moolenaar 2292e7e4838fSBram Moolenaar CheckScriptSuccess([ 2293e7e4838fSBram Moolenaar 'def Test() # comment', 2294e7e4838fSBram Moolenaar 'enddef', 2295e7e4838fSBram Moolenaar ]) 2296e7e4838fSBram Moolenaar CheckScriptFailure([ 2297e7e4838fSBram Moolenaar 'func Test() # comment', 2298e7e4838fSBram Moolenaar 'endfunc', 2299e7e4838fSBram Moolenaar ], 'E488:') 23002c5ed4e3SBram Moolenaarenddef 23012c5ed4e3SBram Moolenaar 23022c5ed4e3SBram Moolenaardef Test_vim9_comment_gui() 23032c5ed4e3SBram Moolenaar CheckCanRunGui 23042c5ed4e3SBram Moolenaar 23052c5ed4e3SBram Moolenaar CheckScriptFailure([ 23062c5ed4e3SBram Moolenaar 'vim9script', 23072c5ed4e3SBram Moolenaar 'gui#comment' 23082c5ed4e3SBram Moolenaar ], 'E499:') 23092c5ed4e3SBram Moolenaar CheckScriptFailure([ 23102c5ed4e3SBram Moolenaar 'vim9script', 23112c5ed4e3SBram Moolenaar 'gui -f#comment' 23122c5ed4e3SBram Moolenaar ], 'E499:') 23137a092245SBram Moolenaarenddef 23147a092245SBram Moolenaar 2315a26b9700SBram Moolenaardef Test_vim9_comment_not_compiled() 23166797966dSBram Moolenaar au TabEnter *.vim g:entered = 1 23176797966dSBram Moolenaar au TabEnter *.x g:entered = 2 2318a26b9700SBram Moolenaar 2319a26b9700SBram Moolenaar edit test.vim 2320a26b9700SBram Moolenaar doautocmd TabEnter #comment 2321a26b9700SBram Moolenaar assert_equal(1, g:entered) 2322a26b9700SBram Moolenaar 2323a26b9700SBram Moolenaar doautocmd TabEnter f.x 2324a26b9700SBram Moolenaar assert_equal(2, g:entered) 2325a26b9700SBram Moolenaar 2326a26b9700SBram Moolenaar g:entered = 0 2327a26b9700SBram Moolenaar doautocmd TabEnter f.x #comment 2328a26b9700SBram Moolenaar assert_equal(2, g:entered) 2329a26b9700SBram Moolenaar 2330a26b9700SBram Moolenaar assert_fails('doautocmd Syntax#comment', 'E216:') 2331a26b9700SBram Moolenaar 2332a26b9700SBram Moolenaar au! TabEnter 2333a26b9700SBram Moolenaar unlet g:entered 2334d72c1bf0SBram Moolenaar 2335d72c1bf0SBram Moolenaar CheckScriptSuccess([ 2336d72c1bf0SBram Moolenaar 'vim9script', 23376797966dSBram Moolenaar 'g:var = 123', 2338e55b1c09SBram Moolenaar 'b:var = 456', 2339e55b1c09SBram Moolenaar 'w:var = 777', 2340e55b1c09SBram Moolenaar 't:var = 888', 2341d72c1bf0SBram Moolenaar 'unlet g:var w:var # something', 2342d72c1bf0SBram Moolenaar ]) 2343d72c1bf0SBram Moolenaar 2344d72c1bf0SBram Moolenaar CheckScriptFailure([ 2345d72c1bf0SBram Moolenaar 'vim9script', 2346*cfcd011fSBram Moolenaar 'let var = 123', 2347*cfcd011fSBram Moolenaar ], 'E1126: Cannot use :let in Vim9 script') 2348*cfcd011fSBram Moolenaar 2349*cfcd011fSBram Moolenaar CheckScriptFailure([ 2350*cfcd011fSBram Moolenaar 'vim9script', 2351*cfcd011fSBram Moolenaar 'var g:var = 123', 2352e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a global variable:') 2353e55b1c09SBram Moolenaar 2354e55b1c09SBram Moolenaar CheckScriptFailure([ 2355e55b1c09SBram Moolenaar 'vim9script', 2356*cfcd011fSBram Moolenaar 'var b:var = 123', 2357e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a buffer variable:') 2358e55b1c09SBram Moolenaar 2359e55b1c09SBram Moolenaar CheckScriptFailure([ 2360e55b1c09SBram Moolenaar 'vim9script', 2361*cfcd011fSBram Moolenaar 'var w:var = 123', 2362e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a window variable:') 2363e55b1c09SBram Moolenaar 2364e55b1c09SBram Moolenaar CheckScriptFailure([ 2365e55b1c09SBram Moolenaar 'vim9script', 2366*cfcd011fSBram Moolenaar 'var t:var = 123', 2367e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a tab variable:') 2368e55b1c09SBram Moolenaar 2369e55b1c09SBram Moolenaar CheckScriptFailure([ 2370e55b1c09SBram Moolenaar 'vim9script', 2371*cfcd011fSBram Moolenaar 'var v:version = 123', 2372e55b1c09SBram Moolenaar ], 'E1016: Cannot declare a v: variable:') 2373e55b1c09SBram Moolenaar 2374e55b1c09SBram Moolenaar CheckScriptFailure([ 2375e55b1c09SBram Moolenaar 'vim9script', 2376*cfcd011fSBram Moolenaar 'var $VARIABLE = "text"', 2377e55b1c09SBram Moolenaar ], 'E1016: Cannot declare an environment variable:') 23786797966dSBram Moolenaar 23796797966dSBram Moolenaar CheckScriptFailure([ 23806797966dSBram Moolenaar 'vim9script', 23816797966dSBram Moolenaar 'g:var = 123', 238232e35117SBram Moolenaar 'unlet g:var# comment1', 2383d72c1bf0SBram Moolenaar ], 'E108:') 2384d72c1bf0SBram Moolenaar 2385d72c1bf0SBram Moolenaar CheckScriptFailure([ 2386d72c1bf0SBram Moolenaar 'let g:var = 123', 2387d72c1bf0SBram Moolenaar 'unlet g:var # something', 2388d72c1bf0SBram Moolenaar ], 'E488:') 2389faac4104SBram Moolenaar 2390faac4104SBram Moolenaar CheckScriptSuccess([ 2391faac4104SBram Moolenaar 'vim9script', 239232e35117SBram Moolenaar 'if 1 # comment2', 2393faac4104SBram Moolenaar ' echo "yes"', 2394faac4104SBram Moolenaar 'elseif 2 #comment', 2395faac4104SBram Moolenaar ' echo "no"', 2396faac4104SBram Moolenaar 'endif', 2397faac4104SBram Moolenaar ]) 2398faac4104SBram Moolenaar 2399faac4104SBram Moolenaar CheckScriptFailure([ 2400faac4104SBram Moolenaar 'vim9script', 240132e35117SBram Moolenaar 'if 1# comment3', 2402faac4104SBram Moolenaar ' echo "yes"', 2403faac4104SBram Moolenaar 'endif', 2404faac4104SBram Moolenaar ], 'E15:') 2405faac4104SBram Moolenaar 2406faac4104SBram Moolenaar CheckScriptFailure([ 2407faac4104SBram Moolenaar 'vim9script', 240832e35117SBram Moolenaar 'if 0 # comment4', 2409faac4104SBram Moolenaar ' echo "yes"', 2410faac4104SBram Moolenaar 'elseif 2#comment', 2411faac4104SBram Moolenaar ' echo "no"', 2412faac4104SBram Moolenaar 'endif', 2413faac4104SBram Moolenaar ], 'E15:') 2414faac4104SBram Moolenaar 2415faac4104SBram Moolenaar CheckScriptSuccess([ 2416faac4104SBram Moolenaar 'vim9script', 2417*cfcd011fSBram Moolenaar 'var v = 1 # comment5', 2418faac4104SBram Moolenaar ]) 2419faac4104SBram Moolenaar 2420faac4104SBram Moolenaar CheckScriptFailure([ 2421faac4104SBram Moolenaar 'vim9script', 2422*cfcd011fSBram Moolenaar 'var v = 1# comment6', 242332e35117SBram Moolenaar ], 'E15:') 2424faac4104SBram Moolenaar 2425faac4104SBram Moolenaar CheckScriptSuccess([ 2426faac4104SBram Moolenaar 'vim9script', 2427faac4104SBram Moolenaar 'new' 2428d2c61705SBram Moolenaar 'setline(1, ["# define pat", "last"])', 2429df069eecSBram Moolenaar ':$', 2430faac4104SBram Moolenaar 'dsearch /pat/ #comment', 2431faac4104SBram Moolenaar 'bwipe!', 2432faac4104SBram Moolenaar ]) 2433faac4104SBram Moolenaar 2434f5be8cdbSBram Moolenaar CheckScriptFailure([ 2435f5be8cdbSBram Moolenaar 'vim9script', 2436f5be8cdbSBram Moolenaar 'new' 2437d2c61705SBram Moolenaar 'setline(1, ["# define pat", "last"])', 2438f5be8cdbSBram Moolenaar ':$', 2439f5be8cdbSBram Moolenaar 'dsearch /pat/#comment', 2440f5be8cdbSBram Moolenaar 'bwipe!', 2441f5be8cdbSBram Moolenaar ], 'E488:') 2442f5be8cdbSBram Moolenaar 2443f5be8cdbSBram Moolenaar CheckScriptFailure([ 2444f5be8cdbSBram Moolenaar 'vim9script', 2445f5be8cdbSBram Moolenaar 'func! SomeFunc()', 2446f5be8cdbSBram Moolenaar ], 'E477:') 2447a26b9700SBram Moolenaarenddef 2448a26b9700SBram Moolenaar 24497e5bd91dSBram Moolenaardef Test_finish() 2450*cfcd011fSBram Moolenaar var lines =<< trim END 24517e5bd91dSBram Moolenaar vim9script 24526797966dSBram Moolenaar g:res = 'one' 24537e5bd91dSBram Moolenaar if v:false | finish | endif 24546797966dSBram Moolenaar g:res = 'two' 24557e5bd91dSBram Moolenaar finish 24566797966dSBram Moolenaar g:res = 'three' 24577e5bd91dSBram Moolenaar END 24587e5bd91dSBram Moolenaar writefile(lines, 'Xfinished') 24597e5bd91dSBram Moolenaar source Xfinished 24607e5bd91dSBram Moolenaar assert_equal('two', g:res) 24617e5bd91dSBram Moolenaar 24627e5bd91dSBram Moolenaar unlet g:res 24637e5bd91dSBram Moolenaar delete('Xfinished') 24647e5bd91dSBram Moolenaarenddef 24657e5bd91dSBram Moolenaar 246632e35117SBram Moolenaardef Test_let_func_call() 2467*cfcd011fSBram Moolenaar var lines =<< trim END 246832e35117SBram Moolenaar vim9script 246932e35117SBram Moolenaar func GetValue() 247032e35117SBram Moolenaar if exists('g:count') 247132e35117SBram Moolenaar let g:count += 1 247232e35117SBram Moolenaar else 247332e35117SBram Moolenaar let g:count = 1 247432e35117SBram Moolenaar endif 247532e35117SBram Moolenaar return 'this' 247632e35117SBram Moolenaar endfunc 2477*cfcd011fSBram Moolenaar var val: string = GetValue() 2478f5be8cdbSBram Moolenaar # env var is always a string 2479*cfcd011fSBram Moolenaar var env = $TERM 248032e35117SBram Moolenaar END 248132e35117SBram Moolenaar writefile(lines, 'Xfinished') 248232e35117SBram Moolenaar source Xfinished 2483f5be8cdbSBram Moolenaar # GetValue() is not called during discovery phase 248432e35117SBram Moolenaar assert_equal(1, g:count) 248532e35117SBram Moolenaar 248632e35117SBram Moolenaar unlet g:count 248732e35117SBram Moolenaar delete('Xfinished') 248832e35117SBram Moolenaarenddef 248932e35117SBram Moolenaar 249032e35117SBram Moolenaardef Test_let_missing_type() 2491*cfcd011fSBram Moolenaar var lines =<< trim END 249232e35117SBram Moolenaar vim9script 2493*cfcd011fSBram Moolenaar var name = g:unknown 2494227a69deSBram Moolenaar END 2495822ba247SBram Moolenaar CheckScriptFailure(lines, 'E121:') 2496227a69deSBram Moolenaar 2497227a69deSBram Moolenaar lines =<< trim END 2498227a69deSBram Moolenaar vim9script 2499*cfcd011fSBram Moolenaar var nr: number = 123 2500*cfcd011fSBram Moolenaar var name = nr 2501227a69deSBram Moolenaar END 2502822ba247SBram Moolenaar CheckScriptSuccess(lines) 250332e35117SBram Moolenaarenddef 250432e35117SBram Moolenaar 2505c82a5b5dSBram Moolenaardef Test_let_declaration() 2506*cfcd011fSBram Moolenaar var lines =<< trim END 2507c82a5b5dSBram Moolenaar vim9script 2508*cfcd011fSBram Moolenaar var name: string 2509*cfcd011fSBram Moolenaar g:var_uninit = name 2510*cfcd011fSBram Moolenaar name = 'text' 2511*cfcd011fSBram Moolenaar g:var_test = name 2512f5be8cdbSBram Moolenaar # prefixing s: is optional 2513*cfcd011fSBram Moolenaar s:name = 'prefixed' 2514*cfcd011fSBram Moolenaar g:var_prefixed = s:name 2515984dddbeSBram Moolenaar 2516*cfcd011fSBram Moolenaar var s:other: number 2517984dddbeSBram Moolenaar other = 1234 2518984dddbeSBram Moolenaar g:other_var = other 251953b29e48SBram Moolenaar 252053b29e48SBram Moolenaar # type is inferred 252153b29e48SBram Moolenaar s:dict = {'a': 222} 252253b29e48SBram Moolenaar def GetDictVal(key: any) 252353b29e48SBram Moolenaar g:dict_val = s:dict[key] 252453b29e48SBram Moolenaar enddef 252553b29e48SBram Moolenaar GetDictVal('a') 2526c82a5b5dSBram Moolenaar END 2527c82a5b5dSBram Moolenaar CheckScriptSuccess(lines) 2528c82a5b5dSBram Moolenaar assert_equal('', g:var_uninit) 2529c82a5b5dSBram Moolenaar assert_equal('text', g:var_test) 2530984dddbeSBram Moolenaar assert_equal('prefixed', g:var_prefixed) 2531984dddbeSBram Moolenaar assert_equal(1234, g:other_var) 253253b29e48SBram Moolenaar assert_equal(222, g:dict_val) 2533c82a5b5dSBram Moolenaar 2534c82a5b5dSBram Moolenaar unlet g:var_uninit 2535c82a5b5dSBram Moolenaar unlet g:var_test 2536984dddbeSBram Moolenaar unlet g:var_prefixed 2537984dddbeSBram Moolenaar unlet g:other_var 2538c82a5b5dSBram Moolenaarenddef 2539c82a5b5dSBram Moolenaar 2540c5b1c20bSBram Moolenaardef Test_let_declaration_fails() 2541*cfcd011fSBram Moolenaar var lines =<< trim END 2542c5b1c20bSBram Moolenaar vim9script 254330fd8204SBram Moolenaar final var: string 254430fd8204SBram Moolenaar END 254530fd8204SBram Moolenaar CheckScriptFailure(lines, 'E1125:') 254630fd8204SBram Moolenaar 254730fd8204SBram Moolenaar lines =<< trim END 254830fd8204SBram Moolenaar vim9script 2549c5b1c20bSBram Moolenaar const var: string 2550c5b1c20bSBram Moolenaar END 2551c5b1c20bSBram Moolenaar CheckScriptFailure(lines, 'E1021:') 2552c5b1c20bSBram Moolenaar 2553c5b1c20bSBram Moolenaar lines =<< trim END 2554c5b1c20bSBram Moolenaar vim9script 2555*cfcd011fSBram Moolenaar var 9var: string 2556c5b1c20bSBram Moolenaar END 2557c5b1c20bSBram Moolenaar CheckScriptFailure(lines, 'E475:') 2558c5b1c20bSBram Moolenaarenddef 2559c5b1c20bSBram Moolenaar 256034db91f7SBram Moolenaardef Test_let_type_check() 2561*cfcd011fSBram Moolenaar var lines =<< trim END 256234db91f7SBram Moolenaar vim9script 2563*cfcd011fSBram Moolenaar var name: string 2564*cfcd011fSBram Moolenaar name = 1234 256534db91f7SBram Moolenaar END 2566451c2e35SBram Moolenaar CheckScriptFailure(lines, 'E1012:') 2567984dddbeSBram Moolenaar 2568984dddbeSBram Moolenaar lines =<< trim END 2569984dddbeSBram Moolenaar vim9script 2570*cfcd011fSBram Moolenaar var name:string 2571984dddbeSBram Moolenaar END 2572984dddbeSBram Moolenaar CheckScriptFailure(lines, 'E1069:') 2573c5b1c20bSBram Moolenaar 2574c5b1c20bSBram Moolenaar lines =<< trim END 2575c5b1c20bSBram Moolenaar vim9script 2576*cfcd011fSBram Moolenaar var name: asdf 2577c5b1c20bSBram Moolenaar END 2578c5b1c20bSBram Moolenaar CheckScriptFailure(lines, 'E1010:') 2579a71e2633SBram Moolenaar 2580a71e2633SBram Moolenaar lines =<< trim END 2581a71e2633SBram Moolenaar vim9script 2582*cfcd011fSBram Moolenaar var s:l: list<number> 2583a71e2633SBram Moolenaar s:l = [] 2584a71e2633SBram Moolenaar END 2585a71e2633SBram Moolenaar CheckScriptSuccess(lines) 2586a71e2633SBram Moolenaar 2587a71e2633SBram Moolenaar lines =<< trim END 2588a71e2633SBram Moolenaar vim9script 2589*cfcd011fSBram Moolenaar var s:d: dict<number> 2590a71e2633SBram Moolenaar s:d = {} 2591a71e2633SBram Moolenaar END 2592a71e2633SBram Moolenaar CheckScriptSuccess(lines) 259334db91f7SBram Moolenaarenddef 259434db91f7SBram Moolenaar 25955e654230SBram Moolenaarlet g:dict_number = #{one: 1, two: 2} 25965e654230SBram Moolenaar 25975e654230SBram Moolenaardef Test_let_list_dict_type() 2598*cfcd011fSBram Moolenaar var ll: list<number> 25995e654230SBram Moolenaar ll = [1, 2, 2, 3, 3, 3]->uniq() 26005e654230SBram Moolenaar ll->assert_equal([1, 2, 3]) 26015e654230SBram Moolenaar 2602*cfcd011fSBram Moolenaar var dd: dict<number> 26035e654230SBram Moolenaar dd = g:dict_number 26045e654230SBram Moolenaar dd->assert_equal(g:dict_number) 26055e654230SBram Moolenaar 2606*cfcd011fSBram Moolenaar var lines =<< trim END 2607*cfcd011fSBram Moolenaar var ll: list<number> 26085e654230SBram Moolenaar ll = [1, 2, 3]->map('"one"') 26095e654230SBram Moolenaar END 26105e654230SBram Moolenaar CheckDefExecFailure(lines, 'E1012: Type mismatch; expected list<number> but got list<string>') 26115e654230SBram Moolenaarenddef 26125e654230SBram Moolenaar 2613a5d0077eSBram Moolenaardef Test_forward_declaration() 2614*cfcd011fSBram Moolenaar var lines =<< trim END 2615a5d0077eSBram Moolenaar vim9script 2616a5d0077eSBram Moolenaar def GetValue(): string 2617a5d0077eSBram Moolenaar return theVal 2618a5d0077eSBram Moolenaar enddef 2619*cfcd011fSBram Moolenaar var theVal = 'something' 2620822ba247SBram Moolenaar g:initVal = GetValue() 2621a5d0077eSBram Moolenaar theVal = 'else' 2622a5d0077eSBram Moolenaar g:laterVal = GetValue() 2623a5d0077eSBram Moolenaar END 2624a5d0077eSBram Moolenaar writefile(lines, 'Xforward') 2625a5d0077eSBram Moolenaar source Xforward 2626a5d0077eSBram Moolenaar assert_equal('something', g:initVal) 2627a5d0077eSBram Moolenaar assert_equal('else', g:laterVal) 2628a5d0077eSBram Moolenaar 2629a5d0077eSBram Moolenaar unlet g:initVal 2630a5d0077eSBram Moolenaar unlet g:laterVal 2631a5d0077eSBram Moolenaar delete('Xforward') 2632a5d0077eSBram Moolenaarenddef 2633a5d0077eSBram Moolenaar 26349721fb4eSBram Moolenaardef Test_source_vim9_from_legacy() 2635*cfcd011fSBram Moolenaar var legacy_lines =<< trim END 26369721fb4eSBram Moolenaar source Xvim9_script.vim 26379721fb4eSBram Moolenaar 26389721fb4eSBram Moolenaar call assert_false(exists('local')) 26399721fb4eSBram Moolenaar call assert_false(exists('exported')) 26409721fb4eSBram Moolenaar call assert_false(exists('s:exported')) 26419721fb4eSBram Moolenaar call assert_equal('global', global) 26429721fb4eSBram Moolenaar call assert_equal('global', g:global) 26439721fb4eSBram Moolenaar 26449721fb4eSBram Moolenaar " imported variable becomes script-local 26459721fb4eSBram Moolenaar import exported from './Xvim9_script.vim' 26469721fb4eSBram Moolenaar call assert_equal('exported', s:exported) 26479721fb4eSBram Moolenaar call assert_false(exists('exported')) 26489721fb4eSBram Moolenaar 26499721fb4eSBram Moolenaar " imported function becomes script-local 26509721fb4eSBram Moolenaar import GetText from './Xvim9_script.vim' 26519721fb4eSBram Moolenaar call assert_equal('text', s:GetText()) 26529721fb4eSBram Moolenaar call assert_false(exists('*GetText')) 26539721fb4eSBram Moolenaar END 26549721fb4eSBram Moolenaar writefile(legacy_lines, 'Xlegacy_script.vim') 26559721fb4eSBram Moolenaar 2656*cfcd011fSBram Moolenaar var vim9_lines =<< trim END 26579721fb4eSBram Moolenaar vim9script 2658*cfcd011fSBram Moolenaar var local = 'local' 26599721fb4eSBram Moolenaar g:global = 'global' 2660*cfcd011fSBram Moolenaar export var exported = 'exported' 26619721fb4eSBram Moolenaar export def GetText(): string 26629721fb4eSBram Moolenaar return 'text' 26639721fb4eSBram Moolenaar enddef 26649721fb4eSBram Moolenaar END 26659721fb4eSBram Moolenaar writefile(vim9_lines, 'Xvim9_script.vim') 26669721fb4eSBram Moolenaar 26679721fb4eSBram Moolenaar source Xlegacy_script.vim 26689721fb4eSBram Moolenaar 26699721fb4eSBram Moolenaar assert_equal('global', g:global) 2670f5be8cdbSBram Moolenaar unlet g:global 26719721fb4eSBram Moolenaar 26729721fb4eSBram Moolenaar delete('Xlegacy_script.vim') 26739721fb4eSBram Moolenaar delete('Xvim9_script.vim') 26749721fb4eSBram Moolenaarenddef 2675a5d0077eSBram Moolenaar 26767d699701SBram Moolenaarfunc Test_vim9script_not_global() 26777d699701SBram Moolenaar " check that items defined in Vim9 script are script-local, not global 26787d699701SBram Moolenaar let vim9lines =<< trim END 26797d699701SBram Moolenaar vim9script 2680*cfcd011fSBram Moolenaar var name = 'local' 26817d699701SBram Moolenaar func TheFunc() 26827d699701SBram Moolenaar echo 'local' 26837d699701SBram Moolenaar endfunc 26847d699701SBram Moolenaar def DefFunc() 26857d699701SBram Moolenaar echo 'local' 26867d699701SBram Moolenaar enddef 26877d699701SBram Moolenaar END 26887d699701SBram Moolenaar call writefile(vim9lines, 'Xvim9script.vim') 26897d699701SBram Moolenaar source Xvim9script.vim 26907d699701SBram Moolenaar try 26917d699701SBram Moolenaar echo g:var 26927d699701SBram Moolenaar assert_report('did not fail') 26937d699701SBram Moolenaar catch /E121:/ 26947d699701SBram Moolenaar " caught 26957d699701SBram Moolenaar endtry 26967d699701SBram Moolenaar try 26977d699701SBram Moolenaar call TheFunc() 26987d699701SBram Moolenaar assert_report('did not fail') 26997d699701SBram Moolenaar catch /E117:/ 27007d699701SBram Moolenaar " caught 27017d699701SBram Moolenaar endtry 27027d699701SBram Moolenaar try 27037d699701SBram Moolenaar call DefFunc() 27047d699701SBram Moolenaar assert_report('did not fail') 27057d699701SBram Moolenaar catch /E117:/ 27067d699701SBram Moolenaar " caught 27077d699701SBram Moolenaar endtry 27087d699701SBram Moolenaar 270925859dd7SBram Moolenaar call delete('Xvim9script.vim') 27107d699701SBram Moolenaarendfunc 27117d699701SBram Moolenaar 2712eeb27bfeSBram Moolenaardef Test_vim9_copen() 2713eeb27bfeSBram Moolenaar # this was giving an error for setting w:quickfix_title 2714eeb27bfeSBram Moolenaar copen 2715eeb27bfeSBram Moolenaar quit 2716eeb27bfeSBram Moolenaarenddef 2717eeb27bfeSBram Moolenaar 27182d6b20d6SBram Moolenaar" test using a vim9script that is auto-loaded from an autocmd 27192d6b20d6SBram Moolenaardef Test_vim9_autoload() 2720*cfcd011fSBram Moolenaar var lines =<< trim END 27212d6b20d6SBram Moolenaar vim9script 27222d6b20d6SBram Moolenaar def foo#test() 27232d6b20d6SBram Moolenaar echomsg getreg('"') 27242d6b20d6SBram Moolenaar enddef 27252d6b20d6SBram Moolenaar END 27262d6b20d6SBram Moolenaar 27272d6b20d6SBram Moolenaar mkdir('Xdir/autoload', 'p') 27282d6b20d6SBram Moolenaar writefile(lines, 'Xdir/autoload/foo.vim') 2729*cfcd011fSBram Moolenaar var save_rtp = &rtp 27302d6b20d6SBram Moolenaar exe 'set rtp^=' .. getcwd() .. '/Xdir' 27312d6b20d6SBram Moolenaar augroup test 27322d6b20d6SBram Moolenaar autocmd TextYankPost * call foo#test() 27332d6b20d6SBram Moolenaar augroup END 27342d6b20d6SBram Moolenaar 27352d6b20d6SBram Moolenaar normal Y 27362d6b20d6SBram Moolenaar 27372d6b20d6SBram Moolenaar augroup test 27382d6b20d6SBram Moolenaar autocmd! 27392d6b20d6SBram Moolenaar augroup END 27402d6b20d6SBram Moolenaar delete('Xdir', 'rf') 27412d6b20d6SBram Moolenaar &rtp = save_rtp 27422d6b20d6SBram Moolenaarenddef 27432d6b20d6SBram Moolenaar 274477e5dcc3SBram Moolenaar" This was causing a crash because suppress_errthrow wasn't reset. 274577e5dcc3SBram Moolenaardef Test_vim9_autoload_error() 2746*cfcd011fSBram Moolenaar var lines =<< trim END 274777e5dcc3SBram Moolenaar vim9script 274877e5dcc3SBram Moolenaar def crash#func() 274977e5dcc3SBram Moolenaar try 275077e5dcc3SBram Moolenaar for x in List() 275177e5dcc3SBram Moolenaar endfor 275277e5dcc3SBram Moolenaar catch 275377e5dcc3SBram Moolenaar endtry 275477e5dcc3SBram Moolenaar g:ok = true 275577e5dcc3SBram Moolenaar enddef 275677e5dcc3SBram Moolenaar fu List() 275777e5dcc3SBram Moolenaar invalid 275877e5dcc3SBram Moolenaar endfu 275977e5dcc3SBram Moolenaar try 276077e5dcc3SBram Moolenaar invalid 276177e5dcc3SBram Moolenaar catch /wontmatch/ 276277e5dcc3SBram Moolenaar endtry 276377e5dcc3SBram Moolenaar END 276477e5dcc3SBram Moolenaar call mkdir('Xruntime/autoload', 'p') 276577e5dcc3SBram Moolenaar call writefile(lines, 'Xruntime/autoload/crash.vim') 276677e5dcc3SBram Moolenaar 276777e5dcc3SBram Moolenaar # run in a separate Vim to avoid the side effects of assert_fails() 276877e5dcc3SBram Moolenaar lines =<< trim END 276977e5dcc3SBram Moolenaar exe 'set rtp^=' .. getcwd() .. '/Xruntime' 277077e5dcc3SBram Moolenaar call crash#func() 277177e5dcc3SBram Moolenaar call writefile(['ok'], 'Xdidit') 27729c4f5520SBram Moolenaar qall! 277377e5dcc3SBram Moolenaar END 277477e5dcc3SBram Moolenaar writefile(lines, 'Xscript') 277577e5dcc3SBram Moolenaar RunVim([], [], '-S Xscript') 277677e5dcc3SBram Moolenaar assert_equal(['ok'], readfile('Xdidit')) 277777e5dcc3SBram Moolenaar 277877e5dcc3SBram Moolenaar delete('Xdidit') 277977e5dcc3SBram Moolenaar delete('Xscript') 278077e5dcc3SBram Moolenaar delete('Xruntime', 'rf') 278177e5dcc3SBram Moolenaarenddef 278277e5dcc3SBram Moolenaar 278381e17fbeSBram Moolenaardef Test_script_var_in_autocmd() 278481e17fbeSBram Moolenaar # using a script variable from an autocommand, defined in a :def function in a 278581e17fbeSBram Moolenaar # legacy Vim script, cannot check the variable type. 2786*cfcd011fSBram Moolenaar var lines =<< trim END 278781e17fbeSBram Moolenaar let s:counter = 1 278881e17fbeSBram Moolenaar def s:Func() 278981e17fbeSBram Moolenaar au! CursorHold 279081e17fbeSBram Moolenaar au CursorHold * s:counter += 1 279181e17fbeSBram Moolenaar enddef 279281e17fbeSBram Moolenaar call s:Func() 279381e17fbeSBram Moolenaar doau CursorHold 279481e17fbeSBram Moolenaar call assert_equal(2, s:counter) 279581e17fbeSBram Moolenaar au! CursorHold 279681e17fbeSBram Moolenaar END 279781e17fbeSBram Moolenaar CheckScriptSuccess(lines) 279881e17fbeSBram Moolenaarenddef 279981e17fbeSBram Moolenaar 28003896a105SBram Moolenaardef Test_cmdline_win() 28013896a105SBram Moolenaar # if the Vim syntax highlighting uses Vim9 constructs they can be used from 28023896a105SBram Moolenaar # the command line window. 28033896a105SBram Moolenaar mkdir('rtp/syntax', 'p') 2804*cfcd011fSBram Moolenaar var export_lines =<< trim END 28053896a105SBram Moolenaar vim9script 2806*cfcd011fSBram Moolenaar export var That = 'yes' 28073896a105SBram Moolenaar END 28083896a105SBram Moolenaar writefile(export_lines, 'rtp/syntax/Xexport.vim') 2809*cfcd011fSBram Moolenaar var import_lines =<< trim END 28103896a105SBram Moolenaar vim9script 28113896a105SBram Moolenaar import That from './Xexport.vim' 28123896a105SBram Moolenaar END 28133896a105SBram Moolenaar writefile(import_lines, 'rtp/syntax/vim.vim') 2814*cfcd011fSBram Moolenaar var save_rtp = &rtp 28153896a105SBram Moolenaar &rtp = getcwd() .. '/rtp' .. ',' .. &rtp 28163896a105SBram Moolenaar syntax on 28173896a105SBram Moolenaar augroup CmdWin 28183896a105SBram Moolenaar autocmd CmdwinEnter * g:got_there = 'yes' 28193896a105SBram Moolenaar augroup END 28203896a105SBram Moolenaar # this will open and also close the cmdline window 28213896a105SBram Moolenaar feedkeys('q:', 'xt') 28223896a105SBram Moolenaar assert_equal('yes', g:got_there) 28233896a105SBram Moolenaar 28243896a105SBram Moolenaar augroup CmdWin 28253896a105SBram Moolenaar au! 28263896a105SBram Moolenaar augroup END 28273896a105SBram Moolenaar &rtp = save_rtp 28283896a105SBram Moolenaar delete('rtp', 'rf') 28293896a105SBram Moolenaarenddef 28303896a105SBram Moolenaar 2831e3d4685fSBram Moolenaardef Test_invalid_sid() 2832e3d4685fSBram Moolenaar assert_fails('func <SNR>1234_func', 'E123:') 283325859dd7SBram Moolenaar 28349c4f5520SBram Moolenaar if RunVim([], ['wq! Xdidit'], '+"func <SNR>1_func"') 2835d2c61705SBram Moolenaar assert_equal([], readfile('Xdidit')) 2836e3d4685fSBram Moolenaar endif 2837e3d4685fSBram Moolenaar delete('Xdidit') 2838e3d4685fSBram Moolenaarenddef 2839e3d4685fSBram Moolenaar 2840f0afd9e1SBram Moolenaardef Test_unset_any_variable() 2841*cfcd011fSBram Moolenaar var lines =<< trim END 2842*cfcd011fSBram Moolenaar var name: any 2843*cfcd011fSBram Moolenaar assert_equal(0, name) 2844f0afd9e1SBram Moolenaar END 2845f0afd9e1SBram Moolenaar CheckDefAndScriptSuccess(lines) 2846f0afd9e1SBram Moolenaarenddef 2847f0afd9e1SBram Moolenaar 28487e9210eaSBram Moolenaarfunc Test_define_func_at_command_line() 284958dbef33SBram Moolenaar CheckRunVimInTerminal 285058dbef33SBram Moolenaar 28517e9210eaSBram Moolenaar " call indirectly to avoid compilation error for missing functions 28527e9210eaSBram Moolenaar call Run_Test_define_func_at_command_line() 28537e9210eaSBram Moolenaarendfunc 28547e9210eaSBram Moolenaar 28557e9210eaSBram Moolenaardef Run_Test_define_func_at_command_line() 28569c4f5520SBram Moolenaar # run in a separate Vim instance to avoid the script context 2857*cfcd011fSBram Moolenaar var lines =<< trim END 28589c4f5520SBram Moolenaar func CheckAndQuit() 28599c4f5520SBram Moolenaar call assert_fails('call Afunc()', 'E117: Unknown function: Bfunc') 28609c4f5520SBram Moolenaar call writefile(['errors: ' .. string(v:errors)], 'Xdidcmd') 28619c4f5520SBram Moolenaar endfunc 28629c4f5520SBram Moolenaar END 28639c4f5520SBram Moolenaar writefile([''], 'Xdidcmd') 28649c4f5520SBram Moolenaar writefile(lines, 'XcallFunc') 2865*cfcd011fSBram Moolenaar var buf = RunVimInTerminal('-S XcallFunc', #{rows: 6}) 28669c4f5520SBram Moolenaar # define Afunc() on the command line 28679c4f5520SBram Moolenaar term_sendkeys(buf, ":def Afunc()\<CR>Bfunc()\<CR>enddef\<CR>") 28689c4f5520SBram Moolenaar term_sendkeys(buf, ":call CheckAndQuit()\<CR>") 28699c4f5520SBram Moolenaar WaitForAssert({-> assert_equal(['errors: []'], readfile('Xdidcmd'))}) 28709c4f5520SBram Moolenaar 28719c4f5520SBram Moolenaar call StopVimInTerminal(buf) 28729c4f5520SBram Moolenaar delete('XcallFunc') 28739c4f5520SBram Moolenaar delete('Xdidcmd') 28749c4f5520SBram Moolenaarenddef 28759c4f5520SBram Moolenaar 2876585fea7bSBram Moolenaar" Keep this last, it messes up highlighting. 2877585fea7bSBram Moolenaardef Test_substitute_cmd() 2878585fea7bSBram Moolenaar new 2879585fea7bSBram Moolenaar setline(1, 'something') 2880585fea7bSBram Moolenaar :substitute(some(other( 2881585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 2882585fea7bSBram Moolenaar bwipe! 2883585fea7bSBram Moolenaar 2884f5be8cdbSBram Moolenaar # also when the context is Vim9 script 2885*cfcd011fSBram Moolenaar var lines =<< trim END 2886585fea7bSBram Moolenaar vim9script 2887585fea7bSBram Moolenaar new 2888585fea7bSBram Moolenaar setline(1, 'something') 2889585fea7bSBram Moolenaar :substitute(some(other( 2890585fea7bSBram Moolenaar assert_equal('otherthing', getline(1)) 2891585fea7bSBram Moolenaar bwipe! 2892585fea7bSBram Moolenaar END 2893585fea7bSBram Moolenaar writefile(lines, 'Xvim9lines') 2894585fea7bSBram Moolenaar source Xvim9lines 2895585fea7bSBram Moolenaar 2896585fea7bSBram Moolenaar delete('Xvim9lines') 2897585fea7bSBram Moolenaarenddef 2898585fea7bSBram Moolenaar 28998a7d6542SBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker 2900