summaryrefslogtreecommitdiffstats
path: root/src/testdir/test_vim9_assign.vim
diff options
context:
space:
mode:
Diffstat (limited to 'src/testdir/test_vim9_assign.vim')
-rw-r--r--src/testdir/test_vim9_assign.vim56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim
index 3a187774ec..bff9c9f8f1 100644
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -1863,6 +1863,62 @@ def Test_assign_lambda()
v9.CheckDefAndScriptFailure(lines, 'E1051:')
enddef
+def Test_assign_funcref_args()
+ # unspecified arguments match everything, including varargs
+ var lines =<< trim END
+ vim9script
+
+ var FuncUnknown: func: number
+
+ FuncUnknown = (v): number => v
+ assert_equal(5, FuncUnknown(5))
+
+ FuncUnknown = (v1, v2): number => v1 + v2
+ assert_equal(7, FuncUnknown(3, 4))
+
+ FuncUnknown = (...v1): number => v1[0] + v1[1] + len(v1) * 1000
+ assert_equal(4007, FuncUnknown(3, 4, 5, 6))
+
+ FuncUnknown = (v: list<any>): number => v[0] + v[1] + len(v) * 1000
+ assert_equal(5009, FuncUnknown([4, 5, 6, 7, 8]))
+ END
+ v9.CheckScriptSuccess(lines)
+
+ # varargs must match
+ lines =<< trim END
+ vim9script
+ var FuncAnyVA: func(...any): number
+ FuncAnyVA = (v): number => v
+ END
+ v9.CheckScriptFailure(lines, 'E1012: Type mismatch; expected func(...any): number but got func(any): number')
+
+ # varargs must match
+ lines =<< trim END
+ vim9script
+ var FuncAnyVA: func(...any): number
+ FuncAnyVA = (v1, v2): number => v1 + v2
+ END
+ v9.CheckScriptFailure(lines, 'E1012: Type mismatch; expected func(...any): number but got func(any, any): number')
+
+ # varargs must match
+ lines =<< trim END
+ vim9script
+ var FuncAnyVA: func(...any): number
+ FuncAnyVA = (v1: list<any>): number => 3
+ END
+ v9.CheckScriptFailure(lines, 'E1012: Type mismatch; expected func(...any): number but got func(list<any>): number')
+enddef
+
+def Test_assign_funcref_arg_any()
+ var lines =<< trim END
+ vim9script
+ var FuncAnyVA: func(any): number
+ FuncAnyVA = (v): number => v
+ END
+ # TODO: Verify this should succeed.
+ v9.CheckScriptSuccess(lines)
+enddef
+
def Test_heredoc()
# simple heredoc
var lines =<< trim END