Mercurial > vim
comparison 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 |
comparison
equal
deleted
inserted
replaced
19974:7b71d96d6582 | 19975:4e8e0ce576af |
---|---|
127 call assert_fails('call MyDefVarargs()', 'E119:') | 127 call assert_fails('call MyDefVarargs()', 'E119:') |
128 assert_equal('one,foo', MyDefVarargs('one')) | 128 assert_equal('one,foo', MyDefVarargs('one')) |
129 assert_equal('one,two', MyDefVarargs('one', 'two')) | 129 assert_equal('one,two', MyDefVarargs('one', 'two')) |
130 assert_equal('one,two,three', MyDefVarargs('one', 'two', 'three')) | 130 assert_equal('one,two,three', MyDefVarargs('one', 'two', 'three')) |
131 call CheckDefFailure(['MyDefVarargs("one", 22)'], 'E1013: argument 2: type mismatch, expected string but got number') | 131 call CheckDefFailure(['MyDefVarargs("one", 22)'], 'E1013: argument 2: type mismatch, expected string but got number') |
132 enddef | |
133 | |
134 let s:value = '' | |
135 | |
136 def FuncOneDefArg(opt = 'text') | |
137 s:value = opt | |
138 enddef | |
139 | |
140 def FuncTwoDefArg(nr = 123, opt = 'text'): string | |
141 return nr .. opt | |
142 enddef | |
143 | |
144 def FuncVarargs(...arg: list<string>): string | |
145 return join(arg, ',') | |
146 enddef | |
147 | |
148 def Test_func_type_varargs() | |
149 let RefDefArg: func(?string) | |
150 RefDefArg = FuncOneDefArg | |
151 RefDefArg() | |
152 assert_equal('text', s:value) | |
153 RefDefArg('some') | |
154 assert_equal('some', s:value) | |
155 | |
156 let RefDef2Arg: func(?number, ?string): string | |
157 RefDef2Arg = FuncTwoDefArg | |
158 assert_equal('123text', RefDef2Arg()) | |
159 assert_equal('99text', RefDef2Arg(99)) | |
160 assert_equal('77some', RefDef2Arg(77, 'some')) | |
161 | |
162 call CheckDefFailure(['let RefWrong: func(string?)'], 'E1010:') | |
163 call CheckDefFailure(['let RefWrong: func(?string, string)'], 'E1007:') | |
164 | |
165 let RefVarargs: func(...list<string>): string | |
166 RefVarargs = FuncVarargs | |
167 assert_equal('', RefVarargs()) | |
168 assert_equal('one', RefVarargs('one')) | |
169 assert_equal('one,two', RefVarargs('one', 'two')) | |
170 | |
171 call CheckDefFailure(['let RefWrong: func(...list<string>, string)'], 'E110:') | |
172 call CheckDefFailure(['let RefWrong: func(...list<string>, ?string)'], 'E110:') | |
132 enddef | 173 enddef |
133 | 174 |
134 " Only varargs | 175 " Only varargs |
135 def MyVarargsOnly(...args: list<string>): string | 176 def MyVarargsOnly(...args: list<string>): string |
136 return join(args, ',') | 177 return join(args, ',') |