comparison src/testdir/test_vim9_builtin.vim @ 26656:ab46f0976435 v8.2.3857

patch 8.2.3857: Vim9: inconsistent error for using function() Commit: https://github.com/vim/vim/commit/2f9f4ccfc8f1d4a56761dc1cc1e9e20190a72c74 Author: Bram Moolenaar <Bram@vim.org> Date: Mon Dec 20 09:36:27 2021 +0000 patch 8.2.3857: Vim9: inconsistent error for using function() Problem: Vim9: inconsistent error for using function(). Solution: Use a runtime type check for the result of function(). (closes #8492)
author Bram Moolenaar <Bram@vim.org>
date Mon, 20 Dec 2021 10:45:04 +0100
parents a07323eb647f
children c04b28fad0cc
comparison
equal deleted inserted replaced
26655:5176bd4de557 26656:ab46f0976435
1256 var res = dict->filter((k, _) => k =~ 'a' && k !~ 'b') 1256 var res = dict->filter((k, _) => k =~ 'a' && k !~ 'b')
1257 res->assert_equal({aa: [1], ac: [3]}) 1257 res->assert_equal({aa: [1], ac: [3]})
1258 enddef 1258 enddef
1259 1259
1260 def Test_foldclosed() 1260 def Test_foldclosed()
1261 CheckDefAndScriptFailure(['foldclosed(function("min"))'], ['E1013: Argument 1: type mismatch, expected string but got func(...): any', 'E1220: String or Number required for argument 1']) 1261 CheckDefAndScriptFailure(['foldclosed(function("min"))'], ['E1013: Argument 1: type mismatch, expected string but got func(...): unknown', 'E1220: String or Number required for argument 1'])
1262 CheckDefExecAndScriptFailure(['foldclosed("")'], 'E1209: Invalid value for a line number') 1262 CheckDefExecAndScriptFailure(['foldclosed("")'], 'E1209: Invalid value for a line number')
1263 assert_equal(-1, foldclosed(1)) 1263 assert_equal(-1, foldclosed(1))
1264 assert_equal(-1, foldclosed('$')) 1264 assert_equal(-1, foldclosed('$'))
1265 enddef 1265 enddef
1266 1266
1310 enddef 1310 enddef
1311 1311
1312 def Test_funcref() 1312 def Test_funcref()
1313 CheckDefAndScriptFailure(['funcref("reverse", 2)'], ['E1013: Argument 2: type mismatch, expected list<any> but got number', 'E1211: List required for argument 2']) 1313 CheckDefAndScriptFailure(['funcref("reverse", 2)'], ['E1013: Argument 2: type mismatch, expected list<any> but got number', 'E1211: List required for argument 2'])
1314 CheckDefAndScriptFailure(['funcref("reverse", [2], [1])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3']) 1314 CheckDefAndScriptFailure(['funcref("reverse", [2], [1])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3'])
1315
1316 var lines =<< trim END
1317 vim9script
1318 def UseBool(b: bool)
1319 enddef
1320 def GetRefOk()
1321 var Ref1: func(bool) = funcref(UseBool)
1322 var Ref2: func(bool) = funcref('UseBool')
1323 enddef
1324 def GetRefBad()
1325 # only fails at runtime
1326 var Ref1: func(number) = funcref(UseBool)
1327 enddef
1328 defcompile
1329 GetRefOk()
1330 END
1331 CheckScriptSuccess(lines)
1332
1333 lines =<< trim END
1334 vim9script
1335 def UseBool(b: bool)
1336 enddef
1337 def GetRefBad()
1338 # only fails at runtime
1339 var Ref1: func(number) = funcref(UseBool)
1340 enddef
1341 GetRefBad()
1342 END
1343 CheckScriptFailure(lines, 'E1012: Type mismatch; expected func(number) but got func(bool)')
1315 enddef 1344 enddef
1316 1345
1317 def Test_function() 1346 def Test_function()
1318 CheckDefAndScriptFailure(['function("reverse", 2)'], ['E1013: Argument 2: type mismatch, expected list<any> but got number', 'E1211: List required for argument 2']) 1347 CheckDefAndScriptFailure(['function("reverse", 2)'], ['E1013: Argument 2: type mismatch, expected list<any> but got number', 'E1211: List required for argument 2'])
1319 CheckDefAndScriptFailure(['function("reverse", [2], [1])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3']) 1348 CheckDefAndScriptFailure(['function("reverse", [2], [1])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3'])
1349
1350 var lines =<< trim END
1351 vim9script
1352 def UseBool(b: bool)
1353 enddef
1354 def GetRefOk()
1355 var Ref1: func(bool) = function(UseBool)
1356 var Ref2: func(bool) = function('UseBool')
1357 enddef
1358 def GetRefBad()
1359 # only fails at runtime
1360 var Ref1: func(number) = function(UseBool)
1361 enddef
1362 defcompile
1363 GetRefOk()
1364 END
1365 CheckScriptSuccess(lines)
1366
1367 lines =<< trim END
1368 vim9script
1369 def UseBool(b: bool)
1370 enddef
1371 def GetRefBad()
1372 # only fails at runtime
1373 var Ref1: func(number) = function(UseBool)
1374 enddef
1375 GetRefBad()
1376 END
1377 CheckScriptFailure(lines, 'E1012: Type mismatch; expected func(number) but got func(bool)')
1320 enddef 1378 enddef
1321 1379
1322 def Test_garbagecollect() 1380 def Test_garbagecollect()
1323 garbagecollect(true) 1381 garbagecollect(true)
1324 CheckDefAndScriptFailure(['garbagecollect("1")'], ['E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1']) 1382 CheckDefAndScriptFailure(['garbagecollect("1")'], ['E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1'])