blob: 10ae2eeb03824ac2b96d6c2b5aec3b1914d0eeb7 [file] [log] [blame]
Bram Moolenaar94738d82020-10-21 14:25:07 +02001" Test using builtin functions in the Vim9 script language.
2
3source check.vim
Bram Moolenaar3aca0912022-04-18 18:32:19 +01004source screendump.vim
Bram Moolenaar62aec932022-01-29 21:45:34 +00005import './vim9.vim' as v9
Bram Moolenaar94738d82020-10-21 14:25:07 +02006
7" Test for passing too many or too few arguments to builtin functions
8func Test_internalfunc_arg_error()
9 let l =<< trim END
10 def! FArgErr(): float
11 return ceil(1.1, 2)
12 enddef
13 defcompile
14 END
Bram Moolenaar0e9bdad2022-10-15 20:06:33 +010015 call writefile(l, 'Xinvalidarg', 'D')
Bram Moolenaar94738d82020-10-21 14:25:07 +020016 call assert_fails('so Xinvalidarg', 'E118:', '', 1, 'FArgErr')
17 let l =<< trim END
18 def! FArgErr(): float
19 return ceil()
20 enddef
21 defcompile
22 END
23 call writefile(l, 'Xinvalidarg')
24 call assert_fails('so Xinvalidarg', 'E119:', '', 1, 'FArgErr')
Bram Moolenaar94738d82020-10-21 14:25:07 +020025endfunc
26
27" Test for builtin functions returning different types
28func Test_InternalFuncRetType()
29 let lines =<< trim END
30 def RetFloat(): float
31 return ceil(1.456)
32 enddef
33
34 def RetListAny(): list<any>
Bram Moolenaare0de1712020-12-02 17:36:54 +010035 return items({k: 'v'})
Bram Moolenaar94738d82020-10-21 14:25:07 +020036 enddef
37
38 def RetListString(): list<string>
39 return split('a:b:c', ':')
40 enddef
41
42 def RetListDictAny(): list<dict<any>>
43 return getbufinfo()
44 enddef
45
46 def RetDictNumber(): dict<number>
47 return wordcount()
48 enddef
49
50 def RetDictString(): dict<string>
51 return environ()
52 enddef
53 END
Bram Moolenaar0e9bdad2022-10-15 20:06:33 +010054 call writefile(lines, 'Xscript', 'D')
Bram Moolenaar94738d82020-10-21 14:25:07 +020055 source Xscript
56
57 call RetFloat()->assert_equal(2.0)
58 call RetListAny()->assert_equal([['k', 'v']])
59 call RetListString()->assert_equal(['a', 'b', 'c'])
60 call RetListDictAny()->assert_notequal([])
61 call RetDictNumber()->assert_notequal({})
62 call RetDictString()->assert_notequal({})
Bram Moolenaar94738d82020-10-21 14:25:07 +020063endfunc
64
65def Test_abs()
66 assert_equal(0, abs(0))
67 assert_equal(2, abs(-2))
68 assert_equal(3, abs(3))
Bram Moolenaar62aec932022-01-29 21:45:34 +000069 v9.CheckDefAndScriptFailure(['abs("text")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1'])
Bram Moolenaar73e28dc2022-09-17 21:08:33 +010070 assert_equal(0, abs(0))
71 assert_equal(2.0, abs(-2.0))
72 assert_equal(3.0, abs(3.0))
Bram Moolenaar94738d82020-10-21 14:25:07 +020073enddef
74
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +020075def Test_add()
Bram Moolenaar62aec932022-01-29 21:45:34 +000076 v9.CheckDefAndScriptFailure(['add({}, 1)'], ['E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', 'E1226: List or Blob required for argument 1'])
Bram Moolenaar7f8a3b12022-05-12 22:03:01 +010077 v9.CheckDefAndScriptFailure(['add([])'], 'E119:')
Bram Moolenaar81330182022-02-01 12:11:58 +000078 v9.CheckDefExecFailure([
79 'var ln: list<number> = [1]',
80 'add(ln, "a")'],
81 'E1012: Type mismatch; expected number but got string')
82 assert_equal([1, 'a'], add([1], 'a'))
83 assert_equal(0z1234, add(0z12, 0x34))
Bram Moolenaar1f4a3452022-01-01 18:29:21 +000084
85 var lines =<< trim END
86 vim9script
87 g:thelist = [1]
88 lockvar g:thelist
89 def TryChange()
90 g:thelist->add(2)
91 enddef
92 TryChange()
93 END
Bram Moolenaar62aec932022-01-29 21:45:34 +000094 v9.CheckScriptFailure(lines, 'E741:')
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +020095enddef
96
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +020097def Test_add_blob()
98 var b1: blob = 0z12
99 add(b1, 0x34)
100 assert_equal(0z1234, b1)
101
102 var b2: blob # defaults to empty blob
103 add(b2, 0x67)
104 assert_equal(0z67, b2)
105
106 var lines =<< trim END
107 var b: blob
108 add(b, "x")
109 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000110 v9.CheckDefFailure(lines, 'E1012:', 2)
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200111
112 lines =<< trim END
113 add(test_null_blob(), 123)
114 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000115 v9.CheckDefExecAndScriptFailure(lines, 'E1131:', 1)
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200116
117 lines =<< trim END
118 var b: blob = test_null_blob()
119 add(b, 123)
120 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000121 v9.CheckDefExecFailure(lines, 'E1131:', 2)
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200122
Bram Moolenaarec15b1c2022-03-27 16:29:53 +0100123 # Getting variable with NULL blob fails
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200124 lines =<< trim END
125 vim9script
126 var b: blob = test_null_blob()
127 add(b, 123)
128 END
Bram Moolenaarec15b1c2022-03-27 16:29:53 +0100129 v9.CheckScriptFailure(lines, 'E1131:', 3)
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200130enddef
131
Bram Moolenaar94738d82020-10-21 14:25:07 +0200132def Test_add_list()
133 var l: list<number> # defaults to empty list
134 add(l, 9)
135 assert_equal([9], l)
136
137 var lines =<< trim END
138 var l: list<number>
139 add(l, "x")
140 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000141 v9.CheckDefFailure(lines, 'E1012:', 2)
Bram Moolenaar94738d82020-10-21 14:25:07 +0200142
143 lines =<< trim END
Bram Moolenaarb7c21af2021-04-18 14:12:31 +0200144 add(test_null_list(), 123)
145 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000146 v9.CheckDefExecAndScriptFailure(lines, 'E1130:', 1)
Bram Moolenaarb7c21af2021-04-18 14:12:31 +0200147
148 lines =<< trim END
Bram Moolenaar94738d82020-10-21 14:25:07 +0200149 var l: list<number> = test_null_list()
150 add(l, 123)
151 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000152 v9.CheckDefExecFailure(lines, 'E1130:', 2)
Bram Moolenaarb7c21af2021-04-18 14:12:31 +0200153
Bram Moolenaaraa7d0c22022-04-05 21:40:38 +0100154 # Getting an uninitialized variable allocates a new list at script level
155 lines =<< trim END
156 vim9script
157 var l: list<number>
158 add(l, 123)
159 END
160 v9.CheckScriptSuccess(lines)
161
162 # Adding to a variable set to a NULL list fails
Bram Moolenaarb7c21af2021-04-18 14:12:31 +0200163 lines =<< trim END
164 vim9script
165 var l: list<number> = test_null_list()
166 add(l, 123)
167 END
Bram Moolenaaraa7d0c22022-04-05 21:40:38 +0100168 v9.CheckScriptFailure(lines, 'E1130:', 3)
Bram Moolenaarf32f0992021-07-08 20:53:40 +0200169
170 lines =<< trim END
171 vim9script
172 var l: list<string> = ['a']
173 l->add(123)
174 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000175 v9.CheckScriptFailure(lines, 'E1012: Type mismatch; expected string but got number', 3)
Bram Moolenaarf055d452021-07-08 20:57:24 +0200176
177 lines =<< trim END
178 vim9script
179 var l: list<string>
180 l->add(123)
181 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000182 v9.CheckScriptFailure(lines, 'E1012: Type mismatch; expected string but got number', 3)
Bram Moolenaar94738d82020-10-21 14:25:07 +0200183enddef
184
Bram Moolenaarfa103972022-09-29 19:14:42 +0100185def Test_add_const()
186 var lines =<< trim END
187 const l = [1, 2]
188 add(l, 3)
189 END
190 v9.CheckDefFailure(lines, 'E1307: Argument 1: Trying to modify a const list<number>')
191
192 lines =<< trim END
Bram Moolenaar6586a012022-09-30 11:04:50 +0100193 final l = [1, 2]
194 add(l, 3)
195 assert_equal([1, 2, 3], l)
196 END
197 v9.CheckDefSuccess(lines)
198
199 lines =<< trim END
Bram Moolenaarfa103972022-09-29 19:14:42 +0100200 const b = 0z0102
201 add(b, 0z03)
202 END
203 v9.CheckDefFailure(lines, 'E1307: Argument 1: Trying to modify a const blob')
204enddef
205
206
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +0200207def Test_and()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000208 v9.CheckDefAndScriptFailure(['and("x", 0x2)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
209 v9.CheckDefAndScriptFailure(['and(0x1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +0200210enddef
211
Bram Moolenaar3af15ab2021-01-17 16:16:23 +0100212def Test_append()
213 new
214 setline(1, range(3))
215 var res1: number = append(1, 'one')
216 assert_equal(0, res1)
217 var res2: bool = append(3, 'two')
218 assert_equal(false, res2)
219 assert_equal(['0', 'one', '1', 'two', '2'], getline(1, 6))
Bram Moolenaarb2ac7d02021-03-28 15:46:16 +0200220
221 append(0, 'zero')
222 assert_equal('zero', getline(1))
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200223 append(0, {a: 10})
224 assert_equal("{'a': 10}", getline(1))
225 append(0, function('min'))
226 assert_equal("function('min')", getline(1))
Bram Moolenaar62aec932022-01-29 21:45:34 +0000227 v9.CheckDefAndScriptFailure(['append([1], "x")'], ['E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1'])
228 v9.CheckDefExecAndScriptFailure(['append("", "x")'], 'E1209: Invalid value for a line number')
229 v9.CheckDefExecAndScriptFailure(['append(".a", "x")'], 'E1209: Invalid value for a line number')
Bram Moolenaar8b6256f2021-12-28 11:24:49 +0000230 # only get one error
231 assert_fails('append("''aa", "x")', ['E1209: Invalid value for a line number: "''aa"', 'E1209:'])
Bram Moolenaar62aec932022-01-29 21:45:34 +0000232 v9.CheckDefExecAndScriptFailure(['append(-1, "x")'], 'E966: Invalid line number: -1')
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200233 bwipe!
234enddef
235
236def Test_appendbufline()
237 new
238 var bnum: number = bufnr()
239 :wincmd w
240 appendbufline(bnum, 0, range(3))
241 var res1: number = appendbufline(bnum, 1, 'one')
242 assert_equal(0, res1)
243 var res2: bool = appendbufline(bnum, 3, 'two')
244 assert_equal(false, res2)
245 assert_equal(['0', 'one', '1', 'two', '2', ''], getbufline(bnum, 1, '$'))
246 appendbufline(bnum, 0, 'zero')
247 assert_equal(['zero'], getbufline(bnum, 1))
Bram Moolenaar62aec932022-01-29 21:45:34 +0000248 v9.CheckDefAndScriptFailure(['appendbufline([1], 1, "x")'], ['E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1'])
249 v9.CheckDefAndScriptFailure(['appendbufline(1, [1], "x")'], ['E1013: Argument 2: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 2'])
250 v9.CheckDefExecAndScriptFailure(['appendbufline(' .. bnum .. ', -1, "x")'], 'E966: Invalid line number: -1')
251 v9.CheckDefExecAndScriptFailure(['appendbufline(' .. bnum .. ', "$a", "x")'], 'E1030: Using a String as a Number: "$a"')
Bram Moolenaar8b6256f2021-12-28 11:24:49 +0000252 assert_fails('appendbufline(' .. bnum .. ', "$a", "x")', ['E1030: Using a String as a Number: "$a"', 'E1030:'])
Bram Moolenaar62aec932022-01-29 21:45:34 +0000253 v9.CheckDefAndScriptFailure(['appendbufline(1, 1, {"a": 10})'], ['E1013: Argument 3: type mismatch, expected string but got dict<number>', 'E1224: String, Number or List required for argument 3'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200254 bnum->bufwinid()->win_gotoid()
Yegappan Lakshmanan51491ad2021-09-30 19:00:00 +0100255 appendbufline('', 0, 'numbers')
256 getline(1)->assert_equal('numbers')
Bram Moolenaarb2ac7d02021-03-28 15:46:16 +0200257 bwipe!
Bram Moolenaar3af15ab2021-01-17 16:16:23 +0100258enddef
259
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +0200260def Test_argc()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000261 v9.CheckDefAndScriptFailure(['argc("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +0200262enddef
263
264def Test_arglistid()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000265 v9.CheckDefAndScriptFailure(['arglistid("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
266 v9.CheckDefAndScriptFailure(['arglistid(1, "y")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
267 v9.CheckDefAndScriptFailure(['arglistid("x", "y")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +0200268enddef
269
270def Test_argv()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000271 v9.CheckDefAndScriptFailure(['argv("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
272 v9.CheckDefAndScriptFailure(['argv(1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
273 v9.CheckDefAndScriptFailure(['argv("x", "y")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +0200274enddef
275
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200276def Test_assert_beeps()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000277 v9.CheckDefAndScriptFailure(['assert_beeps(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200278enddef
279
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +0200280def Test_assert_equalfile()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000281 v9.CheckDefAndScriptFailure(['assert_equalfile(1, "f2")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
282 v9.CheckDefAndScriptFailure(['assert_equalfile("f1", true)'], ['E1013: Argument 2: type mismatch, expected string but got bool', 'E1174: String required for argument 2'])
283 v9.CheckDefAndScriptFailure(['assert_equalfile("f1", "f2", ["a"])'], ['E1013: Argument 3: type mismatch, expected string but got list<string>', 'E1174: String required for argument 3'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +0200284enddef
285
286def Test_assert_exception()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000287 v9.CheckDefAndScriptFailure(['assert_exception({})'], ['E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 1'])
288 v9.CheckDefAndScriptFailure(['assert_exception("E1:", v:null)'], ['E1013: Argument 2: type mismatch, expected string but got special', 'E1174: String required for argument 2'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +0200289enddef
290
Yegappan Lakshmanana764e732021-07-25 15:57:32 +0200291def Test_assert_fails()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000292 v9.CheckDefAndScriptFailure(['assert_fails([])'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
293 v9.CheckDefAndScriptFailure(['assert_fails("a", true)'], ['E1013: Argument 2: type mismatch, expected string but got bool', 'E1222: String or List required for argument 2'])
294 v9.CheckDefAndScriptFailure(['assert_fails("a", "b", "c", "d")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4'])
295 v9.CheckDefAndScriptFailure(['assert_fails("a", "b", "c", 4, 5)'], ['E1013: Argument 5: type mismatch, expected string but got number', 'E1174: String required for argument 5'])
Yegappan Lakshmanana764e732021-07-25 15:57:32 +0200296enddef
297
298def Test_assert_inrange()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000299 v9.CheckDefAndScriptFailure(['assert_inrange("a", 2, 3)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1'])
300 v9.CheckDefAndScriptFailure(['assert_inrange(1, "b", 3)'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 2'])
301 v9.CheckDefAndScriptFailure(['assert_inrange(1, 2, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 3'])
302 v9.CheckDefAndScriptFailure(['assert_inrange(1, 2, 3, 4)'], ['E1013: Argument 4: type mismatch, expected string but got number', 'E1174: String required for argument 4'])
Yegappan Lakshmanana764e732021-07-25 15:57:32 +0200303enddef
304
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +0200305def Test_assert_match()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000306 v9.CheckDefAndScriptFailure(['assert_match({}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict<unknown>', ''])
307 v9.CheckDefAndScriptFailure(['assert_match("a", 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', ''])
308 v9.CheckDefAndScriptFailure(['assert_match("a", "b", null)'], ['E1013: Argument 3: type mismatch, expected string but got special', ''])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +0200309enddef
310
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200311def Test_assert_nobeep()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000312 v9.CheckDefAndScriptFailure(['assert_nobeep(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200313enddef
314
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +0200315def Test_assert_notmatch()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000316 v9.CheckDefAndScriptFailure(['assert_notmatch({}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict<unknown>', ''])
317 v9.CheckDefAndScriptFailure(['assert_notmatch("a", 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', ''])
318 v9.CheckDefAndScriptFailure(['assert_notmatch("a", "b", null)'], ['E1013: Argument 3: type mismatch, expected string but got special', ''])
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +0200319enddef
320
Yegappan Lakshmananc72bdd22021-07-11 19:44:18 +0200321def Test_assert_report()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000322 v9.CheckDefAndScriptFailure(['assert_report([1, 2])'], ['E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1'])
Yegappan Lakshmananc72bdd22021-07-11 19:44:18 +0200323enddef
324
Yegappan Lakshmanan1755a912022-05-19 10:31:47 +0100325def Test_autocmd_add()
326 v9.CheckDefAndScriptFailure(['autocmd_add({})'], ['E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 1'])
327enddef
328
329def Test_autocmd_delete()
330 v9.CheckDefAndScriptFailure(['autocmd_delete({})'], ['E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 1'])
331enddef
332
333def Test_autocmd_get()
334 v9.CheckDefAndScriptFailure(['autocmd_get(10)'], ['E1013: Argument 1: type mismatch, expected dict<any> but got number', 'E1206: Dictionary required for argument 1'])
335enddef
336
Bram Moolenaar32105ae2021-03-27 18:59:25 +0100337def Test_balloon_show()
338 CheckGui
339 CheckFeature balloon_eval
340
Yegappan Lakshmanan4490ec42021-07-27 22:00:44 +0200341 assert_fails('balloon_show(10)', 'E1222:')
342 assert_fails('balloon_show(true)', 'E1222:')
Yegappan Lakshmananc72bdd22021-07-11 19:44:18 +0200343
Bram Moolenaar62aec932022-01-29 21:45:34 +0000344 v9.CheckDefAndScriptFailure(['balloon_show(1.2)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1222: String or List required for argument 1'])
345 v9.CheckDefAndScriptFailure(['balloon_show({"a": 10})'], ['E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1222: String or List required for argument 1'])
Bram Moolenaar32105ae2021-03-27 18:59:25 +0100346enddef
347
348def Test_balloon_split()
Bram Moolenaar7b45d462021-03-27 19:09:02 +0100349 CheckFeature balloon_eval_term
Bram Moolenaar32105ae2021-03-27 18:59:25 +0100350
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +0200351 assert_fails('balloon_split([])', 'E1174:')
Bram Moolenaar32105ae2021-03-27 18:59:25 +0100352 assert_fails('balloon_split(true)', 'E1174:')
353enddef
354
Yegappan Lakshmanan5dfe4672021-09-14 17:54:30 +0200355def Test_blob2list()
Bram Moolenaar82e46e52022-02-05 18:12:34 +0000356 assert_equal(['x', 'x'], blob2list(0z1234)->map((_, _) => 'x'))
Bram Moolenaar62aec932022-01-29 21:45:34 +0000357 v9.CheckDefAndScriptFailure(['blob2list(10)'], ['E1013: Argument 1: type mismatch, expected blob but got number', 'E1238: Blob required for argument 1'])
Yegappan Lakshmanan5dfe4672021-09-14 17:54:30 +0200358enddef
359
Bram Moolenaarf28f2ac2021-03-22 22:21:26 +0100360def Test_browse()
361 CheckFeature browse
362
Bram Moolenaar62aec932022-01-29 21:45:34 +0000363 v9.CheckDefAndScriptFailure(['browse(2, "title", "dir", "file")'], ['E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1'])
364 v9.CheckDefAndScriptFailure(['browse(true, 2, "dir", "file")'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
365 v9.CheckDefAndScriptFailure(['browse(true, "title", 3, "file")'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3'])
366 v9.CheckDefAndScriptFailure(['browse(true, "title", "dir", 4)'], ['E1013: Argument 4: type mismatch, expected string but got number', 'E1174: String required for argument 4'])
Bram Moolenaarf28f2ac2021-03-22 22:21:26 +0100367enddef
368
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +0200369def Test_browsedir()
Yegappan Lakshmanan4490ec42021-07-27 22:00:44 +0200370 if has('browse')
Bram Moolenaar62aec932022-01-29 21:45:34 +0000371 v9.CheckDefAndScriptFailure(['browsedir({}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 1'])
372 v9.CheckDefAndScriptFailure(['browsedir("a", [])'], ['E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2'])
Yegappan Lakshmanan4490ec42021-07-27 22:00:44 +0200373 endif
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +0200374enddef
375
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +0200376def Test_bufadd()
Yegappan Lakshmanan4490ec42021-07-27 22:00:44 +0200377 assert_fails('bufadd([])', 'E1174:')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +0200378enddef
379
Bram Moolenaar32105ae2021-03-27 18:59:25 +0100380def Test_bufexists()
Yegappan Lakshmanan4490ec42021-07-27 22:00:44 +0200381 assert_fails('bufexists(true)', 'E1220:')
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +0200382 bufexists('')->assert_false()
Bram Moolenaar32105ae2021-03-27 18:59:25 +0100383enddef
384
Bram Moolenaar3af15ab2021-01-17 16:16:23 +0100385def Test_buflisted()
386 var res: bool = buflisted('asdf')
387 assert_equal(false, res)
Yegappan Lakshmanan4490ec42021-07-27 22:00:44 +0200388 assert_fails('buflisted(true)', 'E1220:')
389 assert_fails('buflisted([])', 'E1220:')
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +0200390 buflisted('')->assert_false()
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +0200391enddef
392
393def Test_bufload()
Yegappan Lakshmanan4490ec42021-07-27 22:00:44 +0200394 assert_fails('bufload([])', 'E1220:')
Yegappan Lakshmanan51491ad2021-09-30 19:00:00 +0100395 bufload('')->assert_equal(0)
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +0200396enddef
397
398def Test_bufloaded()
Yegappan Lakshmanan4490ec42021-07-27 22:00:44 +0200399 assert_fails('bufloaded(true)', 'E1220:')
400 assert_fails('bufloaded([])', 'E1220:')
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +0200401 bufloaded('')->assert_false()
Bram Moolenaar3af15ab2021-01-17 16:16:23 +0100402enddef
403
Bram Moolenaar94738d82020-10-21 14:25:07 +0200404def Test_bufname()
405 split SomeFile
406 bufname('%')->assert_equal('SomeFile')
407 edit OtherFile
408 bufname('#')->assert_equal('SomeFile')
409 close
Yegappan Lakshmanan4490ec42021-07-27 22:00:44 +0200410 assert_fails('bufname(true)', 'E1220:')
411 assert_fails('bufname([])', 'E1220:')
Bram Moolenaar94738d82020-10-21 14:25:07 +0200412enddef
413
Bram Moolenaar24565cf2022-03-28 18:16:52 +0100414let s:bufnr_res = 0
415
Bram Moolenaar94738d82020-10-21 14:25:07 +0200416def Test_bufnr()
417 var buf = bufnr()
418 bufnr('%')->assert_equal(buf)
419
Bram Moolenaar24565cf2022-03-28 18:16:52 +0100420 # check the lock is not taken over through the stack
421 const nr = 10
422 bufnr_res = bufnr()
423 bufnr_res = 12345
424
Bram Moolenaar94738d82020-10-21 14:25:07 +0200425 buf = bufnr('Xdummy', true)
426 buf->assert_notequal(-1)
427 exe 'bwipe! ' .. buf
Bram Moolenaar62aec932022-01-29 21:45:34 +0000428 v9.CheckDefAndScriptFailure(['bufnr([1])'], ['E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1'])
429 v9.CheckDefAndScriptFailure(['bufnr(1, 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2'])
Bram Moolenaar94738d82020-10-21 14:25:07 +0200430enddef
431
432def Test_bufwinid()
433 var origwin = win_getid()
434 below split SomeFile
435 var SomeFileID = win_getid()
436 below split OtherFile
437 below split SomeFile
438 bufwinid('SomeFile')->assert_equal(SomeFileID)
439
440 win_gotoid(origwin)
441 only
442 bwipe SomeFile
443 bwipe OtherFile
Bram Moolenaar32105ae2021-03-27 18:59:25 +0100444
Yegappan Lakshmanan4490ec42021-07-27 22:00:44 +0200445 assert_fails('bufwinid(true)', 'E1220:')
446 assert_fails('bufwinid([])', 'E1220:')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +0200447enddef
448
449def Test_bufwinnr()
Yegappan Lakshmanan4490ec42021-07-27 22:00:44 +0200450 assert_fails('bufwinnr(true)', 'E1220:')
451 assert_fails('bufwinnr([])', 'E1220:')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +0200452enddef
453
454def Test_byte2line()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000455 v9.CheckDefAndScriptFailure(['byte2line("1")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
456 v9.CheckDefAndScriptFailure(['byte2line([])'], ['E1013: Argument 1: type mismatch, expected number but got list<unknown>', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +0200457 byte2line(0)->assert_equal(-1)
Bram Moolenaar94738d82020-10-21 14:25:07 +0200458enddef
459
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200460def Test_byteidx()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000461 v9.CheckDefAndScriptFailure(['byteidx(1, 2)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
462 v9.CheckDefAndScriptFailure(['byteidx("a", "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +0200463 byteidx('', 0)->assert_equal(0)
464 byteidx('', 1)->assert_equal(-1)
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200465enddef
466
467def Test_byteidxcomp()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000468 v9.CheckDefAndScriptFailure(['byteidxcomp(1, 2)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
469 v9.CheckDefAndScriptFailure(['byteidxcomp("a", "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200470enddef
471
Bram Moolenaar94738d82020-10-21 14:25:07 +0200472def Test_call_call()
473 var l = [3, 2, 1]
474 call('reverse', [l])
475 l->assert_equal([1, 2, 3])
Bram Moolenaar223d0a62021-12-25 19:29:21 +0000476
Bram Moolenaarfe732552022-02-22 19:39:13 +0000477 var lines =<< trim END
478 vim9script
479 def Outer()
480 def g:Inner()
481 g:done = 'Inner'
482 enddef
483 call(g:Inner, [])
484 enddef
485 Outer()
486 assert_equal('Inner', g:done)
487 unlet g:done
488 END
489 v9.CheckScriptSuccess(lines)
490 delfunc g:Inner
491
Bram Moolenaar62aec932022-01-29 21:45:34 +0000492 v9.CheckDefExecAndScriptFailure(['call(123, [2])'], 'E1256: String or function required for argument 1')
493 v9.CheckDefExecAndScriptFailure(['call(true, [2])'], 'E1256: String or function required for argument 1')
494 v9.CheckDefAndScriptFailure(['call("reverse", 2)'], ['E1013: Argument 2: type mismatch, expected list<any> but got number', 'E1211: List required for argument 2'])
495 v9.CheckDefAndScriptFailure(['call("reverse", [2], [1])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3'])
Bram Moolenaar94738d82020-10-21 14:25:07 +0200496enddef
497
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +0200498def Test_ch_canread()
499 if !has('channel')
500 CheckFeature channel
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +0200501 else
Bram Moolenaar62aec932022-01-29 21:45:34 +0000502 v9.CheckDefAndScriptFailure(['ch_canread(10)'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +0200503 endif
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +0200504enddef
505
506def Test_ch_close()
507 if !has('channel')
508 CheckFeature channel
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +0200509 else
Bram Moolenaar62aec932022-01-29 21:45:34 +0000510 v9.CheckDefAndScriptFailure(['ch_close("c")'], ['E1013: Argument 1: type mismatch, expected channel but got string', 'E1217: Channel or Job required for argument 1'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +0200511 endif
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +0200512enddef
513
514def Test_ch_close_in()
515 if !has('channel')
516 CheckFeature channel
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +0200517 else
Bram Moolenaar62aec932022-01-29 21:45:34 +0000518 v9.CheckDefAndScriptFailure(['ch_close_in(true)'], ['E1013: Argument 1: type mismatch, expected channel but got bool', 'E1217: Channel or Job required for argument 1'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +0200519 endif
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +0200520enddef
521
522def Test_ch_evalexpr()
523 if !has('channel')
524 CheckFeature channel
525 else
Bram Moolenaar62aec932022-01-29 21:45:34 +0000526 v9.CheckDefAndScriptFailure(['ch_evalexpr(1, "a")'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1'])
527 v9.CheckDefAndScriptFailure(['ch_evalexpr(test_null_channel(), 1, [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3'])
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +0200528 endif
529enddef
530
531def Test_ch_evalraw()
532 if !has('channel')
533 CheckFeature channel
534 else
Bram Moolenaar62aec932022-01-29 21:45:34 +0000535 v9.CheckDefAndScriptFailure(['ch_evalraw(1, "")'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1'])
536 v9.CheckDefAndScriptFailure(['ch_evalraw(test_null_channel(), 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1221: String or Blob required for argument 2'])
537 v9.CheckDefAndScriptFailure(['ch_evalraw(test_null_channel(), "", [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3'])
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +0200538 endif
539enddef
540
541def Test_ch_getbufnr()
542 if !has('channel')
543 CheckFeature channel
544 else
Bram Moolenaar62aec932022-01-29 21:45:34 +0000545 v9.CheckDefAndScriptFailure(['ch_getbufnr(1, "a")'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1'])
546 v9.CheckDefAndScriptFailure(['ch_getbufnr(test_null_channel(), 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
Yegappan Lakshmanan51491ad2021-09-30 19:00:00 +0100547 # test empty string argument for ch_getbufnr()
548 var job: job = job_start(&shell)
Bram Moolenaar9e043182022-08-18 15:22:09 +0100549 g:WaitForAssert(() => assert_equal('run', job_status(job)))
Yegappan Lakshmanan51491ad2021-09-30 19:00:00 +0100550 job->ch_getbufnr('')->assert_equal(-1)
551 job_stop(job)
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +0200552 endif
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +0200553enddef
554
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200555def Test_ch_getjob()
Dominique Pelle9ff9c7b2021-07-18 21:44:37 +0200556 if !has('channel')
557 CheckFeature channel
558 else
Bram Moolenaar62aec932022-01-29 21:45:34 +0000559 v9.CheckDefAndScriptFailure(['ch_getjob(1)'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1'])
560 v9.CheckDefAndScriptFailure(['ch_getjob({"a": 10})'], ['E1013: Argument 1: type mismatch, expected channel but got dict<number>', 'E1217: Channel or Job required for argument 1'])
Dominique Pelle9ff9c7b2021-07-18 21:44:37 +0200561 assert_equal(0, ch_getjob(test_null_channel()))
562 endif
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200563enddef
564
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +0200565def Test_ch_info()
566 if !has('channel')
567 CheckFeature channel
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +0200568 else
Bram Moolenaar62aec932022-01-29 21:45:34 +0000569 v9.CheckDefAndScriptFailure(['ch_info([1])'], ['E1013: Argument 1: type mismatch, expected channel but got list<number>', 'E1217: Channel or Job required for argument 1'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +0200570 endif
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +0200571enddef
572
Yegappan Lakshmanan7973de32021-07-24 16:16:15 +0200573def Test_ch_log()
574 if !has('channel')
575 CheckFeature channel
576 else
Bram Moolenaar62aec932022-01-29 21:45:34 +0000577 v9.CheckDefAndScriptFailure(['ch_log(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1'])
578 v9.CheckDefAndScriptFailure(['ch_log("a", 1)'], ['E1013: Argument 2: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 2'])
Yegappan Lakshmanan7973de32021-07-24 16:16:15 +0200579 endif
580enddef
581
Bram Moolenaarc5809432021-03-27 21:23:30 +0100582def Test_ch_logfile()
Bram Moolenaar886e5e72021-04-05 13:36:34 +0200583 if !has('channel')
584 CheckFeature channel
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +0200585 else
586 assert_fails('ch_logfile(true)', 'E1174:')
587 assert_fails('ch_logfile("foo", true)', 'E1174:')
Yegappan Lakshmanan51491ad2021-09-30 19:00:00 +0100588 ch_logfile('', '')->assert_equal(0)
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +0200589
Bram Moolenaar62aec932022-01-29 21:45:34 +0000590 v9.CheckDefAndScriptFailure(['ch_logfile(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
591 v9.CheckDefAndScriptFailure(['ch_logfile("a", true)'], ['E1013: Argument 2: type mismatch, expected string but got bool', 'E1174: String required for argument 2'])
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +0200592 endif
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +0200593enddef
594
595def Test_ch_open()
596 if !has('channel')
597 CheckFeature channel
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +0200598 else
Bram Moolenaar62aec932022-01-29 21:45:34 +0000599 v9.CheckDefAndScriptFailure(['ch_open({"a": 10}, "a")'], ['E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1'])
600 v9.CheckDefAndScriptFailure(['ch_open("a", [1])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 2'])
601 v9.CheckDefExecAndScriptFailure(['ch_open("")'], 'E475: Invalid argument')
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +0200602 endif
Bram Moolenaarc5809432021-03-27 21:23:30 +0100603enddef
604
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200605def Test_ch_read()
606 if !has('channel')
607 CheckFeature channel
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +0200608 else
Bram Moolenaar62aec932022-01-29 21:45:34 +0000609 v9.CheckDefAndScriptFailure(['ch_read(1)'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1'])
610 v9.CheckDefAndScriptFailure(['ch_read(test_null_channel(), [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200611 endif
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200612enddef
613
614def Test_ch_readblob()
615 if !has('channel')
616 CheckFeature channel
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +0200617 else
Bram Moolenaar62aec932022-01-29 21:45:34 +0000618 v9.CheckDefAndScriptFailure(['ch_readblob(1)'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1'])
619 v9.CheckDefAndScriptFailure(['ch_readblob(test_null_channel(), [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200620 endif
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200621enddef
622
623def Test_ch_readraw()
624 if !has('channel')
625 CheckFeature channel
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +0200626 else
Bram Moolenaar62aec932022-01-29 21:45:34 +0000627 v9.CheckDefAndScriptFailure(['ch_readraw(1)'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1'])
628 v9.CheckDefAndScriptFailure(['ch_readraw(test_null_channel(), [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200629 endif
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +0200630enddef
631
632def Test_ch_sendexpr()
633 if !has('channel')
634 CheckFeature channel
635 else
Bram Moolenaar62aec932022-01-29 21:45:34 +0000636 v9.CheckDefAndScriptFailure(['ch_sendexpr(1, "a")'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1'])
637 v9.CheckDefAndScriptFailure(['ch_sendexpr(test_null_channel(), 1, [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3'])
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +0200638 endif
639enddef
640
641def Test_ch_sendraw()
642 if !has('channel')
643 CheckFeature channel
644 else
Bram Moolenaar62aec932022-01-29 21:45:34 +0000645 v9.CheckDefAndScriptFailure(['ch_sendraw(1, "")'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1'])
646 v9.CheckDefAndScriptFailure(['ch_sendraw(test_null_channel(), 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1221: String or Blob required for argument 2'])
647 v9.CheckDefAndScriptFailure(['ch_sendraw(test_null_channel(), "", [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3'])
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +0200648 endif
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200649enddef
650
651def Test_ch_setoptions()
652 if !has('channel')
653 CheckFeature channel
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +0200654 else
Bram Moolenaar62aec932022-01-29 21:45:34 +0000655 v9.CheckDefAndScriptFailure(['ch_setoptions(1, {})'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1'])
656 v9.CheckDefAndScriptFailure(['ch_setoptions(test_null_channel(), [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200657 endif
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200658enddef
659
660def Test_ch_status()
661 if !has('channel')
662 CheckFeature channel
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +0200663 else
Bram Moolenaar62aec932022-01-29 21:45:34 +0000664 v9.CheckDefAndScriptFailure(['ch_status(1)'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1'])
665 v9.CheckDefAndScriptFailure(['ch_status(test_null_channel(), [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200666 endif
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200667enddef
668
Bram Moolenaar94738d82020-10-21 14:25:07 +0200669def Test_char2nr()
670 char2nr('あ', true)->assert_equal(12354)
Bram Moolenaarc5809432021-03-27 21:23:30 +0100671
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +0200672 assert_fails('char2nr(true)', 'E1174:')
Bram Moolenaar62aec932022-01-29 21:45:34 +0000673 v9.CheckDefAndScriptFailure(['char2nr(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
674 v9.CheckDefAndScriptFailure(['char2nr("a", 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2'])
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +0200675 assert_equal(97, char2nr('a', 1))
676 assert_equal(97, char2nr('a', 0))
677 assert_equal(97, char2nr('a', true))
678 assert_equal(97, char2nr('a', false))
Yegappan Lakshmanan5dfe4672021-09-14 17:54:30 +0200679 char2nr('')->assert_equal(0)
Bram Moolenaarc5809432021-03-27 21:23:30 +0100680enddef
681
682def Test_charclass()
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +0200683 assert_fails('charclass(true)', 'E1174:')
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +0100684 charclass('')->assert_equal(0)
Bram Moolenaarc5809432021-03-27 21:23:30 +0100685enddef
686
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +0200687def Test_charcol()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000688 v9.CheckDefAndScriptFailure(['charcol(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1222: String or List required for argument 1'])
689 v9.CheckDefAndScriptFailure(['charcol({a: 10})'], ['E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1222: String or List required for argument 1'])
690 v9.CheckDefExecAndScriptFailure(['charcol("")'], 'E1209: Invalid value for a line number')
Yegappan Lakshmananc72bdd22021-07-11 19:44:18 +0200691 new
692 setline(1, ['abcdefgh'])
693 cursor(1, 4)
694 assert_equal(4, charcol('.'))
695 assert_equal(9, charcol([1, '$']))
696 assert_equal(0, charcol([10, '$']))
697 bw!
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +0200698enddef
699
700def Test_charidx()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000701 v9.CheckDefAndScriptFailure(['charidx(0z10, 1)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1174: String required for argument 1'])
702 v9.CheckDefAndScriptFailure(['charidx("a", "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
703 v9.CheckDefAndScriptFailure(['charidx("a", 1, "")'], ['E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3'])
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +0200704 charidx('', 0)->assert_equal(-1)
705 charidx('', 1)->assert_equal(-1)
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +0200706enddef
707
Bram Moolenaarc5809432021-03-27 21:23:30 +0100708def Test_chdir()
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +0200709 assert_fails('chdir(true)', 'E1174:')
710enddef
711
712def Test_cindent()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000713 v9.CheckDefAndScriptFailure(['cindent([])'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
714 v9.CheckDefAndScriptFailure(['cindent(null)'], ['E1013: Argument 1: type mismatch, expected string but got special', 'E1220: String or Number required for argument 1'])
715 v9.CheckDefExecAndScriptFailure(['cindent("")'], 'E1209: Invalid value for a line number')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +0200716 assert_equal(-1, cindent(0))
717 assert_equal(0, cindent('.'))
Bram Moolenaar94738d82020-10-21 14:25:07 +0200718enddef
719
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +0200720def Test_clearmatches()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000721 v9.CheckDefAndScriptFailure(['clearmatches("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +0200722enddef
723
Bram Moolenaar94738d82020-10-21 14:25:07 +0200724def Test_col()
725 new
Yegappan Lakshmananc72bdd22021-07-11 19:44:18 +0200726 setline(1, 'abcdefgh')
727 cursor(1, 4)
728 assert_equal(4, col('.'))
729 col([1, '$'])->assert_equal(9)
730 assert_equal(0, col([10, '$']))
Bram Moolenaarc5809432021-03-27 21:23:30 +0100731
Yegappan Lakshmanan4490ec42021-07-27 22:00:44 +0200732 assert_fails('col(true)', 'E1222:')
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +0200733
Bram Moolenaar62aec932022-01-29 21:45:34 +0000734 v9.CheckDefAndScriptFailure(['col(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1222: String or List required for argument 1'])
735 v9.CheckDefAndScriptFailure(['col({a: 10})'], ['E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1222: String or List required for argument 1'])
736 v9.CheckDefAndScriptFailure(['col(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1222: String or List required for argument 1'])
737 v9.CheckDefExecAndScriptFailure(['col("")'], 'E1209: Invalid value for a line number')
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +0200738 bw!
Bram Moolenaarc5809432021-03-27 21:23:30 +0100739enddef
740
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +0200741def Test_complete()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000742 v9.CheckDefAndScriptFailure(['complete("1", [])'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
743 v9.CheckDefAndScriptFailure(['complete(1, {})'], ['E1013: Argument 2: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 2'])
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +0200744enddef
745
746def Test_complete_add()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000747 v9.CheckDefAndScriptFailure(['complete_add([])'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1223: String or Dictionary required for argument 1'])
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +0200748enddef
749
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200750def Test_complete_info()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000751 v9.CheckDefAndScriptFailure(['complete_info("")'], ['E1013: Argument 1: type mismatch, expected list<string> but got string', 'E1211: List required for argument 1'])
752 v9.CheckDefAndScriptFailure(['complete_info({})'], ['E1013: Argument 1: type mismatch, expected list<string> but got dict<unknown>', 'E1211: List required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200753 assert_equal({'pum_visible': 0, 'mode': '', 'selected': -1, 'items': []}, complete_info())
754 assert_equal({'mode': '', 'items': []}, complete_info(['mode', 'items']))
755enddef
756
Bram Moolenaarc5809432021-03-27 21:23:30 +0100757def Test_confirm()
758 if !has('dialog_con') && !has('dialog_gui')
759 CheckFeature dialog_con
760 endif
761
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +0200762 assert_fails('confirm(true)', 'E1174:')
763 assert_fails('confirm("yes", true)', 'E1174:')
764 assert_fails('confirm("yes", "maybe", 2, true)', 'E1174:')
Bram Moolenaar62aec932022-01-29 21:45:34 +0000765 v9.CheckDefAndScriptFailure(['confirm(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
766 v9.CheckDefAndScriptFailure(['confirm("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
767 v9.CheckDefAndScriptFailure(['confirm("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
768 v9.CheckDefAndScriptFailure(['confirm("a", "b", 3, 4)'], ['E1013: Argument 4: type mismatch, expected string but got number', 'E1174: String required for argument 4'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +0200769enddef
770
Bram Moolenaar94738d82020-10-21 14:25:07 +0200771def Test_copy_return_type()
772 var l = copy([1, 2, 3])
773 var res = 0
774 for n in l
775 res += n
776 endfor
777 res->assert_equal(6)
778
779 var dl = deepcopy([1, 2, 3])
780 res = 0
781 for n in dl
782 res += n
783 endfor
784 res->assert_equal(6)
785
786 dl = deepcopy([1, 2, 3], true)
Bram Moolenaar381692b2022-02-02 20:01:27 +0000787
788 # after a copy() the type can change, but not the item itself
789 var nl: list<number> = [1, 2]
790 assert_equal([1, 2, 'x'], nl->copy()->extend(['x']))
791
792 var lines =<< trim END
793 var nll: list<list<number>> = [[1, 2]]
794 nll->copy()[0]->extend(['x'])
795 END
796 v9.CheckDefExecAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected list<number> but got list<string> in extend()')
797
798 var nd: dict<number> = {a: 1, b: 2}
799 assert_equal({a: 1, b: 2, c: 'x'}, nd->copy()->extend({c: 'x'}))
800 lines =<< trim END
801 var ndd: dict<dict<number>> = {a: {x: 1, y: 2}}
802 ndd->copy()['a']->extend({z: 'x'})
803 END
804 v9.CheckDefExecAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected dict<number> but got dict<string> in extend()')
805
806 # after a deepcopy() the item type can also change
807 var nll: list<list<number>> = [[1, 2]]
808 assert_equal([1, 2, 'x'], nll->deepcopy()[0]->extend(['x']))
809
810 var ndd: dict<dict<number>> = {a: {x: 1, y: 2}}
811 assert_equal({x: 1, y: 2, z: 'x'}, ndd->deepcopy()['a']->extend({z: 'x'}))
Bram Moolenaare0c2b2c2022-02-05 14:05:51 +0000812
813 var ldn: list<dict<number>> = [{a: 0}]->deepcopy()
814 assert_equal([{a: 0}], ldn)
Bram Moolenaar94738d82020-10-21 14:25:07 +0200815enddef
816
817def Test_count()
818 count('ABC ABC ABC', 'b', true)->assert_equal(3)
819 count('ABC ABC ABC', 'b', false)->assert_equal(0)
Bram Moolenaar3e518a82022-08-30 17:45:33 +0100820 v9.CheckDefAndScriptFailure(['count(10, 1)'], 'E1225: String, List or Dictionary required for argument 1')
Bram Moolenaar62aec932022-01-29 21:45:34 +0000821 v9.CheckDefAndScriptFailure(['count("a", [1], 2)'], ['E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3'])
822 v9.CheckDefAndScriptFailure(['count("a", [1], 0, "b")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4'])
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +0200823 count([1, 2, 2, 3], 2)->assert_equal(2)
824 count([1, 2, 2, 3], 2, false, 2)->assert_equal(1)
825 count({a: 1.1, b: 2.2, c: 1.1}, 1.1)->assert_equal(2)
Bram Moolenaar94738d82020-10-21 14:25:07 +0200826enddef
827
Yegappan Lakshmanan7973de32021-07-24 16:16:15 +0200828def Test_cscope_connection()
829 CheckFeature cscope
830 assert_equal(0, cscope_connection())
Bram Moolenaar62aec932022-01-29 21:45:34 +0000831 v9.CheckDefAndScriptFailure(['cscope_connection("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
832 v9.CheckDefAndScriptFailure(['cscope_connection(1, 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
833 v9.CheckDefAndScriptFailure(['cscope_connection(1, "b", 3)'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3'])
Yegappan Lakshmanan7973de32021-07-24 16:16:15 +0200834enddef
835
Bram Moolenaar9a963372020-12-21 21:58:46 +0100836def Test_cursor()
837 new
838 setline(1, range(4))
839 cursor(2, 1)
840 assert_equal(2, getcurpos()[1])
841 cursor('$', 1)
842 assert_equal(4, getcurpos()[1])
Yegappan Lakshmanancd917202021-07-21 19:09:09 +0200843 cursor([2, 1])
844 assert_equal(2, getcurpos()[1])
Bram Moolenaar9a963372020-12-21 21:58:46 +0100845
846 var lines =<< trim END
847 cursor('2', 1)
848 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000849 v9.CheckDefExecAndScriptFailure(lines, 'E1209:')
850 v9.CheckDefAndScriptFailure(['cursor(0z10, 1)'], ['E1013: Argument 1: type mismatch, expected number but got blob', 'E1224: String, Number or List required for argument 1'])
851 v9.CheckDefAndScriptFailure(['cursor(1, "2")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
852 v9.CheckDefAndScriptFailure(['cursor(1, 2, "3")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
853 v9.CheckDefExecAndScriptFailure(['cursor("", 2)'], 'E1209: Invalid value for a line number')
Bram Moolenaar9a963372020-12-21 21:58:46 +0100854enddef
855
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +0200856def Test_debugbreak()
857 CheckMSWindows
Bram Moolenaar62aec932022-01-29 21:45:34 +0000858 v9.CheckDefAndScriptFailure(['debugbreak("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +0200859enddef
860
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +0200861def Test_deepcopy()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000862 v9.CheckDefAndScriptFailure(['deepcopy({}, 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2'])
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +0200863enddef
864
Bram Moolenaar3af15ab2021-01-17 16:16:23 +0100865def Test_delete()
866 var res: bool = delete('doesnotexist')
867 assert_equal(true, res)
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +0200868
Bram Moolenaar62aec932022-01-29 21:45:34 +0000869 v9.CheckDefAndScriptFailure(['delete(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
870 v9.CheckDefAndScriptFailure(['delete("a", 10)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
871 v9.CheckDefExecAndScriptFailure(['delete("")'], 'E474: Invalid argument')
Bram Moolenaar3af15ab2021-01-17 16:16:23 +0100872enddef
873
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +0200874def Test_deletebufline()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000875 v9.CheckDefAndScriptFailure(['deletebufline([], 2)'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
876 v9.CheckDefAndScriptFailure(['deletebufline("a", [])'], ['E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 2'])
877 v9.CheckDefAndScriptFailure(['deletebufline("a", 2, 0z10)'], ['E1013: Argument 3: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 3'])
Yegappan Lakshmanan51491ad2021-09-30 19:00:00 +0100878 new
879 setline(1, ['one', 'two'])
880 deletebufline('', 1)
881 getline(1, '$')->assert_equal(['two'])
Bram Moolenaar8b6256f2021-12-28 11:24:49 +0000882
883 assert_fails('deletebufline("", "$a", "$b")', ['E1030: Using a String as a Number: "$a"', 'E1030: Using a String as a Number: "$a"'])
884 assert_fails('deletebufline("", "$", "$b")', ['E1030: Using a String as a Number: "$b"', 'E1030: Using a String as a Number: "$b"'])
885
Yegappan Lakshmanan51491ad2021-09-30 19:00:00 +0100886 bwipe!
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +0200887enddef
888
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +0200889def Test_diff_filler()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000890 v9.CheckDefAndScriptFailure(['diff_filler([])'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
891 v9.CheckDefAndScriptFailure(['diff_filler(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1'])
892 v9.CheckDefExecAndScriptFailure(['diff_filler("")'], 'E1209: Invalid value for a line number')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +0200893 assert_equal(0, diff_filler(1))
894 assert_equal(0, diff_filler('.'))
895enddef
896
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +0200897def Test_diff_hlID()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000898 v9.CheckDefAndScriptFailure(['diff_hlID(0z10, 1)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1'])
899 v9.CheckDefAndScriptFailure(['diff_hlID(1, "a")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
900 v9.CheckDefExecAndScriptFailure(['diff_hlID("", 10)'], 'E1209: Invalid value for a line number')
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +0200901enddef
902
903def Test_digraph_get()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000904 v9.CheckDefAndScriptFailure(['digraph_get(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
905 v9.CheckDefExecAndScriptFailure(['digraph_get("")'], 'E1214: Digraph must be just two characters')
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +0200906enddef
907
908def Test_digraph_getlist()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000909 v9.CheckDefAndScriptFailure(['digraph_getlist(10)'], ['E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1'])
910 v9.CheckDefAndScriptFailure(['digraph_getlist("")'], ['E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1'])
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +0200911enddef
912
913def Test_digraph_set()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000914 v9.CheckDefAndScriptFailure(['digraph_set(10, "a")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
915 v9.CheckDefAndScriptFailure(['digraph_set("ab", 0z10)'], ['E1013: Argument 2: type mismatch, expected string but got blob', 'E1174: String required for argument 2'])
916 v9.CheckDefExecAndScriptFailure(['digraph_set("", "a")'], 'E1214: Digraph must be just two characters')
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +0200917enddef
918
919def Test_digraph_setlist()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000920 v9.CheckDefAndScriptFailure(['digraph_setlist("a")'], ['E1013: Argument 1: type mismatch, expected list<string> but got string', 'E1216: digraph_setlist() argument must be a list of lists with two items'])
921 v9.CheckDefAndScriptFailure(['digraph_setlist({})'], ['E1013: Argument 1: type mismatch, expected list<string> but got dict<unknown>', 'E1216: digraph_setlist() argument must be a list of lists with two items'])
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +0200922enddef
923
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200924def Test_echoraw()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000925 v9.CheckDefAndScriptFailure(['echoraw(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
926 v9.CheckDefAndScriptFailure(['echoraw(["x"])'], ['E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +0200927enddef
928
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +0200929def Test_escape()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000930 v9.CheckDefAndScriptFailure(['escape(10, " ")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
931 v9.CheckDefAndScriptFailure(['escape(true, false)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1'])
932 v9.CheckDefAndScriptFailure(['escape("a", 10)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +0200933 assert_equal('a\:b', escape("a:b", ":"))
Yegappan Lakshmanan5dfe4672021-09-14 17:54:30 +0200934 escape('abc', '')->assert_equal('abc')
935 escape('', ':')->assert_equal('')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +0200936enddef
937
938def Test_eval()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000939 v9.CheckDefAndScriptFailure(['eval(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
940 v9.CheckDefAndScriptFailure(['eval(null)'], ['E1013: Argument 1: type mismatch, expected string but got special', 'E1174: String required for argument 1'])
941 v9.CheckDefExecAndScriptFailure(['eval("")'], 'E15: Invalid expression')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +0200942 assert_equal(2, eval('1 + 1'))
943enddef
944
Bram Moolenaar7bb4e742020-12-09 12:41:50 +0100945def Test_executable()
Bram Moolenaar2a9d5d32020-12-12 18:58:40 +0100946 assert_false(executable(""))
947 assert_false(executable(test_null_string()))
948
Bram Moolenaar62aec932022-01-29 21:45:34 +0000949 v9.CheckDefExecFailure(['echo executable(123)'], 'E1013:')
950 v9.CheckDefExecFailure(['echo executable(true)'], 'E1013:')
Bram Moolenaar7bb4e742020-12-09 12:41:50 +0100951enddef
952
Bram Moolenaarca81f0e2021-06-20 14:41:01 +0200953def Test_execute()
954 var res = execute("echo 'hello'")
955 assert_equal("\nhello", res)
956 res = execute(["echo 'here'", "echo 'there'"])
957 assert_equal("\nhere\nthere", res)
958
Bram Moolenaar62aec932022-01-29 21:45:34 +0000959 v9.CheckDefAndScriptFailure(['execute(123)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1222: String or List required for argument 1'])
960 v9.CheckDefFailure(['execute([123])'], 'E1013: Argument 1: type mismatch, expected list<string> but got list<number>')
961 v9.CheckDefExecFailure(['echo execute(["xx", 123])'], 'E492')
962 v9.CheckDefAndScriptFailure(['execute("xx", 123)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
Bram Moolenaarca81f0e2021-06-20 14:41:01 +0200963enddef
964
Bram Moolenaar7bb4e742020-12-09 12:41:50 +0100965def Test_exepath()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000966 v9.CheckDefExecFailure(['echo exepath(true)'], 'E1013:')
967 v9.CheckDefExecFailure(['echo exepath(v:null)'], 'E1013:')
968 v9.CheckDefExecFailure(['echo exepath("")'], 'E1175:')
Bram Moolenaar7bb4e742020-12-09 12:41:50 +0100969enddef
970
Bram Moolenaar5671f3f2021-08-05 22:48:11 +0200971command DoSomeCommand let g:didSomeCommand = 4
972
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +0200973def Test_exists()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000974 v9.CheckDefAndScriptFailure(['exists(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +0200975 call assert_equal(1, exists('&tabstop'))
Bram Moolenaarbb7ee7a2021-08-02 20:06:50 +0200976
Bram Moolenaar26735992021-08-08 14:43:22 +0200977 var lines =<< trim END
978 if exists('+newoption')
979 if &newoption == 'ok'
980 endif
981 endif
982 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000983 v9.CheckDefFailure(lines, 'E113:')
984 v9.CheckScriptSuccess(lines)
Bram Moolenaar26735992021-08-08 14:43:22 +0200985enddef
986
987def Test_exists_compiled()
988 call assert_equal(1, exists_compiled('&tabstop'))
Bram Moolenaar62aec932022-01-29 21:45:34 +0000989 v9.CheckDefAndScriptFailure(['exists_compiled(10)'], ['E1232:', 'E1233:'])
990 v9.CheckDefAndScriptFailure(['exists_compiled(v:progname)'], ['E1232:', 'E1233:'])
Bram Moolenaar26735992021-08-08 14:43:22 +0200991
992 if exists_compiled('+newoption')
Bram Moolenaarbb7ee7a2021-08-02 20:06:50 +0200993 if &newoption == 'ok'
994 endif
995 endif
Bram Moolenaar26735992021-08-08 14:43:22 +0200996 if exists_compiled('&newoption')
Bram Moolenaarbb7ee7a2021-08-02 20:06:50 +0200997 if &newoption == 'ok'
998 endif
999 endif
Bram Moolenaar26735992021-08-08 14:43:22 +02001000 if exists_compiled('+tabstop')
Bram Moolenaarbb7ee7a2021-08-02 20:06:50 +02001001 assert_equal(8, &tabstop)
1002 else
1003 assert_report('tabstop option not existing?')
1004 endif
Bram Moolenaar26735992021-08-08 14:43:22 +02001005 if exists_compiled('&tabstop')
Bram Moolenaarbb7ee7a2021-08-02 20:06:50 +02001006 assert_equal(8, &tabstop)
1007 else
1008 assert_report('tabstop option not existing?')
1009 endif
Bram Moolenaar5671f3f2021-08-05 22:48:11 +02001010
Bram Moolenaar26735992021-08-08 14:43:22 +02001011 if exists_compiled(':DoSomeCommand') >= 2
Bram Moolenaar5671f3f2021-08-05 22:48:11 +02001012 DoSomeCommand
1013 endif
1014 assert_equal(4, g:didSomeCommand)
Bram Moolenaar26735992021-08-08 14:43:22 +02001015 if exists_compiled(':NoSuchCommand') >= 2
Bram Moolenaar5671f3f2021-08-05 22:48:11 +02001016 NoSuchCommand
1017 endif
1018
1019 var found = false
Bram Moolenaar62aec932022-01-29 21:45:34 +00001020 if exists_compiled('*CheckFeature')
1021 found = true
1022 endif
1023 assert_false(found)
1024 found = false
1025 if exists_compiled('*g:CheckFeature')
Bram Moolenaar5671f3f2021-08-05 22:48:11 +02001026 found = true
1027 endif
1028 assert_true(found)
Bram Moolenaar62aec932022-01-29 21:45:34 +00001029
Bram Moolenaar26735992021-08-08 14:43:22 +02001030 if exists_compiled('*NoSuchFunction')
Bram Moolenaar5671f3f2021-08-05 22:48:11 +02001031 NoSuchFunction()
1032 endif
Bram Moolenaar26735992021-08-08 14:43:22 +02001033 if exists_compiled('*no_such_function')
Bram Moolenaar5671f3f2021-08-05 22:48:11 +02001034 no_such_function()
1035 endif
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02001036enddef
1037
Bram Moolenaar94738d82020-10-21 14:25:07 +02001038def Test_expand()
1039 split SomeFile
1040 expand('%', true, true)->assert_equal(['SomeFile'])
1041 close
Bram Moolenaar62aec932022-01-29 21:45:34 +00001042 v9.CheckDefAndScriptFailure(['expand(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
1043 v9.CheckDefAndScriptFailure(['expand("a", 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2'])
1044 v9.CheckDefAndScriptFailure(['expand("a", true, 2)'], ['E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3'])
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02001045 expand('')->assert_equal('')
Bram Moolenaarc4492712021-11-22 15:37:15 +00001046
1047 var caught = false
1048 try
1049 echo expand("<sfile>")
1050 catch /E1245:/
1051 caught = true
1052 endtry
1053 assert_true(caught)
Bram Moolenaar94738d82020-10-21 14:25:07 +02001054enddef
1055
Bram Moolenaar02795102021-05-03 21:40:26 +02001056def Test_expandcmd()
1057 $FOO = "blue"
1058 assert_equal("blue sky", expandcmd("`=$FOO .. ' sky'`"))
1059
1060 assert_equal("yes", expandcmd("`={a: 'yes'}['a']`"))
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01001061 expandcmd('')->assert_equal('')
Dominique Pelle8bfa0eb2022-01-02 16:16:33 +00001062
Bram Moolenaar62aec932022-01-29 21:45:34 +00001063 v9.CheckDefAndScriptFailure(['expandcmd([1])'], ['E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1'])
Yegappan Lakshmanan2b74b682022-04-03 21:30:32 +01001064 v9.CheckDefAndScriptFailure(['expandcmd("abc", [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2'])
Bram Moolenaar02795102021-05-03 21:40:26 +02001065enddef
1066
Bram Moolenaarfbcbffe2020-10-31 19:33:38 +01001067def Test_extend_arg_types()
Bram Moolenaarc03f5c62021-01-31 17:48:30 +01001068 g:number_one = 1
1069 g:string_keep = 'keep'
1070 var lines =<< trim END
1071 assert_equal([1, 2, 3], extend([1, 2], [3]))
1072 assert_equal([3, 1, 2], extend([1, 2], [3], 0))
1073 assert_equal([1, 3, 2], extend([1, 2], [3], 1))
1074 assert_equal([1, 3, 2], extend([1, 2], [3], g:number_one))
Bram Moolenaarfbcbffe2020-10-31 19:33:38 +01001075
Bram Moolenaarc03f5c62021-01-31 17:48:30 +01001076 assert_equal({a: 1, b: 2, c: 3}, extend({a: 1, b: 2}, {c: 3}))
1077 assert_equal({a: 1, b: 4}, extend({a: 1, b: 2}, {b: 4}))
1078 assert_equal({a: 1, b: 2}, extend({a: 1, b: 2}, {b: 4}, 'keep'))
1079 assert_equal({a: 1, b: 2}, extend({a: 1, b: 2}, {b: 4}, g:string_keep))
Bram Moolenaar193f6202020-11-16 20:08:35 +01001080
Bram Moolenaarad8f2482022-01-03 16:52:28 +00001081 # mix of types is OK without a declaration
1082
Bram Moolenaarc03f5c62021-01-31 17:48:30 +01001083 var res: list<dict<any>>
1084 extend(res, mapnew([1, 2], (_, v) => ({})))
1085 assert_equal([{}, {}], res)
Bram Moolenaar10d6f182022-01-04 15:54:38 +00001086
1087 var dany: dict<any> = {a: 0}
1088 dany->extend({b: 'x'})
1089 assert_equal({a: 0, b: 'x'}, dany)
Bram Moolenaarc03f5c62021-01-31 17:48:30 +01001090 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001091 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaarfbcbffe2020-10-31 19:33:38 +01001092
Bram Moolenaarad8f2482022-01-03 16:52:28 +00001093 lines =<< trim END
Bram Moolenaarad8f2482022-01-03 16:52:28 +00001094 assert_equal([1, 2, "x"], extend([1, 2], ["x"]))
1095 assert_equal([1, "b", 1], extend([1], ["b", 1]))
Bram Moolenaar078a4612022-01-04 15:17:03 +00001096
1097 assert_equal({a: 1, b: "x"}, extend({a: 1}, {b: "x"}))
Bram Moolenaarad8f2482022-01-03 16:52:28 +00001098 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001099 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaarad8f2482022-01-03 16:52:28 +00001100
Bram Moolenaar62aec932022-01-29 21:45:34 +00001101 v9.CheckDefAndScriptFailure(['extend("a", 1)'], ['E1013: Argument 1: type mismatch, expected list<any> but got string', 'E712: Argument of extend() must be a List or Dictionary'])
1102 v9.CheckDefAndScriptFailure(['extend([1, 2], 3)'], ['E1013: Argument 2: type mismatch, expected list<any> but got number', 'E712: Argument of extend() must be a List or Dictionary'])
1103 v9.CheckDefAndScriptFailure(['var ll = [1, 2]', 'extend(ll, ["x"])'], ['E1013: Argument 2: type mismatch, expected list<number> but got list<string>', 'E1013: Argument 2: type mismatch, expected list<number> but got list<string>'])
1104 v9.CheckDefFailure(['extend([1, 2], [3], "x")'], 'E1013: Argument 3: type mismatch, expected number but got string')
Bram Moolenaarfbcbffe2020-10-31 19:33:38 +01001105
Bram Moolenaar62aec932022-01-29 21:45:34 +00001106 v9.CheckDefFailure(['extend({a: 1}, 42)'], 'E1013: Argument 2: type mismatch, expected dict<any> but got number')
1107 v9.CheckDefFailure(['extend({a: 1}, {b: 2}, 1)'], 'E1013: Argument 3: type mismatch, expected string but got number')
Bram Moolenaar351ead02021-01-16 16:07:01 +01001108
Bram Moolenaar62aec932022-01-29 21:45:34 +00001109 v9.CheckScriptFailure(['vim9script', 'var l = [1]', 'extend(l, ["b", 1])'], 'E1013: Argument 2: type mismatch, expected list<number> but got list<any> in extend()')
Bram Moolenaarfbcbffe2020-10-31 19:33:38 +01001110enddef
1111
Bram Moolenaaraa210a32021-01-02 15:41:03 +01001112func g:ExtendDict(d)
1113 call extend(a:d, #{xx: 'x'})
1114endfunc
1115
1116def Test_extend_dict_item_type()
1117 var lines =<< trim END
1118 var d: dict<number> = {a: 1}
1119 extend(d, {b: 2})
1120 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001121 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaaraa210a32021-01-02 15:41:03 +01001122
1123 lines =<< trim END
1124 var d: dict<number> = {a: 1}
1125 extend(d, {b: 'x'})
1126 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001127 v9.CheckDefAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected dict<number> but got dict<string>', 2)
Bram Moolenaaraa210a32021-01-02 15:41:03 +01001128
1129 lines =<< trim END
1130 var d: dict<number> = {a: 1}
1131 g:ExtendDict(d)
1132 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001133 v9.CheckDefExecFailure(lines, 'E1012: Type mismatch; expected number but got string', 0)
1134 v9.CheckScriptFailure(['vim9script'] + lines, 'E1012:', 1)
Bram Moolenaarb56c4412021-08-09 22:22:27 +02001135
1136 lines =<< trim END
1137 var d: dict<bool>
1138 extend(d, {b: 0})
1139 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001140 v9.CheckDefAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected dict<bool> but got dict<number>', 2)
Bram Moolenaaraa210a32021-01-02 15:41:03 +01001141enddef
1142
1143func g:ExtendList(l)
1144 call extend(a:l, ['x'])
1145endfunc
1146
1147def Test_extend_list_item_type()
1148 var lines =<< trim END
1149 var l: list<number> = [1]
1150 extend(l, [2])
1151 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001152 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaaraa210a32021-01-02 15:41:03 +01001153
1154 lines =<< trim END
1155 var l: list<number> = [1]
1156 extend(l, ['x'])
1157 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001158 v9.CheckDefAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected list<number> but got list<string>', 2)
Bram Moolenaaraa210a32021-01-02 15:41:03 +01001159
1160 lines =<< trim END
1161 var l: list<number> = [1]
1162 g:ExtendList(l)
1163 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001164 v9.CheckDefExecFailure(lines, 'E1012: Type mismatch; expected number but got string', 0)
1165 v9.CheckScriptFailure(['vim9script'] + lines, 'E1012:', 1)
Bram Moolenaarb56c4412021-08-09 22:22:27 +02001166
1167 lines =<< trim END
1168 var l: list<bool>
1169 extend(l, [0])
1170 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001171 v9.CheckDefAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected list<bool> but got list<number>', 2)
Bram Moolenaaraa210a32021-01-02 15:41:03 +01001172enddef
Bram Moolenaar94738d82020-10-21 14:25:07 +02001173
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02001174def Test_extend_return_type()
1175 var l = extend([1, 2], [3])
1176 var res = 0
1177 for n in l
1178 res += n
1179 endfor
1180 res->assert_equal(6)
1181enddef
1182
Bram Moolenaar93e1cae2021-03-13 21:24:56 +01001183def Test_extend_with_error_function()
1184 var lines =<< trim END
1185 vim9script
1186 def F()
1187 {
1188 var m = 10
1189 }
1190 echo m
1191 enddef
1192
1193 def Test()
1194 var d: dict<any> = {}
1195 d->extend({A: 10, Func: function('F', [])})
Bram Moolenaare88c6b72022-02-15 15:37:11 +00001196 d.Func()
Bram Moolenaar93e1cae2021-03-13 21:24:56 +01001197 enddef
1198
1199 Test()
1200 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001201 v9.CheckScriptFailure(lines, 'E1001: Variable not found: m')
Bram Moolenaar93e1cae2021-03-13 21:24:56 +01001202enddef
1203
Bram Moolenaarfa103972022-09-29 19:14:42 +01001204def Test_extend_const()
1205 var lines =<< trim END
1206 const l = [1, 2]
1207 extend(l, [3])
1208 END
1209 v9.CheckDefFailure(lines, 'E1307: Argument 1: Trying to modify a const list<number>')
1210
1211 lines =<< trim END
1212 const d = {a: 1, b: 2}
1213 extend(d, {c: 3})
1214 END
1215 v9.CheckDefFailure(lines, 'E1307: Argument 1: Trying to modify a const dict<number>')
1216
Bram Moolenaar6586a012022-09-30 11:04:50 +01001217 lines =<< trim END
1218 final d = {a: 1, b: 2}
1219 extend(d, {c: 3})
1220 assert_equal({a: 1, b: 2, c: 3}, d)
1221 END
1222 v9.CheckDefSuccess(lines)
1223
Bram Moolenaara4962cd2022-10-11 23:12:59 +01001224 # item in a for loop is final
Bram Moolenaarfa103972022-09-29 19:14:42 +01001225 lines =<< trim END
1226 var l: list<dict<any>> = [{n: 1}]
1227 for item in l
1228 item->extend({x: 2})
1229 endfor
1230 END
Bram Moolenaara4962cd2022-10-11 23:12:59 +01001231 v9.CheckDefSuccess(lines)
Bram Moolenaarfa103972022-09-29 19:14:42 +01001232enddef
1233
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02001234def Test_extendnew()
1235 assert_equal([1, 2, 'a'], extendnew([1, 2], ['a']))
1236 assert_equal({one: 1, two: 'a'}, extendnew({one: 1}, {two: 'a'}))
1237
Bram Moolenaar62aec932022-01-29 21:45:34 +00001238 v9.CheckDefAndScriptFailure(['extendnew({a: 1}, 42)'], ['E1013: Argument 2: type mismatch, expected dict<number> but got number', 'E712: Argument of extendnew() must be a List or Dictionary'])
1239 v9.CheckDefAndScriptFailure(['extendnew({a: 1}, [42])'], ['E1013: Argument 2: type mismatch, expected dict<number> but got list<number>', 'E712: Argument of extendnew() must be a List or Dictionary'])
1240 v9.CheckDefAndScriptFailure(['extendnew([1, 2], "x")'], ['E1013: Argument 2: type mismatch, expected list<number> but got string', 'E712: Argument of extendnew() must be a List or Dictionary'])
1241 v9.CheckDefAndScriptFailure(['extendnew([1, 2], {x: 1})'], ['E1013: Argument 2: type mismatch, expected list<number> but got dict<number>', 'E712: Argument of extendnew() must be a List or Dictionary'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02001242enddef
1243
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02001244def Test_feedkeys()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001245 v9.CheckDefAndScriptFailure(['feedkeys(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
1246 v9.CheckDefAndScriptFailure(['feedkeys("x", 10)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
1247 v9.CheckDefAndScriptFailure(['feedkeys([], {})'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02001248 g:TestVar = 1
1249 feedkeys(":g:TestVar = 789\n", 'xt')
1250 assert_equal(789, g:TestVar)
1251 unlet g:TestVar
1252enddef
1253
Bram Moolenaar7bb4e742020-12-09 12:41:50 +01001254def Test_filereadable()
Bram Moolenaar2a9d5d32020-12-12 18:58:40 +01001255 assert_false(filereadable(""))
1256 assert_false(filereadable(test_null_string()))
1257
Bram Moolenaar62aec932022-01-29 21:45:34 +00001258 v9.CheckDefExecFailure(['echo filereadable(123)'], 'E1013:')
1259 v9.CheckDefExecFailure(['echo filereadable(true)'], 'E1013:')
Bram Moolenaar7bb4e742020-12-09 12:41:50 +01001260enddef
1261
1262def Test_filewritable()
Bram Moolenaar2a9d5d32020-12-12 18:58:40 +01001263 assert_false(filewritable(""))
1264 assert_false(filewritable(test_null_string()))
1265
Bram Moolenaar62aec932022-01-29 21:45:34 +00001266 v9.CheckDefExecFailure(['echo filewritable(123)'], 'E1013:')
1267 v9.CheckDefExecFailure(['echo filewritable(true)'], 'E1013:')
Bram Moolenaar7bb4e742020-12-09 12:41:50 +01001268enddef
1269
1270def Test_finddir()
Bram Moolenaar10c83dd2021-09-04 14:49:56 +02001271 mkdir('Xtestdir')
1272 finddir('Xtestdir', '**', -1)->assert_equal(['Xtestdir'])
1273 var lines =<< trim END
1274 var l: list<string> = finddir('nothing', '*;', -1)
1275 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001276 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar10c83dd2021-09-04 14:49:56 +02001277 delete('Xtestdir', 'rf')
1278
Bram Moolenaar62aec932022-01-29 21:45:34 +00001279 v9.CheckDefAndScriptFailure(['finddir(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1'])
1280 v9.CheckDefAndScriptFailure(['finddir(v:null)'], ['E1013: Argument 1: type mismatch, expected string but got special', 'E1174: String required for argument 1'])
1281 v9.CheckDefExecFailure(['echo finddir("")'], 'E1175:')
1282 v9.CheckDefAndScriptFailure(['finddir("a", [])'], ['E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2'])
1283 v9.CheckDefAndScriptFailure(['finddir("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01001284 finddir('abc', '')->assert_equal('')
Bram Moolenaar08018222021-12-22 18:45:37 +00001285
Bram Moolenaar62aec932022-01-29 21:45:34 +00001286 v9.CheckDefFailure(['var s: list<string> = finddir("foo")'], 'E1012: Type mismatch; expected list<string> but got string')
1287 v9.CheckDefFailure(['var s: list<string> = finddir("foo", "path")'], 'E1012: Type mismatch; expected list<string> but got string')
Bram Moolenaar08018222021-12-22 18:45:37 +00001288 # with third argument only runtime type checking
Bram Moolenaar62aec932022-01-29 21:45:34 +00001289 v9.CheckDefCompileSuccess(['var s: list<string> = finddir("foo", "path", 1)'])
Bram Moolenaar7bb4e742020-12-09 12:41:50 +01001290enddef
1291
1292def Test_findfile()
Bram Moolenaar10c83dd2021-09-04 14:49:56 +02001293 findfile('runtest.vim', '**', -1)->assert_equal(['runtest.vim'])
1294 var lines =<< trim END
1295 var l: list<string> = findfile('nothing', '*;', -1)
1296 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001297 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar10c83dd2021-09-04 14:49:56 +02001298
Bram Moolenaar62aec932022-01-29 21:45:34 +00001299 v9.CheckDefExecFailure(['findfile(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool')
1300 v9.CheckDefExecFailure(['findfile(v:null)'], 'E1013: Argument 1: type mismatch, expected string but got special')
1301 v9.CheckDefExecFailure(['findfile("")'], 'E1175:')
1302 v9.CheckDefAndScriptFailure(['findfile("a", [])'], ['E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2'])
1303 v9.CheckDefAndScriptFailure(['findfile("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01001304 findfile('abc', '')->assert_equal('')
Bram Moolenaar7bb4e742020-12-09 12:41:50 +01001305enddef
1306
Bram Moolenaarb3bf33a2021-09-11 20:20:38 +02001307def Test_flatten()
1308 var lines =<< trim END
1309 echo flatten([1, 2, 3])
1310 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001311 v9.CheckDefAndScriptFailure(lines, 'E1158:')
Bram Moolenaarb3bf33a2021-09-11 20:20:38 +02001312enddef
1313
Bram Moolenaar3b690062021-02-01 20:14:51 +01001314def Test_flattennew()
1315 var lines =<< trim END
1316 var l = [1, [2, [3, 4]], 5]
1317 call assert_equal([1, 2, 3, 4, 5], flattennew(l))
1318 call assert_equal([1, [2, [3, 4]], 5], l)
1319
1320 call assert_equal([1, 2, [3, 4], 5], flattennew(l, 1))
1321 call assert_equal([1, [2, [3, 4]], 5], l)
Bram Moolenaarb3bf33a2021-09-11 20:20:38 +02001322
1323 var ll: list<list<string>> = [['a', 'b', 'c']]
1324 assert_equal(['a', 'b', 'c'], ll->flattennew())
Bram Moolenaar3b690062021-02-01 20:14:51 +01001325 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001326 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar3b690062021-02-01 20:14:51 +01001327
Bram Moolenaar62aec932022-01-29 21:45:34 +00001328 v9.CheckDefAndScriptFailure(['flattennew({})'], ['E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 1'])
1329 v9.CheckDefAndScriptFailure(['flattennew([], "1")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
Bram Moolenaar3b690062021-02-01 20:14:51 +01001330enddef
1331
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001332" Test for float functions argument type
1333def Test_float_funcs_args()
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001334 # acos()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001335 v9.CheckDefAndScriptFailure(['acos("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1'])
Yegappan Lakshmanan885de442022-04-23 10:51:14 +01001336 assert_equal('1.570796', string(acos(0.0)))
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001337 # asin()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001338 v9.CheckDefAndScriptFailure(['asin("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1'])
Yegappan Lakshmanan885de442022-04-23 10:51:14 +01001339 assert_equal('0.0', string(asin(0.0)))
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001340 # atan()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001341 v9.CheckDefAndScriptFailure(['atan("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1'])
Yegappan Lakshmanan885de442022-04-23 10:51:14 +01001342 assert_equal('0.0', string(atan(0.0)))
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001343 # atan2()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001344 v9.CheckDefAndScriptFailure(['atan2("a", 1.1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1'])
Yegappan Lakshmanan885de442022-04-23 10:51:14 +01001345 assert_equal('-2.356194', string(atan2(-1, -1)))
Bram Moolenaar62aec932022-01-29 21:45:34 +00001346 v9.CheckDefAndScriptFailure(['atan2(1.2, "a")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 2'])
1347 v9.CheckDefAndScriptFailure(['atan2(1.2)'], ['E119:', 'E119:'])
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001348 # ceil()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001349 v9.CheckDefAndScriptFailure(['ceil("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1'])
Yegappan Lakshmanan885de442022-04-23 10:51:14 +01001350 assert_equal('2.0', string(ceil(2.0)))
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001351 # cos()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001352 v9.CheckDefAndScriptFailure(['cos("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1'])
Yegappan Lakshmanan885de442022-04-23 10:51:14 +01001353 assert_equal('1.0', string(cos(0.0)))
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001354 # cosh()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001355 v9.CheckDefAndScriptFailure(['cosh("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1'])
Yegappan Lakshmanan885de442022-04-23 10:51:14 +01001356 assert_equal('1.0', string(cosh(0.0)))
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001357 # exp()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001358 v9.CheckDefAndScriptFailure(['exp("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1'])
Yegappan Lakshmanan885de442022-04-23 10:51:14 +01001359 assert_equal('1.0', string(exp(0.0)))
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001360 # float2nr()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001361 v9.CheckDefAndScriptFailure(['float2nr("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1'])
Yegappan Lakshmanan885de442022-04-23 10:51:14 +01001362 assert_equal(1, float2nr(1.234))
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001363 # floor()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001364 v9.CheckDefAndScriptFailure(['floor("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1'])
Yegappan Lakshmanan885de442022-04-23 10:51:14 +01001365 assert_equal('2.0', string(floor(2.0)))
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001366 # fmod()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001367 v9.CheckDefAndScriptFailure(['fmod(1.1, "a")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 2'])
1368 v9.CheckDefAndScriptFailure(['fmod("a", 1.1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1'])
1369 v9.CheckDefAndScriptFailure(['fmod(1.1)'], ['E119:', 'E119:'])
Yegappan Lakshmanan885de442022-04-23 10:51:14 +01001370 assert_equal('0.13', string(fmod(12.33, 1.22)))
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001371 # isinf()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001372 v9.CheckDefAndScriptFailure(['isinf("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1'])
Yegappan Lakshmanan885de442022-04-23 10:51:14 +01001373 assert_equal(1, isinf(1.0 / 0.0))
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001374 # isnan()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001375 v9.CheckDefAndScriptFailure(['isnan("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1'])
Yegappan Lakshmanan885de442022-04-23 10:51:14 +01001376 assert_true(isnan(0.0 / 0.0))
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001377 # log()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001378 v9.CheckDefAndScriptFailure(['log("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1'])
Yegappan Lakshmanan885de442022-04-23 10:51:14 +01001379 assert_equal('0.0', string(log(1.0)))
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001380 # log10()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001381 v9.CheckDefAndScriptFailure(['log10("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1'])
Yegappan Lakshmanan885de442022-04-23 10:51:14 +01001382 assert_equal('0.0', string(log10(1.0)))
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001383 # pow()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001384 v9.CheckDefAndScriptFailure(['pow("a", 1.1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1'])
1385 v9.CheckDefAndScriptFailure(['pow(1.1, "a")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 2'])
1386 v9.CheckDefAndScriptFailure(['pow(1.1)'], ['E119:', 'E119:'])
Yegappan Lakshmanan885de442022-04-23 10:51:14 +01001387 assert_equal('1.0', string(pow(0.0, 0.0)))
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001388 # round()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001389 v9.CheckDefAndScriptFailure(['round("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1'])
Yegappan Lakshmanan885de442022-04-23 10:51:14 +01001390 assert_equal('2.0', string(round(2.1)))
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001391 # sin()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001392 v9.CheckDefAndScriptFailure(['sin("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1'])
Yegappan Lakshmanan885de442022-04-23 10:51:14 +01001393 assert_equal('0.0', string(sin(0.0)))
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001394 # sinh()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001395 v9.CheckDefAndScriptFailure(['sinh("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1'])
Yegappan Lakshmanan885de442022-04-23 10:51:14 +01001396 assert_equal('0.0', string(sinh(0.0)))
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001397 # sqrt()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001398 v9.CheckDefAndScriptFailure(['sqrt("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1'])
Yegappan Lakshmanan885de442022-04-23 10:51:14 +01001399 assert_equal('0.0', string(sqrt(0.0)))
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001400 # tan()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001401 v9.CheckDefAndScriptFailure(['tan("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1'])
Yegappan Lakshmanan885de442022-04-23 10:51:14 +01001402 assert_equal('0.0', string(tan(0.0)))
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001403 # tanh()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001404 v9.CheckDefAndScriptFailure(['tanh("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1'])
Yegappan Lakshmanan885de442022-04-23 10:51:14 +01001405 assert_equal('0.0', string(tanh(0.0)))
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001406 # trunc()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001407 v9.CheckDefAndScriptFailure(['trunc("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1'])
Yegappan Lakshmanan885de442022-04-23 10:51:14 +01001408 assert_equal('2.0', string(trunc(2.1)))
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001409enddef
1410
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02001411def Test_fnameescape()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001412 v9.CheckDefAndScriptFailure(['fnameescape(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02001413 assert_equal('\+a\%b\|', fnameescape('+a%b|'))
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01001414 fnameescape('')->assert_equal('')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02001415enddef
1416
Bram Moolenaar7bb4e742020-12-09 12:41:50 +01001417def Test_fnamemodify()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001418 v9.CheckDefSuccess(['echo fnamemodify(test_null_string(), ":p")'])
1419 v9.CheckDefSuccess(['echo fnamemodify("", ":p")'])
1420 v9.CheckDefSuccess(['echo fnamemodify("file", test_null_string())'])
1421 v9.CheckDefSuccess(['echo fnamemodify("file", "")'])
Bram Moolenaar2a9d5d32020-12-12 18:58:40 +01001422
Bram Moolenaar62aec932022-01-29 21:45:34 +00001423 v9.CheckDefExecFailure(['echo fnamemodify(true, ":p")'], 'E1013: Argument 1: type mismatch, expected string but got bool')
1424 v9.CheckDefExecFailure(['echo fnamemodify(v:null, ":p")'], 'E1013: Argument 1: type mismatch, expected string but got special')
1425 v9.CheckDefExecFailure(['echo fnamemodify("file", true)'], 'E1013: Argument 2: type mismatch, expected string but got bool')
Bram Moolenaar7bb4e742020-12-09 12:41:50 +01001426enddef
1427
Bram Moolenaar2e5910b2021-02-03 17:41:24 +01001428def Wrong_dict_key_type(items: list<number>): list<number>
1429 return filter(items, (_, val) => get({[val]: 1}, 'x'))
1430enddef
1431
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02001432def Test_filter()
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02001433 assert_equal([], filter([1, 2, 3], '0'))
1434 assert_equal([1, 2, 3], filter([1, 2, 3], '1'))
1435 assert_equal({b: 20}, filter({a: 10, b: 20}, 'v:val == 20'))
Bram Moolenaaref8f04b2021-12-27 12:29:19 +00001436
1437 def GetFiltered(): list<number>
1438 var Odd: func = (_, v) => v % 2
1439 return range(3)->filter(Odd)
1440 enddef
1441 assert_equal([1], GetFiltered())
Bram Moolenaar16f6c8a2022-02-22 15:12:14 +00001442
Bram Moolenaar6e1a3872022-02-23 19:11:49 +00001443 var lines =<< trim END
1444 vim9script
1445 def Func(): list<string>
1446 var MatchWord: func: bool = (_, v) => true
1447 var l = ['xxx']
1448 return l->filter(MatchWord)
1449 enddef
1450 assert_equal(['xxx'], Func())
1451 END
1452 v9.CheckScriptSuccess(lines)
1453
Bram Moolenaar16f6c8a2022-02-22 15:12:14 +00001454 v9.CheckDefAndScriptFailure(['filter(1.1, "1")'], ['E1013: Argument 1: type mismatch, expected list<any> but got float', 'E1251: List, Dictionary, Blob or String required for argument 1'])
1455 v9.CheckDefAndScriptFailure(['filter([1, 2], 4)'], ['E1256: String or function required for argument 2', 'E1024: Using a Number as a String'])
1456
Bram Moolenaar6e1a3872022-02-23 19:11:49 +00001457 lines =<< trim END
Bram Moolenaar16f6c8a2022-02-22 15:12:14 +00001458 def F(i: number, v: any): string
1459 return 'bad'
1460 enddef
1461 echo filter([1, 2, 3], F)
1462 END
1463 v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?number, ?any): bool but got func(number, any): string', 'E1135: Using a String as a Bool:'])
1464
1465 # check first function argument type
1466 lines =<< trim END
1467 var l = [1, 2, 3]
1468 filter(l, (i: string, v: number) => true)
1469 END
1470 v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?number, ?number): bool but got func(string, number): bool', 'E1013: Argument 1: type mismatch, expected string but got number'])
1471 lines =<< trim END
1472 var d = {a: 1}
1473 filter(d, (i: number, v: number) => true)
1474 END
1475 v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?string, ?number): bool but got func(number, number): bool', 'E1013: Argument 1: type mismatch, expected number but got string'])
1476 lines =<< trim END
1477 var b = 0z1122
1478 filter(b, (i: string, v: number) => true)
1479 END
1480 v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?number, ?number): bool but got func(string, number): bool', 'E1013: Argument 1: type mismatch, expected string but got number'])
1481 lines =<< trim END
1482 var s = 'text'
1483 filter(s, (i: string, v: string) => true)
1484 END
1485 v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?number, ?string): bool but got func(string, string): bool', 'E1013: Argument 1: type mismatch, expected string but got number'])
1486
1487 # check second function argument type
1488 lines =<< trim END
1489 var l = [1, 2, 3]
1490 filter(l, (i: number, v: string) => true)
1491 END
1492 v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?number, ?number): bool but got func(number, string): bool', 'E1013: Argument 2: type mismatch, expected string but got number'])
1493 lines =<< trim END
1494 var d = {a: 1}
1495 filter(d, (i: string, v: string) => true)
1496 END
1497 v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?string, ?number): bool but got func(string, string): bool', 'E1013: Argument 2: type mismatch, expected string but got number'])
1498 lines =<< trim END
1499 var b = 0z1122
1500 filter(b, (i: number, v: string) => true)
1501 END
1502 v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?number, ?number): bool but got func(number, string): bool', 'E1013: Argument 2: type mismatch, expected string but got number'])
1503 lines =<< trim END
1504 var s = 'text'
1505 filter(s, (i: number, v: number) => true)
1506 END
1507 v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?number, ?string): bool but got func(number, number): bool', 'E1013: Argument 2: type mismatch, expected number but got string'])
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02001508enddef
1509
Bram Moolenaar94738d82020-10-21 14:25:07 +02001510def Test_filter_wrong_dict_key_type()
Bram Moolenaar848fadd2022-01-30 15:28:30 +00001511 assert_fails('g:Wrong_dict_key_type([1, v:null, 3])', 'E1013:')
Bram Moolenaar94738d82020-10-21 14:25:07 +02001512enddef
1513
1514def Test_filter_return_type()
Bram Moolenaarbb8a7ce2021-04-10 20:10:26 +02001515 var l = filter([1, 2, 3], (_, _) => 1)
Bram Moolenaar94738d82020-10-21 14:25:07 +02001516 var res = 0
1517 for n in l
1518 res += n
1519 endfor
1520 res->assert_equal(6)
1521enddef
1522
Bram Moolenaarfc0e8f52020-12-25 20:24:51 +01001523def Test_filter_missing_argument()
1524 var dict = {aa: [1], ab: [2], ac: [3], de: [4]}
Bram Moolenaarbb8a7ce2021-04-10 20:10:26 +02001525 var res = dict->filter((k, _) => k =~ 'a' && k !~ 'b')
Bram Moolenaarfc0e8f52020-12-25 20:24:51 +01001526 res->assert_equal({aa: [1], ac: [3]})
1527enddef
Bram Moolenaar94738d82020-10-21 14:25:07 +02001528
Bram Moolenaara5d1a672022-09-30 17:57:47 +01001529def Test_filter_const()
1530 var lines =<< trim END
1531 const l = [1, 2, 3]
1532 filter(l, 'v:val == 2')
1533 END
1534 v9.CheckDefFailure(lines, 'E1307: Argument 1: Trying to modify a const list<number>')
1535
1536 lines =<< trim END
1537 const d = {a: 1, b: 2}
1538 filter(d, 'v:val == 2')
1539 END
1540 v9.CheckDefFailure(lines, 'E1307: Argument 1: Trying to modify a const dict<number>')
1541enddef
1542
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02001543def Test_foldclosed()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001544 v9.CheckDefAndScriptFailure(['foldclosed(function("min"))'], ['E1013: Argument 1: type mismatch, expected string but got func(...): unknown', 'E1220: String or Number required for argument 1'])
1545 v9.CheckDefExecAndScriptFailure(['foldclosed("")'], 'E1209: Invalid value for a line number')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02001546 assert_equal(-1, foldclosed(1))
1547 assert_equal(-1, foldclosed('$'))
1548enddef
1549
1550def Test_foldclosedend()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001551 v9.CheckDefAndScriptFailure(['foldclosedend(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1'])
1552 v9.CheckDefExecAndScriptFailure(['foldclosedend("")'], 'E1209: Invalid value for a line number')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02001553 assert_equal(-1, foldclosedend(1))
1554 assert_equal(-1, foldclosedend('w0'))
1555enddef
1556
1557def Test_foldlevel()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001558 v9.CheckDefAndScriptFailure(['foldlevel(0z10)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1'])
1559 v9.CheckDefExecAndScriptFailure(['foldlevel("")'], 'E1209: Invalid value for a line number')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02001560 assert_equal(0, foldlevel(1))
1561 assert_equal(0, foldlevel('.'))
1562enddef
1563
1564def Test_foldtextresult()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001565 v9.CheckDefAndScriptFailure(['foldtextresult(1.1)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1'])
1566 v9.CheckDefExecAndScriptFailure(['foldtextresult("")'], 'E1209: Invalid value for a line number')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02001567 assert_equal('', foldtextresult(1))
1568 assert_equal('', foldtextresult('.'))
1569enddef
1570
Bram Moolenaar7d840e92021-05-26 21:10:11 +02001571def Test_fullcommand()
1572 assert_equal('next', fullcommand('n'))
1573 assert_equal('noremap', fullcommand('no'))
1574 assert_equal('noremap', fullcommand('nor'))
1575 assert_equal('normal', fullcommand('norm'))
1576
1577 assert_equal('', fullcommand('k'))
1578 assert_equal('keepmarks', fullcommand('ke'))
1579 assert_equal('keepmarks', fullcommand('kee'))
1580 assert_equal('keepmarks', fullcommand('keep'))
1581 assert_equal('keepjumps', fullcommand('keepj'))
1582
1583 assert_equal('dlist', fullcommand('dl'))
1584 assert_equal('', fullcommand('dp'))
1585 assert_equal('delete', fullcommand('del'))
1586 assert_equal('', fullcommand('dell'))
1587 assert_equal('', fullcommand('delp'))
1588
1589 assert_equal('srewind', fullcommand('sre'))
1590 assert_equal('scriptnames', fullcommand('scr'))
1591 assert_equal('', fullcommand('scg'))
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02001592 fullcommand('')->assert_equal('')
Bram Moolenaaraa534142022-09-15 21:46:02 +01001593
1594 assert_equal('', fullcommand('en'))
1595 legacy call assert_equal('endif', fullcommand('en'))
1596 assert_equal('endif', fullcommand('en', 0))
1597 legacy call assert_equal('endif', fullcommand('en', 0))
1598 assert_equal('', fullcommand('en', 1))
1599 legacy call assert_equal('', fullcommand('en', 1))
Bram Moolenaar7d840e92021-05-26 21:10:11 +02001600enddef
1601
Yegappan Lakshmanan5bca9062021-07-24 21:33:26 +02001602def Test_funcref()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001603 v9.CheckDefAndScriptFailure(['funcref("reverse", 2)'], ['E1013: Argument 2: type mismatch, expected list<any> but got number', 'E1211: List required for argument 2'])
1604 v9.CheckDefAndScriptFailure(['funcref("reverse", [2], [1])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3'])
Bram Moolenaar2f9f4cc2021-12-20 09:36:27 +00001605
1606 var lines =<< trim END
1607 vim9script
1608 def UseBool(b: bool)
1609 enddef
1610 def GetRefOk()
1611 var Ref1: func(bool) = funcref(UseBool)
1612 var Ref2: func(bool) = funcref('UseBool')
1613 enddef
1614 def GetRefBad()
1615 # only fails at runtime
1616 var Ref1: func(number) = funcref(UseBool)
1617 enddef
1618 defcompile
1619 GetRefOk()
1620 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001621 v9.CheckScriptSuccess(lines)
Bram Moolenaar2f9f4cc2021-12-20 09:36:27 +00001622
1623 lines =<< trim END
1624 vim9script
1625 def UseBool(b: bool)
1626 enddef
1627 def GetRefBad()
1628 # only fails at runtime
1629 var Ref1: func(number) = funcref(UseBool)
1630 enddef
1631 GetRefBad()
1632 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001633 v9.CheckScriptFailure(lines, 'E1012: Type mismatch; expected func(number) but got func(bool)')
Yegappan Lakshmanan5bca9062021-07-24 21:33:26 +02001634enddef
1635
1636def Test_function()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001637 v9.CheckDefExecAndScriptFailure(['function(123)'], 'E1256: String or function required for argument 1')
Bram Moolenaarae1068a2021-12-25 19:43:44 +00001638
Bram Moolenaar62aec932022-01-29 21:45:34 +00001639 v9.CheckDefAndScriptFailure(['function("reverse", 2)'], ['E1013: Argument 2: type mismatch, expected list<any> but got number', 'E1211: List required for argument 2'])
1640 v9.CheckDefAndScriptFailure(['function("reverse", [2], [1])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3'])
Bram Moolenaar2f9f4cc2021-12-20 09:36:27 +00001641
1642 var lines =<< trim END
1643 vim9script
1644 def UseBool(b: bool)
1645 enddef
1646 def GetRefOk()
1647 var Ref1: func(bool) = function(UseBool)
1648 var Ref2: func(bool) = function('UseBool')
1649 enddef
1650 def GetRefBad()
1651 # only fails at runtime
1652 var Ref1: func(number) = function(UseBool)
1653 enddef
1654 defcompile
1655 GetRefOk()
1656 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001657 v9.CheckScriptSuccess(lines)
Bram Moolenaar2f9f4cc2021-12-20 09:36:27 +00001658
1659 lines =<< trim END
1660 vim9script
1661 def UseBool(b: bool)
1662 enddef
1663 def GetRefBad()
1664 # only fails at runtime
1665 var Ref1: func(number) = function(UseBool)
1666 enddef
1667 GetRefBad()
1668 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001669 v9.CheckScriptFailure(lines, 'E1012: Type mismatch; expected func(number) but got func(bool)')
Yegappan Lakshmanan5bca9062021-07-24 21:33:26 +02001670enddef
1671
Bram Moolenaar94738d82020-10-21 14:25:07 +02001672def Test_garbagecollect()
1673 garbagecollect(true)
Bram Moolenaar62aec932022-01-29 21:45:34 +00001674 v9.CheckDefAndScriptFailure(['garbagecollect("1")'], ['E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1'])
1675 v9.CheckDefAndScriptFailure(['garbagecollect(20)'], ['E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1'])
Bram Moolenaar94738d82020-10-21 14:25:07 +02001676enddef
1677
Yegappan Lakshmanana764e732021-07-25 15:57:32 +02001678def Test_get()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001679 v9.CheckDefAndScriptFailure(['get("a", 1)'], ['E1013: Argument 1: type mismatch, expected list<any> but got string', 'E896: Argument of get() must be a List, Dictionary or Blob'])
Yegappan Lakshmanana764e732021-07-25 15:57:32 +02001680 [3, 5, 2]->get(1)->assert_equal(5)
1681 [3, 5, 2]->get(3)->assert_equal(0)
1682 [3, 5, 2]->get(3, 9)->assert_equal(9)
1683 assert_equal(get(0z102030, 2), 0x30)
1684 {a: 7, b: 11, c: 13}->get('c')->assert_equal(13)
1685 {10: 'a', 20: 'b', 30: 'd'}->get(20)->assert_equal('b')
1686 function('max')->get('name')->assert_equal('max')
1687 var F: func = function('min', [[5, 8, 6]])
1688 F->get('name')->assert_equal('min')
1689 F->get('args')->assert_equal([[5, 8, 6]])
Bram Moolenaarf7237012021-07-27 22:21:44 +02001690
1691 var lines =<< trim END
1692 vim9script
1693 def DoThat(): number
1694 var Getqflist: func = function('getqflist', [{id: 42}])
1695 return Getqflist()->get('id', 77)
1696 enddef
1697 assert_equal(0, DoThat())
1698 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001699 v9.CheckScriptSuccess(lines)
Yegappan Lakshmanana764e732021-07-25 15:57:32 +02001700enddef
1701
Bram Moolenaar94738d82020-10-21 14:25:07 +02001702def Test_getbufinfo()
1703 var bufinfo = getbufinfo(bufnr())
1704 getbufinfo('%')->assert_equal(bufinfo)
1705
1706 edit Xtestfile1
1707 hide edit Xtestfile2
1708 hide enew
Bram Moolenaare0de1712020-12-02 17:36:54 +01001709 getbufinfo({bufloaded: true, buflisted: true, bufmodified: false})
Bram Moolenaar94738d82020-10-21 14:25:07 +02001710 ->len()->assert_equal(3)
1711 bwipe Xtestfile1 Xtestfile2
Bram Moolenaar62aec932022-01-29 21:45:34 +00001712 v9.CheckDefAndScriptFailure(['getbufinfo(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1'])
Bram Moolenaar94738d82020-10-21 14:25:07 +02001713enddef
1714
1715def Test_getbufline()
1716 e SomeFile
1717 var buf = bufnr()
Bram Moolenaarb8bd2e62021-08-21 17:13:14 +02001718 sp Otherfile
Bram Moolenaar94738d82020-10-21 14:25:07 +02001719 var lines = ['aaa', 'bbb', 'ccc']
1720 setbufline(buf, 1, lines)
1721 getbufline('#', 1, '$')->assert_equal(lines)
Bram Moolenaare6e70a12020-10-22 18:23:38 +02001722 getbufline(-1, '$', '$')->assert_equal([])
1723 getbufline(-1, 1, '$')->assert_equal([])
Bram Moolenaar94738d82020-10-21 14:25:07 +02001724
Bram Moolenaar82e46e52022-02-05 18:12:34 +00001725 assert_equal([7, 7, 7], getbufline('#', 1, '$')->map((_, _) => 7))
1726
Bram Moolenaar8b6256f2021-12-28 11:24:49 +00001727 assert_fails('getbufline("", "$a", "$b")', ['E1030: Using a String as a Number: "$a"', 'E1030: Using a String as a Number: "$a"'])
1728 assert_fails('getbufline("", "$", "$b")', ['E1030: Using a String as a Number: "$b"', 'E1030: Using a String as a Number: "$b"'])
Bram Moolenaar94738d82020-10-21 14:25:07 +02001729 bwipe!
Bram Moolenaar8b6256f2021-12-28 11:24:49 +00001730
Bram Moolenaar62aec932022-01-29 21:45:34 +00001731 v9.CheckDefAndScriptFailure(['getbufline([], 2)'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
1732 v9.CheckDefAndScriptFailure(['getbufline("a", [])'], ['E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 2'])
1733 v9.CheckDefAndScriptFailure(['getbufline("a", 2, 0z10)'], ['E1013: Argument 3: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 3'])
Bram Moolenaar94738d82020-10-21 14:25:07 +02001734enddef
1735
Yegappan Lakshmanan7973de32021-07-24 16:16:15 +02001736def Test_getbufvar()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001737 v9.CheckDefAndScriptFailure(['getbufvar(true, "v")'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1'])
1738 v9.CheckDefAndScriptFailure(['getbufvar(1, 2, 3)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
Yegappan Lakshmanan7973de32021-07-24 16:16:15 +02001739enddef
1740
Bram Moolenaar94738d82020-10-21 14:25:07 +02001741def Test_getchangelist()
1742 new
1743 setline(1, 'some text')
1744 var changelist = bufnr()->getchangelist()
1745 getchangelist('%')->assert_equal(changelist)
1746 bwipe!
1747enddef
1748
1749def Test_getchar()
1750 while getchar(0)
1751 endwhile
1752 getchar(true)->assert_equal(0)
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02001753 getchar(1)->assert_equal(0)
Bram Moolenaar62aec932022-01-29 21:45:34 +00001754 v9.CheckDefAndScriptFailure(['getchar(2)'], ['E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1'])
1755 v9.CheckDefAndScriptFailure(['getchar("1")'], ['E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02001756enddef
1757
1758def Test_getcharpos()
Bram Moolenaar82e46e52022-02-05 18:12:34 +00001759 assert_equal(['x', 'x', 'x', 'x'], getcharpos('.')->map((_, _) => 'x'))
1760
Bram Moolenaar62aec932022-01-29 21:45:34 +00001761 v9.CheckDefAndScriptFailure(['getcharpos(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1'])
1762 v9.CheckDefAndScriptFailure(['getcharpos(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
1763 v9.CheckDefExecAndScriptFailure(['getcharpos("")'], 'E1209: Invalid value for a line number')
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02001764enddef
1765
1766def Test_getcharstr()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001767 v9.CheckDefAndScriptFailure(['getcharstr(2)'], ['E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1'])
1768 v9.CheckDefAndScriptFailure(['getcharstr("1")'], ['E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1'])
Bram Moolenaar94738d82020-10-21 14:25:07 +02001769enddef
1770
1771def Test_getcompletion()
1772 set wildignore=*.vim,*~
1773 var l = getcompletion('run', 'file', true)
1774 l->assert_equal([])
1775 set wildignore&
Bram Moolenaar62aec932022-01-29 21:45:34 +00001776 v9.CheckDefAndScriptFailure(['getcompletion(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
1777 v9.CheckDefAndScriptFailure(['getcompletion("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
1778 v9.CheckDefAndScriptFailure(['getcompletion("a", "b", 2)'], ['E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3'])
1779 v9.CheckDefExecAndScriptFailure(['getcompletion("a", "")'], 'E475: Invalid argument')
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +02001780 getcompletion('', 'messages')->assert_equal(['clear'])
Bram Moolenaar94738d82020-10-21 14:25:07 +02001781enddef
1782
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001783def Test_getcurpos()
Bram Moolenaar82e46e52022-02-05 18:12:34 +00001784 assert_equal(['x', 'x', 'x', 'x', 'x'], getcurpos()->map((_, _) => 'x'))
1785
Bram Moolenaar62aec932022-01-29 21:45:34 +00001786 v9.CheckDefAndScriptFailure(['getcurpos("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001787enddef
1788
1789def Test_getcursorcharpos()
Bram Moolenaar82e46e52022-02-05 18:12:34 +00001790 assert_equal(['x', 'x', 'x', 'x', 'x'], getcursorcharpos()->map((_, _) => 'x'))
1791
Bram Moolenaar62aec932022-01-29 21:45:34 +00001792 v9.CheckDefAndScriptFailure(['getcursorcharpos("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001793enddef
1794
1795def Test_getcwd()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001796 v9.CheckDefAndScriptFailure(['getcwd("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
1797 v9.CheckDefAndScriptFailure(['getcwd("x", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
1798 v9.CheckDefAndScriptFailure(['getcwd(1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001799enddef
1800
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02001801def Test_getenv()
1802 if getenv('does-not_exist') == ''
1803 assert_report('getenv() should return null')
1804 endif
1805 if getenv('does-not_exist') == null
1806 else
1807 assert_report('getenv() should return null')
1808 endif
1809 $SOMEENVVAR = 'some'
1810 assert_equal('some', getenv('SOMEENVVAR'))
Bram Moolenaared0c62e2022-03-08 19:43:55 +00001811 assert_notequal(null, getenv('SOMEENVVAR'))
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02001812 unlet $SOMEENVVAR
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01001813 getenv('')->assert_equal(v:null)
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02001814enddef
1815
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02001816def Test_getfontname()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001817 v9.CheckDefAndScriptFailure(['getfontname(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01001818 #getfontname('')->assert_equal('')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02001819enddef
1820
Bram Moolenaar7bb4e742020-12-09 12:41:50 +01001821def Test_getfperm()
Bram Moolenaar2a9d5d32020-12-12 18:58:40 +01001822 assert_equal('', getfperm(""))
1823 assert_equal('', getfperm(test_null_string()))
1824
Bram Moolenaar62aec932022-01-29 21:45:34 +00001825 v9.CheckDefExecFailure(['echo getfperm(true)'], 'E1013:')
1826 v9.CheckDefExecFailure(['echo getfperm(v:null)'], 'E1013:')
Bram Moolenaar7bb4e742020-12-09 12:41:50 +01001827enddef
1828
1829def Test_getfsize()
Bram Moolenaar2a9d5d32020-12-12 18:58:40 +01001830 assert_equal(-1, getfsize(""))
1831 assert_equal(-1, getfsize(test_null_string()))
1832
Bram Moolenaar62aec932022-01-29 21:45:34 +00001833 v9.CheckDefExecFailure(['echo getfsize(true)'], 'E1013:')
1834 v9.CheckDefExecFailure(['echo getfsize(v:null)'], 'E1013:')
Bram Moolenaar7bb4e742020-12-09 12:41:50 +01001835enddef
1836
1837def Test_getftime()
Bram Moolenaar2a9d5d32020-12-12 18:58:40 +01001838 assert_equal(-1, getftime(""))
1839 assert_equal(-1, getftime(test_null_string()))
1840
Bram Moolenaar62aec932022-01-29 21:45:34 +00001841 v9.CheckDefExecFailure(['echo getftime(true)'], 'E1013:')
1842 v9.CheckDefExecFailure(['echo getftime(v:null)'], 'E1013:')
Bram Moolenaar7bb4e742020-12-09 12:41:50 +01001843enddef
1844
1845def Test_getftype()
Bram Moolenaar2a9d5d32020-12-12 18:58:40 +01001846 assert_equal('', getftype(""))
1847 assert_equal('', getftype(test_null_string()))
1848
Bram Moolenaar62aec932022-01-29 21:45:34 +00001849 v9.CheckDefExecFailure(['echo getftype(true)'], 'E1013:')
1850 v9.CheckDefExecFailure(['echo getftype(v:null)'], 'E1013:')
Bram Moolenaar7bb4e742020-12-09 12:41:50 +01001851enddef
1852
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001853def Test_getjumplist()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001854 v9.CheckDefAndScriptFailure(['getjumplist("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
1855 v9.CheckDefAndScriptFailure(['getjumplist("x", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
1856 v9.CheckDefAndScriptFailure(['getjumplist(1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001857enddef
1858
Bram Moolenaar0f1227f2021-07-11 16:01:58 +02001859def Test_getline()
1860 var lines =<< trim END
1861 new
1862 setline(1, ['hello', 'there', 'again'])
1863 assert_equal('hello', getline(1))
1864 assert_equal('hello', getline('.'))
1865
1866 normal 2Gvjv
1867 assert_equal('there', getline("'<"))
1868 assert_equal('again', getline("'>"))
Bram Moolenaar82e46e52022-02-05 18:12:34 +00001869
1870 assert_equal([3, 3, 3], getline(1, 3)->map((_, _) => 3))
Bram Moolenaar0f1227f2021-07-11 16:01:58 +02001871 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001872 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar0f1227f2021-07-11 16:01:58 +02001873
1874 lines =<< trim END
1875 echo getline('1')
1876 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001877 v9.CheckDefExecAndScriptFailure(lines, 'E1209:')
1878 v9.CheckDefAndScriptFailure(['getline(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1'])
1879 v9.CheckDefAndScriptFailure(['getline(1, true)'], ['E1013: Argument 2: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 2'])
1880 v9.CheckDefExecAndScriptFailure(['getline("")'], 'E1209: Invalid value for a line number')
Bram Moolenaar0f1227f2021-07-11 16:01:58 +02001881enddef
1882
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02001883def Test_getloclist()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001884 v9.CheckDefAndScriptFailure(['getloclist("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
1885 v9.CheckDefAndScriptFailure(['getloclist(1, [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02001886enddef
1887
1888def Test_getloclist_return_type()
1889 var l = getloclist(1)
1890 l->assert_equal([])
1891
1892 var d = getloclist(1, {items: 0})
1893 d->assert_equal({items: []})
1894enddef
1895
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02001896def Test_getmarklist()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001897 v9.CheckDefAndScriptFailure(['getmarklist([])'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02001898 assert_equal([], getmarklist(10000))
1899 assert_fails('getmarklist("a%b@#")', 'E94:')
1900enddef
1901
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001902def Test_getmatches()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001903 v9.CheckDefAndScriptFailure(['getmatches("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02001904enddef
1905
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02001906def Test_getpos()
Bram Moolenaar82e46e52022-02-05 18:12:34 +00001907 assert_equal(['x', 'x', 'x', 'x'], getpos('.')->map((_, _) => 'x'))
1908
Bram Moolenaar62aec932022-01-29 21:45:34 +00001909 v9.CheckDefAndScriptFailure(['getpos(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02001910 assert_equal([0, 1, 1, 0], getpos('.'))
Bram Moolenaar62aec932022-01-29 21:45:34 +00001911 v9.CheckDefExecFailure(['getpos("a")'], 'E1209:')
1912 v9.CheckDefExecAndScriptFailure(['getpos("")'], 'E1209: Invalid value for a line number')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02001913enddef
1914
1915def Test_getqflist()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001916 v9.CheckDefAndScriptFailure(['getqflist([])'], ['E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02001917 call assert_equal({}, getqflist({}))
1918enddef
1919
Bram Moolenaar94738d82020-10-21 14:25:07 +02001920def Test_getqflist_return_type()
1921 var l = getqflist()
1922 l->assert_equal([])
1923
Bram Moolenaare0de1712020-12-02 17:36:54 +01001924 var d = getqflist({items: 0})
1925 d->assert_equal({items: []})
Bram Moolenaar94738d82020-10-21 14:25:07 +02001926enddef
1927
1928def Test_getreg()
1929 var lines = ['aaa', 'bbb', 'ccc']
1930 setreg('a', lines)
1931 getreg('a', true, true)->assert_equal(lines)
Bram Moolenaar82e46e52022-02-05 18:12:34 +00001932 assert_equal([7, 7, 7], getreg('a', true, true)->map((_, _) => 7))
1933
Bram Moolenaar418a29f2021-02-10 22:23:41 +01001934 assert_fails('getreg("ab")', 'E1162:')
Bram Moolenaar62aec932022-01-29 21:45:34 +00001935 v9.CheckDefAndScriptFailure(['getreg(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
1936 v9.CheckDefAndScriptFailure(['getreg(".", 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2'])
1937 v9.CheckDefAndScriptFailure(['getreg(".", 1, "b")'], ['E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3'])
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01001938 @" = 'A1B2C3'
1939 getreg('')->assert_equal('A1B2C3')
Bram Moolenaar94738d82020-10-21 14:25:07 +02001940enddef
1941
1942def Test_getreg_return_type()
1943 var s1: string = getreg('"')
1944 var s2: string = getreg('"', 1)
1945 var s3: list<string> = getreg('"', 1, 1)
1946enddef
1947
Bram Moolenaar418a29f2021-02-10 22:23:41 +01001948def Test_getreginfo()
1949 var text = 'abc'
1950 setreg('a', text)
1951 getreginfo('a')->assert_equal({regcontents: [text], regtype: 'v', isunnamed: false})
1952 assert_fails('getreginfo("ab")', 'E1162:')
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01001953 @" = 'D1E2F3'
1954 getreginfo('').regcontents->assert_equal(['D1E2F3'])
Bram Moolenaar418a29f2021-02-10 22:23:41 +01001955enddef
1956
1957def Test_getregtype()
1958 var lines = ['aaa', 'bbb', 'ccc']
1959 setreg('a', lines)
1960 getregtype('a')->assert_equal('V')
1961 assert_fails('getregtype("ab")', 'E1162:')
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01001962 setreg('"', 'ABCD', 'b')
1963 getregtype('')->assert_equal("\<C-V>4")
Bram Moolenaar418a29f2021-02-10 22:23:41 +01001964enddef
1965
Yegappan Lakshmanan520f6ef2022-08-25 17:40:40 +01001966def Test_getscriptinfo()
1967 v9.CheckDefAndScriptFailure(['getscriptinfo("x")'], ['E1013: Argument 1: type mismatch, expected dict<any> but got string', 'E1206: Dictionary required for argument 1'])
Yegappan Lakshmanan2f892d82022-08-28 18:52:10 +01001968
1969 var lines1 =<< trim END
1970 vim9script
1971 g:loaded_script_id = expand("<SID>")
1972 var XscriptVar = [1, {v: 2}]
1973 func XgetScriptVar()
1974 return XscriptVar
1975 endfunc
1976 func Xscript_legacy_func1()
1977 endfunc
1978 def Xscript_def_func1()
1979 enddef
1980 func g:Xscript_legacy_func2()
1981 endfunc
1982 def g:Xscript_def_func2()
1983 enddef
1984 END
Bram Moolenaar0e9bdad2022-10-15 20:06:33 +01001985 writefile(lines1, 'X22script92', 'D')
Yegappan Lakshmanan2f892d82022-08-28 18:52:10 +01001986
1987 var lines2 =<< trim END
1988 source X22script92
1989 var sid = matchstr(g:loaded_script_id, '<SNR>\zs\d\+\ze_')->str2nr()
1990
1991 var l = getscriptinfo({sid: sid, name: 'ignored'})
1992 assert_match('X22script92$', l[0].name)
1993 assert_equal(g:loaded_script_id, $"<SNR>{l[0].sid}_")
1994 assert_equal(999999, l[0].version)
1995 assert_equal(0, l[0].sourced)
1996 assert_equal({XscriptVar: [1, {v: 2}]}, l[0].variables)
1997 var funcs = ['Xscript_legacy_func2',
1998 $"<SNR>{sid}_Xscript_legacy_func1",
1999 $"<SNR>{sid}_Xscript_def_func1",
2000 'Xscript_def_func2',
2001 $"<SNR>{sid}_XgetScriptVar"]
2002 for f in funcs
2003 assert_true(index(l[0].functions, f) != -1)
2004 endfor
2005 END
2006 v9.CheckDefAndScriptSuccess(lines2)
Yegappan Lakshmanan520f6ef2022-08-25 17:40:40 +01002007enddef
2008
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02002009def Test_gettabinfo()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002010 v9.CheckDefAndScriptFailure(['gettabinfo("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02002011enddef
2012
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02002013def Test_gettabvar()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002014 v9.CheckDefAndScriptFailure(['gettabvar("a", "b")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
2015 v9.CheckDefAndScriptFailure(['gettabvar(1, 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02002016enddef
2017
2018def Test_gettabwinvar()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002019 v9.CheckDefAndScriptFailure(['gettabwinvar("a", 2, "c")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
2020 v9.CheckDefAndScriptFailure(['gettabwinvar(1, "b", "c", [])'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
2021 v9.CheckDefAndScriptFailure(['gettabwinvar(1, 1, 3, {})'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3'])
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02002022enddef
2023
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02002024def Test_gettagstack()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002025 v9.CheckDefAndScriptFailure(['gettagstack("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02002026enddef
2027
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002028def Test_gettext()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002029 v9.CheckDefAndScriptFailure(['gettext(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
Yegappan Lakshmanan8deb2b32022-09-02 15:15:27 +01002030 v9.CheckDefExecAndScriptFailure(['gettext("")'], 'E1175: Non-empty string required for argument 1')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002031 assert_equal('abc', gettext("abc"))
Yegappan Lakshmanan8deb2b32022-09-02 15:15:27 +01002032 assert_fails('gettext("")', 'E1175:')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002033enddef
2034
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02002035def Test_getwininfo()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002036 v9.CheckDefAndScriptFailure(['getwininfo("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02002037enddef
2038
2039def Test_getwinpos()
Bram Moolenaar82e46e52022-02-05 18:12:34 +00002040 assert_equal(['x', 'x'], getwinpos()->map((_, _) => 'x'))
2041
Bram Moolenaar62aec932022-01-29 21:45:34 +00002042 v9.CheckDefAndScriptFailure(['getwinpos("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02002043enddef
2044
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02002045def Test_getwinvar()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002046 v9.CheckDefAndScriptFailure(['getwinvar("a", "b")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
2047 v9.CheckDefAndScriptFailure(['getwinvar(1, 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02002048enddef
2049
Bram Moolenaar94738d82020-10-21 14:25:07 +02002050def Test_glob()
2051 glob('runtest.vim', true, true, true)->assert_equal(['runtest.vim'])
Bram Moolenaar62aec932022-01-29 21:45:34 +00002052 v9.CheckDefAndScriptFailure(['glob(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
2053 v9.CheckDefAndScriptFailure(['glob("a", 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2'])
2054 v9.CheckDefAndScriptFailure(['glob("a", 1, "b")'], ['E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3'])
2055 v9.CheckDefAndScriptFailure(['glob("a", 1, true, 2)'], ['E1013: Argument 4: type mismatch, expected bool but got number', 'E1212: Bool required for argument 4'])
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01002056 glob('')->assert_equal('')
Bram Moolenaar94738d82020-10-21 14:25:07 +02002057enddef
2058
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002059def Test_glob2regpat()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002060 v9.CheckDefAndScriptFailure(['glob2regpat(null)'], ['E1013: Argument 1: type mismatch, expected string but got special', 'E1174: String required for argument 1'])
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01002061 glob2regpat('')->assert_equal('^$')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002062enddef
2063
Bram Moolenaar94738d82020-10-21 14:25:07 +02002064def Test_globpath()
2065 globpath('.', 'runtest.vim', true, true, true)->assert_equal(['./runtest.vim'])
Bram Moolenaar62aec932022-01-29 21:45:34 +00002066 v9.CheckDefAndScriptFailure(['globpath(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
2067 v9.CheckDefAndScriptFailure(['globpath("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
2068 v9.CheckDefAndScriptFailure(['globpath("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3'])
2069 v9.CheckDefAndScriptFailure(['globpath("a", "b", true, "d")'], ['E1013: Argument 4: type mismatch, expected bool but got string', 'E1212: Bool required for argument 4'])
2070 v9.CheckDefAndScriptFailure(['globpath("a", "b", true, false, "e")'], ['E1013: Argument 5: type mismatch, expected bool but got string', 'E1212: Bool required for argument 5'])
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01002071 globpath('', '')->assert_equal('')
Bram Moolenaar94738d82020-10-21 14:25:07 +02002072enddef
2073
2074def Test_has()
2075 has('eval', true)->assert_equal(1)
Bram Moolenaar62aec932022-01-29 21:45:34 +00002076 v9.CheckDefAndScriptFailure(['has(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1'])
2077 v9.CheckDefAndScriptFailure(['has("a", "b")'], ['E1013: Argument 2: type mismatch, expected bool but got string', 'E1212: Bool required for argument 2'])
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01002078 has('')->assert_equal(0)
Bram Moolenaar94738d82020-10-21 14:25:07 +02002079enddef
2080
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02002081def Test_has_key()
Bram Moolenaar1aeddeb2021-07-11 14:55:49 +02002082 var d = {123: 'xx'}
2083 assert_true(has_key(d, '123'))
2084 assert_true(has_key(d, 123))
2085 assert_false(has_key(d, 'x'))
2086 assert_false(has_key(d, 99))
2087
Bram Moolenaar62aec932022-01-29 21:45:34 +00002088 v9.CheckDefAndScriptFailure(['has_key([1, 2], "k")'], ['E1013: Argument 1: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 1'])
2089 v9.CheckDefAndScriptFailure(['has_key({"a": 10}, ["a"])'], ['E1013: Argument 2: type mismatch, expected string but got list<string>', 'E1220: String or Number required for argument 2'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02002090enddef
2091
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02002092def Test_haslocaldir()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002093 v9.CheckDefAndScriptFailure(['haslocaldir("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
2094 v9.CheckDefAndScriptFailure(['haslocaldir("x", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
2095 v9.CheckDefAndScriptFailure(['haslocaldir(1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02002096enddef
2097
Bram Moolenaar94738d82020-10-21 14:25:07 +02002098def Test_hasmapto()
2099 hasmapto('foobar', 'i', true)->assert_equal(0)
2100 iabbrev foo foobar
2101 hasmapto('foobar', 'i', true)->assert_equal(1)
2102 iunabbrev foo
Bram Moolenaar62aec932022-01-29 21:45:34 +00002103 v9.CheckDefAndScriptFailure(['hasmapto(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
2104 v9.CheckDefAndScriptFailure(['hasmapto("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
2105 v9.CheckDefAndScriptFailure(['hasmapto("a", "b", 2)'], ['E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3'])
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01002106 hasmapto('', '')->assert_equal(0)
Bram Moolenaar94738d82020-10-21 14:25:07 +02002107enddef
2108
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002109def Test_histadd()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002110 v9.CheckDefAndScriptFailure(['histadd(1, "x")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
2111 v9.CheckDefAndScriptFailure(['histadd(":", 10)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002112 histadd("search", 'skyblue')
2113 assert_equal('skyblue', histget('/', -1))
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +02002114 histadd("search", '')->assert_equal(0)
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002115enddef
2116
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02002117def Test_histdel()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002118 v9.CheckDefAndScriptFailure(['histdel(1, "x")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
2119 v9.CheckDefAndScriptFailure(['histdel(":", true)'], ['E1013: Argument 2: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 2'])
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +02002120 histdel('search', '')->assert_equal(0)
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02002121enddef
2122
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02002123def Test_histget()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002124 v9.CheckDefAndScriptFailure(['histget(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
2125 v9.CheckDefAndScriptFailure(['histget("a", "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02002126enddef
2127
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002128def Test_histnr()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002129 v9.CheckDefAndScriptFailure(['histnr(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002130 assert_equal(-1, histnr('abc'))
2131enddef
2132
2133def Test_hlID()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002134 v9.CheckDefAndScriptFailure(['hlID(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002135 assert_equal(0, hlID('NonExistingHighlight'))
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01002136 hlID('')->assert_equal(0)
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002137enddef
2138
2139def Test_hlexists()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002140 v9.CheckDefAndScriptFailure(['hlexists([])'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002141 assert_equal(0, hlexists('NonExistingHighlight'))
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01002142 hlexists('')->assert_equal(0)
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002143enddef
2144
Yegappan Lakshmanand1a8d652021-11-03 21:56:45 +00002145def Test_hlget()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002146 v9.CheckDefAndScriptFailure(['hlget([])'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1'])
Yegappan Lakshmanand1a8d652021-11-03 21:56:45 +00002147 hlget('')->assert_equal([])
2148enddef
2149
2150def Test_hlset()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002151 v9.CheckDefAndScriptFailure(['hlset("id")'], ['E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1211: List required for argument 1'])
Yegappan Lakshmanand1a8d652021-11-03 21:56:45 +00002152 hlset([])->assert_equal(0)
2153enddef
2154
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002155def Test_iconv()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002156 v9.CheckDefAndScriptFailure(['iconv(1, "from", "to")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
2157 v9.CheckDefAndScriptFailure(['iconv("abc", 10, "to")'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
2158 v9.CheckDefAndScriptFailure(['iconv("abc", "from", 20)'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002159 assert_equal('abc', iconv('abc', 'fromenc', 'toenc'))
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01002160 iconv('', '', '')->assert_equal('')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002161enddef
2162
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02002163def Test_indent()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002164 v9.CheckDefAndScriptFailure(['indent([1])'], ['E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1'])
2165 v9.CheckDefAndScriptFailure(['indent(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1'])
2166 v9.CheckDefExecAndScriptFailure(['indent("")'], 'E1209: Invalid value for a line number')
2167 v9.CheckDefExecAndScriptFailure(['indent(-1)'], 'E966: Invalid line number: -1')
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02002168 assert_equal(0, indent(1))
2169enddef
2170
Bram Moolenaar94738d82020-10-21 14:25:07 +02002171def Test_index()
2172 index(['a', 'b', 'a', 'B'], 'b', 2, true)->assert_equal(3)
Bram Moolenaar62aec932022-01-29 21:45:34 +00002173 v9.CheckDefAndScriptFailure(['index("a", "a")'], ['E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1226: List or Blob required for argument 1'])
2174 v9.CheckDefFailure(['index(["1"], 1)'], 'E1013: Argument 2: type mismatch, expected string but got number')
2175 v9.CheckDefAndScriptFailure(['index(0z10, "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
2176 v9.CheckDefAndScriptFailure(['index([1], 1, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
2177 v9.CheckDefAndScriptFailure(['index(0z1020, 10, 1, 2)'], ['E1013: Argument 4: type mismatch, expected bool but got number', 'E1212: Bool required for argument 4'])
Bram Moolenaar94738d82020-10-21 14:25:07 +02002178enddef
2179
Yegappan Lakshmananb2186552022-08-13 13:09:20 +01002180def Test_indexof()
Yegappan Lakshmanan3fbf6cd2022-08-13 21:35:13 +01002181 var l = [{color: 'red'}, {color: 'blue'}, {color: 'green'}, {color: 'blue'}]
2182 indexof(l, (i, v) => v.color == 'blue')->assert_equal(1)
2183 indexof(l, (i, v) => v.color == 'blue', {startidx: 1})->assert_equal(1)
2184 indexof(l, (i, v) => v.color == 'blue', {startidx: 2})->assert_equal(3)
Yegappan Lakshmananb2186552022-08-13 13:09:20 +01002185 var b = 0zdeadbeef
2186 indexof(b, "v:val == 0xef")->assert_equal(3)
Yegappan Lakshmanan3fbf6cd2022-08-13 21:35:13 +01002187
Yegappan Lakshmanan63acae12022-08-14 12:07:11 +01002188 def TestIdx1(k: number, v: dict<any>): bool
Yegappan Lakshmanan3fbf6cd2022-08-13 21:35:13 +01002189 return v.color == 'blue'
2190 enddef
Yegappan Lakshmanan63acae12022-08-14 12:07:11 +01002191 indexof(l, TestIdx1)->assert_equal(1)
2192
2193 var lines =<< trim END
2194 def TestIdx(v: dict<any>): bool
2195 return v.color == 'blue'
2196 enddef
2197
2198 indexof([{color: "red"}], TestIdx)
2199 END
2200 v9.CheckDefAndScriptFailure(lines, ['E176: Invalid number of arguments', 'E118: Too many arguments for function'])
2201
2202 lines =<< trim END
2203 def TestIdx(k: number, v: dict<any>)
2204 enddef
2205
2206 indexof([{color: "red"}], TestIdx)
2207 END
2208 v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?number, ?any): bool', 'E1031: Cannot use void value'])
2209
2210 lines =<< trim END
2211 def TestIdx(k: number, v: dict<any>): string
2212 return "abc"
2213 enddef
2214
2215 indexof([{color: "red"}], TestIdx)
2216 END
2217 v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?number, ?any): bool', 'E1135: Using a String as a Bool'])
Yegappan Lakshmananb2186552022-08-13 13:09:20 +01002218enddef
2219
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02002220def Test_input()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002221 v9.CheckDefAndScriptFailure(['input(5)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
2222 v9.CheckDefAndScriptFailure(['input(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1'])
2223 v9.CheckDefAndScriptFailure(['input("p", 10)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
2224 v9.CheckDefAndScriptFailure(['input("p", "q", 20)'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02002225enddef
2226
2227def Test_inputdialog()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002228 v9.CheckDefAndScriptFailure(['inputdialog(5)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
2229 v9.CheckDefAndScriptFailure(['inputdialog(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1'])
2230 v9.CheckDefAndScriptFailure(['inputdialog("p", 10)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
2231 v9.CheckDefAndScriptFailure(['inputdialog("p", "q", 20)'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02002232enddef
2233
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002234def Test_inputlist()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002235 v9.CheckDefAndScriptFailure(['inputlist(10)'], ['E1013: Argument 1: type mismatch, expected list<string> but got number', 'E1211: List required for argument 1'])
2236 v9.CheckDefAndScriptFailure(['inputlist("abc")'], ['E1013: Argument 1: type mismatch, expected list<string> but got string', 'E1211: List required for argument 1'])
2237 v9.CheckDefFailure(['inputlist([1, 2, 3])'], 'E1013: Argument 1: type mismatch, expected list<string> but got list<number>')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002238 feedkeys("2\<CR>", 't')
2239 var r: number = inputlist(['a', 'b', 'c'])
2240 assert_equal(2, r)
2241enddef
2242
2243def Test_inputsecret()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002244 v9.CheckDefAndScriptFailure(['inputsecret(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
2245 v9.CheckDefAndScriptFailure(['inputsecret("Pass:", 20)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002246 feedkeys("\<CR>", 't')
2247 var ans: string = inputsecret('Pass:', '123')
2248 assert_equal('123', ans)
2249enddef
2250
Bram Moolenaar193f6202020-11-16 20:08:35 +01002251let s:number_one = 1
2252let s:number_two = 2
2253let s:string_keep = 'keep'
2254
Bram Moolenaarca174532020-10-21 16:42:22 +02002255def Test_insert()
Bram Moolenaar94738d82020-10-21 14:25:07 +02002256 var l = insert([2, 1], 3)
2257 var res = 0
2258 for n in l
2259 res += n
2260 endfor
2261 res->assert_equal(6)
Bram Moolenaarca174532020-10-21 16:42:22 +02002262
Yegappan Lakshmanan34fcb692021-05-25 20:14:00 +02002263 var m: any = []
2264 insert(m, 4)
2265 call assert_equal([4], m)
2266 extend(m, [6], 0)
2267 call assert_equal([6, 4], m)
2268
Bram Moolenaar39211cb2021-04-18 15:48:04 +02002269 var lines =<< trim END
2270 insert(test_null_list(), 123)
2271 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00002272 v9.CheckDefExecAndScriptFailure(lines, 'E1130:', 1)
Bram Moolenaar39211cb2021-04-18 15:48:04 +02002273
2274 lines =<< trim END
2275 insert(test_null_blob(), 123)
2276 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00002277 v9.CheckDefExecAndScriptFailure(lines, 'E1131:', 1)
Bram Moolenaar39211cb2021-04-18 15:48:04 +02002278
Bram Moolenaarca174532020-10-21 16:42:22 +02002279 assert_equal([1, 2, 3], insert([2, 3], 1))
Bram Moolenaara749a422022-02-12 19:52:25 +00002280 assert_equal([1, 2, 3], insert([2, 3], number_one))
Bram Moolenaarca174532020-10-21 16:42:22 +02002281 assert_equal([1, 2, 3], insert([1, 2], 3, 2))
Bram Moolenaara749a422022-02-12 19:52:25 +00002282 assert_equal([1, 2, 3], insert([1, 2], 3, number_two))
Bram Moolenaarca174532020-10-21 16:42:22 +02002283 assert_equal(['a', 'b', 'c'], insert(['b', 'c'], 'a'))
2284 assert_equal(0z1234, insert(0z34, 0x12))
Bram Moolenaar193f6202020-11-16 20:08:35 +01002285
Bram Moolenaar62aec932022-01-29 21:45:34 +00002286 v9.CheckDefAndScriptFailure(['insert("a", 1)'], ['E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1226: List or Blob required for argument 1'])
2287 v9.CheckDefFailure(['insert([2, 3], "a")'], 'E1013: Argument 2: type mismatch, expected number but got string')
2288 v9.CheckDefAndScriptFailure(['insert([2, 3], 1, "x")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
Bram Moolenaar94738d82020-10-21 14:25:07 +02002289enddef
2290
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02002291def Test_invert()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002292 v9.CheckDefAndScriptFailure(['invert("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02002293enddef
2294
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002295def Test_isdirectory()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002296 v9.CheckDefAndScriptFailure(['isdirectory(1.1)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002297 assert_false(isdirectory('NonExistingDir'))
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01002298 assert_false(isdirectory(''))
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002299enddef
2300
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02002301def Test_islocked()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002302 v9.CheckDefAndScriptFailure(['islocked(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1'])
2303 v9.CheckDefAndScriptFailure(['var n1: number = 10', 'islocked(n1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02002304 g:v1 = 10
2305 assert_false(islocked('g:v1'))
2306 lockvar g:v1
2307 assert_true(islocked('g:v1'))
2308 unlet g:v1
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01002309 islocked('')->assert_equal(-1)
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02002310enddef
2311
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002312def Test_items()
Bram Moolenaar3e518a82022-08-30 17:45:33 +01002313 v9.CheckDefFailure(['123->items()'], 'E1225:')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002314 assert_equal([['a', 10], ['b', 20]], {'a': 10, 'b': 20}->items())
2315 assert_equal([], {}->items())
Bram Moolenaar82e46e52022-02-05 18:12:34 +00002316 assert_equal(['x', 'x'], {'a': 10, 'b': 20}->items()->map((_, _) => 'x'))
Bram Moolenaar976f8592022-08-30 14:34:52 +01002317
2318 assert_equal([[0, 'a'], [1, 'b']], ['a', 'b']->items())
2319 assert_equal([], []->items())
2320 assert_equal([], test_null_list()->items())
Bram Moolenaar3e518a82022-08-30 17:45:33 +01002321
2322 assert_equal([[0, 'a'], [1, '웃'], [2, 'ć']], 'a웃ć'->items())
2323 assert_equal([], ''->items())
2324 assert_equal([], test_null_string()->items())
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002325enddef
2326
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02002327def Test_job_getchannel()
Dominique Pelle9ff9c7b2021-07-18 21:44:37 +02002328 if !has('job')
2329 CheckFeature job
2330 else
Bram Moolenaar62aec932022-01-29 21:45:34 +00002331 v9.CheckDefAndScriptFailure(['job_getchannel("a")'], ['E1013: Argument 1: type mismatch, expected job but got string', 'E1218: Job required for argument 1'])
Bram Moolenaarec892232022-05-06 17:53:06 +01002332 assert_fails('job_getchannel(test_null_job())', 'E916: Not a valid job')
Dominique Pelle9ff9c7b2021-07-18 21:44:37 +02002333 endif
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02002334enddef
2335
2336def Test_job_info()
Dominique Pelle9ff9c7b2021-07-18 21:44:37 +02002337 if !has('job')
2338 CheckFeature job
2339 else
Bram Moolenaar62aec932022-01-29 21:45:34 +00002340 v9.CheckDefAndScriptFailure(['job_info("a")'], ['E1013: Argument 1: type mismatch, expected job but got string', 'E1218: Job required for argument 1'])
Bram Moolenaarec892232022-05-06 17:53:06 +01002341 assert_fails('job_info(test_null_job())', 'E916: Not a valid job')
Dominique Pelle9ff9c7b2021-07-18 21:44:37 +02002342 endif
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02002343enddef
2344
Bram Moolenaarf0e496a2021-12-01 12:41:31 +00002345" Test_job_info_return_type() is in test_vim9_fails.vim
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02002346
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02002347def Test_job_setoptions()
2348 if !has('job')
2349 CheckFeature job
2350 else
Bram Moolenaar62aec932022-01-29 21:45:34 +00002351 v9.CheckDefAndScriptFailure(['job_setoptions(test_null_channel(), {})'], ['E1013: Argument 1: type mismatch, expected job but got channel', 'E1218: Job required for argument 1'])
2352 v9.CheckDefAndScriptFailure(['job_setoptions(test_null_job(), [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2'])
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02002353 assert_equal('fail', job_status(test_null_job()))
2354 endif
2355enddef
2356
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02002357def Test_job_status()
Dominique Pelle9ff9c7b2021-07-18 21:44:37 +02002358 if !has('job')
2359 CheckFeature job
2360 else
Bram Moolenaar62aec932022-01-29 21:45:34 +00002361 v9.CheckDefAndScriptFailure(['job_status("a")'], ['E1013: Argument 1: type mismatch, expected job but got string', 'E1218: Job required for argument 1'])
Dominique Pelle9ff9c7b2021-07-18 21:44:37 +02002362 assert_equal('fail', job_status(test_null_job()))
2363 endif
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02002364enddef
2365
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02002366def Test_job_stop()
2367 if !has('job')
2368 CheckFeature job
2369 else
Bram Moolenaar62aec932022-01-29 21:45:34 +00002370 v9.CheckDefAndScriptFailure(['job_stop("a")'], ['E1013: Argument 1: type mismatch, expected job but got string', 'E1218: Job required for argument 1'])
2371 v9.CheckDefAndScriptFailure(['job_stop(test_null_job(), true)'], ['E1013: Argument 2: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 2'])
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02002372 endif
2373enddef
2374
2375def Test_join()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002376 v9.CheckDefAndScriptFailure(['join("abc")'], ['E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1211: List required for argument 1'])
2377 v9.CheckDefAndScriptFailure(['join([], 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01002378 join([''], '')->assert_equal('')
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02002379enddef
2380
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002381def Test_js_decode()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002382 v9.CheckDefAndScriptFailure(['js_decode(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002383 assert_equal([1, 2], js_decode('[1,2]'))
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02002384 js_decode('')->assert_equal(v:none)
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002385enddef
2386
2387def Test_json_decode()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002388 v9.CheckDefAndScriptFailure(['json_decode(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002389 assert_equal(1.0, json_decode('1.0'))
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02002390 json_decode('')->assert_equal(v:none)
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002391enddef
2392
2393def Test_keys()
Bram Moolenaar82e46e52022-02-05 18:12:34 +00002394 assert_equal([7, 7], keys({a: 1, b: 2})->map((_, _) => 7))
2395
Bram Moolenaar62aec932022-01-29 21:45:34 +00002396 v9.CheckDefAndScriptFailure(['keys([])'], ['E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002397 assert_equal(['a'], {a: 'v'}->keys())
2398 assert_equal([], {}->keys())
2399enddef
2400
Bram Moolenaar94738d82020-10-21 14:25:07 +02002401def Test_keys_return_type()
Bram Moolenaare0de1712020-12-02 17:36:54 +01002402 const var: list<string> = {a: 1, b: 2}->keys()
Bram Moolenaar94738d82020-10-21 14:25:07 +02002403 var->assert_equal(['a', 'b'])
2404enddef
2405
Yegappan Lakshmanana764e732021-07-25 15:57:32 +02002406def Test_len()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002407 v9.CheckDefAndScriptFailure(['len(true)'], ['E1013: Argument 1: type mismatch, expected list<any> but got bool', 'E701: Invalid type for len()'])
Yegappan Lakshmanana764e732021-07-25 15:57:32 +02002408 assert_equal(2, "ab"->len())
2409 assert_equal(3, 456->len())
2410 assert_equal(0, []->len())
2411 assert_equal(1, {a: 10}->len())
2412 assert_equal(4, 0z20304050->len())
2413enddef
2414
Yegappan Lakshmanan5bca9062021-07-24 21:33:26 +02002415def Test_libcall()
2416 CheckFeature libcall
Bram Moolenaar62aec932022-01-29 21:45:34 +00002417 v9.CheckDefAndScriptFailure(['libcall(1, "b", 3)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
2418 v9.CheckDefAndScriptFailure(['libcall("a", 2, 3)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
2419 v9.CheckDefAndScriptFailure(['libcall("a", "b", 1.1)'], ['E1013: Argument 3: type mismatch, expected string but got float', 'E1220: String or Number required for argument 3'])
Yegappan Lakshmanan5bca9062021-07-24 21:33:26 +02002420enddef
2421
2422def Test_libcallnr()
2423 CheckFeature libcall
Bram Moolenaar62aec932022-01-29 21:45:34 +00002424 v9.CheckDefAndScriptFailure(['libcallnr(1, "b", 3)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
2425 v9.CheckDefAndScriptFailure(['libcallnr("a", 2, 3)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
2426 v9.CheckDefAndScriptFailure(['libcallnr("a", "b", 1.1)'], ['E1013: Argument 3: type mismatch, expected string but got float', 'E1220: String or Number required for argument 3'])
Yegappan Lakshmanan5bca9062021-07-24 21:33:26 +02002427enddef
2428
Bram Moolenaarc5809432021-03-27 21:23:30 +01002429def Test_line()
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002430 assert_fails('line(true)', 'E1174:')
Bram Moolenaar62aec932022-01-29 21:45:34 +00002431 v9.CheckDefAndScriptFailure(['line(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
2432 v9.CheckDefAndScriptFailure(['line(".", "a")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
2433 v9.CheckDefExecAndScriptFailure(['line("")'], 'E1209: Invalid value for a line number')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002434enddef
2435
2436def Test_line2byte()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002437 v9.CheckDefAndScriptFailure(['line2byte(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1'])
2438 v9.CheckDefExecAndScriptFailure(['line2byte("")'], 'E1209: Invalid value for a line number')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002439 assert_equal(-1, line2byte(1))
2440 assert_equal(-1, line2byte(10000))
2441enddef
2442
2443def Test_lispindent()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002444 v9.CheckDefAndScriptFailure(['lispindent({})'], ['E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1220: String or Number required for argument 1'])
2445 v9.CheckDefExecAndScriptFailure(['lispindent("")'], 'E1209: Invalid value for a line number')
2446 v9.CheckDefExecAndScriptFailure(['lispindent(-1)'], 'E966: Invalid line number: -1')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002447 assert_equal(0, lispindent(1))
Bram Moolenaarc5809432021-03-27 21:23:30 +01002448enddef
2449
Yegappan Lakshmanan5dfe4672021-09-14 17:54:30 +02002450def Test_list2blob()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002451 v9.CheckDefAndScriptFailure(['list2blob(10)'], ['E1013: Argument 1: type mismatch, expected list<number> but got number', 'E1211: List required for argument 1'])
2452 v9.CheckDefFailure(['list2blob([0z10, 0z02])'], 'E1013: Argument 1: type mismatch, expected list<number> but got list<blob>')
Yegappan Lakshmanan5dfe4672021-09-14 17:54:30 +02002453enddef
2454
Bram Moolenaar94738d82020-10-21 14:25:07 +02002455def Test_list2str_str2list_utf8()
2456 var s = "\u3042\u3044"
2457 var l = [0x3042, 0x3044]
2458 str2list(s, true)->assert_equal(l)
2459 list2str(l, true)->assert_equal(s)
2460enddef
2461
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02002462def Test_list2str()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002463 v9.CheckDefAndScriptFailure(['list2str(".", true)'], ['E1013: Argument 1: type mismatch, expected list<number> but got string', 'E1211: List required for argument 1'])
2464 v9.CheckDefAndScriptFailure(['list2str([1], 0z10)'], ['E1013: Argument 2: type mismatch, expected bool but got blob', 'E1212: Bool required for argument 2'])
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02002465enddef
2466
Bram Moolenaar62aec932022-01-29 21:45:34 +00002467def s:SID(): number
Bram Moolenaar94738d82020-10-21 14:25:07 +02002468 return expand('<SID>')
2469 ->matchstr('<SNR>\zs\d\+\ze_$')
2470 ->str2nr()
2471enddef
2472
Yegappan Lakshmanan5bca9062021-07-24 21:33:26 +02002473def Test_listener_add()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002474 v9.CheckDefAndScriptFailure(['listener_add("1", true)'], ['E1013: Argument 2: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 2'])
Yegappan Lakshmanan5bca9062021-07-24 21:33:26 +02002475enddef
2476
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02002477def Test_listener_flush()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002478 v9.CheckDefAndScriptFailure(['listener_flush([1])'], ['E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02002479enddef
2480
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02002481def Test_listener_remove()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002482 v9.CheckDefAndScriptFailure(['listener_remove("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02002483enddef
2484
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01002485def Test_luaeval()
Yegappan Lakshmanana764e732021-07-25 15:57:32 +02002486 if !has('lua')
2487 CheckFeature lua
2488 endif
Bram Moolenaar62aec932022-01-29 21:45:34 +00002489 v9.CheckDefAndScriptFailure(['luaeval(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01002490 if exists_compiled('*luaeval')
2491 luaeval('')->assert_equal(v:null)
2492 endif
Yegappan Lakshmanana764e732021-07-25 15:57:32 +02002493enddef
2494
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02002495def Test_map()
Dominique Pelle0dc4d8e2021-12-18 12:40:52 +00002496 if has('channel')
Bram Moolenaar62aec932022-01-29 21:45:34 +00002497 v9.CheckDefAndScriptFailure(['map(test_null_channel(), "1")'], ['E1013: Argument 1: type mismatch, expected list<any> but got channel', 'E1251: List, Dictionary, Blob or String required for argument 1'])
Dominique Pelle0dc4d8e2021-12-18 12:40:52 +00002498 endif
Bram Moolenaar62aec932022-01-29 21:45:34 +00002499 v9.CheckDefAndScriptFailure(['map(1, "1")'], ['E1013: Argument 1: type mismatch, expected list<any> but got number', 'E1251: List, Dictionary, Blob or String required for argument 1'])
2500 v9.CheckDefAndScriptFailure(['map([1, 2], 4)'], ['E1256: String or function required for argument 2', 'E1024: Using a Number as a String'])
Bram Moolenaar114dbda2022-01-03 12:28:03 +00002501
2502 # type of dict remains dict<any> even when type of values changes
Bram Moolenaar10d6f182022-01-04 15:54:38 +00002503 # same for list
2504 var lines =<< trim END
2505 var d: dict<any> = {a: 0}
2506 d->map((k, v) => true)
2507 d->map((k, v) => 'x')
2508 assert_equal({a: 'x'}, d)
2509
2510 d = {a: 0}
2511 g:gd = d
2512 map(g:gd, (k, v) => true)
2513 assert_equal({a: true}, g:gd)
2514
2515 var l: list<any> = [0]
2516 l->map((k, v) => true)
2517 l->map((k, v) => 'x')
2518 assert_equal(['x'], l)
2519
2520 l = [1]
2521 g:gl = l
2522 map(g:gl, (k, v) => true)
2523 assert_equal([true], g:gl)
Bram Moolenaar2626d6a2022-02-06 15:49:35 +00002524
2525 assert_equal(['x'], [[1, 2]]->map((_, v) => 'x'))
2526 assert_equal(['x'], [{a: 0}]->map((_, v) => 'x'))
2527 assert_equal({a: 'x'}, {a: [1, 2]}->map((_, v) => 'x'))
2528 assert_equal({a: 'x'}, {a: {b: 2}}->map((_, v) => 'x'))
Bram Moolenaar10d6f182022-01-04 15:54:38 +00002529 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00002530 v9.CheckDefAndScriptSuccess(lines)
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02002531enddef
2532
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02002533def Test_map_failure()
2534 CheckFeature job
2535
2536 var lines =<< trim END
2537 vim9script
2538 writefile([], 'Xtmpfile')
2539 silent e Xtmpfile
2540 var d = {[bufnr('%')]: {a: 0}}
2541 au BufReadPost * Func()
2542 def Func()
2543 if d->has_key('')
2544 endif
2545 eval d[expand('<abuf>')]->mapnew((_, v: dict<job>) => 0)
2546 enddef
2547 e
2548 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00002549 v9.CheckScriptFailure(lines, 'E1013:')
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02002550 au! BufReadPost
2551 delete('Xtmpfile')
Bram Moolenaar10d6f182022-01-04 15:54:38 +00002552
2553 lines =<< trim END
2554 var d: dict<number> = {a: 1}
2555 g:gd = d
2556 map(g:gd, (k, v) => true)
2557 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00002558 v9.CheckDefExecAndScriptFailure(lines, 'E1012: Type mismatch; expected number but got bool')
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02002559enddef
2560
Bram Moolenaara5d1a672022-09-30 17:57:47 +01002561def Test_map_const()
2562 var lines =<< trim END
2563 const l = [1, 2, 3]
2564 map(l, 'SomeFunc')
2565 END
2566 v9.CheckDefFailure(lines, 'E1307: Argument 1: Trying to modify a const list<number>')
2567
2568 lines =<< trim END
2569 const d = {a: 1, b: 2}
2570 map(d, 'SomeFunc')
2571 END
2572 v9.CheckDefFailure(lines, 'E1307: Argument 1: Trying to modify a const dict<number>')
2573enddef
2574
Bram Moolenaar70250fb2021-01-16 19:01:53 +01002575def Test_map_function_arg()
2576 var lines =<< trim END
2577 def MapOne(i: number, v: string): string
2578 return i .. ':' .. v
2579 enddef
2580 var l = ['a', 'b', 'c']
2581 map(l, MapOne)
2582 assert_equal(['0:a', '1:b', '2:c'], l)
2583 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00002584 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar8da6d6d2021-06-05 18:15:09 +02002585
2586 lines =<< trim END
2587 range(3)->map((a, b, c) => a + b + c)
2588 END
Bram Moolenaareddd4fc2022-02-20 15:52:28 +00002589 v9.CheckDefAndScriptFailure(lines, ['E176:', 'E1190: One argument too few'])
Bram Moolenaar8da6d6d2021-06-05 18:15:09 +02002590 lines =<< trim END
2591 range(3)->map((a, b, c, d) => a + b + c + d)
2592 END
Bram Moolenaareddd4fc2022-02-20 15:52:28 +00002593 v9.CheckDefAndScriptFailure(lines, ['E176:', 'E1190: 2 arguments too few'])
Bram Moolenaar18024052021-12-25 21:43:28 +00002594
Bram Moolenaar35c807d2022-01-27 16:36:29 +00002595 # declared list cannot change type
Bram Moolenaar18024052021-12-25 21:43:28 +00002596 lines =<< trim END
2597 def Map(i: number, v: number): string
2598 return 'bad'
2599 enddef
Bram Moolenaar35c807d2022-01-27 16:36:29 +00002600 var ll: list<number> = [1, 2, 3]
2601 echo map(ll, Map)
Bram Moolenaar18024052021-12-25 21:43:28 +00002602 END
Bram Moolenaareddd4fc2022-02-20 15:52:28 +00002603 v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?number, ?number): number but got func(number, number): string', 'E1012: Type mismatch; expected number but got string in map()'])
Bram Moolenaar35c807d2022-01-27 16:36:29 +00002604
2605 # not declared list can change type
2606 echo [1, 2, 3]->map((..._) => 'x')
Bram Moolenaar70250fb2021-01-16 19:01:53 +01002607enddef
2608
2609def Test_map_item_type()
2610 var lines =<< trim END
2611 var l = ['a', 'b', 'c']
2612 map(l, (k, v) => k .. '/' .. v )
2613 assert_equal(['0/a', '1/b', '2/c'], l)
2614 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00002615 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar70250fb2021-01-16 19:01:53 +01002616
2617 lines =<< trim END
2618 var l: list<number> = [0]
2619 echo map(l, (_, v) => [])
2620 END
Bram Moolenaareddd4fc2022-02-20 15:52:28 +00002621 v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?number, ?number): number but got func(any, any): list<unknown>', 'E1012: Type mismatch; expected number but got list<unknown> in map()'], 2)
Bram Moolenaar70250fb2021-01-16 19:01:53 +01002622
2623 lines =<< trim END
2624 var l: list<number> = range(2)
2625 echo map(l, (_, v) => [])
2626 END
Bram Moolenaareddd4fc2022-02-20 15:52:28 +00002627 v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?number, ?number): number but got func(any, any): list<unknown>', 'E1012: Type mismatch; expected number but got list<unknown> in map()'], 2)
Bram Moolenaar70250fb2021-01-16 19:01:53 +01002628
2629 lines =<< trim END
2630 var d: dict<number> = {key: 0}
2631 echo map(d, (_, v) => [])
2632 END
Bram Moolenaareddd4fc2022-02-20 15:52:28 +00002633 v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?string, ?number): number but got func(any, any): list<unknown>', 'E1012: Type mismatch; expected number but got list<unknown> in map()'], 2)
Bram Moolenaar70250fb2021-01-16 19:01:53 +01002634enddef
2635
Bram Moolenaar94738d82020-10-21 14:25:07 +02002636def Test_maparg()
2637 var lnum = str2nr(expand('<sflnum>'))
2638 map foo bar
Bram Moolenaare0de1712020-12-02 17:36:54 +01002639 maparg('foo', '', false, true)->assert_equal({
Bram Moolenaar94738d82020-10-21 14:25:07 +02002640 lnum: lnum + 1,
2641 script: 0,
2642 mode: ' ',
2643 silent: 0,
2644 noremap: 0,
2645 lhs: 'foo',
2646 lhsraw: 'foo',
2647 nowait: 0,
2648 expr: 0,
2649 sid: SID(),
Bram Moolenaar17dd5192022-01-18 21:42:37 +00002650 scriptversion: 999999,
Bram Moolenaar94738d82020-10-21 14:25:07 +02002651 rhs: 'bar',
Ernie Rael51d04d12022-05-04 15:40:22 +01002652 buffer: 0,
Ernie Raeld8f5f762022-05-10 17:50:39 +01002653 abbr: 0,
2654 mode_bits: 0x47})
Bram Moolenaar94738d82020-10-21 14:25:07 +02002655 unmap foo
Bram Moolenaar62aec932022-01-29 21:45:34 +00002656 v9.CheckDefAndScriptFailure(['maparg(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
2657 v9.CheckDefAndScriptFailure(['maparg("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
2658 v9.CheckDefAndScriptFailure(['maparg("a", "b", 2)'], ['E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3'])
2659 v9.CheckDefAndScriptFailure(['maparg("a", "b", true, 2)'], ['E1013: Argument 4: type mismatch, expected bool but got number', 'E1212: Bool required for argument 4'])
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01002660 maparg('')->assert_equal('')
Bram Moolenaareddd4fc2022-02-20 15:52:28 +00002661
Bram Moolenaarc1e6c7b2022-02-20 18:26:46 +00002662 # value argument type is checked at compile time
Bram Moolenaareddd4fc2022-02-20 15:52:28 +00002663 var lines =<< trim END
2664 var l = [123]
Bram Moolenaarc1e6c7b2022-02-20 18:26:46 +00002665 l->map((i: number, v: string) => 0)
Bram Moolenaareddd4fc2022-02-20 15:52:28 +00002666 END
Bram Moolenaarc1e6c7b2022-02-20 18:26:46 +00002667 v9.CheckDefFailure(lines, 'E1013: Argument 2: type mismatch, expected func(?number, ?number): number but got func(number, string): number')
Bram Moolenaareddd4fc2022-02-20 15:52:28 +00002668
2669 lines =<< trim END
Bram Moolenaarc1e6c7b2022-02-20 18:26:46 +00002670 var d = {a: 123}
2671 d->map((i: string, v: string) => 0)
2672 END
2673 v9.CheckDefFailure(lines, 'E1013: Argument 2: type mismatch, expected func(?string, ?number): number but got func(string, string): number')
2674
2675 lines =<< trim END
2676 var s = 'abc'
2677 s->map((i: number, v: number) => 'x')
2678 END
2679 v9.CheckDefFailure(lines, 'E1013: Argument 2: type mismatch, expected func(?number, ?string): string but got func(number, number): string')
2680
2681 lines =<< trim END
2682 var s = 0z1122
2683 s->map((i: number, v: string) => 0)
2684 END
2685 v9.CheckDefFailure(lines, 'E1013: Argument 2: type mismatch, expected func(?number, ?number): number but got func(number, string): number')
2686
2687 # index argument type is checked at compile time
2688 lines =<< trim END
Bram Moolenaareddd4fc2022-02-20 15:52:28 +00002689 ['x']->map((i: string, v: string) => 'y')
2690 END
2691 v9.CheckDefFailure(lines, 'E1013: Argument 2: type mismatch, expected func(?number, ?any): any but got func(string, string): string')
2692
2693 lines =<< trim END
2694 {a: 1}->map((i: number, v: number) => 0)
2695 END
2696 v9.CheckDefFailure(lines, 'E1013: Argument 2: type mismatch, expected func(?string, ?any): any but got func(number, number): number')
Bram Moolenaarc1e6c7b2022-02-20 18:26:46 +00002697
2698 lines =<< trim END
2699 'abc'->map((i: string, v: string) => 'x')
2700 END
2701 v9.CheckDefFailure(lines, 'E1013: Argument 2: type mismatch, expected func(?number, ?string): string but got func(string, string): string')
2702
2703 lines =<< trim END
2704 0z1122->map((i: string, v: number) => 0)
2705 END
2706 v9.CheckDefFailure(lines, 'E1013: Argument 2: type mismatch, expected func(?number, ?number): number but got func(string, number): number')
Bram Moolenaar94738d82020-10-21 14:25:07 +02002707enddef
2708
2709def Test_maparg_mapset()
2710 nnoremap <F3> :echo "hit F3"<CR>
2711 var mapsave = maparg('<F3>', 'n', false, true)
2712 mapset('n', false, mapsave)
2713
2714 nunmap <F3>
2715enddef
2716
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02002717def Test_mapcheck()
2718 iabbrev foo foobar
2719 mapcheck('foo', 'i', true)->assert_equal('foobar')
2720 iunabbrev foo
Bram Moolenaar62aec932022-01-29 21:45:34 +00002721 v9.CheckDefAndScriptFailure(['mapcheck(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
2722 v9.CheckDefAndScriptFailure(['mapcheck("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
2723 v9.CheckDefAndScriptFailure(['mapcheck("a", "b", 2)'], ['E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3'])
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01002724 mapcheck('')->assert_equal('')
2725 mapcheck('', '')->assert_equal('')
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02002726enddef
Bram Moolenaar027c4ab2021-02-21 16:20:18 +01002727
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02002728def Test_mapnew()
Dominique Pelle0dc4d8e2021-12-18 12:40:52 +00002729 if has('channel')
Bram Moolenaar62aec932022-01-29 21:45:34 +00002730 v9.CheckDefAndScriptFailure(['mapnew(test_null_job(), "1")'], ['E1013: Argument 1: type mismatch, expected list<any> but got job', 'E1251: List, Dictionary, Blob or String required for argument 1'])
Dominique Pelle0dc4d8e2021-12-18 12:40:52 +00002731 endif
Bram Moolenaar62aec932022-01-29 21:45:34 +00002732 v9.CheckDefAndScriptFailure(['mapnew(1, "1")'], ['E1013: Argument 1: type mismatch, expected list<any> but got number', 'E1251: List, Dictionary, Blob or String required for argument 1'])
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02002733enddef
2734
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02002735def Test_mapset()
Ernie Rael51d04d12022-05-04 15:40:22 +01002736 v9.CheckDefAndScriptFailure(['mapset(1, true, {})'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1223: String or Dictionary required for argument 1'])
Bram Moolenaar62aec932022-01-29 21:45:34 +00002737 v9.CheckDefAndScriptFailure(['mapset("a", 2, {})'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2'])
2738 v9.CheckDefAndScriptFailure(['mapset("a", false, [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3'])
Bram Moolenaar027c4ab2021-02-21 16:20:18 +01002739enddef
2740
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02002741def Test_match()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002742 v9.CheckDefAndScriptFailure(['match(0z12, "p")'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1'])
2743 v9.CheckDefAndScriptFailure(['match(["s"], [2])'], ['E1013: Argument 2: type mismatch, expected string but got list<number>', 'E1174: String required for argument 2'])
2744 v9.CheckDefAndScriptFailure(['match("s", "p", "q")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
2745 v9.CheckDefAndScriptFailure(['match("s", "p", 1, "r")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4'])
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02002746 assert_equal(2, match('ab12cd', '12'))
2747 assert_equal(-1, match('ab12cd', '34'))
2748 assert_equal(6, match('ab12cd12ef', '12', 4))
2749 assert_equal(2, match('abcd', '..', 0, 3))
2750 assert_equal(1, match(['a', 'b', 'c'], 'b'))
2751 assert_equal(-1, match(['a', 'b', 'c'], 'd'))
2752 assert_equal(3, match(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2))
2753 assert_equal(5, match(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2, 2))
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01002754 match('', 'a')->assert_equal(-1)
2755 match('abc', '')->assert_equal(0)
2756 match('', '')->assert_equal(0)
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02002757enddef
2758
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02002759def Test_matchadd()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002760 v9.CheckDefAndScriptFailure(['matchadd(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
2761 v9.CheckDefAndScriptFailure(['matchadd("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
2762 v9.CheckDefAndScriptFailure(['matchadd("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
2763 v9.CheckDefAndScriptFailure(['matchadd("a", "b", 1, "d")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4'])
2764 v9.CheckDefAndScriptFailure(['matchadd("a", "b", 1, 1, [])'], ['E1013: Argument 5: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 5'])
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +02002765 matchadd('', 'a')->assert_equal(-1)
2766 matchadd('Search', '')->assert_equal(-1)
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02002767enddef
2768
2769def Test_matchaddpos()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002770 v9.CheckDefAndScriptFailure(['matchaddpos(1, [1])'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
2771 v9.CheckDefAndScriptFailure(['matchaddpos("a", "b")'], ['E1013: Argument 2: type mismatch, expected list<any> but got string', 'E1211: List required for argument 2'])
2772 v9.CheckDefAndScriptFailure(['matchaddpos("a", [1], "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
2773 v9.CheckDefAndScriptFailure(['matchaddpos("a", [1], 1, "d")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4'])
2774 v9.CheckDefAndScriptFailure(['matchaddpos("a", [1], 1, 1, [])'], ['E1013: Argument 5: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 5'])
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +02002775 matchaddpos('', [1])->assert_equal(-1)
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02002776enddef
2777
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02002778def Test_matcharg()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002779 v9.CheckDefAndScriptFailure(['matcharg("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02002780enddef
2781
2782def Test_matchdelete()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002783 v9.CheckDefAndScriptFailure(['matchdelete("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
2784 v9.CheckDefAndScriptFailure(['matchdelete("x", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
2785 v9.CheckDefAndScriptFailure(['matchdelete(1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02002786enddef
2787
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02002788def Test_matchend()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002789 v9.CheckDefAndScriptFailure(['matchend(0z12, "p")'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1'])
2790 v9.CheckDefAndScriptFailure(['matchend(["s"], [2])'], ['E1013: Argument 2: type mismatch, expected string but got list<number>', 'E1174: String required for argument 2'])
2791 v9.CheckDefAndScriptFailure(['matchend("s", "p", "q")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
2792 v9.CheckDefAndScriptFailure(['matchend("s", "p", 1, "r")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4'])
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02002793 assert_equal(4, matchend('ab12cd', '12'))
2794 assert_equal(-1, matchend('ab12cd', '34'))
2795 assert_equal(8, matchend('ab12cd12ef', '12', 4))
2796 assert_equal(4, matchend('abcd', '..', 0, 3))
2797 assert_equal(1, matchend(['a', 'b', 'c'], 'b'))
2798 assert_equal(-1, matchend(['a', 'b', 'c'], 'd'))
2799 assert_equal(3, matchend(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2))
2800 assert_equal(5, matchend(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2, 2))
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01002801 matchend('', 'a')->assert_equal(-1)
2802 matchend('abc', '')->assert_equal(0)
2803 matchend('', '')->assert_equal(0)
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02002804enddef
2805
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02002806def Test_matchfuzzy()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002807 v9.CheckDefAndScriptFailure(['matchfuzzy({}, "p")'], ['E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 1'])
2808 v9.CheckDefAndScriptFailure(['matchfuzzy([], 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
2809 v9.CheckDefAndScriptFailure(['matchfuzzy([], "a", [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3'])
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02002810 matchfuzzy(['abc', 'xyz'], '')->assert_equal([])
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02002811enddef
2812
2813def Test_matchfuzzypos()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002814 v9.CheckDefAndScriptFailure(['matchfuzzypos({}, "p")'], ['E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 1'])
2815 v9.CheckDefAndScriptFailure(['matchfuzzypos([], 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
2816 v9.CheckDefAndScriptFailure(['matchfuzzypos([], "a", [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3'])
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02002817 matchfuzzypos(['abc', 'xyz'], '')->assert_equal([[], [], []])
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02002818enddef
2819
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02002820def Test_matchlist()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002821 v9.CheckDefAndScriptFailure(['matchlist(0z12, "p")'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1'])
2822 v9.CheckDefAndScriptFailure(['matchlist(["s"], [2])'], ['E1013: Argument 2: type mismatch, expected string but got list<number>', 'E1174: String required for argument 2'])
2823 v9.CheckDefAndScriptFailure(['matchlist("s", "p", "q")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
2824 v9.CheckDefAndScriptFailure(['matchlist("s", "p", 1, "r")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4'])
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02002825 var l: list<string> = ['12', '', '', '', '', '', '', '', '', '']
2826 assert_equal(l, matchlist('ab12cd', '12'))
2827 assert_equal([], matchlist('ab12cd', '34'))
2828 assert_equal(l, matchlist('ab12cd12ef', '12', 4))
2829 l[0] = 'cd'
2830 assert_equal(l, matchlist('abcd', '..', 0, 3))
2831 l[0] = 'b'
2832 assert_equal(l, matchlist(['a', 'b', 'c'], 'b'))
2833 assert_equal([], matchlist(['a', 'b', 'c'], 'd'))
2834 assert_equal(l, matchlist(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2))
2835 assert_equal(l, matchlist(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2, 2))
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01002836 matchlist('', 'a')->assert_equal([])
2837 matchlist('abc', '')->assert_equal(repeat([''], 10))
2838 matchlist('', '')->assert_equal(repeat([''], 10))
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02002839enddef
2840
2841def Test_matchstr()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002842 v9.CheckDefAndScriptFailure(['matchstr(0z12, "p")'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1'])
2843 v9.CheckDefAndScriptFailure(['matchstr(["s"], [2])'], ['E1013: Argument 2: type mismatch, expected string but got list<number>', 'E1174: String required for argument 2'])
2844 v9.CheckDefAndScriptFailure(['matchstr("s", "p", "q")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
2845 v9.CheckDefAndScriptFailure(['matchstr("s", "p", 1, "r")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4'])
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02002846 assert_equal('12', matchstr('ab12cd', '12'))
2847 assert_equal('', matchstr('ab12cd', '34'))
2848 assert_equal('12', matchstr('ab12cd12ef', '12', 4))
2849 assert_equal('cd', matchstr('abcd', '..', 0, 3))
2850 assert_equal('b', matchstr(['a', 'b', 'c'], 'b'))
2851 assert_equal('', matchstr(['a', 'b', 'c'], 'd'))
2852 assert_equal('b', matchstr(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2))
2853 assert_equal('b', matchstr(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2, 2))
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01002854 matchstr('', 'a')->assert_equal('')
2855 matchstr('abc', '')->assert_equal('')
2856 matchstr('', '')->assert_equal('')
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02002857enddef
2858
2859def Test_matchstrpos()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002860 v9.CheckDefAndScriptFailure(['matchstrpos(0z12, "p")'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1'])
2861 v9.CheckDefAndScriptFailure(['matchstrpos(["s"], [2])'], ['E1013: Argument 2: type mismatch, expected string but got list<number>', 'E1174: String required for argument 2'])
2862 v9.CheckDefAndScriptFailure(['matchstrpos("s", "p", "q")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
2863 v9.CheckDefAndScriptFailure(['matchstrpos("s", "p", 1, "r")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4'])
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02002864 assert_equal(['12', 2, 4], matchstrpos('ab12cd', '12'))
2865 assert_equal(['', -1, -1], matchstrpos('ab12cd', '34'))
2866 assert_equal(['12', 6, 8], matchstrpos('ab12cd12ef', '12', 4))
2867 assert_equal(['cd', 2, 4], matchstrpos('abcd', '..', 0, 3))
2868 assert_equal(['b', 1, 0, 1], matchstrpos(['a', 'b', 'c'], 'b'))
2869 assert_equal(['', -1, -1, -1], matchstrpos(['a', 'b', 'c'], 'd'))
2870 assert_equal(['b', 3, 0, 1],
2871 matchstrpos(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2))
2872 assert_equal(['b', 5, 0, 1],
2873 matchstrpos(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2, 2))
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01002874 matchstrpos('', 'a')->assert_equal(['', -1, -1])
2875 matchstrpos('abc', '')->assert_equal(['', 0, 0])
2876 matchstrpos('', '')->assert_equal(['', 0, 0])
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02002877enddef
2878
Bram Moolenaar9ae37052021-01-22 22:31:10 +01002879def Test_max()
2880 g:flag = true
2881 var l1: list<number> = g:flag
2882 ? [1, max([2, 3])]
2883 : [4, 5]
2884 assert_equal([1, 3], l1)
2885
2886 g:flag = false
2887 var l2: list<number> = g:flag
2888 ? [1, max([2, 3])]
2889 : [4, 5]
2890 assert_equal([4, 5], l2)
Bram Moolenaar62aec932022-01-29 21:45:34 +00002891 v9.CheckDefAndScriptFailure(['max(5)'], ['E1013: Argument 1: type mismatch, expected list<any> but got number', 'E1227: List or Dictionary required for argument 1'])
Bram Moolenaar9ae37052021-01-22 22:31:10 +01002892enddef
2893
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002894def Test_menu_info()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002895 v9.CheckDefAndScriptFailure(['menu_info(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
2896 v9.CheckDefAndScriptFailure(['menu_info(10, "n")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
2897 v9.CheckDefAndScriptFailure(['menu_info("File", 10)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002898 assert_equal({}, menu_info('aMenu'))
2899enddef
2900
Bram Moolenaar9ae37052021-01-22 22:31:10 +01002901def Test_min()
2902 g:flag = true
2903 var l1: list<number> = g:flag
2904 ? [1, min([2, 3])]
2905 : [4, 5]
2906 assert_equal([1, 2], l1)
2907
2908 g:flag = false
2909 var l2: list<number> = g:flag
2910 ? [1, min([2, 3])]
2911 : [4, 5]
2912 assert_equal([4, 5], l2)
Bram Moolenaar62aec932022-01-29 21:45:34 +00002913 v9.CheckDefAndScriptFailure(['min(5)'], ['E1013: Argument 1: type mismatch, expected list<any> but got number', 'E1227: List or Dictionary required for argument 1'])
Bram Moolenaar9ae37052021-01-22 22:31:10 +01002914enddef
2915
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02002916def Test_mkdir()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002917 v9.CheckDefAndScriptFailure(['mkdir(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1'])
2918 v9.CheckDefAndScriptFailure(['mkdir("a", {})'], ['E1013: Argument 2: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 2'])
2919 v9.CheckDefAndScriptFailure(['mkdir("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
2920 v9.CheckDefExecAndScriptFailure(['mkdir("")'], 'E1175: Non-empty string required for argument 1')
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02002921 delete('a', 'rf')
2922enddef
2923
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02002924def Test_mode()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002925 v9.CheckDefAndScriptFailure(['mode("1")'], ['E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1'])
2926 v9.CheckDefAndScriptFailure(['mode(2)'], ['E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02002927enddef
2928
2929def Test_mzeval()
2930 if !has('mzscheme')
2931 CheckFeature mzscheme
2932 endif
Bram Moolenaar62aec932022-01-29 21:45:34 +00002933 v9.CheckDefAndScriptFailure(['mzeval(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02002934enddef
2935
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002936def Test_nextnonblank()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002937 v9.CheckDefAndScriptFailure(['nextnonblank(null)'], ['E1013: Argument 1: type mismatch, expected string but got special', 'E1220: String or Number required for argument 1'])
2938 v9.CheckDefExecAndScriptFailure(['nextnonblank("")'], 'E1209: Invalid value for a line number')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02002939 assert_equal(0, nextnonblank(1))
2940enddef
2941
Bram Moolenaar94738d82020-10-21 14:25:07 +02002942def Test_nr2char()
2943 nr2char(97, true)->assert_equal('a')
Bram Moolenaar62aec932022-01-29 21:45:34 +00002944 v9.CheckDefAndScriptFailure(['nr2char("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
2945 v9.CheckDefAndScriptFailure(['nr2char(1, "a")'], ['E1013: Argument 2: type mismatch, expected bool but got string', 'E1212: Bool required for argument 2'])
Bram Moolenaar94738d82020-10-21 14:25:07 +02002946enddef
2947
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02002948def Test_or()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002949 v9.CheckDefAndScriptFailure(['or("x", 0x2)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
2950 v9.CheckDefAndScriptFailure(['or(0x1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02002951enddef
2952
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02002953def Test_pathshorten()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002954 v9.CheckDefAndScriptFailure(['pathshorten(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
2955 v9.CheckDefAndScriptFailure(['pathshorten("a", "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01002956 pathshorten('')->assert_equal('')
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02002957enddef
2958
2959def Test_perleval()
2960 if !has('perl')
2961 CheckFeature perl
2962 endif
Bram Moolenaar62aec932022-01-29 21:45:34 +00002963 v9.CheckDefAndScriptFailure(['perleval(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02002964enddef
2965
Yegappan Lakshmananc72bdd22021-07-11 19:44:18 +02002966def Test_popup_atcursor()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002967 v9.CheckDefAndScriptFailure(['popup_atcursor({"a": 10}, {})'], ['E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1224: String, Number or List required for argument 1'])
2968 v9.CheckDefAndScriptFailure(['popup_atcursor("a", [1, 2])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 2'])
Yegappan Lakshmanan841e4982021-07-11 22:04:25 +02002969
2970 # Pass variable of type 'any' to popup_atcursor()
2971 var what: any = 'Hello'
2972 var popupID = what->popup_atcursor({moved: 'any'})
2973 assert_equal(0, popupID->popup_getoptions().tabpage)
2974 popupID->popup_close()
Yegappan Lakshmananc72bdd22021-07-11 19:44:18 +02002975enddef
2976
2977def Test_popup_beval()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002978 v9.CheckDefAndScriptFailure(['popup_beval({"a": 10}, {})'], ['E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1224: String, Number or List required for argument 1'])
2979 v9.CheckDefAndScriptFailure(['popup_beval("a", [1, 2])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 2'])
Yegappan Lakshmananc72bdd22021-07-11 19:44:18 +02002980enddef
2981
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02002982def Test_popup_clear()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002983 v9.CheckDefAndScriptFailure(['popup_clear(["a"])'], ['E1013: Argument 1: type mismatch, expected bool but got list<string>', 'E1212: Bool required for argument 1'])
2984 v9.CheckDefAndScriptFailure(['popup_clear(2)'], ['E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02002985enddef
2986
Yegappan Lakshmanana764e732021-07-25 15:57:32 +02002987def Test_popup_close()
Bram Moolenaar62aec932022-01-29 21:45:34 +00002988 v9.CheckDefAndScriptFailure(['popup_close("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanana764e732021-07-25 15:57:32 +02002989enddef
2990
Yegappan Lakshmanan841e4982021-07-11 22:04:25 +02002991def Test_popup_create()
2992 # Pass variable of type 'any' to popup_create()
2993 var what: any = 'Hello'
2994 var popupID = what->popup_create({})
2995 assert_equal(0, popupID->popup_getoptions().tabpage)
2996 popupID->popup_close()
2997enddef
2998
Yegappan Lakshmananc72bdd22021-07-11 19:44:18 +02002999def Test_popup_dialog()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003000 v9.CheckDefAndScriptFailure(['popup_dialog({"a": 10}, {})'], ['E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1224: String, Number or List required for argument 1'])
3001 v9.CheckDefAndScriptFailure(['popup_dialog("a", [1, 2])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 2'])
Yegappan Lakshmananc72bdd22021-07-11 19:44:18 +02003002enddef
3003
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003004def Test_popup_filter_menu()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003005 v9.CheckDefAndScriptFailure(['popup_filter_menu("x", "")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
3006 v9.CheckDefAndScriptFailure(['popup_filter_menu(1, 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02003007 var id: number = popup_menu(["one", "two", "three"], {})
3008 popup_filter_menu(id, '')
3009 popup_close(id)
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003010enddef
3011
3012def Test_popup_filter_yesno()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003013 v9.CheckDefAndScriptFailure(['popup_filter_yesno("x", "")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
3014 v9.CheckDefAndScriptFailure(['popup_filter_yesno(1, 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003015enddef
3016
3017def Test_popup_getoptions()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003018 v9.CheckDefAndScriptFailure(['popup_getoptions("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
3019 v9.CheckDefAndScriptFailure(['popup_getoptions(true)'], ['E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003020enddef
3021
3022def Test_popup_getpos()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003023 v9.CheckDefAndScriptFailure(['popup_getpos("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
3024 v9.CheckDefAndScriptFailure(['popup_getpos(true)'], ['E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003025enddef
3026
3027def Test_popup_hide()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003028 v9.CheckDefAndScriptFailure(['popup_hide("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
3029 v9.CheckDefAndScriptFailure(['popup_hide(true)'], ['E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003030enddef
3031
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02003032def Test_popup_locate()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003033 v9.CheckDefAndScriptFailure(['popup_locate("a", 20)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
3034 v9.CheckDefAndScriptFailure(['popup_locate(10, "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02003035enddef
3036
Yegappan Lakshmananc72bdd22021-07-11 19:44:18 +02003037def Test_popup_menu()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003038 v9.CheckDefAndScriptFailure(['popup_menu({"a": 10}, {})'], ['E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1224: String, Number or List required for argument 1'])
3039 v9.CheckDefAndScriptFailure(['popup_menu("a", [1, 2])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 2'])
Yegappan Lakshmananc72bdd22021-07-11 19:44:18 +02003040enddef
3041
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003042def Test_popup_move()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003043 v9.CheckDefAndScriptFailure(['popup_move("x", {})'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
3044 v9.CheckDefAndScriptFailure(['popup_move(1, [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003045enddef
3046
Yegappan Lakshmananc72bdd22021-07-11 19:44:18 +02003047def Test_popup_notification()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003048 v9.CheckDefAndScriptFailure(['popup_notification({"a": 10}, {})'], ['E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1224: String, Number or List required for argument 1'])
3049 v9.CheckDefAndScriptFailure(['popup_notification("a", [1, 2])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 2'])
Yegappan Lakshmananc72bdd22021-07-11 19:44:18 +02003050enddef
3051
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003052def Test_popup_setoptions()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003053 v9.CheckDefAndScriptFailure(['popup_setoptions("x", {})'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
3054 v9.CheckDefAndScriptFailure(['popup_setoptions(1, [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003055enddef
3056
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02003057def Test_popup_settext()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003058 v9.CheckDefAndScriptFailure(['popup_settext("x", [])'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
3059 v9.CheckDefAndScriptFailure(['popup_settext(1, 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1222: String or List required for argument 2'])
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02003060enddef
3061
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003062def Test_popup_show()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003063 v9.CheckDefAndScriptFailure(['popup_show("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
3064 v9.CheckDefAndScriptFailure(['popup_show(true)'], ['E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003065enddef
3066
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02003067def Test_prevnonblank()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003068 v9.CheckDefAndScriptFailure(['prevnonblank(null)'], ['E1013: Argument 1: type mismatch, expected string but got special', 'E1220: String or Number required for argument 1'])
3069 v9.CheckDefExecAndScriptFailure(['prevnonblank("")'], 'E1209: Invalid value for a line number')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02003070 assert_equal(0, prevnonblank(1))
3071enddef
3072
Yegappan Lakshmanana764e732021-07-25 15:57:32 +02003073def Test_printf()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003074 v9.CheckDefAndScriptFailure(['printf([1])'], ['E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1'])
Yegappan Lakshmanana764e732021-07-25 15:57:32 +02003075 printf(0x10)->assert_equal('16')
3076 assert_equal(" abc", "abc"->printf("%4s"))
3077enddef
3078
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02003079def Test_prompt_getprompt()
Dominique Pelle9ff9c7b2021-07-18 21:44:37 +02003080 if !has('channel')
3081 CheckFeature channel
3082 else
Bram Moolenaar62aec932022-01-29 21:45:34 +00003083 v9.CheckDefAndScriptFailure(['prompt_getprompt([])'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
Dominique Pelle74509232021-07-03 19:27:37 +02003084 assert_equal('', prompt_getprompt('NonExistingBuf'))
3085 endif
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02003086enddef
3087
Yegappan Lakshmanan7973de32021-07-24 16:16:15 +02003088def Test_prompt_setcallback()
3089 if !has('channel')
3090 CheckFeature channel
3091 else
Bram Moolenaar62aec932022-01-29 21:45:34 +00003092 v9.CheckDefAndScriptFailure(['prompt_setcallback(true, "1")'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1'])
Yegappan Lakshmanan7973de32021-07-24 16:16:15 +02003093 endif
3094enddef
3095
3096def Test_prompt_setinterrupt()
3097 if !has('channel')
3098 CheckFeature channel
3099 else
Bram Moolenaar62aec932022-01-29 21:45:34 +00003100 v9.CheckDefAndScriptFailure(['prompt_setinterrupt(true, "1")'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1'])
Yegappan Lakshmanan7973de32021-07-24 16:16:15 +02003101 endif
3102enddef
3103
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02003104def Test_prompt_setprompt()
3105 if !has('channel')
3106 CheckFeature channel
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003107 else
Bram Moolenaar62aec932022-01-29 21:45:34 +00003108 v9.CheckDefAndScriptFailure(['prompt_setprompt([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
3109 v9.CheckDefAndScriptFailure(['prompt_setprompt(1, [])'], ['E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2'])
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02003110 endif
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003111enddef
3112
3113def Test_prop_add()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003114 v9.CheckDefAndScriptFailure(['prop_add("a", 2, {})'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
3115 v9.CheckDefAndScriptFailure(['prop_add(1, "b", {})'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
3116 v9.CheckDefAndScriptFailure(['prop_add(1, 2, [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3'])
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003117enddef
3118
Yegappan Lakshmananccfb7c62021-08-16 21:39:09 +02003119def Test_prop_add_list()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003120 v9.CheckDefAndScriptFailure(['prop_add_list([], [])'], ['E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1'])
3121 v9.CheckDefAndScriptFailure(['prop_add_list({}, {})'], ['E1013: Argument 2: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 2'])
Yegappan Lakshmananccfb7c62021-08-16 21:39:09 +02003122enddef
3123
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003124def Test_prop_clear()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003125 v9.CheckDefAndScriptFailure(['prop_clear("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
3126 v9.CheckDefAndScriptFailure(['prop_clear(1, "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
3127 v9.CheckDefAndScriptFailure(['prop_clear(1, 2, [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3'])
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02003128enddef
3129
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02003130def Test_prop_find()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003131 v9.CheckDefAndScriptFailure(['prop_find([1, 2])'], ['E1013: Argument 1: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 1'])
3132 v9.CheckDefAndScriptFailure(['prop_find([1, 2], "k")'], ['E1013: Argument 1: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 1'])
3133 v9.CheckDefAndScriptFailure(['prop_find({"a": 10}, ["a"])'], ['E1013: Argument 2: type mismatch, expected string but got list<string>', 'E1174: String required for argument 2'])
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02003134 assert_fails("prop_find({}, '')", 'E474:')
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02003135enddef
3136
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003137def Test_prop_list()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003138 v9.CheckDefAndScriptFailure(['prop_list("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
3139 v9.CheckDefAndScriptFailure(['prop_list(1, [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003140enddef
3141
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003142def Test_prop_remove()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003143 v9.CheckDefAndScriptFailure(['prop_remove([])'], ['E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1'])
3144 v9.CheckDefAndScriptFailure(['prop_remove({}, "a")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
3145 v9.CheckDefAndScriptFailure(['prop_remove({}, 1, "b")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003146enddef
3147
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02003148def Test_prop_type_add()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003149 v9.CheckDefAndScriptFailure(['prop_type_add({"a": 10}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1'])
3150 v9.CheckDefAndScriptFailure(['prop_type_add("a", "b")'], ['E1013: Argument 2: type mismatch, expected dict<any> but got string', 'E1206: Dictionary required for argument 2'])
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02003151 assert_fails("prop_type_add('', {highlight: 'Search'})", 'E474:')
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02003152enddef
3153
3154def Test_prop_type_change()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003155 v9.CheckDefAndScriptFailure(['prop_type_change({"a": 10}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1'])
3156 v9.CheckDefAndScriptFailure(['prop_type_change("a", "b")'], ['E1013: Argument 2: type mismatch, expected dict<any> but got string', 'E1206: Dictionary required for argument 2'])
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02003157 assert_fails("prop_type_change('', {highlight: 'Search'})", 'E474:')
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02003158enddef
3159
3160def Test_prop_type_delete()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003161 v9.CheckDefAndScriptFailure(['prop_type_delete({"a": 10})'], ['E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1'])
3162 v9.CheckDefAndScriptFailure(['prop_type_delete({"a": 10}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1'])
3163 v9.CheckDefAndScriptFailure(['prop_type_delete("a", "b")'], ['E1013: Argument 2: type mismatch, expected dict<any> but got string', 'E1206: Dictionary required for argument 2'])
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02003164 assert_fails("prop_type_delete('')", 'E474:')
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02003165enddef
3166
3167def Test_prop_type_get()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003168 v9.CheckDefAndScriptFailure(['prop_type_get({"a": 10})'], ['E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1'])
3169 v9.CheckDefAndScriptFailure(['prop_type_get({"a": 10}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1'])
3170 v9.CheckDefAndScriptFailure(['prop_type_get("a", "b")'], ['E1013: Argument 2: type mismatch, expected dict<any> but got string', 'E1206: Dictionary required for argument 2'])
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02003171 assert_fails("prop_type_get('')", 'E474:')
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02003172enddef
3173
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003174def Test_prop_type_list()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003175 v9.CheckDefAndScriptFailure(['prop_type_list(["a"])'], ['E1013: Argument 1: type mismatch, expected dict<any> but got list<string>', 'E1206: Dictionary required for argument 1'])
3176 v9.CheckDefAndScriptFailure(['prop_type_list(2)'], ['E1013: Argument 1: type mismatch, expected dict<any> but got number', 'E1206: Dictionary required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003177enddef
3178
3179def Test_py3eval()
3180 if !has('python3')
3181 CheckFeature python3
3182 endif
Bram Moolenaar62aec932022-01-29 21:45:34 +00003183 v9.CheckDefAndScriptFailure(['py3eval([2])'], ['E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003184enddef
3185
3186def Test_pyeval()
3187 if !has('python')
3188 CheckFeature python
3189 endif
Bram Moolenaar62aec932022-01-29 21:45:34 +00003190 v9.CheckDefAndScriptFailure(['pyeval([2])'], ['E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003191enddef
3192
3193def Test_pyxeval()
3194 if !has('python') && !has('python3')
3195 CheckFeature python
3196 endif
Bram Moolenaar62aec932022-01-29 21:45:34 +00003197 v9.CheckDefAndScriptFailure(['pyxeval([2])'], ['E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003198enddef
3199
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02003200def Test_rand()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003201 v9.CheckDefAndScriptFailure(['rand(10)'], ['E1013: Argument 1: type mismatch, expected list<number> but got number', 'E1211: List required for argument 1'])
3202 v9.CheckDefFailure(['rand(["a"])'], 'E1013: Argument 1: type mismatch, expected list<number> but got list<string>')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02003203 assert_true(rand() >= 0)
3204 assert_true(rand(srand()) >= 0)
3205enddef
3206
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02003207def Test_range()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003208 v9.CheckDefAndScriptFailure(['range("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
3209 v9.CheckDefAndScriptFailure(['range(10, "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
3210 v9.CheckDefAndScriptFailure(['range(10, 20, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
Bram Moolenaar81330182022-02-01 12:11:58 +00003211
3212 # returns a list<number> but it's not declared as such
3213 assert_equal(['x', 'x'], range(2)->map((i, v) => 'x'))
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02003214enddef
3215
Bram Moolenaar94738d82020-10-21 14:25:07 +02003216def Test_readdir()
Yegappan Lakshmanan5bca9062021-07-24 21:33:26 +02003217 eval expand('sautest')->readdir((e) => e[0] !=# '.')
3218 eval expand('sautest')->readdirex((e) => e.name[0] !=# '.')
Bram Moolenaar62aec932022-01-29 21:45:34 +00003219 v9.CheckDefAndScriptFailure(['readdir(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1'])
3220 v9.CheckDefAndScriptFailure(['readdir("a", "1", [3])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3'])
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +02003221 if has('unix')
3222 # only fails on Unix-like systems
3223 assert_fails('readdir("")', 'E484: Can''t open file')
3224 endif
Yegappan Lakshmanan5bca9062021-07-24 21:33:26 +02003225enddef
3226
3227def Test_readdirex()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003228 v9.CheckDefAndScriptFailure(['readdirex(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1'])
3229 v9.CheckDefAndScriptFailure(['readdirex("a", "1", [3])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3'])
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +02003230 if has('unix')
3231 # only fails on Unix-like systems
3232 assert_fails('readdirex("")', 'E484: Can''t open file')
3233 endif
Bram Moolenaar94738d82020-10-21 14:25:07 +02003234enddef
3235
Bram Moolenaarc423ad72021-01-13 20:38:03 +01003236def Test_readblob()
3237 var blob = 0z12341234
Bram Moolenaar0e9bdad2022-10-15 20:06:33 +01003238 writefile(blob, 'Xreadblob', 'D')
Bram Moolenaarc423ad72021-01-13 20:38:03 +01003239 var read: blob = readblob('Xreadblob')
3240 assert_equal(blob, read)
3241
3242 var lines =<< trim END
3243 var read: list<string> = readblob('Xreadblob')
3244 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00003245 v9.CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected list<string> but got blob', 1)
3246 v9.CheckDefExecAndScriptFailure(['readblob("")'], 'E484: Can''t open file <empty>')
Bram Moolenaarc423ad72021-01-13 20:38:03 +01003247enddef
3248
3249def Test_readfile()
3250 var text = ['aaa', 'bbb', 'ccc']
Bram Moolenaar0e9bdad2022-10-15 20:06:33 +01003251 writefile(text, 'Xreadfile', 'D')
Bram Moolenaarc423ad72021-01-13 20:38:03 +01003252 var read: list<string> = readfile('Xreadfile')
3253 assert_equal(text, read)
Bram Moolenaar82e46e52022-02-05 18:12:34 +00003254 assert_equal([7, 7, 7], readfile('Xreadfile')->map((_, _) => 7))
Bram Moolenaarc423ad72021-01-13 20:38:03 +01003255
3256 var lines =<< trim END
3257 var read: dict<string> = readfile('Xreadfile')
3258 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00003259 v9.CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected dict<string> but got list<string>', 1)
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02003260
Bram Moolenaar62aec932022-01-29 21:45:34 +00003261 v9.CheckDefAndScriptFailure(['readfile("a", 0z10)'], ['E1013: Argument 2: type mismatch, expected string but got blob', 'E1174: String required for argument 2'])
3262 v9.CheckDefAndScriptFailure(['readfile("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
3263 v9.CheckDefExecAndScriptFailure(['readfile("")'], 'E1175: Non-empty string required for argument 1')
Bram Moolenaarc423ad72021-01-13 20:38:03 +01003264enddef
3265
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02003266def Test_reduce()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003267 v9.CheckDefAndScriptFailure(['reduce({a: 10}, "1")'], ['E1013: Argument 1: type mismatch, expected list<any> but got dict<number>', 'E1252: String, List or Blob required for argument 1'])
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02003268 assert_equal(6, [1, 2, 3]->reduce((r, c) => r + c, 0))
3269 assert_equal(11, 0z0506->reduce((r, c) => r + c, 0))
3270enddef
3271
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02003272def Test_reltime()
Bram Moolenaarc816a2c2021-07-14 21:00:41 +02003273 CheckFeature reltime
3274
Bram Moolenaar62aec932022-01-29 21:45:34 +00003275 v9.CheckDefExecAndScriptFailure(['[]->reltime()'], 'E474:')
3276 v9.CheckDefExecAndScriptFailure(['[]->reltime([])'], 'E474:')
Bram Moolenaarc816a2c2021-07-14 21:00:41 +02003277
Bram Moolenaar62aec932022-01-29 21:45:34 +00003278 v9.CheckDefAndScriptFailure(['reltime("x")'], ['E1013: Argument 1: type mismatch, expected list<number> but got string', 'E1211: List required for argument 1'])
3279 v9.CheckDefFailure(['reltime(["x", "y"])'], 'E1013: Argument 1: type mismatch, expected list<number> but got list<string>')
3280 v9.CheckDefAndScriptFailure(['reltime([1, 2], 10)'], ['E1013: Argument 2: type mismatch, expected list<number> but got number', 'E1211: List required for argument 2'])
3281 v9.CheckDefFailure(['reltime([1, 2], ["a", "b"])'], 'E1013: Argument 2: type mismatch, expected list<number> but got list<string>')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02003282 var start: list<any> = reltime()
3283 assert_true(type(reltime(start)) == v:t_list)
3284 var end: list<any> = reltime()
3285 assert_true(type(reltime(start, end)) == v:t_list)
3286enddef
3287
3288def Test_reltimefloat()
Bram Moolenaarc816a2c2021-07-14 21:00:41 +02003289 CheckFeature reltime
3290
Bram Moolenaar62aec932022-01-29 21:45:34 +00003291 v9.CheckDefExecAndScriptFailure(['[]->reltimefloat()'], 'E474:')
Bram Moolenaarc816a2c2021-07-14 21:00:41 +02003292
Bram Moolenaar62aec932022-01-29 21:45:34 +00003293 v9.CheckDefAndScriptFailure(['reltimefloat("x")'], ['E1013: Argument 1: type mismatch, expected list<number> but got string', 'E1211: List required for argument 1'])
3294 v9.CheckDefFailure(['reltimefloat([1.1])'], 'E1013: Argument 1: type mismatch, expected list<number> but got list<float>')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02003295 assert_true(type(reltimefloat(reltime())) == v:t_float)
3296enddef
3297
3298def Test_reltimestr()
Bram Moolenaarc816a2c2021-07-14 21:00:41 +02003299 CheckFeature reltime
3300
Bram Moolenaar62aec932022-01-29 21:45:34 +00003301 v9.CheckDefExecAndScriptFailure(['[]->reltimestr()'], 'E474:')
Bram Moolenaarc816a2c2021-07-14 21:00:41 +02003302
Bram Moolenaar62aec932022-01-29 21:45:34 +00003303 v9.CheckDefAndScriptFailure(['reltimestr(true)'], ['E1013: Argument 1: type mismatch, expected list<number> but got bool', 'E1211: List required for argument 1'])
3304 v9.CheckDefFailure(['reltimestr([true])'], 'E1013: Argument 1: type mismatch, expected list<number> but got list<bool>')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02003305 assert_true(type(reltimestr(reltime())) == v:t_string)
3306enddef
3307
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003308def Test_remote_expr()
3309 CheckFeature clientserver
3310 CheckEnv DISPLAY
Bram Moolenaar62aec932022-01-29 21:45:34 +00003311 v9.CheckDefAndScriptFailure(['remote_expr(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
3312 v9.CheckDefAndScriptFailure(['remote_expr("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
3313 v9.CheckDefAndScriptFailure(['remote_expr("a", "b", 3)'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3'])
3314 v9.CheckDefAndScriptFailure(['remote_expr("a", "b", "c", "d")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4'])
3315 v9.CheckDefExecAndScriptFailure(['remote_expr("", "")'], 'E241: Unable to send to ')
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003316enddef
3317
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02003318def Test_remote_foreground()
3319 CheckFeature clientserver
3320 # remote_foreground() doesn't fail on MS-Windows
3321 CheckNotMSWindows
Bram Moolenaard6fa7bd2021-07-05 14:10:04 +02003322 CheckEnv DISPLAY
3323
Bram Moolenaar62aec932022-01-29 21:45:34 +00003324 v9.CheckDefAndScriptFailure(['remote_foreground(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02003325 assert_fails('remote_foreground("NonExistingServer")', 'E241:')
Yegappan Lakshmanan51491ad2021-09-30 19:00:00 +01003326 assert_fails('remote_foreground("")', 'E241:')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02003327enddef
3328
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02003329def Test_remote_peek()
3330 CheckFeature clientserver
3331 CheckEnv DISPLAY
Bram Moolenaar62aec932022-01-29 21:45:34 +00003332 v9.CheckDefAndScriptFailure(['remote_peek(0z10)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1174: String required for argument 1'])
3333 v9.CheckDefAndScriptFailure(['remote_peek("a5b6c7", [1])'], ['E1013: Argument 2: type mismatch, expected string but got list<number>', 'E1174: String required for argument 2'])
3334 v9.CheckDefExecAndScriptFailure(['remote_peek("")'], 'E573: Invalid server id used')
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02003335enddef
3336
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003337def Test_remote_read()
3338 CheckFeature clientserver
3339 CheckEnv DISPLAY
Bram Moolenaar62aec932022-01-29 21:45:34 +00003340 v9.CheckDefAndScriptFailure(['remote_read(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
3341 v9.CheckDefAndScriptFailure(['remote_read("a", "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
3342 v9.CheckDefExecAndScriptFailure(['remote_read("")'], 'E573: Invalid server id used')
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003343enddef
3344
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003345def Test_remote_send()
3346 CheckFeature clientserver
3347 CheckEnv DISPLAY
Bram Moolenaar62aec932022-01-29 21:45:34 +00003348 v9.CheckDefAndScriptFailure(['remote_send(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
3349 v9.CheckDefAndScriptFailure(['remote_send("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
3350 v9.CheckDefAndScriptFailure(['remote_send("a", "b", 3)'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3'])
Yegappan Lakshmanan51491ad2021-09-30 19:00:00 +01003351 assert_fails('remote_send("", "")', 'E241:')
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003352enddef
3353
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02003354def Test_remote_startserver()
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02003355 CheckFeature clientserver
3356 CheckEnv DISPLAY
Bram Moolenaar62aec932022-01-29 21:45:34 +00003357 v9.CheckDefAndScriptFailure(['remote_startserver({})'], ['E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02003358enddef
3359
Bram Moolenaara5d1a672022-09-30 17:57:47 +01003360def Test_remove_literal_list()
Bram Moolenaar885971e2021-07-18 22:25:29 +02003361 var l: list<number> = [1, 2, 3, 4]
3362 assert_equal([1, 2], remove(l, 0, 1))
3363 assert_equal([3, 4], l)
3364enddef
3365
Bram Moolenaara5d1a672022-09-30 17:57:47 +01003366def Test_remove_const()
3367 var lines =<< trim END
3368 const l = [1, 2, 3, 4]
3369 remove(l, 1)
3370 END
3371 v9.CheckDefFailure(lines, 'E1307: Argument 1: Trying to modify a const list<number>')
3372
3373 lines =<< trim END
3374 const d = {a: 1, b: 2}
3375 remove(d, 'a')
3376 END
3377 v9.CheckDefFailure(lines, 'E1307: Argument 1: Trying to modify a const dict<number>')
3378
3379 lines =<< trim END
3380 const b = 0z010203
3381 remove(b, 1)
3382 END
3383 v9.CheckDefFailure(lines, 'E1307: Argument 1: Trying to modify a const blob')
3384enddef
3385
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003386def Test_remove()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003387 v9.CheckDefAndScriptFailure(['remove("a", 1)'], ['E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1228: List, Dictionary or Blob required for argument 1'])
3388 v9.CheckDefAndScriptFailure(['remove([], "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
3389 v9.CheckDefAndScriptFailure(['remove([], 1, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
3390 v9.CheckDefAndScriptFailure(['remove({}, 1.1)'], ['E1013: Argument 2: type mismatch, expected string but got float', 'E1220: String or Number required for argument 2'])
3391 v9.CheckDefAndScriptFailure(['remove(0z10, "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
3392 v9.CheckDefAndScriptFailure(['remove(0z20, 1, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003393 var l: any = [1, 2, 3, 4]
3394 remove(l, 1)
3395 assert_equal([1, 3, 4], l)
3396 remove(l, 0, 1)
3397 assert_equal([4], l)
3398 var b: any = 0z1234.5678.90
3399 remove(b, 1)
3400 assert_equal(0z1256.7890, b)
3401 remove(b, 1, 2)
3402 assert_equal(0z1290, b)
3403 var d: any = {a: 10, b: 20, c: 30}
3404 remove(d, 'b')
3405 assert_equal({a: 10, c: 30}, d)
3406 var d2: any = {1: 'a', 2: 'b', 3: 'c'}
3407 remove(d2, 2)
3408 assert_equal({1: 'a', 3: 'c'}, d2)
Bram Moolenaar81330182022-02-01 12:11:58 +00003409
3410 # using declared type
3411 var x: string = range(2)->extend(['x'])->remove(2)
3412 assert_equal('x', x)
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003413enddef
3414
Bram Moolenaar94738d82020-10-21 14:25:07 +02003415def Test_remove_return_type()
Bram Moolenaar2ac037f2022-05-09 14:12:14 +01003416 var l: list<number> = remove({one: [1, 2], two: [3, 4]}, 'one')
3417 l->assert_equal([1, 2])
3418
3419 var ll: list<number> = remove(range(3), 0, 1)
3420 ll->assert_equal([0, 1])
Bram Moolenaar94738d82020-10-21 14:25:07 +02003421enddef
3422
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02003423def Test_rename()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003424 v9.CheckDefAndScriptFailure(['rename(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
3425 v9.CheckDefAndScriptFailure(['rename("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01003426 rename('', '')->assert_equal(0)
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02003427enddef
3428
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02003429def Test_repeat()
Bakudankun375141e2022-09-09 18:46:47 +01003430 v9.CheckDefAndScriptFailure(['repeat(1.1, 2)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1301: String, Number, List or Blob required for argument 1'])
3431 v9.CheckDefAndScriptFailure(['repeat({a: 10}, 2)'], ['E1013: Argument 1: type mismatch, expected string but got dict<', 'E1301: String, Number, List or Blob required for argument 1'])
Bram Moolenaar1780f082021-07-31 22:03:59 +02003432 var lines =<< trim END
3433 assert_equal('aaa', repeat('a', 3))
3434 assert_equal('111', repeat(1, 3))
3435 assert_equal([1, 1, 1], repeat([1], 3))
Bakudankun375141e2022-09-09 18:46:47 +01003436 assert_equal(0z000102000102000102, repeat(0z000102, 3))
3437 assert_equal(0z000000, repeat(0z00, 3))
Bram Moolenaar1780f082021-07-31 22:03:59 +02003438 var s = '-'
3439 s ..= repeat(5, 3)
3440 assert_equal('-555', s)
3441 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00003442 v9.CheckDefAndScriptSuccess(lines)
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02003443enddef
3444
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02003445def Test_resolve()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003446 v9.CheckDefAndScriptFailure(['resolve([])'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02003447 assert_equal('SomeFile', resolve('SomeFile'))
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01003448 resolve('')->assert_equal('')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02003449enddef
3450
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02003451def Test_reverse()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003452 v9.CheckDefAndScriptFailure(['reverse(10)'], ['E1013: Argument 1: type mismatch, expected list<any> but got number', 'E1226: List or Blob required for argument 1'])
3453 v9.CheckDefAndScriptFailure(['reverse("abc")'], ['E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1226: List or Blob required for argument 1'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02003454enddef
3455
Bram Moolenaar94738d82020-10-21 14:25:07 +02003456def Test_reverse_return_type()
3457 var l = reverse([1, 2, 3])
3458 var res = 0
3459 for n in l
3460 res += n
3461 endfor
3462 res->assert_equal(6)
3463enddef
3464
Bram Moolenaara5d1a672022-09-30 17:57:47 +01003465def Test_reverse_const()
3466 var lines =<< trim END
3467 const l = [1, 2, 3, 4]
3468 reverse(l)
3469 END
3470 v9.CheckDefFailure(lines, 'E1307: Argument 1: Trying to modify a const list<number>')
3471
3472 lines =<< trim END
3473 const b = 0z010203
3474 reverse(b)
3475 END
3476 v9.CheckDefFailure(lines, 'E1307: Argument 1: Trying to modify a const blob')
3477enddef
3478
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003479def Test_rubyeval()
3480 if !has('ruby')
3481 CheckFeature ruby
3482 endif
Bram Moolenaar62aec932022-01-29 21:45:34 +00003483 v9.CheckDefAndScriptFailure(['rubyeval([2])'], ['E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003484enddef
3485
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02003486def Test_screenattr()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003487 v9.CheckDefAndScriptFailure(['screenattr("x", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
3488 v9.CheckDefAndScriptFailure(['screenattr(1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02003489enddef
3490
3491def Test_screenchar()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003492 v9.CheckDefAndScriptFailure(['screenchar("x", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
3493 v9.CheckDefAndScriptFailure(['screenchar(1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02003494enddef
3495
3496def Test_screenchars()
Bram Moolenaar82e46e52022-02-05 18:12:34 +00003497 assert_equal(['x'], screenchars(1, 1)->map((_, _) => 'x'))
3498
Bram Moolenaar62aec932022-01-29 21:45:34 +00003499 v9.CheckDefAndScriptFailure(['screenchars("x", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
3500 v9.CheckDefAndScriptFailure(['screenchars(1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02003501enddef
3502
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02003503def Test_screenpos()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003504 v9.CheckDefAndScriptFailure(['screenpos("a", 1, 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
3505 v9.CheckDefAndScriptFailure(['screenpos(1, "b", 1)'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
3506 v9.CheckDefAndScriptFailure(['screenpos(1, 1, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02003507 assert_equal({col: 1, row: 1, endcol: 1, curscol: 1}, screenpos(1, 1, 1))
3508enddef
3509
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02003510def Test_screenstring()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003511 v9.CheckDefAndScriptFailure(['screenstring("x", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
3512 v9.CheckDefAndScriptFailure(['screenstring(1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02003513enddef
3514
Bram Moolenaar94738d82020-10-21 14:25:07 +02003515def Test_search()
3516 new
3517 setline(1, ['foo', 'bar'])
3518 var val = 0
3519 # skip expr returns boolean
Bram Moolenaar2949cfd2020-12-31 21:28:47 +01003520 search('bar', 'W', 0, 0, () => val == 1)->assert_equal(2)
Bram Moolenaar94738d82020-10-21 14:25:07 +02003521 :1
Bram Moolenaar2949cfd2020-12-31 21:28:47 +01003522 search('bar', 'W', 0, 0, () => val == 0)->assert_equal(0)
Bram Moolenaar94738d82020-10-21 14:25:07 +02003523 # skip expr returns number, only 0 and 1 are accepted
3524 :1
Bram Moolenaar2949cfd2020-12-31 21:28:47 +01003525 search('bar', 'W', 0, 0, () => 0)->assert_equal(2)
Bram Moolenaar94738d82020-10-21 14:25:07 +02003526 :1
Bram Moolenaar2949cfd2020-12-31 21:28:47 +01003527 search('bar', 'W', 0, 0, () => 1)->assert_equal(0)
3528 assert_fails("search('bar', '', 0, 0, () => -1)", 'E1023:')
3529 assert_fails("search('bar', '', 0, 0, () => -1)", 'E1023:')
Bram Moolenaarf06ab6b2021-05-07 19:44:21 +02003530
3531 setline(1, "find this word")
3532 normal gg
3533 var col = 7
3534 assert_equal(1, search('this', '', 0, 0, 'col(".") > col'))
3535 normal 0
3536 assert_equal([1, 6], searchpos('this', '', 0, 0, 'col(".") > col'))
3537
3538 col = 5
3539 normal 0
3540 assert_equal(0, search('this', '', 0, 0, 'col(".") > col'))
3541 normal 0
3542 assert_equal([0, 0], searchpos('this', '', 0, 0, 'col(".") > col'))
3543 bwipe!
Bram Moolenaar62aec932022-01-29 21:45:34 +00003544 v9.CheckDefAndScriptFailure(['search(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
3545 v9.CheckDefAndScriptFailure(['search("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
3546 v9.CheckDefAndScriptFailure(['search("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
3547 v9.CheckDefAndScriptFailure(['search("a", "b", 3, "d")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4'])
Bram Moolenaar73199812021-12-26 17:18:14 +00003548 new
3549 setline(1, "match this")
Bram Moolenaar62aec932022-01-29 21:45:34 +00003550 v9.CheckDefAndScriptFailure(['search("a", "", 9, 0, [0])'], ['E1013: Argument 5: type mismatch, expected func(...): any but got list<number>', 'E730: Using a List as a String'])
Bram Moolenaar73199812021-12-26 17:18:14 +00003551 bwipe!
Bram Moolenaar94738d82020-10-21 14:25:07 +02003552enddef
3553
3554def Test_searchcount()
3555 new
3556 setline(1, "foo bar")
3557 :/foo
Bram Moolenaare0de1712020-12-02 17:36:54 +01003558 searchcount({recompute: true})
3559 ->assert_equal({
Bram Moolenaar94738d82020-10-21 14:25:07 +02003560 exact_match: 1,
3561 current: 1,
3562 total: 1,
3563 maxcount: 99,
3564 incomplete: 0})
3565 bwipe!
Bram Moolenaar62aec932022-01-29 21:45:34 +00003566 v9.CheckDefAndScriptFailure(['searchcount([1])'], ['E1013: Argument 1: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 1'])
Bram Moolenaar94738d82020-10-21 14:25:07 +02003567enddef
3568
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003569def Test_searchdecl()
3570 searchdecl('blah', true, true)->assert_equal(1)
Bram Moolenaar62aec932022-01-29 21:45:34 +00003571 v9.CheckDefAndScriptFailure(['searchdecl(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
3572 v9.CheckDefAndScriptFailure(['searchdecl("a", 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2'])
3573 v9.CheckDefAndScriptFailure(['searchdecl("a", true, 2)'], ['E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3'])
Yegappan Lakshmananee47eac2022-06-29 12:55:36 +01003574
3575 # search for an empty string declaration
3576 var lines: list<string> =<< trim END
3577 int var1;
3578
3579 {
3580 int var2;
3581 var1 = 10;
3582 }
3583 END
3584 new
3585 setline(1, lines)
3586 cursor(5, 4)
3587 searchdecl('')
3588 assert_equal([3, 1], [line('.'), col('.')])
3589 bw!
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003590enddef
3591
Bram Moolenaarf18332f2021-05-07 17:55:55 +02003592def Test_searchpair()
3593 new
3594 setline(1, "here { and } there")
Bram Moolenaarf06ab6b2021-05-07 19:44:21 +02003595
Bram Moolenaarf18332f2021-05-07 17:55:55 +02003596 normal f{
3597 var col = 15
3598 assert_equal(1, searchpair('{', '', '}', '', 'col(".") > col'))
3599 assert_equal(12, col('.'))
Bram Moolenaarf06ab6b2021-05-07 19:44:21 +02003600 normal 0f{
3601 assert_equal([1, 12], searchpairpos('{', '', '}', '', 'col(".") > col'))
3602
Bram Moolenaarf18332f2021-05-07 17:55:55 +02003603 col = 8
3604 normal 0f{
3605 assert_equal(0, searchpair('{', '', '}', '', 'col(".") > col'))
3606 assert_equal(6, col('.'))
Bram Moolenaarf06ab6b2021-05-07 19:44:21 +02003607 normal 0f{
3608 assert_equal([0, 0], searchpairpos('{', '', '}', '', 'col(".") > col'))
3609
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01003610 # searchpair with empty strings
3611 normal 8|
3612 assert_equal(0, searchpair('', '', ''))
3613 assert_equal([0, 0], searchpairpos('', '', ''))
3614
Bram Moolenaar82e46e52022-02-05 18:12:34 +00003615 assert_equal(['x', 'x'], searchpairpos('', '', '')->map((_, _) => 'x'))
3616
Bram Moolenaarff652882021-05-16 15:24:49 +02003617 var lines =<< trim END
3618 vim9script
3619 setline(1, '()')
3620 normal gg
Bram Moolenaar73199812021-12-26 17:18:14 +00003621 func RetList()
3622 return [0]
3623 endfunc
Bram Moolenaarff652882021-05-16 15:24:49 +02003624 def Fail()
3625 try
Bram Moolenaar73199812021-12-26 17:18:14 +00003626 searchpairpos('(', '', ')', 'nW', 'RetList()')
Bram Moolenaarff652882021-05-16 15:24:49 +02003627 catch
Bram Moolenaarcbe178e2021-05-18 17:49:59 +02003628 g:caught = 'yes'
Bram Moolenaarff652882021-05-16 15:24:49 +02003629 endtry
3630 enddef
3631 Fail()
3632 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00003633 v9.CheckScriptSuccess(lines)
Bram Moolenaarcbe178e2021-05-18 17:49:59 +02003634 assert_equal('yes', g:caught)
Bram Moolenaarcbe178e2021-05-18 17:49:59 +02003635 unlet g:caught
Yegappan Lakshmanan5bca9062021-07-24 21:33:26 +02003636 bwipe!
Bram Moolenaar5a234eb2021-07-24 13:18:48 +02003637
3638 lines =<< trim END
Bram Moolenaardd0b2872021-07-24 15:44:30 +02003639 echo searchpair("a", "b", "c", "d", "f", 33)
Bram Moolenaar5a234eb2021-07-24 13:18:48 +02003640 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00003641 v9.CheckDefAndScriptFailure(lines, ['E1001: Variable not found: f', 'E475: Invalid argument: d'])
Bram Moolenaardd0b2872021-07-24 15:44:30 +02003642
Bram Moolenaar73199812021-12-26 17:18:14 +00003643 var errors = ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1']
Bram Moolenaar62aec932022-01-29 21:45:34 +00003644 v9.CheckDefAndScriptFailure(['searchpair(1, "b", "c")'], errors)
3645 v9.CheckDefAndScriptFailure(['searchpairpos(1, "b", "c")'], errors)
Bram Moolenaar73199812021-12-26 17:18:14 +00003646
3647 errors = ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']
Bram Moolenaar62aec932022-01-29 21:45:34 +00003648 v9.CheckDefAndScriptFailure(['searchpair("a", 2, "c")'], errors)
3649 v9.CheckDefAndScriptFailure(['searchpairpos("a", 2, "c")'], errors)
Bram Moolenaar73199812021-12-26 17:18:14 +00003650
3651 errors = ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3']
Bram Moolenaar62aec932022-01-29 21:45:34 +00003652 v9.CheckDefAndScriptFailure(['searchpair("a", "b", 3)'], errors)
3653 v9.CheckDefAndScriptFailure(['searchpairpos("a", "b", 3)'], errors)
Bram Moolenaar73199812021-12-26 17:18:14 +00003654
3655 errors = ['E1013: Argument 4: type mismatch, expected string but got number', 'E1174: String required for argument 4']
Bram Moolenaar62aec932022-01-29 21:45:34 +00003656 v9.CheckDefAndScriptFailure(['searchpair("a", "b", "c", 4)'], errors)
Bram Moolenaar73199812021-12-26 17:18:14 +00003657
3658 new
3659 setline(1, "match this")
3660 errors = ['E1013: Argument 5: type mismatch, expected func(...): any but got list<number>', 'E730: Using a List as a String']
Bram Moolenaar62aec932022-01-29 21:45:34 +00003661 v9.CheckDefAndScriptFailure(['searchpair("a", "b", "c", "r", [0])'], errors)
3662 v9.CheckDefAndScriptFailure(['searchpairpos("a", "b", "c", "r", [0])'], errors)
Bram Moolenaar73199812021-12-26 17:18:14 +00003663 bwipe!
3664
3665 errors = ['E1013: Argument 6: type mismatch, expected number but got string', 'E1210: Number required for argument 6']
Bram Moolenaar62aec932022-01-29 21:45:34 +00003666 v9.CheckDefAndScriptFailure(['searchpair("a", "b", "c", "r", "1", "f")'], errors)
3667 v9.CheckDefAndScriptFailure(['searchpairpos("a", "b", "c", "r", "1", "f")'], errors)
Bram Moolenaar73199812021-12-26 17:18:14 +00003668
3669 errors = ['E1013: Argument 7: type mismatch, expected number but got string', 'E1210: Number required for argument 7']
Bram Moolenaar62aec932022-01-29 21:45:34 +00003670 v9.CheckDefAndScriptFailure(['searchpair("a", "b", "c", "r", "1", 3, "g")'], errors)
3671 v9.CheckDefAndScriptFailure(['searchpairpos("a", "b", "c", "r", "1", 3, "g")'], errors)
Bram Moolenaarf18332f2021-05-07 17:55:55 +02003672enddef
3673
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02003674def Test_searchpos()
Bram Moolenaar82e46e52022-02-05 18:12:34 +00003675 assert_equal(['x', 'x'], searchpos('.')->map((_, _) => 'x'))
3676
Bram Moolenaar62aec932022-01-29 21:45:34 +00003677 v9.CheckDefAndScriptFailure(['searchpos(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
3678 v9.CheckDefAndScriptFailure(['searchpos("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
3679 v9.CheckDefAndScriptFailure(['searchpos("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
3680 v9.CheckDefAndScriptFailure(['searchpos("a", "b", 3, "d")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4'])
Bram Moolenaar73199812021-12-26 17:18:14 +00003681 new
3682 setline(1, "match this")
Bram Moolenaar62aec932022-01-29 21:45:34 +00003683 v9.CheckDefAndScriptFailure(['searchpos("a", "", 9, 0, [0])'], ['E1013: Argument 5: type mismatch, expected func(...): any but got list<number>', 'E730: Using a List as a String'])
Bram Moolenaar73199812021-12-26 17:18:14 +00003684 bwipe!
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02003685enddef
3686
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02003687def Test_server2client()
3688 CheckFeature clientserver
3689 CheckEnv DISPLAY
Bram Moolenaar62aec932022-01-29 21:45:34 +00003690 v9.CheckDefAndScriptFailure(['server2client(10, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
3691 v9.CheckDefAndScriptFailure(['server2client("a", 10)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
3692 v9.CheckDefExecAndScriptFailure(['server2client("", "a")'], 'E573: Invalid server id used')
3693 v9.CheckDefExecAndScriptFailure(['server2client("", "")'], 'E573: Invalid server id used')
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02003694enddef
3695
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003696def Test_shellescape()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003697 v9.CheckDefAndScriptFailure(['shellescape(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
3698 v9.CheckDefAndScriptFailure(['shellescape("a", 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2'])
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01003699 if has('unix')
3700 assert_equal("''", shellescape(''))
3701 endif
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003702enddef
3703
Bram Moolenaar34453202021-01-31 13:08:38 +01003704def Test_set_get_bufline()
3705 # similar to Test_setbufline_getbufline()
3706 var lines =<< trim END
3707 new
3708 var b = bufnr('%')
3709 hide
3710 assert_equal(0, setbufline(b, 1, ['foo', 'bar']))
3711 assert_equal(['foo'], getbufline(b, 1))
3712 assert_equal(['bar'], getbufline(b, '$'))
3713 assert_equal(['foo', 'bar'], getbufline(b, 1, 2))
3714 exe "bd!" b
3715 assert_equal([], getbufline(b, 1, 2))
3716
3717 split Xtest
3718 setline(1, ['a', 'b', 'c'])
3719 b = bufnr('%')
3720 wincmd w
3721
3722 assert_equal(1, setbufline(b, 5, 'x'))
3723 assert_equal(1, setbufline(b, 5, ['x']))
Bram Moolenaarcd9c8d42022-11-05 23:46:43 +00003724 assert_equal(0, setbufline(b, 5, []))
3725 assert_equal(0, setbufline(b, 5, test_null_list()))
Bram Moolenaar34453202021-01-31 13:08:38 +01003726
3727 assert_equal(1, 'x'->setbufline(bufnr('$') + 1, 1))
3728 assert_equal(1, ['x']->setbufline(bufnr('$') + 1, 1))
3729 assert_equal(1, []->setbufline(bufnr('$') + 1, 1))
3730 assert_equal(1, test_null_list()->setbufline(bufnr('$') + 1, 1))
3731
3732 assert_equal(['a', 'b', 'c'], getbufline(b, 1, '$'))
3733
3734 assert_equal(0, setbufline(b, 4, ['d', 'e']))
3735 assert_equal(['c'], b->getbufline(3))
3736 assert_equal(['d'], getbufline(b, 4))
3737 assert_equal(['e'], getbufline(b, 5))
3738 assert_equal([], getbufline(b, 6))
3739 assert_equal([], getbufline(b, 2, 1))
3740
Bram Moolenaar00385112021-02-07 14:31:06 +01003741 if has('job')
Bram Moolenaar1328bde2021-06-05 20:51:38 +02003742 setbufline(b, 2, [function('eval'), {key: 123}, string(test_null_job())])
Bram Moolenaar00385112021-02-07 14:31:06 +01003743 assert_equal(["function('eval')",
3744 "{'key': 123}",
3745 "no process"],
3746 getbufline(b, 2, 4))
3747 endif
Bram Moolenaar34453202021-01-31 13:08:38 +01003748
3749 exe 'bwipe! ' .. b
3750 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00003751 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar34453202021-01-31 13:08:38 +01003752enddef
3753
Bram Moolenaar94738d82020-10-21 14:25:07 +02003754def Test_setbufvar()
3755 setbufvar(bufnr('%'), '&syntax', 'vim')
3756 &syntax->assert_equal('vim')
3757 setbufvar(bufnr('%'), '&ts', 16)
3758 &ts->assert_equal(16)
Bram Moolenaar31a201a2021-01-03 14:47:25 +01003759 setbufvar(bufnr('%'), '&ai', true)
3760 &ai->assert_equal(true)
3761 setbufvar(bufnr('%'), '&ft', 'filetype')
3762 &ft->assert_equal('filetype')
3763
Bram Moolenaar94738d82020-10-21 14:25:07 +02003764 settabwinvar(1, 1, '&syntax', 'vam')
3765 &syntax->assert_equal('vam')
3766 settabwinvar(1, 1, '&ts', 15)
3767 &ts->assert_equal(15)
3768 setlocal ts=8
Bram Moolenaarb0d81822021-01-03 15:55:10 +01003769 settabwinvar(1, 1, '&list', false)
3770 &list->assert_equal(false)
Bram Moolenaar31a201a2021-01-03 14:47:25 +01003771 settabwinvar(1, 1, '&list', true)
3772 &list->assert_equal(true)
3773 setlocal list&
Bram Moolenaar94738d82020-10-21 14:25:07 +02003774
3775 setbufvar('%', 'myvar', 123)
3776 getbufvar('%', 'myvar')->assert_equal(123)
Yegappan Lakshmanan7973de32021-07-24 16:16:15 +02003777
Bram Moolenaar62aec932022-01-29 21:45:34 +00003778 v9.CheckDefAndScriptFailure(['setbufvar(true, "v", 3)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1'])
3779 v9.CheckDefAndScriptFailure(['setbufvar(1, 2, 3)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +02003780 assert_fails('setbufvar("%", "", 10)', 'E461: Illegal variable name')
Bram Moolenaar94738d82020-10-21 14:25:07 +02003781enddef
3782
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003783def Test_setbufline()
3784 new
3785 var bnum = bufnr('%')
3786 :wincmd w
3787 setbufline(bnum, 1, range(1, 3))
3788 setbufline(bnum, 4, 'one')
3789 setbufline(bnum, 5, 10)
3790 setbufline(bnum, 6, ['two', 11])
3791 assert_equal(['1', '2', '3', 'one', '10', 'two', '11'], getbufline(bnum, 1, '$'))
Bram Moolenaar62aec932022-01-29 21:45:34 +00003792 v9.CheckDefAndScriptFailure(['setbufline([1], 1, "x")'], ['E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1'])
3793 v9.CheckDefAndScriptFailure(['setbufline(1, [1], "x")'], ['E1013: Argument 2: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 2'])
3794 v9.CheckDefExecAndScriptFailure(['setbufline(' .. bnum .. ', -1, "x")'], 'E966: Invalid line number: -1')
3795 v9.CheckDefAndScriptFailure(['setbufline(1, 1, {"a": 10})'], ['E1013: Argument 3: type mismatch, expected string but got dict<number>', 'E1224: String, Number or List required for argument 3'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003796 bnum->bufwinid()->win_gotoid()
Yegappan Lakshmanan51491ad2021-09-30 19:00:00 +01003797 setbufline('', 1, 'nombres')
3798 getline(1)->assert_equal('nombres')
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003799 bw!
3800enddef
3801
3802def Test_setcellwidths()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003803 v9.CheckDefAndScriptFailure(['setcellwidths(1)'], ['E1013: Argument 1: type mismatch, expected list<any> but got number', 'E1211: List required for argument 1'])
3804 v9.CheckDefAndScriptFailure(['setcellwidths({"a": 10})'], ['E1013: Argument 1: type mismatch, expected list<any> but got dict<number>', 'E1211: List required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003805enddef
3806
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003807def Test_setcharpos()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003808 v9.CheckDefAndScriptFailure(['setcharpos(1, [])'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
3809 v9.CheckDefFailure(['setcharpos(".", ["a"])'], 'E1013: Argument 2: type mismatch, expected list<number> but got list<string>')
3810 v9.CheckDefAndScriptFailure(['setcharpos(".", 1)'], ['E1013: Argument 2: type mismatch, expected list<number> but got number', 'E1211: List required for argument 2'])
3811 v9.CheckDefExecAndScriptFailure(['setcharpos("", [0, 1, 1, 1])'], 'E474: Invalid argument')
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003812enddef
3813
3814def Test_setcharsearch()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003815 v9.CheckDefAndScriptFailure(['setcharsearch("x")'], ['E1013: Argument 1: type mismatch, expected dict<any> but got string', 'E1206: Dictionary required for argument 1'])
3816 v9.CheckDefAndScriptFailure(['setcharsearch([])'], ['E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1'])
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003817 var d: dict<any> = {char: 'x', forward: 1, until: 1}
3818 setcharsearch(d)
3819 assert_equal(d, getcharsearch())
3820enddef
3821
Shougo Matsushita07ea5f12022-08-27 12:22:25 +01003822def Test_setcmdline()
3823 v9.CheckDefAndScriptSuccess(['setcmdline("ls", 2)'])
Yegappan Lakshmanan25f1e552022-08-28 17:25:04 +01003824 v9.CheckDefAndScriptFailure(['setcmdline(123)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
3825 v9.CheckDefAndScriptFailure(['setcmdline("ls", "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
Shougo Matsushita07ea5f12022-08-27 12:22:25 +01003826enddef
3827
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003828def Test_setcmdpos()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003829 v9.CheckDefAndScriptFailure(['setcmdpos("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003830enddef
3831
3832def Test_setcursorcharpos()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003833 v9.CheckDefAndScriptFailure(['setcursorcharpos(0z10, 1)'], ['E1013: Argument 1: type mismatch, expected number but got blob', 'E1224: String, Number or List required for argument 1'])
3834 v9.CheckDefAndScriptFailure(['setcursorcharpos(1, "2")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
3835 v9.CheckDefAndScriptFailure(['setcursorcharpos(1, 2, "3")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
3836 v9.CheckDefExecAndScriptFailure(['setcursorcharpos("", 10)'], 'E1209: Invalid value for a line number')
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003837enddef
3838
Yegappan Lakshmanana764e732021-07-25 15:57:32 +02003839def Test_setenv()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003840 v9.CheckDefAndScriptFailure(['setenv(1, 2)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01003841 assert_equal(0, setenv('', ''))
3842 assert_equal(0, setenv('', v:null))
Yegappan Lakshmanana764e732021-07-25 15:57:32 +02003843enddef
3844
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003845def Test_setfperm()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003846 v9.CheckDefAndScriptFailure(['setfperm(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
3847 v9.CheckDefAndScriptFailure(['setfperm("a", 0z10)'], ['E1013: Argument 2: type mismatch, expected string but got blob', 'E1174: String required for argument 2'])
3848 v9.CheckDefExecAndScriptFailure(['setfperm("Xfile", "")'], 'E475: Invalid argument')
3849 v9.CheckDefExecAndScriptFailure(['setfperm("", "")'], 'E475: Invalid argument')
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01003850 assert_equal(0, setfperm('', 'rw-r--r--'))
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003851enddef
3852
Yegappan Lakshmananc72bdd22021-07-11 19:44:18 +02003853def Test_setline()
3854 new
3855 setline(1, range(1, 4))
3856 assert_equal(['1', '2', '3', '4'], getline(1, '$'))
3857 setline(1, ['a', 'b', 'c', 'd'])
3858 assert_equal(['a', 'b', 'c', 'd'], getline(1, '$'))
3859 setline(1, 'one')
3860 assert_equal(['one', 'b', 'c', 'd'], getline(1, '$'))
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003861 setline(1, 10)
3862 assert_equal(['10', 'b', 'c', 'd'], getline(1, '$'))
Bram Moolenaar62aec932022-01-29 21:45:34 +00003863 v9.CheckDefAndScriptFailure(['setline([1], "x")'], ['E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1'])
3864 v9.CheckDefExecAndScriptFailure(['setline("", "x")'], 'E1209: Invalid value for a line number')
3865 v9.CheckDefExecAndScriptFailure(['setline(-1, "x")'], 'E966: Invalid line number: -1')
Bram Moolenaar8b6256f2021-12-28 11:24:49 +00003866 assert_fails('setline(".a", "x")', ['E1209:', 'E1209:'])
Yegappan Lakshmananc72bdd22021-07-11 19:44:18 +02003867 bw!
3868enddef
3869
Bram Moolenaar94738d82020-10-21 14:25:07 +02003870def Test_setloclist()
Bram Moolenaare0de1712020-12-02 17:36:54 +01003871 var items = [{filename: '/tmp/file', lnum: 1, valid: true}]
3872 var what = {items: items}
Bram Moolenaar94738d82020-10-21 14:25:07 +02003873 setqflist([], ' ', what)
3874 setloclist(0, [], ' ', what)
Bram Moolenaar62aec932022-01-29 21:45:34 +00003875 v9.CheckDefAndScriptFailure(['setloclist("1", [])'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
3876 v9.CheckDefAndScriptFailure(['setloclist(1, 2)'], ['E1013: Argument 2: type mismatch, expected list<any> but got number', 'E1211: List required for argument 2'])
3877 v9.CheckDefAndScriptFailure(['setloclist(1, [], 3)'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3'])
3878 v9.CheckDefAndScriptFailure(['setloclist(1, [], "a", [])'], ['E1013: Argument 4: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 4'])
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003879enddef
3880
3881def Test_setmatches()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003882 v9.CheckDefAndScriptFailure(['setmatches({})'], ['E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 1'])
3883 v9.CheckDefAndScriptFailure(['setmatches([], "1")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003884enddef
3885
3886def Test_setpos()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003887 v9.CheckDefAndScriptFailure(['setpos(1, [])'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
3888 v9.CheckDefFailure(['setpos(".", ["a"])'], 'E1013: Argument 2: type mismatch, expected list<number> but got list<string>')
3889 v9.CheckDefAndScriptFailure(['setpos(".", 1)'], ['E1013: Argument 2: type mismatch, expected list<number> but got number', 'E1211: List required for argument 2'])
3890 v9.CheckDefExecAndScriptFailure(['setpos("", [0, 1, 1, 1])'], 'E474: Invalid argument')
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003891enddef
3892
3893def Test_setqflist()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003894 v9.CheckDefAndScriptFailure(['setqflist(1, "")'], ['E1013: Argument 1: type mismatch, expected list<any> but got number', 'E1211: List required for argument 1'])
3895 v9.CheckDefAndScriptFailure(['setqflist([], 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
3896 v9.CheckDefAndScriptFailure(['setqflist([], "", [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3'])
Bram Moolenaar94738d82020-10-21 14:25:07 +02003897enddef
3898
3899def Test_setreg()
3900 setreg('a', ['aaa', 'bbb', 'ccc'])
3901 var reginfo = getreginfo('a')
3902 setreg('a', reginfo)
3903 getreginfo('a')->assert_equal(reginfo)
Bram Moolenaar418a29f2021-02-10 22:23:41 +01003904 assert_fails('setreg("ab", 0)', 'E1162:')
Bram Moolenaar62aec932022-01-29 21:45:34 +00003905 v9.CheckDefAndScriptFailure(['setreg(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
3906 v9.CheckDefAndScriptFailure(['setreg("a", "b", 3)'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3'])
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01003907 setreg('', '1a2b3c')
3908 assert_equal('1a2b3c', @")
Bram Moolenaar5671f3f2021-08-05 22:48:11 +02003909enddef
Bram Moolenaar94738d82020-10-21 14:25:07 +02003910
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003911def Test_settabvar()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003912 v9.CheckDefAndScriptFailure(['settabvar("a", "b", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
3913 v9.CheckDefAndScriptFailure(['settabvar(1, 2, "c")'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +02003914 assert_fails('settabvar(1, "", 10)', 'E461: Illegal variable name')
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003915enddef
3916
3917def Test_settabwinvar()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003918 v9.CheckDefAndScriptFailure(['settabwinvar("a", 2, "c", true)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
3919 v9.CheckDefAndScriptFailure(['settabwinvar(1, "b", "c", [])'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
3920 v9.CheckDefAndScriptFailure(['settabwinvar(1, 1, 3, {})'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3'])
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +02003921 assert_fails('settabwinvar(1, 1, "", 10)', 'E461: Illegal variable name')
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003922enddef
3923
3924def Test_settagstack()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003925 v9.CheckDefAndScriptFailure(['settagstack(true, {})'], ['E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1'])
3926 v9.CheckDefAndScriptFailure(['settagstack(1, [1])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 2'])
3927 v9.CheckDefAndScriptFailure(['settagstack(1, {}, 2)'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3'])
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01003928 assert_fails('settagstack(1, {}, "")', 'E962: Invalid action')
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003929enddef
3930
3931def Test_setwinvar()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003932 v9.CheckDefAndScriptFailure(['setwinvar("a", "b", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
3933 v9.CheckDefAndScriptFailure(['setwinvar(1, 2, "c")'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +02003934 assert_fails('setwinvar(1, "", 10)', 'E461: Illegal variable name')
Bram Moolenaar28f84e12022-07-27 12:30:13 +01003935 assert_fails('setwinvar(0, "&rulerformat", true)', 'E928:')
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003936enddef
3937
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02003938def Test_sha256()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003939 v9.CheckDefAndScriptFailure(['sha256(100)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
3940 v9.CheckDefAndScriptFailure(['sha256(0zABCD)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1174: String required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02003941 assert_equal('ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad', sha256('abc'))
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01003942 assert_equal('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', sha256(''))
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02003943enddef
3944
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02003945def Test_shiftwidth()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003946 v9.CheckDefAndScriptFailure(['shiftwidth("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02003947enddef
3948
3949def Test_sign_define()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003950 v9.CheckDefAndScriptFailure(['sign_define({"a": 10})'], ['E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1222: String or List required for argument 1'])
3951 v9.CheckDefAndScriptFailure(['sign_define({"a": 10}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1222: String or List required for argument 1'])
3952 v9.CheckDefAndScriptFailure(['sign_define("a", ["b"])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<string>', 'E1206: Dictionary required for argument 2'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02003953enddef
3954
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003955def Test_sign_getdefined()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003956 v9.CheckDefAndScriptFailure(['sign_getdefined(["x"])'], ['E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1'])
3957 v9.CheckDefAndScriptFailure(['sign_getdefined(2)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02003958 sign_getdefined('')->assert_equal([])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003959enddef
3960
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003961def Test_sign_getplaced()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003962 v9.CheckDefAndScriptFailure(['sign_getplaced(["x"])'], ['E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1220: String or Number required for argument 1'])
3963 v9.CheckDefAndScriptFailure(['sign_getplaced(1, ["a"])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<string>', 'E1206: Dictionary required for argument 2'])
3964 v9.CheckDefAndScriptFailure(['sign_getplaced("a", 1.1)'], ['E1013: Argument 2: type mismatch, expected dict<any> but got float', 'E1206: Dictionary required for argument 2'])
3965 v9.CheckDefExecAndScriptFailure(['sign_getplaced(bufnr(), {lnum: ""})'], 'E1030: Using a String as a Number:')
Yegappan Lakshmanan51491ad2021-09-30 19:00:00 +01003966 sign_getplaced('')->assert_equal([{signs: [], bufnr: bufnr()}])
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02003967enddef
3968
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02003969def Test_sign_jump()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003970 v9.CheckDefAndScriptFailure(['sign_jump("a", "b", "c")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
3971 v9.CheckDefAndScriptFailure(['sign_jump(1, 2, 3)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
3972 v9.CheckDefAndScriptFailure(['sign_jump(1, "b", true)'], ['E1013: Argument 3: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 3'])
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02003973enddef
3974
3975def Test_sign_place()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003976 v9.CheckDefAndScriptFailure(['sign_place("a", "b", "c", "d")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
3977 v9.CheckDefAndScriptFailure(['sign_place(1, 2, "c", "d")'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
3978 v9.CheckDefAndScriptFailure(['sign_place(1, "b", 3, "d")'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3'])
3979 v9.CheckDefAndScriptFailure(['sign_place(1, "b", "c", 1.1)'], ['E1013: Argument 4: type mismatch, expected string but got float', 'E1220: String or Number required for argument 4'])
3980 v9.CheckDefAndScriptFailure(['sign_place(1, "b", "c", "d", [1])'], ['E1013: Argument 5: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 5'])
3981 v9.CheckDefExecAndScriptFailure(['sign_place(0, "", "MySign", bufnr(), {lnum: ""})'], 'E1209: Invalid value for a line number: ""')
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02003982 assert_fails("sign_place(0, '', '', '')", 'E155:')
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02003983enddef
3984
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003985def Test_sign_placelist()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003986 v9.CheckDefAndScriptFailure(['sign_placelist("x")'], ['E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1211: List required for argument 1'])
3987 v9.CheckDefAndScriptFailure(['sign_placelist({"a": 10})'], ['E1013: Argument 1: type mismatch, expected list<any> but got dict<number>', 'E1211: List required for argument 1'])
3988 v9.CheckDefExecAndScriptFailure(['sign_placelist([{"name": "MySign", "buffer": bufnr(), "lnum": ""}])'], 'E1209: Invalid value for a line number: ""')
Yegappan Lakshmanan2a16dc62021-11-16 17:19:30 +00003989 assert_fails('sign_placelist([{name: "MySign", buffer: "", lnum: 1}])', 'E155:')
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02003990enddef
3991
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02003992def Test_sign_undefine()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003993 v9.CheckDefAndScriptFailure(['sign_undefine({})'], ['E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1222: String or List required for argument 1'])
3994 v9.CheckDefAndScriptFailure(['sign_undefine([1])'], ['E1013: Argument 1: type mismatch, expected list<string> but got list<number>', 'E155: Unknown sign:'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02003995enddef
3996
3997def Test_sign_unplace()
Bram Moolenaar62aec932022-01-29 21:45:34 +00003998 v9.CheckDefAndScriptFailure(['sign_unplace({"a": 10})'], ['E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1'])
3999 v9.CheckDefAndScriptFailure(['sign_unplace({"a": 10}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1'])
4000 v9.CheckDefAndScriptFailure(['sign_unplace("a", ["b"])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<string>', 'E1206: Dictionary required for argument 2'])
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02004001enddef
4002
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02004003def Test_sign_unplacelist()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004004 v9.CheckDefAndScriptFailure(['sign_unplacelist("x")'], ['E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1211: List required for argument 1'])
4005 v9.CheckDefAndScriptFailure(['sign_unplacelist({"a": 10})'], ['E1013: Argument 1: type mismatch, expected list<any> but got dict<number>', 'E1211: List required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02004006enddef
4007
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004008def Test_simplify()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004009 v9.CheckDefAndScriptFailure(['simplify(100)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004010 call assert_equal('NonExistingFile', simplify('NonExistingFile'))
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01004011 simplify('')->assert_equal('')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004012enddef
4013
Bram Moolenaar6601b622021-01-13 21:47:15 +01004014def Test_slice()
4015 assert_equal('12345', slice('012345', 1))
4016 assert_equal('123', slice('012345', 1, 4))
4017 assert_equal('1234', slice('012345', 1, -1))
4018 assert_equal('1', slice('012345', 1, -4))
4019 assert_equal('', slice('012345', 1, -5))
4020 assert_equal('', slice('012345', 1, -6))
4021
4022 assert_equal([1, 2, 3, 4, 5], slice(range(6), 1))
4023 assert_equal([1, 2, 3], slice(range(6), 1, 4))
4024 assert_equal([1, 2, 3, 4], slice(range(6), 1, -1))
4025 assert_equal([1], slice(range(6), 1, -4))
4026 assert_equal([], slice(range(6), 1, -5))
4027 assert_equal([], slice(range(6), 1, -6))
4028
Bram Moolenaar00eb9952022-02-05 19:23:18 +00004029 var lds: list<dict<string>> = [{key: 'value'}]
4030 assert_equal(['val'], lds->slice(0, 1)->map((_, v) => 'val'))
Bram Moolenaar5f4ef5f2022-02-06 18:36:53 +00004031 assert_equal(['val'], lds[ : ]->map((_, v) => 'val'))
Bram Moolenaar00eb9952022-02-05 19:23:18 +00004032
Bram Moolenaar6601b622021-01-13 21:47:15 +01004033 assert_equal(0z1122334455, slice(0z001122334455, 1))
4034 assert_equal(0z112233, slice(0z001122334455, 1, 4))
4035 assert_equal(0z11223344, slice(0z001122334455, 1, -1))
4036 assert_equal(0z11, slice(0z001122334455, 1, -4))
4037 assert_equal(0z, slice(0z001122334455, 1, -5))
4038 assert_equal(0z, slice(0z001122334455, 1, -6))
Bram Moolenaar62aec932022-01-29 21:45:34 +00004039 v9.CheckDefAndScriptFailure(['slice({"a": 10}, 1)'], ['E1013: Argument 1: type mismatch, expected list<any> but got dict<number>', 'E1211: List required for argument 1'])
4040 v9.CheckDefAndScriptFailure(['slice([1, 2, 3], "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
4041 v9.CheckDefAndScriptFailure(['slice("abc", 1, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
Bram Moolenaar6601b622021-01-13 21:47:15 +01004042enddef
4043
Bram Moolenaar94738d82020-10-21 14:25:07 +02004044def Test_spellsuggest()
4045 if !has('spell')
Dominique Pelle9ff9c7b2021-07-18 21:44:37 +02004046 CheckFeature spell
Bram Moolenaar94738d82020-10-21 14:25:07 +02004047 else
4048 spellsuggest('marrch', 1, true)->assert_equal(['March'])
4049 endif
Bram Moolenaar62aec932022-01-29 21:45:34 +00004050 v9.CheckDefAndScriptFailure(['spellsuggest(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
4051 v9.CheckDefAndScriptFailure(['spellsuggest("a", "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
4052 v9.CheckDefAndScriptFailure(['spellsuggest("a", 1, 0z01)'], ['E1013: Argument 3: type mismatch, expected bool but got blob', 'E1212: Bool required for argument 3'])
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +02004053 spellsuggest('')->assert_equal([])
Bram Moolenaar94738d82020-10-21 14:25:07 +02004054enddef
4055
Yegappan Lakshmanan5bca9062021-07-24 21:33:26 +02004056def Test_sound_playevent()
4057 CheckFeature sound
Bram Moolenaar62aec932022-01-29 21:45:34 +00004058 v9.CheckDefAndScriptFailure(['sound_playevent(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
Yegappan Lakshmanan5bca9062021-07-24 21:33:26 +02004059enddef
4060
4061def Test_sound_playfile()
4062 CheckFeature sound
Bram Moolenaar62aec932022-01-29 21:45:34 +00004063 v9.CheckDefAndScriptFailure(['sound_playfile(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
Yegappan Lakshmanan5bca9062021-07-24 21:33:26 +02004064enddef
4065
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004066def Test_sound_stop()
4067 CheckFeature sound
Bram Moolenaar62aec932022-01-29 21:45:34 +00004068 v9.CheckDefAndScriptFailure(['sound_stop("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004069enddef
4070
4071def Test_soundfold()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004072 v9.CheckDefAndScriptFailure(['soundfold(20)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004073 assert_equal('abc', soundfold('abc'))
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01004074 assert_equal('', soundfold(''))
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004075enddef
4076
Bram Moolenaar94738d82020-10-21 14:25:07 +02004077def Test_sort_return_type()
4078 var res: list<number>
4079 res = [1, 2, 3]->sort()
4080enddef
4081
4082def Test_sort_argument()
Bram Moolenaar08cf0c02020-12-05 21:47:06 +01004083 var lines =<< trim END
4084 var res = ['b', 'a', 'c']->sort('i')
4085 res->assert_equal(['a', 'b', 'c'])
4086
4087 def Compare(a: number, b: number): number
4088 return a - b
4089 enddef
4090 var l = [3, 6, 7, 1, 8, 2, 4, 5]
4091 sort(l, Compare)
4092 assert_equal([1, 2, 3, 4, 5, 6, 7, 8], l)
4093 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00004094 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaare843efc2022-02-22 21:54:44 +00004095
4096 lines =<< trim END
4097 sort([1, 2, 3], (a: any, b: any) => 1)
4098 END
4099 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaarfa026162022-02-23 21:03:32 +00004100
4101 lines =<< trim END
4102 vim9script
4103 def SortedList(): list<number>
4104 var Lambda: func: number = (a, b): number => a - b
4105 var l = [3, 2, 1]
4106 return l->sort(Lambda)
4107 enddef
4108 SortedList()->assert_equal([1, 2, 3])
4109 END
4110 v9.CheckScriptSuccess(lines)
Bram Moolenaar94738d82020-10-21 14:25:07 +02004111enddef
4112
Bram Moolenaara5d1a672022-09-30 17:57:47 +01004113def Test_sort_const()
4114 var lines =<< trim END
4115 const l = [1, 2, 3, 4]
4116 sort(l)
4117 END
4118 v9.CheckDefFailure(lines, 'E1307: Argument 1: Trying to modify a const list<number>')
4119enddef
4120
Bram Moolenaar23018f22021-12-27 11:54:37 +00004121def Test_sort_compare_func_fails()
Bram Moolenaare843efc2022-02-22 21:54:44 +00004122 v9.CheckDefAndScriptFailure(['sort("a")'], ['E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1211: List required for argument 1'])
4123 v9.CheckDefAndScriptFailure(['sort([1], "", [1])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3'])
4124
Bram Moolenaar23018f22021-12-27 11:54:37 +00004125 var lines =<< trim END
4126 vim9script
4127 echo ['a', 'b', 'c']->sort((a: number, b: number) => 0)
4128 END
Bram Moolenaar0e9bdad2022-10-15 20:06:33 +01004129 writefile(lines, 'Xbadsort', 'D')
Bram Moolenaar23018f22021-12-27 11:54:37 +00004130 assert_fails('source Xbadsort', ['E1013:', 'E702:'])
Bram Moolenaare843efc2022-02-22 21:54:44 +00004131
4132 lines =<< trim END
4133 var l = [1, 2, 3]
4134 sort(l, (a: string, b: number) => 1)
4135 END
4136 v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?number, ?number): number but got func(string, number): number', 'E1013: Argument 1: type mismatch, expected string but got number'])
4137
4138 lines =<< trim END
4139 var l = ['a', 'b', 'c']
4140 sort(l, (a: string, b: number) => 1)
4141 END
4142 v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?string, ?string): number but got func(string, number): number', 'E1013: Argument 2: type mismatch, expected number but got string'])
4143
4144 lines =<< trim END
4145 sort([1, 2, 3], (a: number, b: number) => true)
4146 END
4147 v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?number, ?number): number but got func(number, number): bool', 'E1138: Using a Bool as a Number'])
Bram Moolenaar23018f22021-12-27 11:54:37 +00004148enddef
4149
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004150def Test_spellbadword()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004151 v9.CheckDefAndScriptFailure(['spellbadword(100)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004152 spellbadword('good')->assert_equal(['', ''])
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01004153 spellbadword('')->assert_equal(['', ''])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004154enddef
4155
Bram Moolenaar94738d82020-10-21 14:25:07 +02004156def Test_split()
4157 split(' aa bb ', '\W\+', true)->assert_equal(['', 'aa', 'bb', ''])
Bram Moolenaar62aec932022-01-29 21:45:34 +00004158 v9.CheckDefAndScriptFailure(['split(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
4159 v9.CheckDefAndScriptFailure(['split("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
4160 v9.CheckDefAndScriptFailure(['split("a", "b", 2)'], ['E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3'])
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01004161 split('')->assert_equal([])
4162 split('', '')->assert_equal([])
Bram Moolenaar94738d82020-10-21 14:25:07 +02004163enddef
4164
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004165def Test_srand()
Bram Moolenaar82e46e52022-02-05 18:12:34 +00004166 var expected = srand()->len()->range()->map((_, _) => 'x')
4167 assert_equal(expected, srand()->map((_, _) => 'x'))
4168
Bram Moolenaar62aec932022-01-29 21:45:34 +00004169 v9.CheckDefAndScriptFailure(['srand("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004170 type(srand(100))->assert_equal(v:t_list)
4171enddef
4172
4173def Test_state()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004174 v9.CheckDefAndScriptFailure(['state({})'], ['E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004175 assert_equal('', state('a'))
4176enddef
4177
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02004178def Test_str2float()
Bram Moolenaar73e28dc2022-09-17 21:08:33 +01004179 str2float("1.00")->assert_equal(1.00)
4180 str2float("2e-2")->assert_equal(0.02)
4181 str2float('')->assert_equal(0.0)
Bram Moolenaar80ad3e22021-01-31 20:48:58 +01004182
Bram Moolenaar73e28dc2022-09-17 21:08:33 +01004183 v9.CheckDefAndScriptFailure(['str2float(123)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
Bram Moolenaar80ad3e22021-01-31 20:48:58 +01004184enddef
4185
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02004186def Test_str2list()
Bram Moolenaar82e46e52022-02-05 18:12:34 +00004187 assert_equal(['x', 'x', 'x'], str2list('abc')->map((_, _) => 'x'))
4188
Bram Moolenaar62aec932022-01-29 21:45:34 +00004189 v9.CheckDefAndScriptFailure(['str2list(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
4190 v9.CheckDefAndScriptFailure(['str2list("a", 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2'])
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02004191 assert_equal([97], str2list('a'))
4192 assert_equal([97], str2list('a', 1))
4193 assert_equal([97], str2list('a', true))
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02004194 str2list('')->assert_equal([])
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02004195enddef
4196
Bram Moolenaar94738d82020-10-21 14:25:07 +02004197def Test_str2nr()
4198 str2nr("1'000'000", 10, true)->assert_equal(1000000)
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02004199 str2nr('')->assert_equal(0)
Bram Moolenaarf2b26bc2021-01-30 23:05:11 +01004200
Bram Moolenaar62aec932022-01-29 21:45:34 +00004201 v9.CheckDefAndScriptFailure(['str2nr(123)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
4202 v9.CheckDefAndScriptFailure(['str2nr("123", "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
4203 v9.CheckDefAndScriptFailure(['str2nr("123", 10, "x")'], ['E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3'])
Bram Moolenaar94738d82020-10-21 14:25:07 +02004204enddef
4205
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02004206def Test_strcharlen()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004207 v9.CheckDefAndScriptFailure(['strcharlen([1])'], ['E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02004208 "abc"->strcharlen()->assert_equal(3)
4209 strcharlen(99)->assert_equal(2)
4210enddef
4211
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02004212def Test_strcharpart()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004213 v9.CheckDefAndScriptFailure(['strcharpart(1, 2)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
4214 v9.CheckDefAndScriptFailure(['strcharpart("a", "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
4215 v9.CheckDefAndScriptFailure(['strcharpart("a", 1, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
4216 v9.CheckDefAndScriptFailure(['strcharpart("a", 1, 1, 2)'], ['E1013: Argument 4: type mismatch, expected bool but got number', 'E1212: Bool required for argument 4'])
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02004217 strcharpart('', 0)->assert_equal('')
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02004218enddef
4219
Bram Moolenaar94738d82020-10-21 14:25:07 +02004220def Test_strchars()
4221 strchars("A\u20dd", true)->assert_equal(1)
Bram Moolenaar62aec932022-01-29 21:45:34 +00004222 v9.CheckDefAndScriptFailure(['strchars(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
4223 v9.CheckDefAndScriptFailure(['strchars("a", 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2'])
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02004224 assert_equal(3, strchars('abc'))
4225 assert_equal(3, strchars('abc', 1))
4226 assert_equal(3, strchars('abc', true))
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02004227 strchars('')->assert_equal(0)
Bram Moolenaar94738d82020-10-21 14:25:07 +02004228enddef
4229
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02004230def Test_strdisplaywidth()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004231 v9.CheckDefAndScriptFailure(['strdisplaywidth(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
4232 v9.CheckDefAndScriptFailure(['strdisplaywidth("a", "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02004233 strdisplaywidth('')->assert_equal(0)
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02004234enddef
4235
4236def Test_strftime()
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02004237 if exists('*strftime')
Bram Moolenaar62aec932022-01-29 21:45:34 +00004238 v9.CheckDefAndScriptFailure(['strftime(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
4239 v9.CheckDefAndScriptFailure(['strftime("a", "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02004240 strftime('')->assert_equal('')
4241 endif
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02004242enddef
4243
4244def Test_strgetchar()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004245 v9.CheckDefAndScriptFailure(['strgetchar(1, 1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
4246 v9.CheckDefAndScriptFailure(['strgetchar("a", "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02004247 strgetchar('', 0)->assert_equal(-1)
4248 strgetchar('', 1)->assert_equal(-1)
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02004249enddef
4250
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004251def Test_stridx()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004252 v9.CheckDefAndScriptFailure(['stridx([1], "b")'], ['E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1'])
4253 v9.CheckDefAndScriptFailure(['stridx("a", {})'], ['E1013: Argument 2: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 2'])
4254 v9.CheckDefAndScriptFailure(['stridx("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02004255 stridx('', '')->assert_equal(0)
4256 stridx('', 'a')->assert_equal(-1)
4257 stridx('a', '')->assert_equal(0)
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004258enddef
4259
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004260def Test_strlen()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004261 v9.CheckDefAndScriptFailure(['strlen([])'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004262 "abc"->strlen()->assert_equal(3)
4263 strlen(99)->assert_equal(2)
4264enddef
4265
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02004266def Test_strpart()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004267 v9.CheckDefAndScriptFailure(['strpart(1, 2)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
4268 v9.CheckDefAndScriptFailure(['strpart("a", "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
4269 v9.CheckDefAndScriptFailure(['strpart("a", 1, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
4270 v9.CheckDefAndScriptFailure(['strpart("a", 1, 1, 2)'], ['E1013: Argument 4: type mismatch, expected bool but got number', 'E1212: Bool required for argument 4'])
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02004271 strpart('', 0)->assert_equal('')
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02004272enddef
4273
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004274def Test_strptime()
4275 CheckFunction strptime
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02004276 if exists_compiled('*strptime')
Bram Moolenaar62aec932022-01-29 21:45:34 +00004277 v9.CheckDefAndScriptFailure(['strptime(10, "2021")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
4278 v9.CheckDefAndScriptFailure(['strptime("%Y", 2021)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02004279 assert_true(strptime('%Y', '2021') != 0)
4280 assert_true(strptime('%Y', '') == 0)
4281 endif
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004282enddef
4283
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004284def Test_strridx()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004285 v9.CheckDefAndScriptFailure(['strridx([1], "b")'], ['E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1'])
4286 v9.CheckDefAndScriptFailure(['strridx("a", {})'], ['E1013: Argument 2: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 2'])
4287 v9.CheckDefAndScriptFailure(['strridx("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02004288 strridx('', '')->assert_equal(0)
4289 strridx('', 'a')->assert_equal(-1)
4290 strridx('a', '')->assert_equal(1)
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004291enddef
4292
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004293def Test_strtrans()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004294 v9.CheckDefAndScriptFailure(['strtrans(20)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004295 assert_equal('abc', strtrans('abc'))
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02004296 strtrans('')->assert_equal('')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004297enddef
4298
4299def Test_strwidth()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004300 v9.CheckDefAndScriptFailure(['strwidth(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004301 assert_equal(4, strwidth('abcd'))
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02004302 strwidth('')->assert_equal(0)
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004303enddef
4304
Bram Moolenaar94738d82020-10-21 14:25:07 +02004305def Test_submatch()
4306 var pat = 'A\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)'
Bram Moolenaar75ab91f2021-01-10 22:42:50 +01004307 var Rep = () => range(10)->mapnew((_, v) => submatch(v, true))->string()
Bram Moolenaar94738d82020-10-21 14:25:07 +02004308 var actual = substitute('A123456789', pat, Rep, '')
4309 var expected = "[['A123456789'], ['1'], ['2'], ['3'], ['4'], ['5'], ['6'], ['7'], ['8'], ['9']]"
4310 actual->assert_equal(expected)
Bram Moolenaar62aec932022-01-29 21:45:34 +00004311 v9.CheckDefAndScriptFailure(['submatch("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
4312 v9.CheckDefAndScriptFailure(['submatch(1, "a")'], ['E1013: Argument 2: type mismatch, expected bool but got string', 'E1212: Bool required for argument 2'])
Bram Moolenaar94738d82020-10-21 14:25:07 +02004313enddef
4314
Bram Moolenaar1328bde2021-06-05 20:51:38 +02004315def Test_substitute()
4316 var res = substitute('A1234', '\d', 'X', '')
4317 assert_equal('AX234', res)
4318
4319 if has('job')
Bram Moolenaarec892232022-05-06 17:53:06 +01004320 assert_fails('"text"->substitute(".*", () => test_null_job(), "")', 'E908: Using an invalid value as a String: job')
4321 assert_fails('"text"->substitute(".*", () => test_null_channel(), "")', 'E908: Using an invalid value as a String: channel')
Bram Moolenaar1328bde2021-06-05 20:51:38 +02004322 endif
Bram Moolenaar62aec932022-01-29 21:45:34 +00004323 v9.CheckDefAndScriptFailure(['substitute(1, "b", "1", "d")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
4324 v9.CheckDefAndScriptFailure(['substitute("a", 2, "1", "d")'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
4325 v9.CheckDefAndScriptFailure(['substitute("a", "b", "1", 4)'], ['E1013: Argument 4: type mismatch, expected string but got number', 'E1174: String required for argument 4'])
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01004326 substitute('', '', '', '')->assert_equal('')
LemonBoyf3b48952022-05-05 13:53:03 +01004327
4328 var lines =<< trim END
4329 assert_equal("4", substitute("3", '\d', '\=str2nr(submatch(0)) + 1', 'g'))
4330 END
4331 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaard0132f42022-05-12 11:05:40 +01004332
4333 lines =<< trim END
4334 assert_equal("4", substitute("3", '\d', '\="text" x', 'g'))
4335 END
4336 v9.CheckDefAndScriptFailure(lines, 'E488: Trailing characters: x')
Bram Moolenaar1328bde2021-06-05 20:51:38 +02004337enddef
4338
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004339def Test_swapinfo()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004340 v9.CheckDefAndScriptFailure(['swapinfo({})'], ['E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 1'])
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +02004341 call swapinfo('x')->assert_equal({error: 'Cannot open file'})
4342 call swapinfo('')->assert_equal({error: 'Cannot open file'})
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004343enddef
4344
4345def Test_swapname()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004346 v9.CheckDefAndScriptFailure(['swapname([])'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004347 assert_fails('swapname("NonExistingBuf")', 'E94:')
4348enddef
4349
Bram Moolenaar94738d82020-10-21 14:25:07 +02004350def Test_synID()
4351 new
4352 setline(1, "text")
4353 synID(1, 1, true)->assert_equal(0)
4354 bwipe!
Bram Moolenaar62aec932022-01-29 21:45:34 +00004355 v9.CheckDefAndScriptFailure(['synID(0z10, 1, true)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1'])
4356 v9.CheckDefAndScriptFailure(['synID("a", true, false)'], ['E1013: Argument 2: type mismatch, expected number but got bool', 'E1210: Number required for argument 2'])
4357 v9.CheckDefAndScriptFailure(['synID(1, 1, 2)'], ['E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3'])
4358 v9.CheckDefExecAndScriptFailure(['synID("", 10, true)'], 'E1209: Invalid value for a line number')
Bram Moolenaar94738d82020-10-21 14:25:07 +02004359enddef
4360
Yegappan Lakshmanan7973de32021-07-24 16:16:15 +02004361def Test_synIDattr()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004362 v9.CheckDefAndScriptFailure(['synIDattr("a", "b")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
4363 v9.CheckDefAndScriptFailure(['synIDattr(1, 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
4364 v9.CheckDefAndScriptFailure(['synIDattr(1, "b", 3)'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3'])
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01004365 synIDattr(1, '', '')->assert_equal('')
Yegappan Lakshmanan7973de32021-07-24 16:16:15 +02004366enddef
4367
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004368def Test_synIDtrans()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004369 v9.CheckDefAndScriptFailure(['synIDtrans("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004370enddef
4371
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02004372def Test_synconcealed()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004373 v9.CheckDefAndScriptFailure(['synconcealed(0z10, 1)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1'])
4374 v9.CheckDefAndScriptFailure(['synconcealed(1, "a")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +02004375 if has('conceal')
Bram Moolenaar62aec932022-01-29 21:45:34 +00004376 v9.CheckDefExecAndScriptFailure(['synconcealed("", 4)'], 'E1209: Invalid value for a line number')
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +02004377 endif
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02004378enddef
4379
4380def Test_synstack()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004381 v9.CheckDefAndScriptFailure(['synstack(0z10, 1)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1'])
4382 v9.CheckDefAndScriptFailure(['synstack(1, "a")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
4383 v9.CheckDefExecAndScriptFailure(['synstack("", 4)'], 'E1209: Invalid value for a line number')
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02004384enddef
4385
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02004386def Test_system()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004387 v9.CheckDefAndScriptFailure(['system(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
4388 v9.CheckDefAndScriptFailure(['system("a", {})'], ['E1013: Argument 2: type mismatch, expected string but got dict<unknown>', 'E1224: String, Number or List required for argument 2'])
Yegappan Lakshmanan7e6a2a62021-07-28 11:51:48 +02004389 assert_equal("123\n", system('echo 123'))
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02004390enddef
4391
4392def Test_systemlist()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004393 v9.CheckDefAndScriptFailure(['systemlist(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
4394 v9.CheckDefAndScriptFailure(['systemlist("a", {})'], ['E1013: Argument 2: type mismatch, expected string but got dict<unknown>', 'E1224: String, Number or List required for argument 2'])
Yegappan Lakshmanan7e6a2a62021-07-28 11:51:48 +02004395 if has('win32')
4396 call assert_equal(["123\r"], systemlist('echo 123'))
4397 else
4398 call assert_equal(['123'], systemlist('echo 123'))
4399 endif
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02004400enddef
4401
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004402def Test_tabpagebuflist()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004403 v9.CheckDefAndScriptFailure(['tabpagebuflist("t")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004404 assert_equal([bufnr('')], tabpagebuflist())
4405 assert_equal([bufnr('')], tabpagebuflist(1))
Bram Moolenaar82e46e52022-02-05 18:12:34 +00004406 assert_equal(['x'], tabpagebuflist()->map((_, _) => 'x'))
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004407enddef
4408
4409def Test_tabpagenr()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004410 v9.CheckDefAndScriptFailure(['tabpagenr(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
4411 v9.CheckDefExecAndScriptFailure(['tabpagenr("")'], 'E15: Invalid expression')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004412 assert_equal(1, tabpagenr('$'))
4413 assert_equal(1, tabpagenr())
4414enddef
4415
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02004416def Test_tabpagewinnr()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004417 v9.CheckDefAndScriptFailure(['tabpagewinnr("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
4418 v9.CheckDefAndScriptFailure(['tabpagewinnr(1, 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
4419 v9.CheckDefExecAndScriptFailure(['tabpagewinnr(1, "")'], 'E15: Invalid expression')
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02004420enddef
4421
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004422def Test_taglist()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004423 v9.CheckDefAndScriptFailure(['taglist([1])'], ['E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1'])
4424 v9.CheckDefAndScriptFailure(['taglist("a", [2])'], ['E1013: Argument 2: type mismatch, expected string but got list<number>', 'E1174: String required for argument 2'])
Yegappan Lakshmananf8dbd582021-09-26 19:04:05 +01004425 taglist('')->assert_equal(0)
4426 taglist('', '')->assert_equal(0)
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004427enddef
4428
4429def Test_term_dumpload()
4430 CheckRunVimInTerminal
Bram Moolenaar62aec932022-01-29 21:45:34 +00004431 v9.CheckDefAndScriptFailure(['term_dumpload({"a": 10})'], ['E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1'])
4432 v9.CheckDefAndScriptFailure(['term_dumpload({"a": 10}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1'])
4433 v9.CheckDefAndScriptFailure(['term_dumpload("a", ["b"])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<string>', 'E1206: Dictionary required for argument 2'])
4434 v9.CheckDefExecAndScriptFailure(['term_dumpload("")'], 'E485: Can''t read file')
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004435enddef
4436
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02004437def Test_term_dumpdiff()
4438 CheckRunVimInTerminal
Bram Moolenaar62aec932022-01-29 21:45:34 +00004439 v9.CheckDefAndScriptFailure(['term_dumpdiff(1, "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
4440 v9.CheckDefAndScriptFailure(['term_dumpdiff("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
4441 v9.CheckDefAndScriptFailure(['term_dumpdiff("a", "b", [1])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3'])
4442 v9.CheckDefExecAndScriptFailure(['term_dumpdiff("", "")'], 'E485: Can''t read file')
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02004443enddef
4444
4445def Test_term_dumpwrite()
4446 CheckRunVimInTerminal
Bram Moolenaar62aec932022-01-29 21:45:34 +00004447 v9.CheckDefAndScriptFailure(['term_dumpwrite(true, "b")'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1'])
4448 v9.CheckDefAndScriptFailure(['term_dumpwrite(1, 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
4449 v9.CheckDefAndScriptFailure(['term_dumpwrite("a", "b", [1])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3'])
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02004450enddef
4451
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004452def Test_term_getaltscreen()
4453 CheckRunVimInTerminal
Bram Moolenaar62aec932022-01-29 21:45:34 +00004454 v9.CheckDefAndScriptFailure(['term_getaltscreen(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004455enddef
4456
4457def Test_term_getansicolors()
4458 CheckRunVimInTerminal
Dominique Pelleee410522021-07-12 22:15:24 +02004459 CheckFeature termguicolors
Bram Moolenaar62aec932022-01-29 21:45:34 +00004460 v9.CheckDefAndScriptFailure(['term_getansicolors(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1220: String or Number required for argument 1'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004461enddef
4462
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02004463def Test_term_getattr()
4464 CheckRunVimInTerminal
Bram Moolenaar62aec932022-01-29 21:45:34 +00004465 v9.CheckDefAndScriptFailure(['term_getattr("x", "a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
4466 v9.CheckDefAndScriptFailure(['term_getattr(1, 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02004467enddef
4468
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004469def Test_term_getcursor()
4470 CheckRunVimInTerminal
Bram Moolenaar62aec932022-01-29 21:45:34 +00004471 v9.CheckDefAndScriptFailure(['term_getcursor({"a": 10})'], ['E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1220: String or Number required for argument 1'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004472enddef
4473
4474def Test_term_getjob()
4475 CheckRunVimInTerminal
Bram Moolenaar62aec932022-01-29 21:45:34 +00004476 v9.CheckDefAndScriptFailure(['term_getjob(0z10)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004477enddef
4478
Yegappan Lakshmanancd917202021-07-21 19:09:09 +02004479def Test_term_getline()
4480 CheckRunVimInTerminal
Bram Moolenaar62aec932022-01-29 21:45:34 +00004481 v9.CheckDefAndScriptFailure(['term_getline(1.1, 1)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1'])
4482 v9.CheckDefAndScriptFailure(['term_getline(1, 1.1)'], ['E1013: Argument 2: type mismatch, expected string but got float', 'E1220: String or Number required for argument 2'])
Yegappan Lakshmanancd917202021-07-21 19:09:09 +02004483enddef
4484
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004485def Test_term_getscrolled()
4486 CheckRunVimInTerminal
Bram Moolenaar62aec932022-01-29 21:45:34 +00004487 v9.CheckDefAndScriptFailure(['term_getscrolled(1.1)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004488enddef
4489
4490def Test_term_getsize()
4491 CheckRunVimInTerminal
Bram Moolenaar62aec932022-01-29 21:45:34 +00004492 v9.CheckDefAndScriptFailure(['term_getsize(1.1)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004493enddef
4494
4495def Test_term_getstatus()
4496 CheckRunVimInTerminal
Bram Moolenaar62aec932022-01-29 21:45:34 +00004497 v9.CheckDefAndScriptFailure(['term_getstatus(1.1)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004498enddef
4499
4500def Test_term_gettitle()
4501 CheckRunVimInTerminal
Bram Moolenaar62aec932022-01-29 21:45:34 +00004502 v9.CheckDefAndScriptFailure(['term_gettitle(1.1)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004503enddef
4504
Bram Moolenaar94738d82020-10-21 14:25:07 +02004505def Test_term_gettty()
4506 if !has('terminal')
Dominique Pelle9ff9c7b2021-07-18 21:44:37 +02004507 CheckFeature terminal
Bram Moolenaar94738d82020-10-21 14:25:07 +02004508 else
Bram Moolenaar62aec932022-01-29 21:45:34 +00004509 var buf = g:Run_shell_in_terminal({})
Bram Moolenaar94738d82020-10-21 14:25:07 +02004510 term_gettty(buf, true)->assert_notequal('')
Bram Moolenaar62aec932022-01-29 21:45:34 +00004511 g:StopShellInTerminal(buf)
Bram Moolenaar94738d82020-10-21 14:25:07 +02004512 endif
Bram Moolenaar62aec932022-01-29 21:45:34 +00004513 v9.CheckDefAndScriptFailure(['term_gettty([1])'], ['E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1'])
4514 v9.CheckDefAndScriptFailure(['term_gettty(1, 2)'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2'])
Bram Moolenaar94738d82020-10-21 14:25:07 +02004515enddef
4516
Yegappan Lakshmanancd917202021-07-21 19:09:09 +02004517def Test_term_scrape()
4518 CheckRunVimInTerminal
Bram Moolenaar62aec932022-01-29 21:45:34 +00004519 v9.CheckDefAndScriptFailure(['term_scrape(1.1, 1)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1'])
4520 v9.CheckDefAndScriptFailure(['term_scrape(1, 1.1)'], ['E1013: Argument 2: type mismatch, expected string but got float', 'E1220: String or Number required for argument 2'])
Yegappan Lakshmanancd917202021-07-21 19:09:09 +02004521enddef
4522
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02004523def Test_term_sendkeys()
4524 CheckRunVimInTerminal
Bram Moolenaar62aec932022-01-29 21:45:34 +00004525 v9.CheckDefAndScriptFailure(['term_sendkeys([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
4526 v9.CheckDefAndScriptFailure(['term_sendkeys(1, [])'], ['E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2'])
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02004527enddef
4528
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02004529def Test_term_setansicolors()
4530 CheckRunVimInTerminal
Dominique Pelle2ec28ae2021-07-25 15:41:44 +02004531
4532 if has('termguicolors') || has('gui')
Bram Moolenaar62aec932022-01-29 21:45:34 +00004533 v9.CheckDefAndScriptFailure(['term_setansicolors([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
4534 v9.CheckDefAndScriptFailure(['term_setansicolors(10, {})'], ['E1013: Argument 2: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 2'])
Dominique Pelle2ec28ae2021-07-25 15:41:44 +02004535 else
4536 throw 'Skipped: Only works with termguicolors or gui feature'
4537 endif
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02004538enddef
4539
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02004540def Test_term_setapi()
4541 CheckRunVimInTerminal
Bram Moolenaar62aec932022-01-29 21:45:34 +00004542 v9.CheckDefAndScriptFailure(['term_setapi([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
4543 v9.CheckDefAndScriptFailure(['term_setapi(1, [])'], ['E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2'])
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02004544enddef
4545
4546def Test_term_setkill()
4547 CheckRunVimInTerminal
Bram Moolenaar62aec932022-01-29 21:45:34 +00004548 v9.CheckDefAndScriptFailure(['term_setkill([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
4549 v9.CheckDefAndScriptFailure(['term_setkill(1, [])'], ['E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2'])
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02004550enddef
4551
4552def Test_term_setrestore()
4553 CheckRunVimInTerminal
Bram Moolenaar62aec932022-01-29 21:45:34 +00004554 v9.CheckDefAndScriptFailure(['term_setrestore([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
4555 v9.CheckDefAndScriptFailure(['term_setrestore(1, [])'], ['E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2'])
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02004556enddef
Yegappan Lakshmanancd917202021-07-21 19:09:09 +02004557
4558def Test_term_setsize()
4559 CheckRunVimInTerminal
Bram Moolenaar62aec932022-01-29 21:45:34 +00004560 v9.CheckDefAndScriptFailure(['term_setsize(1.1, 2, 3)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1'])
4561 v9.CheckDefAndScriptFailure(['term_setsize(1, "2", 3)'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
4562 v9.CheckDefAndScriptFailure(['term_setsize(1, 2, "3")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
Yegappan Lakshmanancd917202021-07-21 19:09:09 +02004563enddef
4564
Bram Moolenaar94738d82020-10-21 14:25:07 +02004565def Test_term_start()
4566 if !has('terminal')
Dominique Pelle9ff9c7b2021-07-18 21:44:37 +02004567 CheckFeature terminal
Bram Moolenaar94738d82020-10-21 14:25:07 +02004568 else
4569 botright new
4570 var winnr = winnr()
Bram Moolenaare0de1712020-12-02 17:36:54 +01004571 term_start(&shell, {curwin: true})
Bram Moolenaar94738d82020-10-21 14:25:07 +02004572 winnr()->assert_equal(winnr)
4573 bwipe!
4574 endif
Bram Moolenaar62aec932022-01-29 21:45:34 +00004575 v9.CheckDefAndScriptFailure(['term_start({})'], ['E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1222: String or List required for argument 1'])
4576 v9.CheckDefAndScriptFailure(['term_start([], [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2'])
4577 v9.CheckDefAndScriptFailure(['term_start("", "")'], ['E1013: Argument 2: type mismatch, expected dict<any> but got string', 'E1206: Dictionary required for argument 2'])
4578 v9.CheckDefExecAndScriptFailure(['term_start("")'], 'E474: Invalid argument')
Bram Moolenaar94738d82020-10-21 14:25:07 +02004579enddef
4580
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02004581def Test_term_wait()
4582 CheckRunVimInTerminal
Bram Moolenaar62aec932022-01-29 21:45:34 +00004583 v9.CheckDefAndScriptFailure(['term_wait(0z10, 1)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1'])
4584 v9.CheckDefAndScriptFailure(['term_wait(1, "a")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
Yegappan Lakshmanana9a7c0c2021-07-17 19:11:07 +02004585enddef
4586
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004587def Test_test_alloc_fail()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004588 v9.CheckDefAndScriptFailure(['test_alloc_fail("a", 10, 20)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
4589 v9.CheckDefAndScriptFailure(['test_alloc_fail(10, "b", 20)'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
4590 v9.CheckDefAndScriptFailure(['test_alloc_fail(10, 20, "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004591enddef
4592
4593def Test_test_feedinput()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004594 v9.CheckDefAndScriptFailure(['test_feedinput(test_void())'], ['E1013: Argument 1: type mismatch, expected string but got void', 'E1174: String required for argument 1'])
4595 v9.CheckDefAndScriptFailure(['test_feedinput(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004596enddef
4597
4598def Test_test_getvalue()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004599 v9.CheckDefAndScriptFailure(['test_getvalue(1.1)'], ['E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004600enddef
4601
Yegappan Lakshmanan06011e12022-01-30 12:37:29 +00004602def Test_test_gui_event()
Yegappan Lakshmanan5bca9062021-07-24 21:33:26 +02004603 CheckGui
Yegappan Lakshmanan06011e12022-01-30 12:37:29 +00004604 v9.CheckDefAndScriptFailure(['test_gui_event([], {})'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1'])
4605 v9.CheckDefAndScriptFailure(['test_gui_event("abc", 1)'], ['E1013: Argument 2: type mismatch, expected dict<any> but got number', 'E1206: Dictionary required for argument 2'])
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02004606enddef
4607
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004608def Test_test_ignore_error()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004609 v9.CheckDefAndScriptFailure(['test_ignore_error([])'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004610 test_ignore_error('RESET')
4611enddef
4612
4613def Test_test_option_not_set()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004614 v9.CheckDefAndScriptFailure(['test_option_not_set([])'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004615enddef
4616
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02004617def Test_test_override()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004618 v9.CheckDefAndScriptFailure(['test_override(1, 1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
4619 v9.CheckDefAndScriptFailure(['test_override("a", "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02004620enddef
4621
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004622def Test_test_setmouse()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004623 v9.CheckDefAndScriptFailure(['test_setmouse("a", 10)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
4624 v9.CheckDefAndScriptFailure(['test_setmouse(10, "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004625enddef
4626
4627def Test_test_settime()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004628 v9.CheckDefAndScriptFailure(['test_settime([1])'], ['E1013: Argument 1: type mismatch, expected number but got list<number>', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004629enddef
4630
4631def Test_test_srand_seed()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004632 v9.CheckDefAndScriptFailure(['test_srand_seed([1])'], ['E1013: Argument 1: type mismatch, expected number but got list<number>', 'E1210: Number required for argument 1'])
4633 v9.CheckDefAndScriptFailure(['test_srand_seed("10")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004634enddef
4635
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004636def Test_timer_info()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004637 v9.CheckDefAndScriptFailure(['timer_info("id")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004638 assert_equal([], timer_info(100))
Bram Moolenaara9b0f8f2022-09-23 21:01:54 +01004639 assert_equal([], timer_info()->filter((_, t) => t.callback->string() !~ 'TestTimeout'))
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004640enddef
4641
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02004642def Test_timer_pause()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004643 v9.CheckDefAndScriptFailure(['timer_pause("x", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
4644 v9.CheckDefAndScriptFailure(['timer_pause(1, "a")'], ['E1013: Argument 2: type mismatch, expected bool but got string', 'E1212: Bool required for argument 2'])
Yegappan Lakshmanan83494b42021-07-20 17:51:51 +02004645enddef
4646
Bram Moolenaar94738d82020-10-21 14:25:07 +02004647def Test_timer_paused()
Bram Moolenaar2949cfd2020-12-31 21:28:47 +01004648 var id = timer_start(50, () => 0)
Bram Moolenaar94738d82020-10-21 14:25:07 +02004649 timer_pause(id, true)
4650 var info = timer_info(id)
4651 info[0]['paused']->assert_equal(1)
4652 timer_stop(id)
4653enddef
4654
Yegappan Lakshmanan7973de32021-07-24 16:16:15 +02004655def Test_timer_start()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004656 v9.CheckDefAndScriptFailure(['timer_start("a", "1")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
4657 v9.CheckDefAndScriptFailure(['timer_start(1, "1", [1])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3'])
4658 v9.CheckDefExecAndScriptFailure(['timer_start(100, 0)'], 'E921:')
4659 v9.CheckDefExecAndScriptFailure(['timer_start(100, "")'], 'E921:')
Yegappan Lakshmanan7973de32021-07-24 16:16:15 +02004660enddef
4661
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004662def Test_timer_stop()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004663 v9.CheckDefAndScriptFailure(['timer_stop("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004664 assert_equal(0, timer_stop(100))
4665enddef
4666
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02004667def Test_tolower()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004668 v9.CheckDefAndScriptFailure(['tolower(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02004669 tolower('')->assert_equal('')
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02004670enddef
4671
4672def Test_toupper()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004673 v9.CheckDefAndScriptFailure(['toupper(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02004674 toupper('')->assert_equal('')
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02004675enddef
4676
4677def Test_tr()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004678 v9.CheckDefAndScriptFailure(['tr(1, "a", "b")'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
4679 v9.CheckDefAndScriptFailure(['tr("a", 1, "b")'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
4680 v9.CheckDefAndScriptFailure(['tr("a", "a", 1)'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3'])
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02004681 tr('', '', '')->assert_equal('')
4682 tr('ab', '', '')->assert_equal('ab')
4683 assert_fails("tr('ab', 'ab', '')", 'E475:')
4684 assert_fails("tr('ab', '', 'AB')", 'E475:')
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004685enddef
4686
4687def Test_trim()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004688 v9.CheckDefAndScriptFailure(['trim(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1'])
4689 v9.CheckDefAndScriptFailure(['trim("a", ["b"])'], ['E1013: Argument 2: type mismatch, expected string but got list<string>', 'E1174: String required for argument 2'])
4690 v9.CheckDefAndScriptFailure(['trim("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02004691 trim('')->assert_equal('')
4692 trim('', '')->assert_equal('')
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02004693enddef
4694
Bram Moolenaar9da32e42021-07-09 19:53:57 +02004695def Test_typename()
Bram Moolenaar73e28dc2022-09-17 21:08:33 +01004696 assert_equal('func([unknown], [unknown]): float', typename(function('pow')))
Bram Moolenaared0c62e2022-03-08 19:43:55 +00004697 assert_equal('func(...): unknown', test_null_partial()->typename())
Bram Moolenaarc8103b42021-08-28 14:58:44 +02004698 assert_equal('list<unknown>', test_null_list()->typename())
4699 assert_equal('dict<unknown>', test_null_dict()->typename())
4700 if has('job')
4701 assert_equal('job', test_null_job()->typename())
4702 endif
4703 if has('channel')
4704 assert_equal('channel', test_null_channel()->typename())
4705 endif
Bram Moolenaar9da32e42021-07-09 19:53:57 +02004706enddef
4707
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004708def Test_undofile()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004709 v9.CheckDefAndScriptFailure(['undofile(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004710 assert_equal('.abc.un~', fnamemodify(undofile('abc'), ':t'))
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +02004711 undofile('')->assert_equal('')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004712enddef
4713
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02004714def Test_uniq()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004715 v9.CheckDefAndScriptFailure(['uniq("a")'], ['E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1211: List required for argument 1'])
4716 v9.CheckDefAndScriptFailure(['uniq([1], "", [1])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3'])
Bram Moolenaar08018222021-12-22 18:45:37 +00004717
Bram Moolenaar62aec932022-01-29 21:45:34 +00004718 v9.CheckDefFailure(['var l: list<number> = uniq(["a", "b"])'], 'E1012: Type mismatch; expected list<number> but got list<string>')
Yegappan Lakshmanan0ad871d2021-07-23 20:37:56 +02004719enddef
4720
Bram Moolenaara5d1a672022-09-30 17:57:47 +01004721def Test_uniq_const()
4722 var lines =<< trim END
4723 const l = [1, 2, 3, 4]
4724 uniq(l)
4725 END
4726 v9.CheckDefFailure(lines, 'E1307: Argument 1: Trying to modify a const list<number>')
4727enddef
4728
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004729def Test_values()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004730 v9.CheckDefAndScriptFailure(['values([])'], ['E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004731 assert_equal([], {}->values())
4732 assert_equal(['sun'], {star: 'sun'}->values())
4733enddef
4734
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004735def Test_virtcol()
LemonBoy0f7a3e12022-05-26 12:10:37 +01004736 v9.CheckDefAndScriptFailure(['virtcol(1.1)'], [
4737 'E1013: Argument 1: type mismatch, expected string but got float',
4738 'E1222: String or List required for argument 1'])
4739 v9.CheckDefAndScriptFailure(['virtcol(".", "a")'], [
4740 'E1013: Argument 2: type mismatch, expected bool but got string',
4741 'E1212: Bool required for argument 2'])
4742 v9.CheckDefExecAndScriptFailure(['virtcol("")'],
4743 'E1209: Invalid value for a line number')
Yegappan Lakshmananc72bdd22021-07-11 19:44:18 +02004744 new
LemonBoy0f7a3e12022-05-26 12:10:37 +01004745 setline(1, ['abcde和平fgh'])
Yegappan Lakshmananc72bdd22021-07-11 19:44:18 +02004746 cursor(1, 4)
4747 assert_equal(4, virtcol('.'))
LemonBoy0f7a3e12022-05-26 12:10:37 +01004748 assert_equal([4, 4], virtcol('.', 1))
4749 cursor(1, 6)
4750 assert_equal([6, 7], virtcol('.', 1))
Yegappan Lakshmanan841e4982021-07-11 22:04:25 +02004751 assert_equal(4, virtcol([1, 4]))
LemonBoy0f7a3e12022-05-26 12:10:37 +01004752 assert_equal(13, virtcol([1, '$']))
Yegappan Lakshmananc72bdd22021-07-11 19:44:18 +02004753 assert_equal(0, virtcol([10, '$']))
4754 bw!
Yegappan Lakshmanan5b739922021-07-10 13:15:41 +02004755enddef
4756
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02004757def Test_visualmode()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004758 v9.CheckDefAndScriptFailure(['visualmode("1")'], ['E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1'])
4759 v9.CheckDefAndScriptFailure(['visualmode(2)'], ['E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02004760enddef
4761
Bram Moolenaar37487e12021-01-12 22:08:53 +01004762def Test_win_execute()
4763 assert_equal("\n" .. winnr(), win_execute(win_getid(), 'echo winnr()'))
Bram Moolenaar52312242021-07-11 18:23:19 +02004764 assert_equal("\n" .. winnr(), 'echo winnr()'->win_execute(win_getid()))
4765 assert_equal("\n" .. winnr(), win_execute(win_getid(), 'echo winnr()', 'silent'))
Bram Moolenaar37487e12021-01-12 22:08:53 +01004766 assert_equal('', win_execute(342343, 'echo winnr()'))
Bram Moolenaar62aec932022-01-29 21:45:34 +00004767 v9.CheckDefAndScriptFailure(['win_execute("a", "b", "c")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
4768 v9.CheckDefAndScriptFailure(['win_execute(1, 2, "c")'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1222: String or List required for argument 2'])
4769 v9.CheckDefAndScriptFailure(['win_execute(1, "b", 3)'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3'])
Bram Moolenaar37487e12021-01-12 22:08:53 +01004770enddef
4771
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004772def Test_win_findbuf()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004773 v9.CheckDefAndScriptFailure(['win_findbuf("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004774 assert_equal([], win_findbuf(1000))
4775 assert_equal([win_getid()], win_findbuf(bufnr('')))
4776enddef
4777
4778def Test_win_getid()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004779 v9.CheckDefAndScriptFailure(['win_getid(".")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
4780 v9.CheckDefAndScriptFailure(['win_getid(1, ".")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004781 assert_equal(win_getid(), win_getid(1, 1))
4782enddef
4783
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02004784def Test_win_gettype()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004785 v9.CheckDefAndScriptFailure(['win_gettype("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02004786enddef
4787
4788def Test_win_gotoid()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004789 v9.CheckDefAndScriptFailure(['win_gotoid("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02004790enddef
4791
Bram Moolenaar3aca0912022-04-18 18:32:19 +01004792func Test_win_gotoid_in_mapping()
4793 CheckScreendump
4794
Bram Moolenaar861fcee2022-04-18 19:16:55 +01004795 " requires a working clipboard and this doesn't work on MacOS
4796 if has('clipboard_working') && !has('mac')
Bram Moolenaar3aca0912022-04-18 18:32:19 +01004797 let @* = 'foo'
4798 let lines =<< trim END
4799 set cmdheight=2
4800 func On_click()
4801 call win_gotoid(getmousepos().winid)
4802 execute "norm! \<LeftMouse>"
4803 endfunc
4804 noremap <LeftMouse> <Cmd>call On_click()<CR>
4805
4806 autocmd SafeState * echo 'reg = "' .. @* .. '"'
4807
4808 call setline(1, range(20))
4809 set nomodified
4810 botright new
4811 call setline(1, range(21, 40))
4812 set nomodified
4813
4814 func Click()
4815 map <silent> <F3> :call test_setmouse(3, 1)<CR>
4816 call feedkeys("\<F3>\<LeftMouse>\<LeftRelease>", "xt")
4817 endfunc
4818 END
Bram Moolenaar0e9bdad2022-10-15 20:06:33 +01004819 call writefile(lines, 'Xgotoscript', 'D')
Bram Moolenaar3aca0912022-04-18 18:32:19 +01004820 let buf = RunVimInTerminal('-S Xgotoscript', #{rows: 15, wait_for_ruler: 0})
Bram Moolenaar3e794272022-05-06 11:21:19 +01004821 " wait longer here, since we didn't wait for the ruler
4822 call VerifyScreenDump(buf, 'Test_win_gotoid_1', #{wait: 3000})
Bram Moolenaar3aca0912022-04-18 18:32:19 +01004823 call term_sendkeys(buf, "3Gvl")
4824 call VerifyScreenDump(buf, 'Test_win_gotoid_2', {})
4825
4826 call term_sendkeys(buf, ":call Click()\<CR>")
4827 call VerifyScreenDump(buf, 'Test_win_gotoid_3', {})
4828
4829 call StopVimInTerminal(buf)
Bram Moolenaar3aca0912022-04-18 18:32:19 +01004830 endif
4831endfunc
4832
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02004833def Test_win_id2tabwin()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004834 v9.CheckDefAndScriptFailure(['win_id2tabwin("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02004835enddef
4836
4837def Test_win_id2win()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004838 v9.CheckDefAndScriptFailure(['win_id2win("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02004839enddef
4840
4841def Test_win_screenpos()
Bram Moolenaar82e46e52022-02-05 18:12:34 +00004842 assert_equal(['x', 'x'], win_screenpos(1)->map((_, _) => 'x'))
4843
Bram Moolenaar62aec932022-01-29 21:45:34 +00004844 v9.CheckDefAndScriptFailure(['win_screenpos("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02004845enddef
4846
Bram Moolenaar94738d82020-10-21 14:25:07 +02004847def Test_win_splitmove()
4848 split
Bram Moolenaare0de1712020-12-02 17:36:54 +01004849 win_splitmove(1, 2, {vertical: true, rightbelow: true})
Bram Moolenaar94738d82020-10-21 14:25:07 +02004850 close
Bram Moolenaar62aec932022-01-29 21:45:34 +00004851 v9.CheckDefAndScriptFailure(['win_splitmove("a", 2)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
4852 v9.CheckDefAndScriptFailure(['win_splitmove(1, "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
4853 v9.CheckDefAndScriptFailure(['win_splitmove(1, 2, [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3'])
Bram Moolenaar94738d82020-10-21 14:25:07 +02004854enddef
4855
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02004856def Test_winbufnr()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004857 v9.CheckDefAndScriptFailure(['winbufnr("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02004858enddef
4859
4860def Test_winheight()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004861 v9.CheckDefAndScriptFailure(['winheight("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02004862enddef
4863
4864def Test_winlayout()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004865 v9.CheckDefAndScriptFailure(['winlayout("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan1a71d312021-07-15 12:49:58 +02004866enddef
4867
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004868def Test_winnr()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004869 v9.CheckDefAndScriptFailure(['winnr([])'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1'])
4870 v9.CheckDefExecAndScriptFailure(['winnr("")'], 'E15: Invalid expression')
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004871 assert_equal(1, winnr())
4872 assert_equal(1, winnr('$'))
4873enddef
4874
Bram Moolenaar285b15f2020-12-29 20:25:19 +01004875def Test_winrestcmd()
4876 split
4877 var cmd = winrestcmd()
4878 wincmd _
4879 exe cmd
4880 assert_equal(cmd, winrestcmd())
4881 close
4882enddef
4883
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004884def Test_winrestview()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004885 v9.CheckDefAndScriptFailure(['winrestview([])'], ['E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1'])
Yegappan Lakshmanana26f56f2021-07-03 11:58:12 +02004886 :%d _
4887 setline(1, 'Hello World')
4888 winrestview({lnum: 1, col: 6})
4889 assert_equal([1, 7], [line('.'), col('.')])
4890enddef
4891
Bram Moolenaar43b69b32021-01-07 20:23:33 +01004892def Test_winsaveview()
4893 var view: dict<number> = winsaveview()
4894
4895 var lines =<< trim END
4896 var view: list<number> = winsaveview()
4897 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00004898 v9.CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected list<number> but got dict<number>', 1)
Bram Moolenaar43b69b32021-01-07 20:23:33 +01004899enddef
4900
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02004901def Test_winwidth()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004902 v9.CheckDefAndScriptFailure(['winwidth("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02004903enddef
4904
4905def Test_xor()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004906 v9.CheckDefAndScriptFailure(['xor("x", 0x2)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
4907 v9.CheckDefAndScriptFailure(['xor(0x1, "x")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
Yegappan Lakshmanan7237cab2021-06-22 19:52:27 +02004908enddef
Bram Moolenaar94738d82020-10-21 14:25:07 +02004909
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +02004910def Test_writefile()
Bram Moolenaar62aec932022-01-29 21:45:34 +00004911 v9.CheckDefExecAndScriptFailure(['writefile(["a"], "")'], 'E482: Can''t create file <empty>')
Yegappan Lakshmananfc3b7752021-09-08 14:57:42 +02004912enddef
4913
Bram Moolenaar94738d82020-10-21 14:25:07 +02004914" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker