Mercurial > vim
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']) |