comparison src/testdir/test_vim9_builtin.vim @ 25252:acda780ffc3e v8.2.3162

patch 8.2.3162: Vim9: argument types are not checked at compile time Commit: https://github.com/vim/vim/commit/1a71d31bf34b0b2b08517903826004ec6fd440e5 Author: Yegappan Lakshmanan <yegappan@yahoo.com> Date: Thu Jul 15 12:49:58 2021 +0200 patch 8.2.3162: Vim9: argument types are not checked at compile time Problem: Vim9: argument types are not checked at compile time. Solution: Add more type checks. (Yegappan Lakshmanan, closes https://github.com/vim/vim/issues/8560)
author Bram Moolenaar <Bram@vim.org>
date Thu, 15 Jul 2021 13:00:06 +0200
parents 532faf893d37
children a3c07227ffde
comparison
equal deleted inserted replaced
25251:6024f64e0d2b 25252:acda780ffc3e
73 assert_equal(2.0, abs(-2.0)) 73 assert_equal(2.0, abs(-2.0))
74 assert_equal(3.0, abs(3.0)) 74 assert_equal(3.0, abs(3.0))
75 endif 75 endif
76 enddef 76 enddef
77 77
78 def Test_add_blob()
79 var b1: blob = 0z12
80 add(b1, 0x34)
81 assert_equal(0z1234, b1)
82
83 var b2: blob # defaults to empty blob
84 add(b2, 0x67)
85 assert_equal(0z67, b2)
86
87 var lines =<< trim END
88 var b: blob
89 add(b, "x")
90 END
91 CheckDefFailure(lines, 'E1012:', 2)
92
93 lines =<< trim END
94 add(test_null_blob(), 123)
95 END
96 CheckDefExecAndScriptFailure(lines, 'E1131:', 1)
97
98 lines =<< trim END
99 var b: blob = test_null_blob()
100 add(b, 123)
101 END
102 CheckDefExecFailure(lines, 'E1131:', 2)
103
104 # Getting variable with NULL blob allocates a new blob at script level
105 lines =<< trim END
106 vim9script
107 var b: blob = test_null_blob()
108 add(b, 123)
109 END
110 CheckScriptSuccess(lines)
111 enddef
112
78 def Test_add_list() 113 def Test_add_list()
79 var l: list<number> # defaults to empty list 114 var l: list<number> # defaults to empty list
80 add(l, 9) 115 add(l, 9)
81 assert_equal([9], l) 116 assert_equal([9], l)
82 117
116 vim9script 151 vim9script
117 var l: list<string> 152 var l: list<string>
118 l->add(123) 153 l->add(123)
119 END 154 END
120 CheckScriptFailure(lines, 'E1012: Type mismatch; expected string but got number', 3) 155 CheckScriptFailure(lines, 'E1012: Type mismatch; expected string but got number', 3)
121 enddef
122
123 def Test_add_blob()
124 var b1: blob = 0z12
125 add(b1, 0x34)
126 assert_equal(0z1234, b1)
127
128 var b2: blob # defaults to empty blob
129 add(b2, 0x67)
130 assert_equal(0z67, b2)
131
132 var lines =<< trim END
133 var b: blob
134 add(b, "x")
135 END
136 CheckDefFailure(lines, 'E1012:', 2)
137
138 lines =<< trim END
139 add(test_null_blob(), 123)
140 END
141 CheckDefExecAndScriptFailure(lines, 'E1131:', 1)
142
143 lines =<< trim END
144 var b: blob = test_null_blob()
145 add(b, 123)
146 END
147 CheckDefExecFailure(lines, 'E1131:', 2)
148
149 # Getting variable with NULL blob allocates a new blob at script level
150 lines =<< trim END
151 vim9script
152 var b: blob = test_null_blob()
153 add(b, 123)
154 END
155 CheckScriptSuccess(lines)
156 enddef 156 enddef
157 157
158 def Test_and() 158 def Test_and()
159 CheckDefAndScriptFailure2(['and("x", 0x2)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number') 159 CheckDefAndScriptFailure2(['and("x", 0x2)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number')
160 CheckDefAndScriptFailure2(['and(0x1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1030: Using a String as a Number') 160 CheckDefAndScriptFailure2(['and(0x1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1030: Using a String as a Number')
169 assert_equal(false, res2) 169 assert_equal(false, res2)
170 assert_equal(['0', 'one', '1', 'two', '2'], getline(1, 6)) 170 assert_equal(['0', 'one', '1', 'two', '2'], getline(1, 6))
171 171
172 append(0, 'zero') 172 append(0, 'zero')
173 assert_equal('zero', getline(1)) 173 assert_equal('zero', getline(1))
174 append(0, {a: 10})
175 assert_equal("{'a': 10}", getline(1))
176 append(0, function('min'))
177 assert_equal("function('min')", getline(1))
178 CheckDefAndScriptFailure2(['append([1], "x")'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E745: Using a List as a Number')
179 bwipe!
180 enddef
181
182 def Test_appendbufline()
183 new
184 var bnum: number = bufnr()
185 :wincmd w
186 appendbufline(bnum, 0, range(3))
187 var res1: number = appendbufline(bnum, 1, 'one')
188 assert_equal(0, res1)
189 var res2: bool = appendbufline(bnum, 3, 'two')
190 assert_equal(false, res2)
191 assert_equal(['0', 'one', '1', 'two', '2', ''], getbufline(bnum, 1, '$'))
192 appendbufline(bnum, 0, 'zero')
193 assert_equal(['zero'], getbufline(bnum, 1))
194 CheckDefFailure(['appendbufline([1], 1, "x")'], 'E1013: Argument 1: type mismatch, expected string but got list<number>')
195 CheckDefFailure(['appendbufline(1, [1], "x")'], 'E1013: Argument 2: type mismatch, expected string but got list<number>')
196 CheckDefFailure(['appendbufline(1, 1, {"a": 10})'], 'E1013: Argument 3: type mismatch, expected string but got dict<number>')
197 bnum->bufwinid()->win_gotoid()
174 bwipe! 198 bwipe!
175 enddef 199 enddef
176 200
177 def Test_argc() 201 def Test_argc()
178 CheckDefFailure(['argc("x")'], 'E1013: Argument 1: type mismatch, expected number but got string') 202 CheckDefFailure(['argc("x")'], 'E1013: Argument 1: type mismatch, expected number but got string')
188 CheckDefFailure(['argv("x")'], 'E1013: Argument 1: type mismatch, expected number but got string') 212 CheckDefFailure(['argv("x")'], 'E1013: Argument 1: type mismatch, expected number but got string')
189 CheckDefFailure(['argv(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string') 213 CheckDefFailure(['argv(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string')
190 CheckDefFailure(['argv("x", "y")'], 'E1013: Argument 1: type mismatch, expected number but got string') 214 CheckDefFailure(['argv("x", "y")'], 'E1013: Argument 1: type mismatch, expected number but got string')
191 enddef 215 enddef
192 216
217 def Test_assert_beeps()
218 CheckDefAndScriptFailure2(['assert_beeps(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
219 enddef
220
193 def Test_assert_equalfile() 221 def Test_assert_equalfile()
194 CheckDefFailure(['assert_equalfile(1, "f2")'], 'E1013: Argument 1: type mismatch, expected string but got number') 222 CheckDefFailure(['assert_equalfile(1, "f2")'], 'E1013: Argument 1: type mismatch, expected string but got number')
195 CheckDefFailure(['assert_equalfile("f1", true)'], 'E1013: Argument 2: type mismatch, expected string but got bool') 223 CheckDefFailure(['assert_equalfile("f1", true)'], 'E1013: Argument 2: type mismatch, expected string but got bool')
196 CheckDefFailure(['assert_equalfile("f1", "f2", ["a"])'], 'E1013: Argument 3: type mismatch, expected string but got list<string>') 224 CheckDefFailure(['assert_equalfile("f1", "f2", ["a"])'], 'E1013: Argument 3: type mismatch, expected string but got list<string>')
197 enddef 225 enddef
203 231
204 def Test_assert_match() 232 def Test_assert_match()
205 CheckDefFailure(['assert_match({}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<unknown>') 233 CheckDefFailure(['assert_match({}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<unknown>')
206 CheckDefFailure(['assert_match("a", 1)'], 'E1013: Argument 2: type mismatch, expected string but got number') 234 CheckDefFailure(['assert_match("a", 1)'], 'E1013: Argument 2: type mismatch, expected string but got number')
207 CheckDefFailure(['assert_match("a", "b", null)'], 'E1013: Argument 3: type mismatch, expected string but got special') 235 CheckDefFailure(['assert_match("a", "b", null)'], 'E1013: Argument 3: type mismatch, expected string but got special')
236 enddef
237
238 def Test_assert_nobeep()
239 CheckDefAndScriptFailure2(['assert_nobeep(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
208 enddef 240 enddef
209 241
210 def Test_assert_notmatch() 242 def Test_assert_notmatch()
211 CheckDefFailure(['assert_notmatch({}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<unknown>') 243 CheckDefFailure(['assert_notmatch({}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<unknown>')
212 CheckDefFailure(['assert_notmatch("a", 1)'], 'E1013: Argument 2: type mismatch, expected string but got number') 244 CheckDefFailure(['assert_notmatch("a", 1)'], 'E1013: Argument 2: type mismatch, expected string but got number')
326 CheckDefFailure(['byte2line("1")'], 'E1013: Argument 1: type mismatch, expected number but got string') 358 CheckDefFailure(['byte2line("1")'], 'E1013: Argument 1: type mismatch, expected number but got string')
327 CheckDefFailure(['byte2line([])'], 'E1013: Argument 1: type mismatch, expected number but got list<unknown>') 359 CheckDefFailure(['byte2line([])'], 'E1013: Argument 1: type mismatch, expected number but got list<unknown>')
328 assert_equal(-1, byte2line(0)) 360 assert_equal(-1, byte2line(0))
329 enddef 361 enddef
330 362
363 def Test_byteidx()
364 CheckDefAndScriptFailure2(['byteidx(1, 2)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
365 CheckDefAndScriptFailure2(['byteidx("a", "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
366 enddef
367
368 def Test_byteidxcomp()
369 CheckDefAndScriptFailure2(['byteidxcomp(1, 2)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
370 CheckDefAndScriptFailure2(['byteidxcomp("a", "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
371 enddef
372
331 def Test_call_call() 373 def Test_call_call()
332 var l = [3, 2, 1] 374 var l = [3, 2, 1]
333 call('reverse', [l]) 375 call('reverse', [l])
334 l->assert_equal([1, 2, 3]) 376 l->assert_equal([1, 2, 3])
335 enddef 377 enddef
353 CheckFeature channel 395 CheckFeature channel
354 endif 396 endif
355 CheckDefFailure(['ch_close_in(true)'], 'E1013: Argument 1: type mismatch, expected channel but got bool') 397 CheckDefFailure(['ch_close_in(true)'], 'E1013: Argument 1: type mismatch, expected channel but got bool')
356 enddef 398 enddef
357 399
400 def Test_ch_getjob()
401 CheckDefAndScriptFailure2(['ch_getjob(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E475: Invalid argument:')
402 CheckDefAndScriptFailure2(['ch_getjob({"a": 10})'], 'E1013: Argument 1: type mismatch, expected channel but got dict<number>', 'E731: Using a Dictionary as a String')
403 assert_equal(0, ch_getjob(test_null_channel()))
404 enddef
405
358 def Test_ch_info() 406 def Test_ch_info()
359 if !has('channel') 407 if !has('channel')
360 CheckFeature channel 408 CheckFeature channel
361 endif 409 endif
362 CheckDefFailure(['ch_info([1])'], 'E1013: Argument 1: type mismatch, expected channel but got list<number>') 410 CheckDefFailure(['ch_info([1])'], 'E1013: Argument 1: type mismatch, expected channel but got list<number>')
377 if !has('channel') 425 if !has('channel')
378 CheckFeature channel 426 CheckFeature channel
379 endif 427 endif
380 CheckDefAndScriptFailure2(['ch_open({"a": 10}, "a")'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1') 428 CheckDefAndScriptFailure2(['ch_open({"a": 10}, "a")'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1')
381 CheckDefAndScriptFailure2(['ch_open("a", [1])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 2') 429 CheckDefAndScriptFailure2(['ch_open("a", [1])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 2')
430 enddef
431
432 def Test_ch_read()
433 if !has('channel')
434 CheckFeature channel
435 endif
436 CheckDefAndScriptFailure2(['ch_read(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E475: Invalid argument')
437 CheckDefAndScriptFailure2(['ch_read(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E715: Dictionary required')
438 enddef
439
440 def Test_ch_readblob()
441 if !has('channel')
442 CheckFeature channel
443 endif
444 CheckDefAndScriptFailure2(['ch_readblob(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E475: Invalid argument')
445 CheckDefAndScriptFailure2(['ch_readblob(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E715: Dictionary required')
446 enddef
447
448 def Test_ch_readraw()
449 if !has('channel')
450 CheckFeature channel
451 endif
452 CheckDefAndScriptFailure2(['ch_readraw(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E475: Invalid argument')
453 CheckDefAndScriptFailure2(['ch_readraw(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E715: Dictionary required')
454 enddef
455
456 def Test_ch_setoptions()
457 if !has('channel')
458 CheckFeature channel
459 endif
460 CheckDefAndScriptFailure2(['ch_setoptions(1, {})'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E475: Invalid argument')
461 CheckDefFailure(['ch_setoptions(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>')
462 enddef
463
464 def Test_ch_status()
465 if !has('channel')
466 CheckFeature channel
467 endif
468 CheckDefAndScriptFailure2(['ch_status(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E475: Invalid argument')
469 CheckDefAndScriptFailure2(['ch_status(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E715: Dictionary required')
382 enddef 470 enddef
383 471
384 def Test_char2nr() 472 def Test_char2nr()
385 char2nr('あ', true)->assert_equal(12354) 473 char2nr('あ', true)->assert_equal(12354)
386 474
438 CheckDefFailure(['col({a: 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>') 526 CheckDefFailure(['col({a: 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>')
439 CheckDefFailure(['col(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool') 527 CheckDefFailure(['col(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool')
440 bw! 528 bw!
441 enddef 529 enddef
442 530
443 def Test_confirm()
444 if !has('dialog_con') && !has('dialog_gui')
445 CheckFeature dialog_con
446 endif
447
448 assert_fails('confirm(true)', 'E1174:')
449 assert_fails('confirm("yes", true)', 'E1174:')
450 assert_fails('confirm("yes", "maybe", 2, true)', 'E1174:')
451 enddef
452
453 def Test_complete_info() 531 def Test_complete_info()
454 CheckDefFailure(['complete_info("")'], 'E1013: Argument 1: type mismatch, expected list<string> but got string') 532 CheckDefFailure(['complete_info("")'], 'E1013: Argument 1: type mismatch, expected list<string> but got string')
455 CheckDefFailure(['complete_info({})'], 'E1013: Argument 1: type mismatch, expected list<string> but got dict<unknown>') 533 CheckDefFailure(['complete_info({})'], 'E1013: Argument 1: type mismatch, expected list<string> but got dict<unknown>')
456 assert_equal({'pum_visible': 0, 'mode': '', 'selected': -1, 'items': []}, complete_info()) 534 assert_equal({'pum_visible': 0, 'mode': '', 'selected': -1, 'items': []}, complete_info())
457 assert_equal({'mode': '', 'items': []}, complete_info(['mode', 'items'])) 535 assert_equal({'mode': '', 'items': []}, complete_info(['mode', 'items']))
536 enddef
537
538 def Test_confirm()
539 if !has('dialog_con') && !has('dialog_gui')
540 CheckFeature dialog_con
541 endif
542
543 assert_fails('confirm(true)', 'E1174:')
544 assert_fails('confirm("yes", true)', 'E1174:')
545 assert_fails('confirm("yes", "maybe", 2, true)', 'E1174:')
458 enddef 546 enddef
459 547
460 def Test_copy_return_type() 548 def Test_copy_return_type()
461 var l = copy([1, 2, 3]) 549 var l = copy([1, 2, 3])
462 var res = 0 550 var res = 0
510 def Test_diff_filler() 598 def Test_diff_filler()
511 CheckDefFailure(['diff_filler([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>') 599 CheckDefFailure(['diff_filler([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>')
512 CheckDefFailure(['diff_filler(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool') 600 CheckDefFailure(['diff_filler(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool')
513 assert_equal(0, diff_filler(1)) 601 assert_equal(0, diff_filler(1))
514 assert_equal(0, diff_filler('.')) 602 assert_equal(0, diff_filler('.'))
603 enddef
604
605 def Test_echoraw()
606 CheckDefAndScriptFailure2(['echoraw(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
607 CheckDefAndScriptFailure2(['echoraw(["x"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1')
515 enddef 608 enddef
516 609
517 def Test_escape() 610 def Test_escape()
518 CheckDefFailure(['escape("a", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number') 611 CheckDefFailure(['escape("a", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number')
519 CheckDefFailure(['escape(10, " ")'], 'E1013: Argument 1: type mismatch, expected string but got number') 612 CheckDefFailure(['escape(10, " ")'], 'E1013: Argument 1: type mismatch, expected string but got number')
602 695
603 CheckDefFailure(['extend([1], ["b"])'], 'E1013: Argument 2: type mismatch, expected list<number> but got list<string>') 696 CheckDefFailure(['extend([1], ["b"])'], 'E1013: Argument 2: type mismatch, expected list<number> but got list<string>')
604 CheckDefExecFailure(['extend([1], ["b", 1])'], 'E1013: Argument 2: type mismatch, expected list<number> but got list<any>') 697 CheckDefExecFailure(['extend([1], ["b", 1])'], 'E1013: Argument 2: type mismatch, expected list<number> but got list<any>')
605 enddef 698 enddef
606 699
607 def Test_extendnew() 700 func g:ExtendDict(d)
608 assert_equal([1, 2, 'a'], extendnew([1, 2], ['a'])) 701 call extend(a:d, #{xx: 'x'})
609 assert_equal({one: 1, two: 'a'}, extendnew({one: 1}, {two: 'a'})) 702 endfunc
610 703
611 CheckDefFailure(['extendnew({a: 1}, 42)'], 'E1013: Argument 2: type mismatch, expected dict<number> but got number') 704 def Test_extend_dict_item_type()
612 CheckDefFailure(['extendnew({a: 1}, [42])'], 'E1013: Argument 2: type mismatch, expected dict<number> but got list<number>') 705 var lines =<< trim END
613 CheckDefFailure(['extendnew([1, 2], "x")'], 'E1013: Argument 2: type mismatch, expected list<number> but got string') 706 var d: dict<number> = {a: 1}
614 CheckDefFailure(['extendnew([1, 2], {x: 1})'], 'E1013: Argument 2: type mismatch, expected list<number> but got dict<number>') 707 extend(d, {b: 2})
708 END
709 CheckDefAndScriptSuccess(lines)
710
711 lines =<< trim END
712 var d: dict<number> = {a: 1}
713 extend(d, {b: 'x'})
714 END
715 CheckDefAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected dict<number> but got dict<string>', 2)
716
717 lines =<< trim END
718 var d: dict<number> = {a: 1}
719 g:ExtendDict(d)
720 END
721 CheckDefExecFailure(lines, 'E1012: Type mismatch; expected number but got string', 0)
722 CheckScriptFailure(['vim9script'] + lines, 'E1012:', 1)
723 enddef
724
725 func g:ExtendList(l)
726 call extend(a:l, ['x'])
727 endfunc
728
729 def Test_extend_list_item_type()
730 var lines =<< trim END
731 var l: list<number> = [1]
732 extend(l, [2])
733 END
734 CheckDefAndScriptSuccess(lines)
735
736 lines =<< trim END
737 var l: list<number> = [1]
738 extend(l, ['x'])
739 END
740 CheckDefAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected list<number> but got list<string>', 2)
741
742 lines =<< trim END
743 var l: list<number> = [1]
744 g:ExtendList(l)
745 END
746 CheckDefExecFailure(lines, 'E1012: Type mismatch; expected number but got string', 0)
747 CheckScriptFailure(['vim9script'] + lines, 'E1012:', 1)
615 enddef 748 enddef
616 749
617 def Test_extend_return_type() 750 def Test_extend_return_type()
618 var l = extend([1, 2], [3]) 751 var l = extend([1, 2], [3])
619 var res = 0 752 var res = 0
620 for n in l 753 for n in l
621 res += n 754 res += n
622 endfor 755 endfor
623 res->assert_equal(6) 756 res->assert_equal(6)
624 enddef
625
626 func g:ExtendDict(d)
627 call extend(a:d, #{xx: 'x'})
628 endfunc
629
630 def Test_extend_dict_item_type()
631 var lines =<< trim END
632 var d: dict<number> = {a: 1}
633 extend(d, {b: 2})
634 END
635 CheckDefAndScriptSuccess(lines)
636
637 lines =<< trim END
638 var d: dict<number> = {a: 1}
639 extend(d, {b: 'x'})
640 END
641 CheckDefAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected dict<number> but got dict<string>', 2)
642
643 lines =<< trim END
644 var d: dict<number> = {a: 1}
645 g:ExtendDict(d)
646 END
647 CheckDefExecFailure(lines, 'E1012: Type mismatch; expected number but got string', 0)
648 CheckScriptFailure(['vim9script'] + lines, 'E1012:', 1)
649 enddef
650
651 func g:ExtendList(l)
652 call extend(a:l, ['x'])
653 endfunc
654
655 def Test_extend_list_item_type()
656 var lines =<< trim END
657 var l: list<number> = [1]
658 extend(l, [2])
659 END
660 CheckDefAndScriptSuccess(lines)
661
662 lines =<< trim END
663 var l: list<number> = [1]
664 extend(l, ['x'])
665 END
666 CheckDefAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected list<number> but got list<string>', 2)
667
668 lines =<< trim END
669 var l: list<number> = [1]
670 g:ExtendList(l)
671 END
672 CheckDefExecFailure(lines, 'E1012: Type mismatch; expected number but got string', 0)
673 CheckScriptFailure(['vim9script'] + lines, 'E1012:', 1)
674 enddef 757 enddef
675 758
676 def Test_extend_with_error_function() 759 def Test_extend_with_error_function()
677 var lines =<< trim END 760 var lines =<< trim END
678 vim9script 761 vim9script
691 Test() 774 Test()
692 END 775 END
693 CheckScriptFailure(lines, 'E1001: Variable not found: m') 776 CheckScriptFailure(lines, 'E1001: Variable not found: m')
694 enddef 777 enddef
695 778
779 def Test_extendnew()
780 assert_equal([1, 2, 'a'], extendnew([1, 2], ['a']))
781 assert_equal({one: 1, two: 'a'}, extendnew({one: 1}, {two: 'a'}))
782
783 CheckDefFailure(['extendnew({a: 1}, 42)'], 'E1013: Argument 2: type mismatch, expected dict<number> but got number')
784 CheckDefFailure(['extendnew({a: 1}, [42])'], 'E1013: Argument 2: type mismatch, expected dict<number> but got list<number>')
785 CheckDefFailure(['extendnew([1, 2], "x")'], 'E1013: Argument 2: type mismatch, expected list<number> but got string')
786 CheckDefFailure(['extendnew([1, 2], {x: 1})'], 'E1013: Argument 2: type mismatch, expected list<number> but got dict<number>')
787 enddef
788
696 def Test_feedkeys() 789 def Test_feedkeys()
697 CheckDefFailure(['feedkeys(10)'], 'E1013: Argument 1: type mismatch, expected string but got number') 790 CheckDefFailure(['feedkeys(10)'], 'E1013: Argument 1: type mismatch, expected string but got number')
698 CheckDefFailure(['feedkeys("x", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number') 791 CheckDefFailure(['feedkeys("x", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number')
699 CheckDefFailure(['feedkeys([], {})'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>') 792 CheckDefFailure(['feedkeys([], {})'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>')
700 g:TestVar = 1 793 g:TestVar = 1
701 feedkeys(":g:TestVar = 789\n", 'xt') 794 feedkeys(":g:TestVar = 789\n", 'xt')
702 assert_equal(789, g:TestVar) 795 assert_equal(789, g:TestVar)
703 unlet g:TestVar 796 unlet g:TestVar
704 enddef
705
706 def Test_indent()
707 CheckDefAndScriptFailure2(['indent([1])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E745: Using a List as a Number')
708 CheckDefAndScriptFailure2(['indent(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1138: Using a Bool as a Number')
709 assert_equal(0, indent(1))
710 enddef
711
712 def Test_input()
713 CheckDefFailure(['input(5)'], 'E1013: Argument 1: type mismatch, expected string but got number')
714 CheckDefAndScriptFailure2(['input(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E730: Using a List as a String')
715 CheckDefFailure(['input("p", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number')
716 CheckDefAndScriptFailure2(['input("p", "q", 20)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E180: Invalid complete value')
717 enddef
718
719 def Test_inputdialog()
720 CheckDefFailure(['inputdialog(5)'], 'E1013: Argument 1: type mismatch, expected string but got number')
721 CheckDefAndScriptFailure2(['inputdialog(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E730: Using a List as a String')
722 CheckDefFailure(['inputdialog("p", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number')
723 CheckDefFailure(['inputdialog("p", "q", 20)'], 'E1013: Argument 3: type mismatch, expected string but got number')
724 enddef
725
726 def Test_job_info_return_type()
727 if has('job')
728 job_start(&shell)
729 var jobs = job_info()
730 assert_equal('list<job>', typename(jobs))
731 assert_equal('dict<any>', typename(job_info(jobs[0])))
732 job_stop(jobs[0])
733 endif
734 enddef 797 enddef
735 798
736 def Test_filereadable() 799 def Test_filereadable()
737 assert_false(filereadable("")) 800 assert_false(filereadable(""))
738 assert_false(filereadable(test_null_string())) 801 assert_false(filereadable(test_null_string()))
926 assert_equal('', fullcommand('scg')) 989 assert_equal('', fullcommand('scg'))
927 enddef 990 enddef
928 991
929 def Test_garbagecollect() 992 def Test_garbagecollect()
930 garbagecollect(true) 993 garbagecollect(true)
994 CheckDefAndScriptFailure2(['garbagecollect("1")'], 'E1013: Argument 1: type mismatch, expected bool but got string', 'E1135: Using a String as a Bool')
995 CheckDefAndScriptFailure2(['garbagecollect(20)'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1023: Using a Number as a Bool')
931 enddef 996 enddef
932 997
933 def Test_getbufinfo() 998 def Test_getbufinfo()
934 var bufinfo = getbufinfo(bufnr()) 999 var bufinfo = getbufinfo(bufnr())
935 getbufinfo('%')->assert_equal(bufinfo) 1000 getbufinfo('%')->assert_equal(bufinfo)
965 1030
966 def Test_getchar() 1031 def Test_getchar()
967 while getchar(0) 1032 while getchar(0)
968 endwhile 1033 endwhile
969 getchar(true)->assert_equal(0) 1034 getchar(true)->assert_equal(0)
1035 getchar(1)->assert_equal(0)
1036 CheckDefAndScriptFailure2(['getchar(2)'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1023: Using a Number as a Bool')
1037 CheckDefAndScriptFailure2(['getchar("1")'], 'E1013: Argument 1: type mismatch, expected bool but got string', 'E1135: Using a String as a Bool')
1038 enddef
1039
1040 def Test_getcharpos()
1041 CheckDefAndScriptFailure2(['getcharpos(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1')
1042 CheckDefAndScriptFailure2(['getcharpos(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
1043 enddef
1044
1045 def Test_getcharstr()
1046 CheckDefAndScriptFailure2(['getcharstr(2)'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1023: Using a Number as a Bool')
1047 CheckDefAndScriptFailure2(['getcharstr("1")'], 'E1013: Argument 1: type mismatch, expected bool but got string', 'E1135: Using a String as a Bool')
970 enddef 1048 enddef
971 1049
972 def Test_getenv() 1050 def Test_getenv()
973 if getenv('does-not_exist') == '' 1051 if getenv('does-not_exist') == ''
974 assert_report('getenv() should return null') 1052 assert_report('getenv() should return null')
999 1077
1000 def Test_getcwd() 1078 def Test_getcwd()
1001 CheckDefFailure(['getcwd("x")'], 'E1013: Argument 1: type mismatch, expected number but got string') 1079 CheckDefFailure(['getcwd("x")'], 'E1013: Argument 1: type mismatch, expected number but got string')
1002 CheckDefFailure(['getcwd("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string') 1080 CheckDefFailure(['getcwd("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string')
1003 CheckDefFailure(['getcwd(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string') 1081 CheckDefFailure(['getcwd(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string')
1004 enddef
1005
1006 def Test_getloclist_return_type()
1007 var l = getloclist(1)
1008 l->assert_equal([])
1009
1010 var d = getloclist(1, {items: 0})
1011 d->assert_equal({items: []})
1012 enddef 1082 enddef
1013 1083
1014 def Test_getfontname() 1084 def Test_getfontname()
1015 CheckDefFailure(['getfontname(10)'], 'E1013: Argument 1: type mismatch, expected string but got number') 1085 CheckDefFailure(['getfontname(10)'], 'E1013: Argument 1: type mismatch, expected string but got number')
1016 enddef 1086 enddef
1070 echo getline('1') 1140 echo getline('1')
1071 END 1141 END
1072 CheckDefExecAndScriptFailure(lines, 'E1209:') 1142 CheckDefExecAndScriptFailure(lines, 'E1209:')
1073 enddef 1143 enddef
1074 1144
1145 def Test_getloclist()
1146 CheckDefAndScriptFailure2(['getloclist("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number')
1147 CheckDefAndScriptFailure2(['getloclist(1, [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E715: Dictionary required')
1148 enddef
1149
1150 def Test_getloclist_return_type()
1151 var l = getloclist(1)
1152 l->assert_equal([])
1153
1154 var d = getloclist(1, {items: 0})
1155 d->assert_equal({items: []})
1156 enddef
1157
1075 def Test_getmarklist() 1158 def Test_getmarklist()
1076 CheckDefFailure(['getmarklist([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>') 1159 CheckDefFailure(['getmarklist([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>')
1077 assert_equal([], getmarklist(10000)) 1160 assert_equal([], getmarklist(10000))
1078 assert_fails('getmarklist("a%b@#")', 'E94:') 1161 assert_fails('getmarklist("a%b@#")', 'E94:')
1079 enddef 1162 enddef
1195 CheckDefFailure(['histadd(":", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number') 1278 CheckDefFailure(['histadd(":", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number')
1196 histadd("search", 'skyblue') 1279 histadd("search", 'skyblue')
1197 assert_equal('skyblue', histget('/', -1)) 1280 assert_equal('skyblue', histget('/', -1))
1198 enddef 1281 enddef
1199 1282
1283 def Test_histget()
1284 CheckDefAndScriptFailure2(['histget(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
1285 CheckDefAndScriptFailure2(['histget("a", "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
1286 enddef
1287
1200 def Test_histnr() 1288 def Test_histnr()
1201 CheckDefFailure(['histnr(10)'], 'E1013: Argument 1: type mismatch, expected string but got number') 1289 CheckDefFailure(['histnr(10)'], 'E1013: Argument 1: type mismatch, expected string but got number')
1202 assert_equal(-1, histnr('abc')) 1290 assert_equal(-1, histnr('abc'))
1203 enddef 1291 enddef
1204 1292
1217 CheckDefFailure(['iconv("abc", 10, "to")'], 'E1013: Argument 2: type mismatch, expected string but got number') 1305 CheckDefFailure(['iconv("abc", 10, "to")'], 'E1013: Argument 2: type mismatch, expected string but got number')
1218 CheckDefFailure(['iconv("abc", "from", 20)'], 'E1013: Argument 3: type mismatch, expected string but got number') 1306 CheckDefFailure(['iconv("abc", "from", 20)'], 'E1013: Argument 3: type mismatch, expected string but got number')
1219 assert_equal('abc', iconv('abc', 'fromenc', 'toenc')) 1307 assert_equal('abc', iconv('abc', 'fromenc', 'toenc'))
1220 enddef 1308 enddef
1221 1309
1310 def Test_indent()
1311 CheckDefAndScriptFailure2(['indent([1])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E745: Using a List as a Number')
1312 CheckDefAndScriptFailure2(['indent(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1138: Using a Bool as a Number')
1313 assert_equal(0, indent(1))
1314 enddef
1315
1222 def Test_index() 1316 def Test_index()
1223 index(['a', 'b', 'a', 'B'], 'b', 2, true)->assert_equal(3) 1317 index(['a', 'b', 'a', 'B'], 'b', 2, true)->assert_equal(3)
1318 enddef
1319
1320 def Test_input()
1321 CheckDefFailure(['input(5)'], 'E1013: Argument 1: type mismatch, expected string but got number')
1322 CheckDefAndScriptFailure2(['input(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E730: Using a List as a String')
1323 CheckDefFailure(['input("p", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number')
1324 CheckDefAndScriptFailure2(['input("p", "q", 20)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E180: Invalid complete value')
1325 enddef
1326
1327 def Test_inputdialog()
1328 CheckDefFailure(['inputdialog(5)'], 'E1013: Argument 1: type mismatch, expected string but got number')
1329 CheckDefAndScriptFailure2(['inputdialog(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E730: Using a List as a String')
1330 CheckDefFailure(['inputdialog("p", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number')
1331 CheckDefFailure(['inputdialog("p", "q", 20)'], 'E1013: Argument 3: type mismatch, expected string but got number')
1224 enddef 1332 enddef
1225 1333
1226 def Test_inputlist() 1334 def Test_inputlist()
1227 CheckDefFailure(['inputlist(10)'], 'E1013: Argument 1: type mismatch, expected list<string> but got number') 1335 CheckDefFailure(['inputlist(10)'], 'E1013: Argument 1: type mismatch, expected list<string> but got number')
1228 CheckDefFailure(['inputlist("abc")'], 'E1013: Argument 1: type mismatch, expected list<string> but got string') 1336 CheckDefFailure(['inputlist("abc")'], 'E1013: Argument 1: type mismatch, expected list<string> but got string')
1287 def Test_isdirectory() 1395 def Test_isdirectory()
1288 CheckDefFailure(['isdirectory(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float') 1396 CheckDefFailure(['isdirectory(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float')
1289 assert_false(isdirectory('NonExistingDir')) 1397 assert_false(isdirectory('NonExistingDir'))
1290 enddef 1398 enddef
1291 1399
1400 def Test_islocked()
1401 CheckDefAndScriptFailure2(['islocked(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1')
1402 CheckDefAndScriptFailure2(['var n1: number = 10', 'islocked(n1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
1403 g:v1 = 10
1404 assert_false(islocked('g:v1'))
1405 lockvar g:v1
1406 assert_true(islocked('g:v1'))
1407 unlet g:v1
1408 enddef
1409
1292 def Test_items() 1410 def Test_items()
1293 CheckDefFailure(['[]->items()'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>') 1411 CheckDefFailure(['[]->items()'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>')
1294 assert_equal([['a', 10], ['b', 20]], {'a': 10, 'b': 20}->items()) 1412 assert_equal([['a', 10], ['b', 20]], {'a': 10, 'b': 20}->items())
1295 assert_equal([], {}->items()) 1413 assert_equal([], {}->items())
1296 enddef 1414 enddef
1297 1415
1416 def Test_job_getchannel()
1417 CheckDefAndScriptFailure2(['job_getchannel("a")'], 'E1013: Argument 1: type mismatch, expected job but got string', 'E475: Invalid argument')
1418 assert_fails('job_getchannel(test_null_job())', 'E916: not a valid job')
1419 enddef
1420
1421 def Test_job_info()
1422 CheckDefAndScriptFailure2(['job_info("a")'], 'E1013: Argument 1: type mismatch, expected job but got string', 'E475: Invalid argument')
1423 assert_fails('job_info(test_null_job())', 'E916: not a valid job')
1424 enddef
1425
1426 def Test_job_info_return_type()
1427 if has('job')
1428 job_start(&shell)
1429 var jobs = job_info()
1430 assert_equal('list<job>', typename(jobs))
1431 assert_equal('dict<any>', typename(job_info(jobs[0])))
1432 job_stop(jobs[0])
1433 endif
1434 enddef
1435
1436 def Test_job_status()
1437 CheckDefAndScriptFailure2(['job_status("a")'], 'E1013: Argument 1: type mismatch, expected job but got string', 'E475: Invalid argument')
1438 assert_equal('fail', job_status(test_null_job()))
1439 enddef
1440
1298 def Test_js_decode() 1441 def Test_js_decode()
1299 CheckDefFailure(['js_decode(10)'], 'E1013: Argument 1: type mismatch, expected string but got number') 1442 CheckDefFailure(['js_decode(10)'], 'E1013: Argument 1: type mismatch, expected string but got number')
1300 assert_equal([1, 2], js_decode('[1,2]')) 1443 assert_equal([1, 2], js_decode('[1,2]'))
1301 enddef 1444 enddef
1302 1445
1316 var->assert_equal(['a', 'b']) 1459 var->assert_equal(['a', 'b'])
1317 enddef 1460 enddef
1318 1461
1319 def Test_line() 1462 def Test_line()
1320 assert_fails('line(true)', 'E1174:') 1463 assert_fails('line(true)', 'E1174:')
1464 CheckDefAndScriptFailure2(['line(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
1465 CheckDefAndScriptFailure2(['line(".", "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
1321 enddef 1466 enddef
1322 1467
1323 def Test_line2byte() 1468 def Test_line2byte()
1324 CheckDefFailure(['line2byte(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool') 1469 CheckDefFailure(['line2byte(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool')
1325 assert_equal(-1, line2byte(1)) 1470 assert_equal(-1, line2byte(1))
1474 g:flag = false 1619 g:flag = false
1475 var l2: list<number> = g:flag 1620 var l2: list<number> = g:flag
1476 ? [1, max([2, 3])] 1621 ? [1, max([2, 3])]
1477 : [4, 5] 1622 : [4, 5]
1478 assert_equal([4, 5], l2) 1623 assert_equal([4, 5], l2)
1624 CheckDefAndScriptFailure2(['max(5)'], 'E1013: Argument 1: type mismatch, expected list<any> but got number', 'E712: Argument of max() must be a List or Dictionary')
1479 enddef 1625 enddef
1480 1626
1481 def Test_menu_info() 1627 def Test_menu_info()
1482 CheckDefFailure(['menu_info(10)'], 'E1013: Argument 1: type mismatch, expected string but got number') 1628 CheckDefFailure(['menu_info(10)'], 'E1013: Argument 1: type mismatch, expected string but got number')
1483 CheckDefFailure(['menu_info(10, "n")'], 'E1013: Argument 1: type mismatch, expected string but got number') 1629 CheckDefFailure(['menu_info(10, "n")'], 'E1013: Argument 1: type mismatch, expected string but got number')
1495 g:flag = false 1641 g:flag = false
1496 var l2: list<number> = g:flag 1642 var l2: list<number> = g:flag
1497 ? [1, min([2, 3])] 1643 ? [1, min([2, 3])]
1498 : [4, 5] 1644 : [4, 5]
1499 assert_equal([4, 5], l2) 1645 assert_equal([4, 5], l2)
1646 CheckDefAndScriptFailure2(['min(5)'], 'E1013: Argument 1: type mismatch, expected list<any> but got number', 'E712: Argument of min() must be a List or Dictionary')
1500 enddef 1647 enddef
1501 1648
1502 def Test_mkdir() 1649 def Test_mkdir()
1503 CheckDefAndScriptFailure2(['mkdir(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E730: Using a List as a String') 1650 CheckDefAndScriptFailure2(['mkdir(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E730: Using a List as a String')
1504 CheckDefAndScriptFailure2(['mkdir("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict<unknown>', 'E731: Using a Dictionary as a String') 1651 CheckDefAndScriptFailure2(['mkdir("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict<unknown>', 'E731: Using a Dictionary as a String')
1505 CheckDefAndScriptFailure2(['mkdir("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1030: Using a String as a Number') 1652 CheckDefAndScriptFailure2(['mkdir("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1030: Using a String as a Number')
1506 delete('a', 'rf') 1653 delete('a', 'rf')
1507 enddef 1654 enddef
1508 1655
1656 def Test_mode()
1657 CheckDefFailure(['mode("1")'], 'E1013: Argument 1: type mismatch, expected bool but got string')
1658 CheckDefFailure(['mode(2)'], 'E1013: Argument 1: type mismatch, expected bool but got number')
1659 enddef
1660
1661 def Test_mzeval()
1662 if !has('mzscheme')
1663 CheckFeature mzscheme
1664 endif
1665 CheckDefAndScriptFailure2(['mzscheme(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E730: Using a List as a String')
1666 enddef
1667
1509 def Test_nextnonblank() 1668 def Test_nextnonblank()
1510 CheckDefFailure(['nextnonblank(null)'], 'E1013: Argument 1: type mismatch, expected string but got special') 1669 CheckDefFailure(['nextnonblank(null)'], 'E1013: Argument 1: type mismatch, expected string but got special')
1511 assert_equal(0, nextnonblank(1)) 1670 assert_equal(0, nextnonblank(1))
1512 enddef 1671 enddef
1513 1672
1516 enddef 1675 enddef
1517 1676
1518 def Test_or() 1677 def Test_or()
1519 CheckDefFailure(['or("x", 0x2)'], 'E1013: Argument 1: type mismatch, expected number but got string') 1678 CheckDefFailure(['or("x", 0x2)'], 'E1013: Argument 1: type mismatch, expected number but got string')
1520 CheckDefFailure(['or(0x1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string') 1679 CheckDefFailure(['or(0x1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string')
1680 enddef
1681
1682 def Test_pathshorten()
1683 CheckDefAndScriptFailure2(['pathshorten(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
1684 CheckDefAndScriptFailure2(['pathshorten("a", "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
1685 enddef
1686
1687 def Test_perleval()
1688 if !has('perl')
1689 CheckFeature perl
1690 endif
1691 CheckDefAndScriptFailure2(['perleval(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E730: Using a List as a String')
1521 enddef 1692 enddef
1522 1693
1523 def Test_popup_atcursor() 1694 def Test_popup_atcursor()
1524 CheckDefAndScriptFailure2(['popup_atcursor({"a": 10}, {})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E450: buffer number, text or a list required') 1695 CheckDefAndScriptFailure2(['popup_atcursor({"a": 10}, {})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E450: buffer number, text or a list required')
1525 CheckDefAndScriptFailure2(['popup_atcursor("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E715: Dictionary required') 1696 CheckDefAndScriptFailure2(['popup_atcursor("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E715: Dictionary required')
1532 enddef 1703 enddef
1533 1704
1534 def Test_popup_beval() 1705 def Test_popup_beval()
1535 CheckDefAndScriptFailure2(['popup_beval({"a": 10}, {})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E450: buffer number, text or a list required') 1706 CheckDefAndScriptFailure2(['popup_beval({"a": 10}, {})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E450: buffer number, text or a list required')
1536 CheckDefAndScriptFailure2(['popup_beval("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E715: Dictionary required') 1707 CheckDefAndScriptFailure2(['popup_beval("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E715: Dictionary required')
1708 enddef
1709
1710 def Test_popup_clear()
1711 CheckDefAndScriptFailure2(['popup_clear(["a"])'], 'E1013: Argument 1: type mismatch, expected bool but got list<string>', 'E745: Using a List as a Number')
1712 CheckDefAndScriptFailure2(['popup_clear(2)'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1023: Using a Number as a Bool')
1537 enddef 1713 enddef
1538 1714
1539 def Test_popup_create() 1715 def Test_popup_create()
1540 # Pass variable of type 'any' to popup_create() 1716 # Pass variable of type 'any' to popup_create()
1541 var what: any = 'Hello' 1717 var what: any = 'Hello'
1547 def Test_popup_dialog() 1723 def Test_popup_dialog()
1548 CheckDefAndScriptFailure2(['popup_dialog({"a": 10}, {})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E450: buffer number, text or a list required') 1724 CheckDefAndScriptFailure2(['popup_dialog({"a": 10}, {})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E450: buffer number, text or a list required')
1549 CheckDefAndScriptFailure2(['popup_dialog("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E715: Dictionary required') 1725 CheckDefAndScriptFailure2(['popup_dialog("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E715: Dictionary required')
1550 enddef 1726 enddef
1551 1727
1728 def Test_popup_filter_menu()
1729 CheckDefAndScriptFailure2(['popup_filter_menu("x", "")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
1730 CheckDefAndScriptFailure2(['popup_filter_menu(1, 1)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
1731 enddef
1732
1733 def Test_popup_filter_yesno()
1734 CheckDefAndScriptFailure2(['popup_filter_yesno("x", "")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
1735 CheckDefAndScriptFailure2(['popup_filter_yesno(1, 1)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
1736 enddef
1737
1738 def Test_popup_getoptions()
1739 CheckDefAndScriptFailure2(['popup_getoptions("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number')
1740 CheckDefAndScriptFailure2(['popup_getoptions(true)'], 'E1013: Argument 1: type mismatch, expected number but got bool', 'E1138: Using a Bool as a Number')
1741 enddef
1742
1743 def Test_popup_getpos()
1744 CheckDefAndScriptFailure2(['popup_getpos("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number')
1745 CheckDefAndScriptFailure2(['popup_getpos(true)'], 'E1013: Argument 1: type mismatch, expected number but got bool', 'E1138: Using a Bool as a Number')
1746 enddef
1747
1748 def Test_popup_hide()
1749 CheckDefAndScriptFailure2(['popup_hide("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number')
1750 CheckDefAndScriptFailure2(['popup_hide(true)'], 'E1013: Argument 1: type mismatch, expected number but got bool', 'E1138: Using a Bool as a Number')
1751 enddef
1752
1552 def Test_popup_locate() 1753 def Test_popup_locate()
1553 CheckDefAndScriptFailure2(['popup_locate("a", 20)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number') 1754 CheckDefAndScriptFailure2(['popup_locate("a", 20)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number')
1554 CheckDefAndScriptFailure2(['popup_locate(10, "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1030: Using a String as a Number') 1755 CheckDefAndScriptFailure2(['popup_locate(10, "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1030: Using a String as a Number')
1555 enddef 1756 enddef
1556 1757
1557 def Test_popup_menu() 1758 def Test_popup_menu()
1558 CheckDefAndScriptFailure2(['popup_menu({"a": 10}, {})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E450: buffer number, text or a list required') 1759 CheckDefAndScriptFailure2(['popup_menu({"a": 10}, {})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E450: buffer number, text or a list required')
1559 CheckDefAndScriptFailure2(['popup_menu("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E715: Dictionary required') 1760 CheckDefAndScriptFailure2(['popup_menu("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E715: Dictionary required')
1560 enddef 1761 enddef
1561 1762
1763 def Test_popup_move()
1764 CheckDefAndScriptFailure2(['popup_move("x", {})'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
1765 CheckDefAndScriptFailure2(['popup_move(1, [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2')
1766 enddef
1767
1562 def Test_popup_notification() 1768 def Test_popup_notification()
1563 CheckDefAndScriptFailure2(['popup_notification({"a": 10}, {})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E450: buffer number, text or a list required') 1769 CheckDefAndScriptFailure2(['popup_notification({"a": 10}, {})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E450: buffer number, text or a list required')
1564 CheckDefAndScriptFailure2(['popup_notification("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E715: Dictionary required') 1770 CheckDefAndScriptFailure2(['popup_notification("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E715: Dictionary required')
1771 enddef
1772
1773 def Test_popup_setoptions()
1774 CheckDefAndScriptFailure2(['popup_setoptions("x", {})'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
1775 CheckDefAndScriptFailure2(['popup_setoptions(1, [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2')
1776 enddef
1777
1778 def Test_popup_show()
1779 CheckDefAndScriptFailure2(['popup_show("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number')
1780 CheckDefAndScriptFailure2(['popup_show(true)'], 'E1013: Argument 1: type mismatch, expected number but got bool', 'E1138: Using a Bool as a Number')
1565 enddef 1781 enddef
1566 1782
1567 def Test_prevnonblank() 1783 def Test_prevnonblank()
1568 CheckDefFailure(['prevnonblank(null)'], 'E1013: Argument 1: type mismatch, expected string but got special') 1784 CheckDefFailure(['prevnonblank(null)'], 'E1013: Argument 1: type mismatch, expected string but got special')
1569 assert_equal(0, prevnonblank(1)) 1785 assert_equal(0, prevnonblank(1))
1580 CheckDefAndScriptFailure2(['prop_find([1, 2])'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<number>', 'E715: Dictionary required') 1796 CheckDefAndScriptFailure2(['prop_find([1, 2])'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<number>', 'E715: Dictionary required')
1581 CheckDefAndScriptFailure2(['prop_find([1, 2], "k")'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<number>', 'E715: Dictionary required') 1797 CheckDefAndScriptFailure2(['prop_find([1, 2], "k")'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<number>', 'E715: Dictionary required')
1582 CheckDefAndScriptFailure2(['prop_find({"a": 10}, ["a"])'], 'E1013: Argument 2: type mismatch, expected string but got list<string>', 'E730: Using a List as a String') 1798 CheckDefAndScriptFailure2(['prop_find({"a": 10}, ["a"])'], 'E1013: Argument 2: type mismatch, expected string but got list<string>', 'E730: Using a List as a String')
1583 enddef 1799 enddef
1584 1800
1801 def Test_prop_list()
1802 CheckDefAndScriptFailure2(['prop_list("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
1803 CheckDefAndScriptFailure2(['prop_list(1, [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2')
1804 enddef
1805
1585 def Test_prop_type_add() 1806 def Test_prop_type_add()
1586 CheckDefAndScriptFailure2(['prop_type_add({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E731: Using a Dictionary as a String') 1807 CheckDefAndScriptFailure2(['prop_type_add({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E731: Using a Dictionary as a String')
1587 CheckDefAndScriptFailure2(['prop_type_add("a", "b")'], 'E1013: Argument 2: type mismatch, expected dict<any> but got string', 'E715: Dictionary required') 1808 CheckDefAndScriptFailure2(['prop_type_add("a", "b")'], 'E1013: Argument 2: type mismatch, expected dict<any> but got string', 'E715: Dictionary required')
1588 enddef 1809 enddef
1589 1810
1600 1821
1601 def Test_prop_type_get() 1822 def Test_prop_type_get()
1602 CheckDefAndScriptFailure2(['prop_type_get({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E731: Using a Dictionary as a String') 1823 CheckDefAndScriptFailure2(['prop_type_get({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E731: Using a Dictionary as a String')
1603 CheckDefAndScriptFailure2(['prop_type_get({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E731: Using a Dictionary as a String') 1824 CheckDefAndScriptFailure2(['prop_type_get({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E731: Using a Dictionary as a String')
1604 CheckDefAndScriptFailure2(['prop_type_get("a", "b")'], 'E1013: Argument 2: type mismatch, expected dict<any> but got string', 'E715: Dictionary required') 1825 CheckDefAndScriptFailure2(['prop_type_get("a", "b")'], 'E1013: Argument 2: type mismatch, expected dict<any> but got string', 'E715: Dictionary required')
1826 enddef
1827
1828 def Test_prop_type_list()
1829 CheckDefAndScriptFailure2(['prop_type_list(["a"])'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<string>', 'E715: Dictionary required')
1830 CheckDefAndScriptFailure2(['prop_type_list(2)'], 'E1013: Argument 1: type mismatch, expected dict<any> but got number', 'E715: Dictionary required')
1831 enddef
1832
1833 def Test_py3eval()
1834 if !has('python3')
1835 CheckFeature python3
1836 endif
1837 CheckDefAndScriptFailure2(['py3eval([2])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E730: Using a List as a String')
1838 enddef
1839
1840 def Test_pyeval()
1841 if !has('python')
1842 CheckFeature python
1843 endif
1844 CheckDefAndScriptFailure2(['pyeval([2])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E730: Using a List as a String')
1845 enddef
1846
1847 def Test_pyxeval()
1848 if !has('python') && !has('python3')
1849 CheckFeature python
1850 endif
1851 CheckDefAndScriptFailure2(['pyxeval([2])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E730: Using a List as a String')
1605 enddef 1852 enddef
1606 1853
1607 def Test_rand() 1854 def Test_rand()
1608 CheckDefFailure(['rand(10)'], 'E1013: Argument 1: type mismatch, expected list<number> but got number') 1855 CheckDefFailure(['rand(10)'], 'E1013: Argument 1: type mismatch, expected list<number> but got number')
1609 CheckDefFailure(['rand(["a"])'], 'E1013: Argument 1: type mismatch, expected list<number> but got list<string>') 1856 CheckDefFailure(['rand(["a"])'], 'E1013: Argument 1: type mismatch, expected list<number> but got list<string>')
1702 CheckEnv DISPLAY 1949 CheckEnv DISPLAY
1703 CheckDefAndScriptFailure2(['remote_peek(0z10)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E976: Using a Blob as a String') 1950 CheckDefAndScriptFailure2(['remote_peek(0z10)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E976: Using a Blob as a String')
1704 CheckDefAndScriptFailure2(['remote_peek("a5b6c7", [1])'], 'E1013: Argument 2: type mismatch, expected string but got list<number>', 'E573: Invalid server id used') 1951 CheckDefAndScriptFailure2(['remote_peek("a5b6c7", [1])'], 'E1013: Argument 2: type mismatch, expected string but got list<number>', 'E573: Invalid server id used')
1705 enddef 1952 enddef
1706 1953
1954 def Test_remote_read()
1955 CheckFeature clientserver
1956 CheckEnv DISPLAY
1957 CheckDefAndScriptFailure2(['remote_read(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
1958 CheckDefAndScriptFailure2(['remote_read("a", "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
1959 enddef
1960
1707 def Test_remote_startserver() 1961 def Test_remote_startserver()
1708 CheckFeature clientserver 1962 CheckFeature clientserver
1709 CheckEnv DISPLAY 1963 CheckEnv DISPLAY
1710 CheckDefFailure(['remote_startserver({})'], 'E1013: Argument 1: type mismatch, expected string but got dict<unknown>') 1964 CheckDefFailure(['remote_startserver({})'], 'E1013: Argument 1: type mismatch, expected string but got dict<unknown>')
1711 enddef 1965 enddef
1739 var res = 0 1993 var res = 0
1740 for n in l 1994 for n in l
1741 res += n 1995 res += n
1742 endfor 1996 endfor
1743 res->assert_equal(6) 1997 res->assert_equal(6)
1998 enddef
1999
2000 def Test_rubyeval()
2001 if !has('ruby')
2002 CheckFeature ruby
2003 endif
2004 CheckDefAndScriptFailure2(['rubyeval([2])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E730: Using a List as a String')
1744 enddef 2005 enddef
1745 2006
1746 def Test_screenattr() 2007 def Test_screenattr()
1747 CheckDefFailure(['screenattr("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string') 2008 CheckDefFailure(['screenattr("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string')
1748 CheckDefFailure(['screenattr(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string') 2009 CheckDefFailure(['screenattr(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string')
1811 current: 1, 2072 current: 1,
1812 total: 1, 2073 total: 1,
1813 maxcount: 99, 2074 maxcount: 99,
1814 incomplete: 0}) 2075 incomplete: 0})
1815 bwipe! 2076 bwipe!
2077 CheckDefAndScriptFailure2(['searchcount([1])'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<number>', 'E715: Dictionary required')
1816 enddef 2078 enddef
1817 2079
1818 def Test_searchpair() 2080 def Test_searchpair()
1819 new 2081 new
1820 setline(1, "here { and } there") 2082 setline(1, "here { and } there")
1954 def Test_setfperm() 2216 def Test_setfperm()
1955 CheckDefFailure(['setfperm(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number') 2217 CheckDefFailure(['setfperm(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number')
1956 CheckDefFailure(['setfperm("a", 0z10)'], 'E1013: Argument 2: type mismatch, expected string but got blob') 2218 CheckDefFailure(['setfperm("a", 0z10)'], 'E1013: Argument 2: type mismatch, expected string but got blob')
1957 enddef 2219 enddef
1958 2220
2221 def Test_setbufline()
2222 new
2223 var bnum = bufnr('%')
2224 :wincmd w
2225 setbufline(bnum, 1, range(1, 3))
2226 setbufline(bnum, 4, 'one')
2227 setbufline(bnum, 5, 10)
2228 setbufline(bnum, 6, ['two', 11])
2229 assert_equal(['1', '2', '3', 'one', '10', 'two', '11'], getbufline(bnum, 1, '$'))
2230 CheckDefFailure(['setbufline([1], 1, "x")'], 'E1013: Argument 1: type mismatch, expected string but got list<number>')
2231 CheckDefFailure(['setbufline(1, [1], "x")'], 'E1013: Argument 2: type mismatch, expected string but got list<number>')
2232 CheckDefFailure(['setbufline(1, 1, {"a": 10})'], 'E1013: Argument 3: type mismatch, expected string but got dict<number>')
2233 bnum->bufwinid()->win_gotoid()
2234 bw!
2235 enddef
2236
2237 def Test_setcellwidths()
2238 CheckDefAndScriptFailure2(['setcellwidths(1)'], 'E1013: Argument 1: type mismatch, expected list<any> but got number', 'E714: List required')
2239 CheckDefAndScriptFailure2(['setcellwidths({"a": 10})'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<number>', 'E714: List required')
2240 enddef
2241
1959 def Test_setline() 2242 def Test_setline()
1960 new 2243 new
1961 setline(1, range(1, 4)) 2244 setline(1, range(1, 4))
1962 assert_equal(['1', '2', '3', '4'], getline(1, '$')) 2245 assert_equal(['1', '2', '3', '4'], getline(1, '$'))
1963 setline(1, ['a', 'b', 'c', 'd']) 2246 setline(1, ['a', 'b', 'c', 'd'])
1964 assert_equal(['a', 'b', 'c', 'd'], getline(1, '$')) 2247 assert_equal(['a', 'b', 'c', 'd'], getline(1, '$'))
1965 setline(1, 'one') 2248 setline(1, 'one')
1966 assert_equal(['one', 'b', 'c', 'd'], getline(1, '$')) 2249 assert_equal(['one', 'b', 'c', 'd'], getline(1, '$'))
2250 setline(1, 10)
2251 assert_equal(['10', 'b', 'c', 'd'], getline(1, '$'))
2252 CheckDefAndScriptFailure2(['setline([1], "x")'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E745: Using a List as a Number')
1967 bw! 2253 bw!
1968 enddef 2254 enddef
1969 2255
1970 def Test_setloclist() 2256 def Test_setloclist()
1971 var items = [{filename: '/tmp/file', lnum: 1, valid: true}] 2257 var items = [{filename: '/tmp/file', lnum: 1, valid: true}]
1996 CheckDefAndScriptFailure2(['sign_define({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E731: Using a Dictionary as a String') 2282 CheckDefAndScriptFailure2(['sign_define({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E731: Using a Dictionary as a String')
1997 CheckDefAndScriptFailure2(['sign_define({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E731: Using a Dictionary as a String') 2283 CheckDefAndScriptFailure2(['sign_define({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E731: Using a Dictionary as a String')
1998 CheckDefAndScriptFailure2(['sign_define("a", ["b"])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<string>', 'E715: Dictionary required') 2284 CheckDefAndScriptFailure2(['sign_define("a", ["b"])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<string>', 'E715: Dictionary required')
1999 enddef 2285 enddef
2000 2286
2287 def Test_sign_getdefined()
2288 CheckDefAndScriptFailure2(['sign_getdefined(["x"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1')
2289 CheckDefAndScriptFailure2(['sign_getdefined(2)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
2290 enddef
2291
2292 def Test_sign_placelist()
2293 CheckDefAndScriptFailure2(['sign_placelist("x")'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E714: List required')
2294 CheckDefAndScriptFailure2(['sign_placelist({"a": 10})'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<number>', 'E714: List required')
2295 enddef
2296
2001 def Test_sign_undefine() 2297 def Test_sign_undefine()
2002 CheckDefAndScriptFailure2(['sign_undefine({})'], 'E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E731: Using a Dictionary as a String') 2298 CheckDefAndScriptFailure2(['sign_undefine({})'], 'E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E731: Using a Dictionary as a String')
2003 CheckDefAndScriptFailure2(['sign_undefine([1])'], 'E1013: Argument 1: type mismatch, expected list<string> but got list<number>', 'E155: Unknown sign:') 2299 CheckDefAndScriptFailure2(['sign_undefine([1])'], 'E1013: Argument 1: type mismatch, expected list<string> but got list<number>', 'E155: Unknown sign:')
2004 enddef 2300 enddef
2005 2301
2006 def Test_sign_unplace() 2302 def Test_sign_unplace()
2007 CheckDefAndScriptFailure2(['sign_unplace({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E474: Invalid argument') 2303 CheckDefAndScriptFailure2(['sign_unplace({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E474: Invalid argument')
2008 CheckDefAndScriptFailure2(['sign_unplace({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E474: Invalid argument') 2304 CheckDefAndScriptFailure2(['sign_unplace({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E474: Invalid argument')
2009 CheckDefAndScriptFailure2(['sign_unplace("a", ["b"])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<string>', 'E715: Dictionary required') 2305 CheckDefAndScriptFailure2(['sign_unplace("a", ["b"])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<string>', 'E715: Dictionary required')
2306 enddef
2307
2308 def Test_sign_unplacelist()
2309 CheckDefAndScriptFailure2(['sign_unplacelist("x")'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E714: List required')
2310 CheckDefAndScriptFailure2(['sign_unplacelist({"a": 10})'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<number>', 'E714: List required')
2010 enddef 2311 enddef
2011 2312
2012 def Test_simplify() 2313 def Test_simplify()
2013 CheckDefFailure(['simplify(100)'], 'E1013: Argument 1: type mismatch, expected string but got number') 2314 CheckDefFailure(['simplify(100)'], 'E1013: Argument 1: type mismatch, expected string but got number')
2014 call assert_equal('NonExistingFile', simplify('NonExistingFile')) 2315 call assert_equal('NonExistingFile', simplify('NonExistingFile'))
2115 CheckScriptFailure(['vim9script', 'echo str2nr("123", "x")'], 'E1030:') 2416 CheckScriptFailure(['vim9script', 'echo str2nr("123", "x")'], 'E1030:')
2116 CheckDefFailure(['str2nr("123", 10, "x")'], 'E1013:') 2417 CheckDefFailure(['str2nr("123", 10, "x")'], 'E1013:')
2117 CheckScriptFailure(['vim9script', 'echo str2nr("123", 10, "x")'], 'E1135:') 2418 CheckScriptFailure(['vim9script', 'echo str2nr("123", 10, "x")'], 'E1135:')
2118 enddef 2419 enddef
2119 2420
2421 def Test_strcharlen()
2422 CheckDefAndScriptFailure2(['strcharlen([1])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E730: Using a List as a String')
2423 "abc"->strcharlen()->assert_equal(3)
2424 strcharlen(99)->assert_equal(2)
2425 enddef
2426
2120 def Test_strchars() 2427 def Test_strchars()
2121 strchars("A\u20dd", true)->assert_equal(1) 2428 strchars("A\u20dd", true)->assert_equal(1)
2429 enddef
2430
2431 def Test_strdisplaywidth()
2432 CheckDefAndScriptFailure2(['strdisplaywidth(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
2433 CheckDefAndScriptFailure2(['strdisplaywidth("a", "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
2434 enddef
2435
2436 def Test_strftime()
2437 CheckDefAndScriptFailure2(['strftime(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
2438 CheckDefAndScriptFailure2(['strftime("a", "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
2439 enddef
2440
2441 def Test_strgetchar()
2442 CheckDefAndScriptFailure2(['strgetchar(1, 1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
2443 CheckDefAndScriptFailure2(['strgetchar("a", "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
2122 enddef 2444 enddef
2123 2445
2124 def Test_stridx() 2446 def Test_stridx()
2125 CheckDefAndScriptFailure2(['stridx([1], "b")'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E730: Using a List as a String') 2447 CheckDefAndScriptFailure2(['stridx([1], "b")'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E730: Using a List as a String')
2126 CheckDefAndScriptFailure2(['stridx("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict<unknown>', 'E731: Using a Dictionary as a String') 2448 CheckDefAndScriptFailure2(['stridx("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict<unknown>', 'E731: Using a Dictionary as a String')
2209 CheckDefAndScriptFailure2(['tabpagenr(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E15: Invalid expression:') 2531 CheckDefAndScriptFailure2(['tabpagenr(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E15: Invalid expression:')
2210 assert_equal(1, tabpagenr('$')) 2532 assert_equal(1, tabpagenr('$'))
2211 assert_equal(1, tabpagenr()) 2533 assert_equal(1, tabpagenr())
2212 enddef 2534 enddef
2213 2535
2536 def Test_tabpagewinnr()
2537 CheckDefAndScriptFailure2(['tabpagewinnr("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
2538 CheckDefAndScriptFailure2(['tabpagewinnr(1, 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
2539 enddef
2540
2214 def Test_taglist() 2541 def Test_taglist()
2215 CheckDefAndScriptFailure2(['taglist([1])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E730: Using a List as a String') 2542 CheckDefAndScriptFailure2(['taglist([1])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E730: Using a List as a String')
2216 CheckDefAndScriptFailure2(['taglist("a", [2])'], 'E1013: Argument 2: type mismatch, expected string but got list<number>', 'E730: Using a List as a String') 2543 CheckDefAndScriptFailure2(['taglist("a", [2])'], 'E1013: Argument 2: type mismatch, expected string but got list<number>', 'E730: Using a List as a String')
2217 enddef 2544 enddef
2218 2545
2230 2557
2231 def Test_term_getansicolors() 2558 def Test_term_getansicolors()
2232 CheckRunVimInTerminal 2559 CheckRunVimInTerminal
2233 CheckFeature termguicolors 2560 CheckFeature termguicolors
2234 CheckDefAndScriptFailure2(['term_getansicolors(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E745: Using a List as a Number') 2561 CheckDefAndScriptFailure2(['term_getansicolors(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E745: Using a List as a Number')
2562 enddef
2563
2564 def Test_term_getattr()
2565 CheckRunVimInTerminal
2566 CheckDefAndScriptFailure2(['term_getattr("x", "a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
2567 CheckDefAndScriptFailure2(['term_getattr(1, 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
2235 enddef 2568 enddef
2236 2569
2237 def Test_term_getcursor() 2570 def Test_term_getcursor()
2238 CheckRunVimInTerminal 2571 CheckRunVimInTerminal
2239 CheckDefAndScriptFailure2(['term_getcursor({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E728: Using a Dictionary as a Number') 2572 CheckDefAndScriptFailure2(['term_getcursor({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E728: Using a Dictionary as a Number')
2306 test_ignore_error('RESET') 2639 test_ignore_error('RESET')
2307 enddef 2640 enddef
2308 2641
2309 def Test_test_option_not_set() 2642 def Test_test_option_not_set()
2310 CheckDefAndScriptFailure2(['test_option_not_set([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E474: Invalid argument') 2643 CheckDefAndScriptFailure2(['test_option_not_set([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E474: Invalid argument')
2644 enddef
2645
2646 def Test_test_override()
2647 CheckDefAndScriptFailure2(['test_override(1, 1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
2648 CheckDefAndScriptFailure2(['test_override("a", "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
2311 enddef 2649 enddef
2312 2650
2313 def Test_test_setmouse() 2651 def Test_test_setmouse()
2314 CheckDefAndScriptFailure2(['test_setmouse("a", 10)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E474: Invalid argument') 2652 CheckDefAndScriptFailure2(['test_setmouse("a", 10)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E474: Invalid argument')
2315 CheckDefAndScriptFailure2(['test_setmouse(10, "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E474: Invalid argument') 2653 CheckDefAndScriptFailure2(['test_setmouse(10, "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E474: Invalid argument')
2390 assert_equal(9, virtcol([1, '$'])) 2728 assert_equal(9, virtcol([1, '$']))
2391 assert_equal(0, virtcol([10, '$'])) 2729 assert_equal(0, virtcol([10, '$']))
2392 bw! 2730 bw!
2393 enddef 2731 enddef
2394 2732
2733 def Test_visualmode()
2734 CheckDefFailure(['visualmode("1")'], 'E1013: Argument 1: type mismatch, expected bool but got string')
2735 CheckDefFailure(['visualmode(2)'], 'E1013: Argument 1: type mismatch, expected bool but got number')
2736 enddef
2737
2395 def Test_win_execute() 2738 def Test_win_execute()
2396 assert_equal("\n" .. winnr(), win_execute(win_getid(), 'echo winnr()')) 2739 assert_equal("\n" .. winnr(), win_execute(win_getid(), 'echo winnr()'))
2397 assert_equal("\n" .. winnr(), 'echo winnr()'->win_execute(win_getid())) 2740 assert_equal("\n" .. winnr(), 'echo winnr()'->win_execute(win_getid()))
2398 assert_equal("\n" .. winnr(), win_execute(win_getid(), 'echo winnr()', 'silent')) 2741 assert_equal("\n" .. winnr(), win_execute(win_getid(), 'echo winnr()', 'silent'))
2399 assert_equal('', win_execute(342343, 'echo winnr()')) 2742 assert_equal('', win_execute(342343, 'echo winnr()'))
2409 CheckDefFailure(['win_getid(".")'], 'E1013: Argument 1: type mismatch, expected number but got string') 2752 CheckDefFailure(['win_getid(".")'], 'E1013: Argument 1: type mismatch, expected number but got string')
2410 CheckDefFailure(['win_getid(1, ".")'], 'E1013: Argument 2: type mismatch, expected number but got string') 2753 CheckDefFailure(['win_getid(1, ".")'], 'E1013: Argument 2: type mismatch, expected number but got string')
2411 assert_equal(win_getid(), win_getid(1, 1)) 2754 assert_equal(win_getid(), win_getid(1, 1))
2412 enddef 2755 enddef
2413 2756
2757 def Test_win_gettype()
2758 CheckDefAndScriptFailure2(['win_gettype("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number')
2759 enddef
2760
2761 def Test_win_gotoid()
2762 CheckDefAndScriptFailure2(['win_gotoid("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number')
2763 enddef
2764
2765 def Test_win_id2tabwin()
2766 CheckDefAndScriptFailure2(['win_id2tabwin("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number')
2767 enddef
2768
2769 def Test_win_id2win()
2770 CheckDefAndScriptFailure2(['win_id2win("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number')
2771 enddef
2772
2773 def Test_win_screenpos()
2774 CheckDefAndScriptFailure2(['win_screenpos("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number')
2775 enddef
2776
2414 def Test_win_splitmove() 2777 def Test_win_splitmove()
2415 split 2778 split
2416 win_splitmove(1, 2, {vertical: true, rightbelow: true}) 2779 win_splitmove(1, 2, {vertical: true, rightbelow: true})
2417 close 2780 close
2781 enddef
2782
2783 def Test_winbufnr()
2784 CheckDefAndScriptFailure2(['winbufnr("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number')
2785 enddef
2786
2787 def Test_winheight()
2788 CheckDefAndScriptFailure2(['winheight("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number')
2789 enddef
2790
2791 def Test_winlayout()
2792 CheckDefAndScriptFailure2(['winlayout("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number')
2418 enddef 2793 enddef
2419 2794
2420 def Test_winnr() 2795 def Test_winnr()
2421 CheckDefFailure(['winnr([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>') 2796 CheckDefFailure(['winnr([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>')
2422 assert_equal(1, winnr()) 2797 assert_equal(1, winnr())
2447 var view: list<number> = winsaveview() 2822 var view: list<number> = winsaveview()
2448 END 2823 END
2449 CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected list<number> but got dict<number>', 1) 2824 CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected list<number> but got dict<number>', 1)
2450 enddef 2825 enddef
2451 2826
2452 def Test_win_gettype()
2453 CheckDefAndScriptFailure2(['win_gettype("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number')
2454 enddef
2455
2456 def Test_win_gotoid()
2457 CheckDefAndScriptFailure2(['win_gotoid("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number')
2458 enddef
2459
2460 def Test_win_id2tabwin()
2461 CheckDefAndScriptFailure2(['win_id2tabwin("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number')
2462 enddef
2463
2464 def Test_win_id2win()
2465 CheckDefAndScriptFailure2(['win_id2win("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number')
2466 enddef
2467
2468 def Test_win_screenpos()
2469 CheckDefAndScriptFailure2(['win_screenpos("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number')
2470 enddef
2471
2472 def Test_winbufnr()
2473 CheckDefAndScriptFailure2(['winbufnr("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number')
2474 enddef
2475
2476 def Test_winheight()
2477 CheckDefAndScriptFailure2(['winheight("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number')
2478 enddef
2479
2480 def Test_winlayout()
2481 CheckDefAndScriptFailure2(['winlayout("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number')
2482 enddef
2483
2484 def Test_winwidth() 2827 def Test_winwidth()
2485 CheckDefAndScriptFailure2(['winwidth("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number') 2828 CheckDefAndScriptFailure2(['winwidth("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number')
2486 enddef 2829 enddef
2487 2830
2488 def Test_xor() 2831 def Test_xor()