Mercurial > vim
diff src/testdir/test_vim9_func.vim @ 19975:4e8e0ce576af v8.2.0543
patch 8.2.0543: Vim9: function with varargs does not work properly
Commit: https://github.com/vim/vim/commit/1378fbc4591b77186c90beda37bdac628add4cb6
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Apr 11 20:50:33 2020 +0200
patch 8.2.0543: Vim9: function with varargs does not work properly
Problem: Vim9: function with varargs does not work properly.
Solution: Improve function type spec and add tests. Fix bugs.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 11 Apr 2020 21:00:04 +0200 |
parents | 8466e62a2481 |
children | f863aa96cae5 |
line wrap: on
line diff
--- a/src/testdir/test_vim9_func.vim +++ b/src/testdir/test_vim9_func.vim @@ -131,6 +131,47 @@ def Test_call_def_varargs() call CheckDefFailure(['MyDefVarargs("one", 22)'], 'E1013: argument 2: type mismatch, expected string but got number') enddef +let s:value = '' + +def FuncOneDefArg(opt = 'text') + s:value = opt +enddef + +def FuncTwoDefArg(nr = 123, opt = 'text'): string + return nr .. opt +enddef + +def FuncVarargs(...arg: list<string>): string + return join(arg, ',') +enddef + +def Test_func_type_varargs() + let RefDefArg: func(?string) + RefDefArg = FuncOneDefArg + RefDefArg() + assert_equal('text', s:value) + RefDefArg('some') + assert_equal('some', s:value) + + let RefDef2Arg: func(?number, ?string): string + RefDef2Arg = FuncTwoDefArg + assert_equal('123text', RefDef2Arg()) + assert_equal('99text', RefDef2Arg(99)) + assert_equal('77some', RefDef2Arg(77, 'some')) + + call CheckDefFailure(['let RefWrong: func(string?)'], 'E1010:') + call CheckDefFailure(['let RefWrong: func(?string, string)'], 'E1007:') + + let RefVarargs: func(...list<string>): string + RefVarargs = FuncVarargs + assert_equal('', RefVarargs()) + assert_equal('one', RefVarargs('one')) + assert_equal('one,two', RefVarargs('one', 'two')) + + call CheckDefFailure(['let RefWrong: func(...list<string>, string)'], 'E110:') + call CheckDefFailure(['let RefWrong: func(...list<string>, ?string)'], 'E110:') +enddef + " Only varargs def MyVarargsOnly(...args: list<string>): string return join(args, ',')