diff src/testdir/test_vim9_func.vim @ 19993:efe864a7ce4f v8.2.0552

patch 8.2.0552: Vim9: some errors not covered by tests Commit: https://github.com/vim/vim/commit/99aaf0ce7cc23b0e759eab2369e266cdc8d46af8 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Apr 12 14:39:53 2020 +0200 patch 8.2.0552: Vim9: some errors not covered by tests Problem: Vim9: some errors not covered by tests. Solution: Add more tests. Check Funcref argument types.
author Bram Moolenaar <Bram@vim.org>
date Sun, 12 Apr 2020 14:45:04 +0200
parents f863aa96cae5
children c001ee73519a
line wrap: on
line diff
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -96,6 +96,7 @@ def Test_call_default_args()
   assert_fails('call MyDefaultArgs("one", "two")', 'E118:')
 
   call CheckScriptFailure(['def Func(arg: number = asdf)', 'enddef'], 'E1001:')
+  call CheckScriptFailure(['def Func(arg: number = "text")', 'enddef'], 'E1013: argument 1: type mismatch, expected number but got string')
 enddef
 
 func Test_call_default_args_from_func()
@@ -196,6 +197,26 @@ def Test_call_func_defined_later()
   call assert_fails('call NotDefined("one")', 'E117:')
 enddef
 
+def CombineFuncrefTypes()
+  " same arguments, different return type
+  let Ref1: func(bool): string
+  let Ref2: func(bool): number
+  let Ref3: func(bool): any
+  Ref3 = g:cond ? Ref1 : Ref2
+
+  " different number of arguments
+  let Refa1: func(bool): number
+  let Refa2: func(bool, number): number
+  let Refa3: func: number
+  Refa3 = g:cond ? Refa1 : Refa2
+
+  " different argument types
+  let Refb1: func(bool, string): number
+  let Refb2: func(string, number): number
+  let Refb3: func(any, any): number
+  Refb3 = g:cond ? Refb1 : Refb2
+enddef
+
 func DefinedLater(arg)
   return a:arg
 endfunc