1" Test using builtin functions in the Vim9 script language. 2 3source check.vim 4source vim9.vim 5 6" Test for passing too many or too few arguments to builtin functions 7func Test_internalfunc_arg_error() 8 let l =<< trim END 9 def! FArgErr(): float 10 return ceil(1.1, 2) 11 enddef 12 defcompile 13 END 14 call writefile(l, 'Xinvalidarg') 15 call assert_fails('so Xinvalidarg', 'E118:', '', 1, 'FArgErr') 16 let l =<< trim END 17 def! FArgErr(): float 18 return ceil() 19 enddef 20 defcompile 21 END 22 call writefile(l, 'Xinvalidarg') 23 call assert_fails('so Xinvalidarg', 'E119:', '', 1, 'FArgErr') 24 call delete('Xinvalidarg') 25endfunc 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> 35 return items({k: 'v'}) 36 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 54 call writefile(lines, 'Xscript') 55 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({}) 63 call delete('Xscript') 64endfunc 65 66def Test_abs() 67 assert_equal(0, abs(0)) 68 assert_equal(2, abs(-2)) 69 assert_equal(3, abs(3)) 70 CheckDefAndScriptFailure2(['abs("text")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') 71 if has('float') 72 assert_equal(0, abs(0)) 73 assert_equal(2.0, abs(-2.0)) 74 assert_equal(3.0, abs(3.0)) 75 endif 76enddef 77 78def Test_add() 79 CheckDefAndScriptFailure2(['add({}, 1)'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', 'E1226: List or Blob required for argument 1') 80 CheckDefFailure(['add([1], "a")'], 'E1012: Type mismatch; expected number but got string') 81enddef 82 83def Test_add_blob() 84 var b1: blob = 0z12 85 add(b1, 0x34) 86 assert_equal(0z1234, b1) 87 88 var b2: blob # defaults to empty blob 89 add(b2, 0x67) 90 assert_equal(0z67, b2) 91 92 var lines =<< trim END 93 var b: blob 94 add(b, "x") 95 END 96 CheckDefFailure(lines, 'E1012:', 2) 97 98 lines =<< trim END 99 add(test_null_blob(), 123) 100 END 101 CheckDefExecAndScriptFailure(lines, 'E1131:', 1) 102 103 lines =<< trim END 104 var b: blob = test_null_blob() 105 add(b, 123) 106 END 107 CheckDefExecFailure(lines, 'E1131:', 2) 108 109 # Getting variable with NULL blob allocates a new blob at script level 110 lines =<< trim END 111 vim9script 112 var b: blob = test_null_blob() 113 add(b, 123) 114 END 115 CheckScriptSuccess(lines) 116enddef 117 118def Test_add_list() 119 var l: list<number> # defaults to empty list 120 add(l, 9) 121 assert_equal([9], l) 122 123 var lines =<< trim END 124 var l: list<number> 125 add(l, "x") 126 END 127 CheckDefFailure(lines, 'E1012:', 2) 128 129 lines =<< trim END 130 add(test_null_list(), 123) 131 END 132 CheckDefExecAndScriptFailure(lines, 'E1130:', 1) 133 134 lines =<< trim END 135 var l: list<number> = test_null_list() 136 add(l, 123) 137 END 138 CheckDefExecFailure(lines, 'E1130:', 2) 139 140 # Getting variable with NULL list allocates a new list at script level 141 lines =<< trim END 142 vim9script 143 var l: list<number> = test_null_list() 144 add(l, 123) 145 END 146 CheckScriptSuccess(lines) 147 148 lines =<< trim END 149 vim9script 150 var l: list<string> = ['a'] 151 l->add(123) 152 END 153 CheckScriptFailure(lines, 'E1012: Type mismatch; expected string but got number', 3) 154 155 lines =<< trim END 156 vim9script 157 var l: list<string> 158 l->add(123) 159 END 160 CheckScriptFailure(lines, 'E1012: Type mismatch; expected string but got number', 3) 161enddef 162 163def Test_and() 164 CheckDefAndScriptFailure2(['and("x", 0x2)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 165 CheckDefAndScriptFailure2(['and(0x1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 166enddef 167 168def Test_append() 169 new 170 setline(1, range(3)) 171 var res1: number = append(1, 'one') 172 assert_equal(0, res1) 173 var res2: bool = append(3, 'two') 174 assert_equal(false, res2) 175 assert_equal(['0', 'one', '1', 'two', '2'], getline(1, 6)) 176 177 append(0, 'zero') 178 assert_equal('zero', getline(1)) 179 append(0, {a: 10}) 180 assert_equal("{'a': 10}", getline(1)) 181 append(0, function('min')) 182 assert_equal("function('min')", getline(1)) 183 CheckDefAndScriptFailure2(['append([1], "x")'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1') 184 bwipe! 185enddef 186 187def Test_appendbufline() 188 new 189 var bnum: number = bufnr() 190 :wincmd w 191 appendbufline(bnum, 0, range(3)) 192 var res1: number = appendbufline(bnum, 1, 'one') 193 assert_equal(0, res1) 194 var res2: bool = appendbufline(bnum, 3, 'two') 195 assert_equal(false, res2) 196 assert_equal(['0', 'one', '1', 'two', '2', ''], getbufline(bnum, 1, '$')) 197 appendbufline(bnum, 0, 'zero') 198 assert_equal(['zero'], getbufline(bnum, 1)) 199 CheckDefAndScriptFailure2(['appendbufline([1], 1, "x")'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1') 200 CheckDefAndScriptFailure2(['appendbufline(1, [1], "x")'], 'E1013: Argument 2: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 2') 201 CheckDefAndScriptFailure2(['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') 202 bnum->bufwinid()->win_gotoid() 203 bwipe! 204enddef 205 206def Test_argc() 207 CheckDefAndScriptFailure2(['argc("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 208enddef 209 210def Test_arglistid() 211 CheckDefAndScriptFailure2(['arglistid("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 212 CheckDefAndScriptFailure2(['arglistid(1, "y")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 213 CheckDefAndScriptFailure2(['arglistid("x", "y")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 214enddef 215 216def Test_argv() 217 CheckDefAndScriptFailure2(['argv("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 218 CheckDefAndScriptFailure2(['argv(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 219 CheckDefAndScriptFailure2(['argv("x", "y")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 220enddef 221 222def Test_assert_beeps() 223 CheckDefAndScriptFailure2(['assert_beeps(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 224enddef 225 226def Test_assert_equalfile() 227 CheckDefAndScriptFailure2(['assert_equalfile(1, "f2")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 228 CheckDefAndScriptFailure2(['assert_equalfile("f1", true)'], 'E1013: Argument 2: type mismatch, expected string but got bool', 'E1174: String required for argument 2') 229 CheckDefAndScriptFailure2(['assert_equalfile("f1", "f2", ["a"])'], 'E1013: Argument 3: type mismatch, expected string but got list<string>', 'E1174: String required for argument 3') 230enddef 231 232def Test_assert_exception() 233 CheckDefAndScriptFailure2(['assert_exception({})'], 'E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 1') 234 CheckDefAndScriptFailure2(['assert_exception("E1:", v:null)'], 'E1013: Argument 2: type mismatch, expected string but got special', 'E1174: String required for argument 2') 235enddef 236 237def Test_assert_fails() 238 CheckDefAndScriptFailure2(['assert_fails([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1') 239 CheckDefAndScriptFailure2(['assert_fails("a", true)'], 'E1013: Argument 2: type mismatch, expected string but got bool', 'E1222: String or List required for argument 2') 240 CheckDefAndScriptFailure2(['assert_fails("a", "b", "c", "d")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') 241 CheckDefAndScriptFailure2(['assert_fails("a", "b", "c", 4, 5)'], 'E1013: Argument 5: type mismatch, expected string but got number', 'E1174: String required for argument 5') 242enddef 243 244def Test_assert_inrange() 245 CheckDefAndScriptFailure2(['assert_inrange("a", 2, 3)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') 246 CheckDefAndScriptFailure2(['assert_inrange(1, "b", 3)'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 2') 247 CheckDefAndScriptFailure2(['assert_inrange(1, 2, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 3') 248 CheckDefAndScriptFailure2(['assert_inrange(1, 2, 3, 4)'], 'E1013: Argument 4: type mismatch, expected string but got number', 'E1174: String required for argument 4') 249enddef 250 251def Test_assert_match() 252 CheckDefAndScriptFailure2(['assert_match({}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<unknown>', '') 253 CheckDefAndScriptFailure2(['assert_match("a", 1)'], 'E1013: Argument 2: type mismatch, expected string but got number', '') 254 CheckDefAndScriptFailure2(['assert_match("a", "b", null)'], 'E1013: Argument 3: type mismatch, expected string but got special', '') 255enddef 256 257def Test_assert_nobeep() 258 CheckDefAndScriptFailure2(['assert_nobeep(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 259enddef 260 261def Test_assert_notmatch() 262 CheckDefAndScriptFailure2(['assert_notmatch({}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<unknown>', '') 263 CheckDefAndScriptFailure2(['assert_notmatch("a", 1)'], 'E1013: Argument 2: type mismatch, expected string but got number', '') 264 CheckDefAndScriptFailure2(['assert_notmatch("a", "b", null)'], 'E1013: Argument 3: type mismatch, expected string but got special', '') 265enddef 266 267def Test_assert_report() 268 CheckDefAndScriptFailure2(['assert_report([1, 2])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1') 269enddef 270 271def Test_balloon_show() 272 CheckGui 273 CheckFeature balloon_eval 274 275 assert_fails('balloon_show(10)', 'E1222:') 276 assert_fails('balloon_show(true)', 'E1222:') 277 278 CheckDefAndScriptFailure2(['balloon_show(1.2)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1222: String or List required for argument 1') 279 CheckDefAndScriptFailure2(['balloon_show({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1222: String or List required for argument 1') 280enddef 281 282def Test_balloon_split() 283 CheckFeature balloon_eval_term 284 285 assert_fails('balloon_split([])', 'E1174:') 286 assert_fails('balloon_split(true)', 'E1174:') 287enddef 288 289def Test_browse() 290 CheckFeature browse 291 292 CheckDefAndScriptFailure2(['browse(2, "title", "dir", "file")'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1') 293 CheckDefAndScriptFailure2(['browse(true, 2, "dir", "file")'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 294 CheckDefAndScriptFailure2(['browse(true, "title", 3, "file")'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') 295 CheckDefAndScriptFailure2(['browse(true, "title", "dir", 4)'], 'E1013: Argument 4: type mismatch, expected string but got number', 'E1174: String required for argument 4') 296enddef 297 298def Test_browsedir() 299 if has('browse') 300 CheckDefAndScriptFailure2(['browsedir({}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 1') 301 CheckDefAndScriptFailure2(['browsedir("a", [])'], 'E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2') 302 endif 303enddef 304 305def Test_bufadd() 306 assert_fails('bufadd([])', 'E1174:') 307enddef 308 309def Test_bufexists() 310 assert_fails('bufexists(true)', 'E1220:') 311enddef 312 313def Test_buflisted() 314 var res: bool = buflisted('asdf') 315 assert_equal(false, res) 316 assert_fails('buflisted(true)', 'E1220:') 317 assert_fails('buflisted([])', 'E1220:') 318enddef 319 320def Test_bufload() 321 assert_fails('bufload([])', 'E1220:') 322enddef 323 324def Test_bufloaded() 325 assert_fails('bufloaded(true)', 'E1220:') 326 assert_fails('bufloaded([])', 'E1220:') 327enddef 328 329def Test_bufname() 330 split SomeFile 331 bufname('%')->assert_equal('SomeFile') 332 edit OtherFile 333 bufname('#')->assert_equal('SomeFile') 334 close 335 assert_fails('bufname(true)', 'E1220:') 336 assert_fails('bufname([])', 'E1220:') 337enddef 338 339def Test_bufnr() 340 var buf = bufnr() 341 bufnr('%')->assert_equal(buf) 342 343 buf = bufnr('Xdummy', true) 344 buf->assert_notequal(-1) 345 exe 'bwipe! ' .. buf 346 CheckDefAndScriptFailure2(['bufnr([1])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1') 347 CheckDefAndScriptFailure2(['bufnr(1, 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2') 348enddef 349 350def Test_bufwinid() 351 var origwin = win_getid() 352 below split SomeFile 353 var SomeFileID = win_getid() 354 below split OtherFile 355 below split SomeFile 356 bufwinid('SomeFile')->assert_equal(SomeFileID) 357 358 win_gotoid(origwin) 359 only 360 bwipe SomeFile 361 bwipe OtherFile 362 363 assert_fails('bufwinid(true)', 'E1220:') 364 assert_fails('bufwinid([])', 'E1220:') 365enddef 366 367def Test_bufwinnr() 368 assert_fails('bufwinnr(true)', 'E1220:') 369 assert_fails('bufwinnr([])', 'E1220:') 370enddef 371 372def Test_byte2line() 373 CheckDefAndScriptFailure2(['byte2line("1")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 374 CheckDefAndScriptFailure2(['byte2line([])'], 'E1013: Argument 1: type mismatch, expected number but got list<unknown>', 'E1210: Number required for argument 1') 375 assert_equal(-1, byte2line(0)) 376enddef 377 378def Test_byteidx() 379 CheckDefAndScriptFailure2(['byteidx(1, 2)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 380 CheckDefAndScriptFailure2(['byteidx("a", "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 381enddef 382 383def Test_byteidxcomp() 384 CheckDefAndScriptFailure2(['byteidxcomp(1, 2)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 385 CheckDefAndScriptFailure2(['byteidxcomp("a", "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 386enddef 387 388def Test_call_call() 389 var l = [3, 2, 1] 390 call('reverse', [l]) 391 l->assert_equal([1, 2, 3]) 392 CheckDefAndScriptFailure2(['call("reverse", 2)'], 'E1013: Argument 2: type mismatch, expected list<any> but got number', 'E1211: List required for argument 2') 393 CheckDefAndScriptFailure2(['call("reverse", [2], [1])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3') 394enddef 395 396def Test_ch_canread() 397 if !has('channel') 398 CheckFeature channel 399 else 400 CheckDefAndScriptFailure2(['ch_canread(10)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1') 401 endif 402enddef 403 404def Test_ch_close() 405 if !has('channel') 406 CheckFeature channel 407 else 408 CheckDefAndScriptFailure2(['ch_close("c")'], 'E1013: Argument 1: type mismatch, expected channel but got string', 'E1217: Channel or Job required for argument 1') 409 endif 410enddef 411 412def Test_ch_close_in() 413 if !has('channel') 414 CheckFeature channel 415 else 416 CheckDefAndScriptFailure2(['ch_close_in(true)'], 'E1013: Argument 1: type mismatch, expected channel but got bool', 'E1217: Channel or Job required for argument 1') 417 endif 418enddef 419 420def Test_ch_evalexpr() 421 if !has('channel') 422 CheckFeature channel 423 else 424 CheckDefAndScriptFailure2(['ch_evalexpr(1, "a")'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1') 425 CheckDefAndScriptFailure2(['ch_evalexpr(test_null_channel(), 1, [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3') 426 endif 427enddef 428 429def Test_ch_evalraw() 430 if !has('channel') 431 CheckFeature channel 432 else 433 CheckDefAndScriptFailure2(['ch_evalraw(1, "")'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1') 434 CheckDefAndScriptFailure2(['ch_evalraw(test_null_channel(), 1)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1221: String or Blob required for argument 2') 435 CheckDefAndScriptFailure2(['ch_evalraw(test_null_channel(), "", [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3') 436 endif 437enddef 438 439def Test_ch_getbufnr() 440 if !has('channel') 441 CheckFeature channel 442 else 443 CheckDefAndScriptFailure2(['ch_getbufnr(1, "a")'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1') 444 CheckDefAndScriptFailure2(['ch_getbufnr(test_null_channel(), 1)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 445 endif 446enddef 447 448def Test_ch_getjob() 449 if !has('channel') 450 CheckFeature channel 451 else 452 CheckDefAndScriptFailure2(['ch_getjob(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1') 453 CheckDefAndScriptFailure2(['ch_getjob({"a": 10})'], 'E1013: Argument 1: type mismatch, expected channel but got dict<number>', 'E1217: Channel or Job required for argument 1') 454 assert_equal(0, ch_getjob(test_null_channel())) 455 endif 456enddef 457 458def Test_ch_info() 459 if !has('channel') 460 CheckFeature channel 461 else 462 CheckDefAndScriptFailure2(['ch_info([1])'], 'E1013: Argument 1: type mismatch, expected channel but got list<number>', 'E1217: Channel or Job required for argument 1') 463 endif 464enddef 465 466def Test_ch_log() 467 if !has('channel') 468 CheckFeature channel 469 else 470 CheckDefAndScriptFailure2(['ch_log(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1') 471 CheckDefAndScriptFailure2(['ch_log("a", 1)'], 'E1013: Argument 2: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 2') 472 endif 473enddef 474 475def Test_ch_logfile() 476 if !has('channel') 477 CheckFeature channel 478 else 479 assert_fails('ch_logfile(true)', 'E1174:') 480 assert_fails('ch_logfile("foo", true)', 'E1174:') 481 482 CheckDefAndScriptFailure2(['ch_logfile(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 483 CheckDefAndScriptFailure2(['ch_logfile("a", true)'], 'E1013: Argument 2: type mismatch, expected string but got bool', 'E1174: String required for argument 2') 484 endif 485enddef 486 487def Test_ch_open() 488 if !has('channel') 489 CheckFeature channel 490 else 491 CheckDefAndScriptFailure2(['ch_open({"a": 10}, "a")'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1') 492 CheckDefAndScriptFailure2(['ch_open("a", [1])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 2') 493 endif 494enddef 495 496def Test_ch_read() 497 if !has('channel') 498 CheckFeature channel 499 else 500 CheckDefAndScriptFailure2(['ch_read(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1') 501 CheckDefAndScriptFailure2(['ch_read(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2') 502 endif 503enddef 504 505def Test_ch_readblob() 506 if !has('channel') 507 CheckFeature channel 508 else 509 CheckDefAndScriptFailure2(['ch_readblob(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1') 510 CheckDefAndScriptFailure2(['ch_readblob(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2') 511 endif 512enddef 513 514def Test_ch_readraw() 515 if !has('channel') 516 CheckFeature channel 517 else 518 CheckDefAndScriptFailure2(['ch_readraw(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1') 519 CheckDefAndScriptFailure2(['ch_readraw(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2') 520 endif 521enddef 522 523def Test_ch_sendexpr() 524 if !has('channel') 525 CheckFeature channel 526 else 527 CheckDefAndScriptFailure2(['ch_sendexpr(1, "a")'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1') 528 CheckDefAndScriptFailure2(['ch_sendexpr(test_null_channel(), 1, [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3') 529 endif 530enddef 531 532def Test_ch_sendraw() 533 if !has('channel') 534 CheckFeature channel 535 else 536 CheckDefAndScriptFailure2(['ch_sendraw(1, "")'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1') 537 CheckDefAndScriptFailure2(['ch_sendraw(test_null_channel(), 1)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1221: String or Blob required for argument 2') 538 CheckDefAndScriptFailure2(['ch_sendraw(test_null_channel(), "", [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3') 539 endif 540enddef 541 542def Test_ch_setoptions() 543 if !has('channel') 544 CheckFeature channel 545 else 546 CheckDefAndScriptFailure2(['ch_setoptions(1, {})'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1') 547 CheckDefAndScriptFailure2(['ch_setoptions(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2') 548 endif 549enddef 550 551def Test_ch_status() 552 if !has('channel') 553 CheckFeature channel 554 else 555 CheckDefAndScriptFailure2(['ch_status(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1') 556 CheckDefAndScriptFailure2(['ch_status(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2') 557 endif 558enddef 559 560def Test_char2nr() 561 char2nr('あ', true)->assert_equal(12354) 562 563 assert_fails('char2nr(true)', 'E1174:') 564 CheckDefAndScriptFailure2(['char2nr(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 565 CheckDefAndScriptFailure2(['char2nr("a", 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2') 566 assert_equal(97, char2nr('a', 1)) 567 assert_equal(97, char2nr('a', 0)) 568 assert_equal(97, char2nr('a', true)) 569 assert_equal(97, char2nr('a', false)) 570enddef 571 572def Test_charclass() 573 assert_fails('charclass(true)', 'E1174:') 574enddef 575 576def Test_charcol() 577 CheckDefAndScriptFailure2(['charcol(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1222: String or List required for argument 1') 578 CheckDefAndScriptFailure2(['charcol({a: 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1222: String or List required for argument 1') 579 new 580 setline(1, ['abcdefgh']) 581 cursor(1, 4) 582 assert_equal(4, charcol('.')) 583 assert_equal(9, charcol([1, '$'])) 584 assert_equal(0, charcol([10, '$'])) 585 bw! 586enddef 587 588def Test_charidx() 589 CheckDefAndScriptFailure2(['charidx(0z10, 1)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1174: String required for argument 1') 590 CheckDefAndScriptFailure2(['charidx("a", "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 591 CheckDefAndScriptFailure2(['charidx("a", 1, "")'], 'E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3') 592enddef 593 594def Test_chdir() 595 assert_fails('chdir(true)', 'E1174:') 596enddef 597 598def Test_cindent() 599 CheckDefAndScriptFailure2(['cindent([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1') 600 CheckDefAndScriptFailure2(['cindent(null)'], 'E1013: Argument 1: type mismatch, expected string but got special', 'E1220: String or Number required for argument 1') 601 assert_equal(-1, cindent(0)) 602 assert_equal(0, cindent('.')) 603enddef 604 605def Test_clearmatches() 606 CheckDefAndScriptFailure2(['clearmatches("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 607enddef 608 609def Test_col() 610 new 611 setline(1, 'abcdefgh') 612 cursor(1, 4) 613 assert_equal(4, col('.')) 614 col([1, '$'])->assert_equal(9) 615 assert_equal(0, col([10, '$'])) 616 617 assert_fails('col(true)', 'E1222:') 618 619 CheckDefAndScriptFailure2(['col(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1222: String or List required for argument 1') 620 CheckDefAndScriptFailure2(['col({a: 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1222: String or List required for argument 1') 621 CheckDefAndScriptFailure2(['col(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1222: String or List required for argument 1') 622 bw! 623enddef 624 625def Test_complete() 626 CheckDefAndScriptFailure2(['complete("1", [])'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 627 CheckDefAndScriptFailure2(['complete(1, {})'], 'E1013: Argument 2: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 2') 628enddef 629 630def Test_complete_add() 631 CheckDefAndScriptFailure2(['complete_add([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1223: String or Dictionary required for argument 1') 632enddef 633 634def Test_complete_info() 635 CheckDefAndScriptFailure2(['complete_info("")'], 'E1013: Argument 1: type mismatch, expected list<string> but got string', 'E1211: List required for argument 1') 636 CheckDefAndScriptFailure2(['complete_info({})'], 'E1013: Argument 1: type mismatch, expected list<string> but got dict<unknown>', 'E1211: List required for argument 1') 637 assert_equal({'pum_visible': 0, 'mode': '', 'selected': -1, 'items': []}, complete_info()) 638 assert_equal({'mode': '', 'items': []}, complete_info(['mode', 'items'])) 639enddef 640 641def Test_confirm() 642 if !has('dialog_con') && !has('dialog_gui') 643 CheckFeature dialog_con 644 endif 645 646 assert_fails('confirm(true)', 'E1174:') 647 assert_fails('confirm("yes", true)', 'E1174:') 648 assert_fails('confirm("yes", "maybe", 2, true)', 'E1174:') 649 CheckDefAndScriptFailure2(['confirm(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 650 CheckDefAndScriptFailure2(['confirm("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 651 CheckDefAndScriptFailure2(['confirm("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 652 CheckDefAndScriptFailure2(['confirm("a", "b", 3, 4)'], 'E1013: Argument 4: type mismatch, expected string but got number', 'E1174: String required for argument 4') 653enddef 654 655def Test_copy_return_type() 656 var l = copy([1, 2, 3]) 657 var res = 0 658 for n in l 659 res += n 660 endfor 661 res->assert_equal(6) 662 663 var dl = deepcopy([1, 2, 3]) 664 res = 0 665 for n in dl 666 res += n 667 endfor 668 res->assert_equal(6) 669 670 dl = deepcopy([1, 2, 3], true) 671enddef 672 673def Test_count() 674 count('ABC ABC ABC', 'b', true)->assert_equal(3) 675 count('ABC ABC ABC', 'b', false)->assert_equal(0) 676 CheckDefAndScriptFailure2(['count(10, 1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1225: String, List or Dictionary required for argument 1') 677 CheckDefAndScriptFailure2(['count("a", [1], 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3') 678 CheckDefAndScriptFailure2(['count("a", [1], 0, "b")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') 679 count([1, 2, 2, 3], 2)->assert_equal(2) 680 count([1, 2, 2, 3], 2, false, 2)->assert_equal(1) 681 count({a: 1.1, b: 2.2, c: 1.1}, 1.1)->assert_equal(2) 682enddef 683 684def Test_cscope_connection() 685 CheckFeature cscope 686 assert_equal(0, cscope_connection()) 687 CheckDefAndScriptFailure2(['cscope_connection("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 688 CheckDefAndScriptFailure2(['cscope_connection(1, 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 689 CheckDefAndScriptFailure2(['cscope_connection(1, "b", 3)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') 690enddef 691 692def Test_cursor() 693 new 694 setline(1, range(4)) 695 cursor(2, 1) 696 assert_equal(2, getcurpos()[1]) 697 cursor('$', 1) 698 assert_equal(4, getcurpos()[1]) 699 cursor([2, 1]) 700 assert_equal(2, getcurpos()[1]) 701 702 var lines =<< trim END 703 cursor('2', 1) 704 END 705 CheckDefExecAndScriptFailure(lines, 'E1209:') 706 CheckDefAndScriptFailure2(['cursor(0z10, 1)'], 'E1013: Argument 1: type mismatch, expected number but got blob', 'E1224: String, Number or List required for argument 1') 707 CheckDefAndScriptFailure2(['cursor(1, "2")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 708 CheckDefAndScriptFailure2(['cursor(1, 2, "3")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 709enddef 710 711def Test_debugbreak() 712 CheckMSWindows 713 CheckDefAndScriptFailure2(['debugbreak("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 714enddef 715 716def Test_deepcopy() 717 CheckDefAndScriptFailure2(['deepcopy({}, 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2') 718enddef 719 720def Test_delete() 721 var res: bool = delete('doesnotexist') 722 assert_equal(true, res) 723 724 CheckDefAndScriptFailure2(['delete(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 725 CheckDefAndScriptFailure2(['delete("a", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 726enddef 727 728def Test_deletebufline() 729 CheckDefAndScriptFailure2(['deletebufline([], 2)'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1') 730 CheckDefAndScriptFailure2(['deletebufline("a", [])'], 'E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 2') 731 CheckDefAndScriptFailure2(['deletebufline("a", 2, 0z10)'], 'E1013: Argument 3: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 3') 732enddef 733 734def Test_diff_filler() 735 CheckDefAndScriptFailure2(['diff_filler([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1') 736 CheckDefAndScriptFailure2(['diff_filler(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1') 737 assert_equal(0, diff_filler(1)) 738 assert_equal(0, diff_filler('.')) 739enddef 740 741def Test_diff_hlID() 742 CheckDefAndScriptFailure2(['diff_hlID(0z10, 1)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1') 743 CheckDefAndScriptFailure2(['diff_hlID(1, "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 744enddef 745 746def Test_echoraw() 747 CheckDefAndScriptFailure2(['echoraw(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 748 CheckDefAndScriptFailure2(['echoraw(["x"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1') 749enddef 750 751def Test_escape() 752 CheckDefAndScriptFailure2(['escape(10, " ")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 753 CheckDefAndScriptFailure2(['escape(true, false)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1') 754 CheckDefAndScriptFailure2(['escape("a", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 755 assert_equal('a\:b', escape("a:b", ":")) 756enddef 757 758def Test_eval() 759 CheckDefAndScriptFailure2(['eval(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 760 CheckDefAndScriptFailure2(['eval(null)'], 'E1013: Argument 1: type mismatch, expected string but got special', 'E1174: String required for argument 1') 761 assert_equal(2, eval('1 + 1')) 762enddef 763 764def Test_executable() 765 assert_false(executable("")) 766 assert_false(executable(test_null_string())) 767 768 CheckDefExecFailure(['echo executable(123)'], 'E1013:') 769 CheckDefExecFailure(['echo executable(true)'], 'E1013:') 770enddef 771 772def Test_execute() 773 var res = execute("echo 'hello'") 774 assert_equal("\nhello", res) 775 res = execute(["echo 'here'", "echo 'there'"]) 776 assert_equal("\nhere\nthere", res) 777 778 CheckDefAndScriptFailure2(['execute(123)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1222: String or List required for argument 1') 779 CheckDefFailure(['execute([123])'], 'E1013: Argument 1: type mismatch, expected list<string> but got list<number>') 780 CheckDefExecFailure(['echo execute(["xx", 123])'], 'E492') 781 CheckDefAndScriptFailure2(['execute("xx", 123)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 782enddef 783 784def Test_exepath() 785 CheckDefExecFailure(['echo exepath(true)'], 'E1013:') 786 CheckDefExecFailure(['echo exepath(v:null)'], 'E1013:') 787 CheckDefExecFailure(['echo exepath("")'], 'E1175:') 788enddef 789 790def Test_exists() 791 CheckDefAndScriptFailure2(['exists(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 792 call assert_equal(1, exists('&tabstop')) 793 794 if exists('+newoption') 795 if &newoption == 'ok' 796 endif 797 endif 798 if exists('&newoption') 799 if &newoption == 'ok' 800 endif 801 endif 802 if exists('+tabstop') 803 assert_equal(8, &tabstop) 804 else 805 assert_report('tabstop option not existing?') 806 endif 807 if exists('&tabstop') 808 assert_equal(8, &tabstop) 809 else 810 assert_report('tabstop option not existing?') 811 endif 812enddef 813 814def Test_expand() 815 split SomeFile 816 expand('%', true, true)->assert_equal(['SomeFile']) 817 close 818 CheckDefAndScriptFailure2(['expand(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 819 CheckDefAndScriptFailure2(['expand("a", 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2') 820 CheckDefAndScriptFailure2(['expand("a", true, 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3') 821enddef 822 823def Test_expandcmd() 824 $FOO = "blue" 825 assert_equal("blue sky", expandcmd("`=$FOO .. ' sky'`")) 826 827 assert_equal("yes", expandcmd("`={a: 'yes'}['a']`")) 828enddef 829 830def Test_extend_arg_types() 831 g:number_one = 1 832 g:string_keep = 'keep' 833 var lines =<< trim END 834 assert_equal([1, 2, 3], extend([1, 2], [3])) 835 assert_equal([3, 1, 2], extend([1, 2], [3], 0)) 836 assert_equal([1, 3, 2], extend([1, 2], [3], 1)) 837 assert_equal([1, 3, 2], extend([1, 2], [3], g:number_one)) 838 839 assert_equal({a: 1, b: 2, c: 3}, extend({a: 1, b: 2}, {c: 3})) 840 assert_equal({a: 1, b: 4}, extend({a: 1, b: 2}, {b: 4})) 841 assert_equal({a: 1, b: 2}, extend({a: 1, b: 2}, {b: 4}, 'keep')) 842 assert_equal({a: 1, b: 2}, extend({a: 1, b: 2}, {b: 4}, g:string_keep)) 843 844 var res: list<dict<any>> 845 extend(res, mapnew([1, 2], (_, v) => ({}))) 846 assert_equal([{}, {}], res) 847 END 848 CheckDefAndScriptSuccess(lines) 849 850 CheckDefAndScriptFailure2(['extend("a", 1)'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E712: Argument of extend() must be a List or Dictionary') 851 CheckDefAndScriptFailure2(['extend([1, 2], 3)'], 'E1013: Argument 2: type mismatch, expected list<number> but got number', 'E712: Argument of extend() must be a List or Dictionary') 852 CheckDefAndScriptFailure2(['extend([1, 2], ["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>') 853 CheckDefFailure(['extend([1, 2], [3], "x")'], 'E1013: Argument 3: type mismatch, expected number but got string') 854 855 CheckDefFailure(['extend({a: 1}, 42)'], 'E1013: Argument 2: type mismatch, expected dict<number> but got number') 856 CheckDefFailure(['extend({a: 1}, {b: "x"})'], 'E1013: Argument 2: type mismatch, expected dict<number> but got dict<string>') 857 CheckDefFailure(['extend({a: 1}, {b: 2}, 1)'], 'E1013: Argument 3: type mismatch, expected string but got number') 858 859 CheckDefFailure(['extend([1], ["b"])'], 'E1013: Argument 2: type mismatch, expected list<number> but got list<string>') 860 CheckDefExecFailure(['extend([1], ["b", 1])'], 'E1013: Argument 2: type mismatch, expected list<number> but got list<any>') 861 862 CheckScriptFailure(['vim9script', 'extend([1], ["b", 1])'], 'E1013: Argument 2: type mismatch, expected list<number> but got list<any> in extend()') 863enddef 864 865func g:ExtendDict(d) 866 call extend(a:d, #{xx: 'x'}) 867endfunc 868 869def Test_extend_dict_item_type() 870 var lines =<< trim END 871 var d: dict<number> = {a: 1} 872 extend(d, {b: 2}) 873 END 874 CheckDefAndScriptSuccess(lines) 875 876 lines =<< trim END 877 var d: dict<number> = {a: 1} 878 extend(d, {b: 'x'}) 879 END 880 CheckDefAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected dict<number> but got dict<string>', 2) 881 882 lines =<< trim END 883 var d: dict<number> = {a: 1} 884 g:ExtendDict(d) 885 END 886 CheckDefExecFailure(lines, 'E1012: Type mismatch; expected number but got string', 0) 887 CheckScriptFailure(['vim9script'] + lines, 'E1012:', 1) 888enddef 889 890func g:ExtendList(l) 891 call extend(a:l, ['x']) 892endfunc 893 894def Test_extend_list_item_type() 895 var lines =<< trim END 896 var l: list<number> = [1] 897 extend(l, [2]) 898 END 899 CheckDefAndScriptSuccess(lines) 900 901 lines =<< trim END 902 var l: list<number> = [1] 903 extend(l, ['x']) 904 END 905 CheckDefAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected list<number> but got list<string>', 2) 906 907 lines =<< trim END 908 var l: list<number> = [1] 909 g:ExtendList(l) 910 END 911 CheckDefExecFailure(lines, 'E1012: Type mismatch; expected number but got string', 0) 912 CheckScriptFailure(['vim9script'] + lines, 'E1012:', 1) 913enddef 914 915def Test_extend_return_type() 916 var l = extend([1, 2], [3]) 917 var res = 0 918 for n in l 919 res += n 920 endfor 921 res->assert_equal(6) 922enddef 923 924def Test_extend_with_error_function() 925 var lines =<< trim END 926 vim9script 927 def F() 928 { 929 var m = 10 930 } 931 echo m 932 enddef 933 934 def Test() 935 var d: dict<any> = {} 936 d->extend({A: 10, Func: function('F', [])}) 937 enddef 938 939 Test() 940 END 941 CheckScriptFailure(lines, 'E1001: Variable not found: m') 942enddef 943 944def Test_extendnew() 945 assert_equal([1, 2, 'a'], extendnew([1, 2], ['a'])) 946 assert_equal({one: 1, two: 'a'}, extendnew({one: 1}, {two: 'a'})) 947 948 CheckDefAndScriptFailure2(['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') 949 CheckDefAndScriptFailure2(['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') 950 CheckDefAndScriptFailure2(['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') 951 CheckDefAndScriptFailure2(['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') 952enddef 953 954def Test_feedkeys() 955 CheckDefAndScriptFailure2(['feedkeys(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 956 CheckDefAndScriptFailure2(['feedkeys("x", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 957 CheckDefAndScriptFailure2(['feedkeys([], {})'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1') 958 g:TestVar = 1 959 feedkeys(":g:TestVar = 789\n", 'xt') 960 assert_equal(789, g:TestVar) 961 unlet g:TestVar 962enddef 963 964def Test_filereadable() 965 assert_false(filereadable("")) 966 assert_false(filereadable(test_null_string())) 967 968 CheckDefExecFailure(['echo filereadable(123)'], 'E1013:') 969 CheckDefExecFailure(['echo filereadable(true)'], 'E1013:') 970enddef 971 972def Test_filewritable() 973 assert_false(filewritable("")) 974 assert_false(filewritable(test_null_string())) 975 976 CheckDefExecFailure(['echo filewritable(123)'], 'E1013:') 977 CheckDefExecFailure(['echo filewritable(true)'], 'E1013:') 978enddef 979 980def Test_finddir() 981 CheckDefAndScriptFailure2(['finddir(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1') 982 CheckDefAndScriptFailure2(['finddir(v:null)'], 'E1013: Argument 1: type mismatch, expected string but got special', 'E1174: String required for argument 1') 983 CheckDefExecFailure(['echo finddir("")'], 'E1175:') 984 CheckDefAndScriptFailure2(['finddir("a", [])'], 'E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2') 985 CheckDefAndScriptFailure2(['finddir("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 986enddef 987 988def Test_findfile() 989 CheckDefExecFailure(['findfile(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool') 990 CheckDefExecFailure(['findfile(v:null)'], 'E1013: Argument 1: type mismatch, expected string but got special') 991 CheckDefExecFailure(['findfile("")'], 'E1175:') 992 CheckDefAndScriptFailure2(['findfile("a", [])'], 'E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2') 993 CheckDefAndScriptFailure2(['findfile("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 994enddef 995 996def Test_flattennew() 997 var lines =<< trim END 998 var l = [1, [2, [3, 4]], 5] 999 call assert_equal([1, 2, 3, 4, 5], flattennew(l)) 1000 call assert_equal([1, [2, [3, 4]], 5], l) 1001 1002 call assert_equal([1, 2, [3, 4], 5], flattennew(l, 1)) 1003 call assert_equal([1, [2, [3, 4]], 5], l) 1004 END 1005 CheckDefAndScriptSuccess(lines) 1006 1007 lines =<< trim END 1008 echo flatten([1, 2, 3]) 1009 END 1010 CheckDefAndScriptFailure(lines, 'E1158:') 1011 CheckDefAndScriptFailure2(['flattennew({})'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 1') 1012 CheckDefAndScriptFailure2(['flattennew([], "1")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 1013enddef 1014 1015" Test for float functions argument type 1016def Test_float_funcs_args() 1017 CheckFeature float 1018 1019 # acos() 1020 CheckDefAndScriptFailure2(['acos("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') 1021 # asin() 1022 CheckDefAndScriptFailure2(['asin("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') 1023 # atan() 1024 CheckDefAndScriptFailure2(['atan("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') 1025 # atan2() 1026 CheckDefAndScriptFailure2(['atan2("a", 1.1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') 1027 CheckDefAndScriptFailure2(['atan2(1.2, "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 2') 1028 CheckDefAndScriptFailure2(['atan2(1.2)'], 'E119:', 'E119:') 1029 # ceil() 1030 CheckDefAndScriptFailure2(['ceil("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') 1031 # cos() 1032 CheckDefAndScriptFailure2(['cos("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') 1033 # cosh() 1034 CheckDefAndScriptFailure2(['cosh("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') 1035 # exp() 1036 CheckDefAndScriptFailure2(['exp("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') 1037 # float2nr() 1038 CheckDefAndScriptFailure2(['float2nr("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') 1039 # floor() 1040 CheckDefAndScriptFailure2(['floor("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') 1041 # fmod() 1042 CheckDefAndScriptFailure2(['fmod(1.1, "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 2') 1043 CheckDefAndScriptFailure2(['fmod("a", 1.1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') 1044 CheckDefAndScriptFailure2(['fmod(1.1)'], 'E119:', 'E119:') 1045 # isinf() 1046 CheckDefAndScriptFailure2(['isinf("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') 1047 # isnan() 1048 CheckDefAndScriptFailure2(['isnan("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') 1049 # log() 1050 CheckDefAndScriptFailure2(['log("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') 1051 # log10() 1052 CheckDefAndScriptFailure2(['log10("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') 1053 # pow() 1054 CheckDefAndScriptFailure2(['pow("a", 1.1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') 1055 CheckDefAndScriptFailure2(['pow(1.1, "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 2') 1056 CheckDefAndScriptFailure2(['pow(1.1)'], 'E119:', 'E119:') 1057 # round() 1058 CheckDefAndScriptFailure2(['round("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') 1059 # sin() 1060 CheckDefAndScriptFailure2(['sin("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') 1061 # sinh() 1062 CheckDefAndScriptFailure2(['sinh("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') 1063 # sqrt() 1064 CheckDefAndScriptFailure2(['sqrt("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') 1065 # tan() 1066 CheckDefAndScriptFailure2(['tan("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') 1067 # tanh() 1068 CheckDefAndScriptFailure2(['tanh("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') 1069 # trunc() 1070 CheckDefAndScriptFailure2(['trunc("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') 1071enddef 1072 1073def Test_fnameescape() 1074 CheckDefAndScriptFailure2(['fnameescape(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1075 assert_equal('\+a\%b\|', fnameescape('+a%b|')) 1076enddef 1077 1078def Test_fnamemodify() 1079 CheckDefSuccess(['echo fnamemodify(test_null_string(), ":p")']) 1080 CheckDefSuccess(['echo fnamemodify("", ":p")']) 1081 CheckDefSuccess(['echo fnamemodify("file", test_null_string())']) 1082 CheckDefSuccess(['echo fnamemodify("file", "")']) 1083 1084 CheckDefExecFailure(['echo fnamemodify(true, ":p")'], 'E1013: Argument 1: type mismatch, expected string but got bool') 1085 CheckDefExecFailure(['echo fnamemodify(v:null, ":p")'], 'E1013: Argument 1: type mismatch, expected string but got special') 1086 CheckDefExecFailure(['echo fnamemodify("file", true)'], 'E1013: Argument 2: type mismatch, expected string but got bool') 1087enddef 1088 1089def Wrong_dict_key_type(items: list<number>): list<number> 1090 return filter(items, (_, val) => get({[val]: 1}, 'x')) 1091enddef 1092 1093def Test_filter() 1094 CheckDefAndScriptFailure2(['filter(1.1, "1")'], 'E1013: Argument 1: type mismatch, expected list<any> but got float', 'E1228: List, Dictionary or Blob required for argument 1') 1095 assert_equal([], filter([1, 2, 3], '0')) 1096 assert_equal([1, 2, 3], filter([1, 2, 3], '1')) 1097 assert_equal({b: 20}, filter({a: 10, b: 20}, 'v:val == 20')) 1098enddef 1099 1100def Test_filter_wrong_dict_key_type() 1101 assert_fails('Wrong_dict_key_type([1, v:null, 3])', 'E1013:') 1102enddef 1103 1104def Test_filter_return_type() 1105 var l = filter([1, 2, 3], (_, _) => 1) 1106 var res = 0 1107 for n in l 1108 res += n 1109 endfor 1110 res->assert_equal(6) 1111enddef 1112 1113def Test_filter_missing_argument() 1114 var dict = {aa: [1], ab: [2], ac: [3], de: [4]} 1115 var res = dict->filter((k, _) => k =~ 'a' && k !~ 'b') 1116 res->assert_equal({aa: [1], ac: [3]}) 1117enddef 1118 1119def Test_foldclosed() 1120 CheckDefAndScriptFailure2(['foldclosed(function("min"))'], 'E1013: Argument 1: type mismatch, expected string but got func(...): any', 'E1220: String or Number required for argument 1') 1121 assert_equal(-1, foldclosed(1)) 1122 assert_equal(-1, foldclosed('$')) 1123enddef 1124 1125def Test_foldclosedend() 1126 CheckDefAndScriptFailure2(['foldclosedend(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1') 1127 assert_equal(-1, foldclosedend(1)) 1128 assert_equal(-1, foldclosedend('w0')) 1129enddef 1130 1131def Test_foldlevel() 1132 CheckDefAndScriptFailure2(['foldlevel(0z10)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1') 1133 assert_equal(0, foldlevel(1)) 1134 assert_equal(0, foldlevel('.')) 1135enddef 1136 1137def Test_foldtextresult() 1138 CheckDefAndScriptFailure2(['foldtextresult(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1') 1139 assert_equal('', foldtextresult(1)) 1140 assert_equal('', foldtextresult('.')) 1141enddef 1142 1143def Test_fullcommand() 1144 assert_equal('next', fullcommand('n')) 1145 assert_equal('noremap', fullcommand('no')) 1146 assert_equal('noremap', fullcommand('nor')) 1147 assert_equal('normal', fullcommand('norm')) 1148 1149 assert_equal('', fullcommand('k')) 1150 assert_equal('keepmarks', fullcommand('ke')) 1151 assert_equal('keepmarks', fullcommand('kee')) 1152 assert_equal('keepmarks', fullcommand('keep')) 1153 assert_equal('keepjumps', fullcommand('keepj')) 1154 1155 assert_equal('dlist', fullcommand('dl')) 1156 assert_equal('', fullcommand('dp')) 1157 assert_equal('delete', fullcommand('del')) 1158 assert_equal('', fullcommand('dell')) 1159 assert_equal('', fullcommand('delp')) 1160 1161 assert_equal('srewind', fullcommand('sre')) 1162 assert_equal('scriptnames', fullcommand('scr')) 1163 assert_equal('', fullcommand('scg')) 1164enddef 1165 1166def Test_funcref() 1167 CheckDefAndScriptFailure2(['funcref("reverse", 2)'], 'E1013: Argument 2: type mismatch, expected list<any> but got number', 'E1211: List required for argument 2') 1168 CheckDefAndScriptFailure2(['funcref("reverse", [2], [1])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3') 1169enddef 1170 1171def Test_function() 1172 CheckDefAndScriptFailure2(['function("reverse", 2)'], 'E1013: Argument 2: type mismatch, expected list<any> but got number', 'E1211: List required for argument 2') 1173 CheckDefAndScriptFailure2(['function("reverse", [2], [1])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3') 1174enddef 1175 1176def Test_garbagecollect() 1177 garbagecollect(true) 1178 CheckDefAndScriptFailure2(['garbagecollect("1")'], 'E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1') 1179 CheckDefAndScriptFailure2(['garbagecollect(20)'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1') 1180enddef 1181 1182def Test_get() 1183 CheckDefAndScriptFailure2(['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') 1184 [3, 5, 2]->get(1)->assert_equal(5) 1185 [3, 5, 2]->get(3)->assert_equal(0) 1186 [3, 5, 2]->get(3, 9)->assert_equal(9) 1187 assert_equal(get(0z102030, 2), 0x30) 1188 {a: 7, b: 11, c: 13}->get('c')->assert_equal(13) 1189 {10: 'a', 20: 'b', 30: 'd'}->get(20)->assert_equal('b') 1190 function('max')->get('name')->assert_equal('max') 1191 var F: func = function('min', [[5, 8, 6]]) 1192 F->get('name')->assert_equal('min') 1193 F->get('args')->assert_equal([[5, 8, 6]]) 1194 1195 var lines =<< trim END 1196 vim9script 1197 def DoThat(): number 1198 var Getqflist: func = function('getqflist', [{id: 42}]) 1199 return Getqflist()->get('id', 77) 1200 enddef 1201 assert_equal(0, DoThat()) 1202 END 1203 CheckScriptSuccess(lines) 1204enddef 1205 1206def Test_getbufinfo() 1207 var bufinfo = getbufinfo(bufnr()) 1208 getbufinfo('%')->assert_equal(bufinfo) 1209 1210 edit Xtestfile1 1211 hide edit Xtestfile2 1212 hide enew 1213 getbufinfo({bufloaded: true, buflisted: true, bufmodified: false}) 1214 ->len()->assert_equal(3) 1215 bwipe Xtestfile1 Xtestfile2 1216 CheckDefAndScriptFailure2(['getbufinfo(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1') 1217enddef 1218 1219def Test_getbufline() 1220 e SomeFile 1221 var buf = bufnr() 1222 e # 1223 var lines = ['aaa', 'bbb', 'ccc'] 1224 setbufline(buf, 1, lines) 1225 getbufline('#', 1, '$')->assert_equal(lines) 1226 getbufline(-1, '$', '$')->assert_equal([]) 1227 getbufline(-1, 1, '$')->assert_equal([]) 1228 1229 bwipe! 1230 CheckDefAndScriptFailure2(['getbufline([], 2)'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1') 1231 CheckDefAndScriptFailure2(['getbufline("a", [])'], 'E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 2') 1232 CheckDefAndScriptFailure2(['getbufline("a", 2, 0z10)'], 'E1013: Argument 3: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 3') 1233enddef 1234 1235def Test_getbufvar() 1236 CheckDefAndScriptFailure2(['getbufvar(true, "v")'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1') 1237 CheckDefAndScriptFailure2(['getbufvar(1, 2, 3)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 1238enddef 1239 1240def Test_getchangelist() 1241 new 1242 setline(1, 'some text') 1243 var changelist = bufnr()->getchangelist() 1244 getchangelist('%')->assert_equal(changelist) 1245 bwipe! 1246enddef 1247 1248def Test_getchar() 1249 while getchar(0) 1250 endwhile 1251 getchar(true)->assert_equal(0) 1252 getchar(1)->assert_equal(0) 1253 CheckDefAndScriptFailure2(['getchar(2)'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1') 1254 CheckDefAndScriptFailure2(['getchar("1")'], 'E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1') 1255enddef 1256 1257def Test_getcharpos() 1258 CheckDefAndScriptFailure2(['getcharpos(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1') 1259 CheckDefAndScriptFailure2(['getcharpos(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1260enddef 1261 1262def Test_getcharstr() 1263 CheckDefAndScriptFailure2(['getcharstr(2)'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1') 1264 CheckDefAndScriptFailure2(['getcharstr("1")'], 'E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1') 1265enddef 1266 1267def Test_getcompletion() 1268 set wildignore=*.vim,*~ 1269 var l = getcompletion('run', 'file', true) 1270 l->assert_equal([]) 1271 set wildignore& 1272 CheckDefAndScriptFailure2(['getcompletion(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1273 CheckDefAndScriptFailure2(['getcompletion("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 1274 CheckDefAndScriptFailure2(['getcompletion("a", "b", 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3') 1275enddef 1276 1277def Test_getcurpos() 1278 CheckDefAndScriptFailure2(['getcursorcharpos("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 1279enddef 1280 1281def Test_getcursorcharpos() 1282 CheckDefAndScriptFailure2(['getcursorcharpos("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 1283enddef 1284 1285def Test_getcwd() 1286 CheckDefAndScriptFailure2(['getcwd("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 1287 CheckDefAndScriptFailure2(['getcwd("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 1288 CheckDefAndScriptFailure2(['getcwd(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 1289enddef 1290 1291def Test_getenv() 1292 if getenv('does-not_exist') == '' 1293 assert_report('getenv() should return null') 1294 endif 1295 if getenv('does-not_exist') == null 1296 else 1297 assert_report('getenv() should return null') 1298 endif 1299 $SOMEENVVAR = 'some' 1300 assert_equal('some', getenv('SOMEENVVAR')) 1301 unlet $SOMEENVVAR 1302enddef 1303 1304def Test_getfontname() 1305 CheckDefAndScriptFailure2(['getfontname(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1306enddef 1307 1308def Test_getfperm() 1309 assert_equal('', getfperm("")) 1310 assert_equal('', getfperm(test_null_string())) 1311 1312 CheckDefExecFailure(['echo getfperm(true)'], 'E1013:') 1313 CheckDefExecFailure(['echo getfperm(v:null)'], 'E1013:') 1314enddef 1315 1316def Test_getfsize() 1317 assert_equal(-1, getfsize("")) 1318 assert_equal(-1, getfsize(test_null_string())) 1319 1320 CheckDefExecFailure(['echo getfsize(true)'], 'E1013:') 1321 CheckDefExecFailure(['echo getfsize(v:null)'], 'E1013:') 1322enddef 1323 1324def Test_getftime() 1325 assert_equal(-1, getftime("")) 1326 assert_equal(-1, getftime(test_null_string())) 1327 1328 CheckDefExecFailure(['echo getftime(true)'], 'E1013:') 1329 CheckDefExecFailure(['echo getftime(v:null)'], 'E1013:') 1330enddef 1331 1332def Test_getftype() 1333 assert_equal('', getftype("")) 1334 assert_equal('', getftype(test_null_string())) 1335 1336 CheckDefExecFailure(['echo getftype(true)'], 'E1013:') 1337 CheckDefExecFailure(['echo getftype(v:null)'], 'E1013:') 1338enddef 1339 1340def Test_getjumplist() 1341 CheckDefAndScriptFailure2(['getjumplist("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 1342 CheckDefAndScriptFailure2(['getjumplist("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 1343 CheckDefAndScriptFailure2(['getjumplist(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 1344enddef 1345 1346def Test_getline() 1347 var lines =<< trim END 1348 new 1349 setline(1, ['hello', 'there', 'again']) 1350 assert_equal('hello', getline(1)) 1351 assert_equal('hello', getline('.')) 1352 1353 normal 2Gvjv 1354 assert_equal('there', getline("'<")) 1355 assert_equal('again', getline("'>")) 1356 END 1357 CheckDefAndScriptSuccess(lines) 1358 1359 lines =<< trim END 1360 echo getline('1') 1361 END 1362 CheckDefExecAndScriptFailure(lines, 'E1209:') 1363 CheckDefAndScriptFailure2(['getline(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1') 1364 CheckDefAndScriptFailure2(['getline(1, true)'], 'E1013: Argument 2: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 2') 1365enddef 1366 1367def Test_getloclist() 1368 CheckDefAndScriptFailure2(['getloclist("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 1369 CheckDefAndScriptFailure2(['getloclist(1, [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2') 1370enddef 1371 1372def Test_getloclist_return_type() 1373 var l = getloclist(1) 1374 l->assert_equal([]) 1375 1376 var d = getloclist(1, {items: 0}) 1377 d->assert_equal({items: []}) 1378enddef 1379 1380def Test_getmarklist() 1381 CheckDefAndScriptFailure2(['getmarklist([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1') 1382 assert_equal([], getmarklist(10000)) 1383 assert_fails('getmarklist("a%b@#")', 'E94:') 1384enddef 1385 1386def Test_getmatches() 1387 CheckDefAndScriptFailure2(['getmatches("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 1388enddef 1389 1390def Test_getpos() 1391 CheckDefAndScriptFailure2(['getpos(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1392 assert_equal([0, 1, 1, 0], getpos('.')) 1393 CheckDefExecFailure(['getpos("a")'], 'E1209:') 1394enddef 1395 1396def Test_getqflist() 1397 CheckDefAndScriptFailure2(['getqflist([])'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1') 1398 call assert_equal({}, getqflist({})) 1399enddef 1400 1401def Test_getqflist_return_type() 1402 var l = getqflist() 1403 l->assert_equal([]) 1404 1405 var d = getqflist({items: 0}) 1406 d->assert_equal({items: []}) 1407enddef 1408 1409def Test_getreg() 1410 var lines = ['aaa', 'bbb', 'ccc'] 1411 setreg('a', lines) 1412 getreg('a', true, true)->assert_equal(lines) 1413 assert_fails('getreg("ab")', 'E1162:') 1414 CheckDefAndScriptFailure2(['getreg(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1415 CheckDefAndScriptFailure2(['getreg(".", 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2') 1416 CheckDefAndScriptFailure2(['getreg(".", 1, "b")'], 'E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3') 1417enddef 1418 1419def Test_getreg_return_type() 1420 var s1: string = getreg('"') 1421 var s2: string = getreg('"', 1) 1422 var s3: list<string> = getreg('"', 1, 1) 1423enddef 1424 1425def Test_getreginfo() 1426 var text = 'abc' 1427 setreg('a', text) 1428 getreginfo('a')->assert_equal({regcontents: [text], regtype: 'v', isunnamed: false}) 1429 assert_fails('getreginfo("ab")', 'E1162:') 1430enddef 1431 1432def Test_getregtype() 1433 var lines = ['aaa', 'bbb', 'ccc'] 1434 setreg('a', lines) 1435 getregtype('a')->assert_equal('V') 1436 assert_fails('getregtype("ab")', 'E1162:') 1437enddef 1438 1439def Test_gettabinfo() 1440 CheckDefAndScriptFailure2(['gettabinfo("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 1441enddef 1442 1443def Test_gettabvar() 1444 CheckDefAndScriptFailure2(['gettabvar("a", "b")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 1445 CheckDefAndScriptFailure2(['gettabvar(1, 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 1446enddef 1447 1448def Test_gettabwinvar() 1449 CheckDefAndScriptFailure2(['gettabwinvar("a", 2, "c")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 1450 CheckDefAndScriptFailure2(['gettabwinvar(1, "b", "c", [])'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 1451 CheckDefAndScriptFailure2(['gettabwinvar(1, 1, 3, {})'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') 1452enddef 1453 1454def Test_gettagstack() 1455 CheckDefAndScriptFailure2(['gettagstack("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 1456enddef 1457 1458def Test_gettext() 1459 CheckDefAndScriptFailure2(['gettext(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1460 assert_equal('abc', gettext("abc")) 1461enddef 1462 1463def Test_getwininfo() 1464 CheckDefAndScriptFailure2(['getwininfo("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 1465enddef 1466 1467def Test_getwinpos() 1468 CheckDefAndScriptFailure2(['getwinpos("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 1469enddef 1470 1471def Test_getwinvar() 1472 CheckDefAndScriptFailure2(['getwinvar("a", "b")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 1473 CheckDefAndScriptFailure2(['getwinvar(1, 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 1474enddef 1475 1476def Test_glob() 1477 glob('runtest.vim', true, true, true)->assert_equal(['runtest.vim']) 1478 CheckDefAndScriptFailure2(['glob(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1479 CheckDefAndScriptFailure2(['glob("a", 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2') 1480 CheckDefAndScriptFailure2(['glob("a", 1, "b")'], 'E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3') 1481 CheckDefAndScriptFailure2(['glob("a", 1, true, 2)'], 'E1013: Argument 4: type mismatch, expected bool but got number', 'E1212: Bool required for argument 4') 1482enddef 1483 1484def Test_glob2regpat() 1485 CheckDefAndScriptFailure2(['glob2regpat(null)'], 'E1013: Argument 1: type mismatch, expected string but got special', 'E1174: String required for argument 1') 1486 assert_equal('^$', glob2regpat('')) 1487enddef 1488 1489def Test_globpath() 1490 globpath('.', 'runtest.vim', true, true, true)->assert_equal(['./runtest.vim']) 1491 CheckDefAndScriptFailure2(['globpath(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1492 CheckDefAndScriptFailure2(['globpath("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 1493 CheckDefAndScriptFailure2(['globpath("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3') 1494 CheckDefAndScriptFailure2(['globpath("a", "b", true, "d")'], 'E1013: Argument 4: type mismatch, expected bool but got string', 'E1212: Bool required for argument 4') 1495 CheckDefAndScriptFailure2(['globpath("a", "b", true, false, "e")'], 'E1013: Argument 5: type mismatch, expected bool but got string', 'E1212: Bool required for argument 5') 1496enddef 1497 1498def Test_has() 1499 has('eval', true)->assert_equal(1) 1500 CheckDefAndScriptFailure2(['has(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1') 1501 CheckDefAndScriptFailure2(['has("a", "b")'], 'E1013: Argument 2: type mismatch, expected bool but got string', 'E1212: Bool required for argument 2') 1502enddef 1503 1504def Test_has_key() 1505 var d = {123: 'xx'} 1506 assert_true(has_key(d, '123')) 1507 assert_true(has_key(d, 123)) 1508 assert_false(has_key(d, 'x')) 1509 assert_false(has_key(d, 99)) 1510 1511 CheckDefAndScriptFailure2(['has_key([1, 2], "k")'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 1') 1512 CheckDefAndScriptFailure2(['has_key({"a": 10}, ["a"])'], 'E1013: Argument 2: type mismatch, expected string but got list<string>', 'E1220: String or Number required for argument 2') 1513enddef 1514 1515def Test_haslocaldir() 1516 CheckDefAndScriptFailure2(['haslocaldir("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 1517 CheckDefAndScriptFailure2(['haslocaldir("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 1518 CheckDefAndScriptFailure2(['haslocaldir(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 1519enddef 1520 1521def Test_hasmapto() 1522 hasmapto('foobar', 'i', true)->assert_equal(0) 1523 iabbrev foo foobar 1524 hasmapto('foobar', 'i', true)->assert_equal(1) 1525 iunabbrev foo 1526 CheckDefAndScriptFailure2(['hasmapto(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1527 CheckDefAndScriptFailure2(['hasmapto("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 1528 CheckDefAndScriptFailure2(['hasmapto("a", "b", 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3') 1529enddef 1530 1531def Test_histadd() 1532 CheckDefAndScriptFailure2(['histadd(1, "x")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1533 CheckDefAndScriptFailure2(['histadd(":", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 1534 histadd("search", 'skyblue') 1535 assert_equal('skyblue', histget('/', -1)) 1536enddef 1537 1538def Test_histdel() 1539 CheckDefAndScriptFailure2(['histdel(1, "x")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1540 CheckDefAndScriptFailure2(['histdel(":", true)'], 'E1013: Argument 2: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 2') 1541enddef 1542 1543def Test_histget() 1544 CheckDefAndScriptFailure2(['histget(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1545 CheckDefAndScriptFailure2(['histget("a", "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 1546enddef 1547 1548def Test_histnr() 1549 CheckDefAndScriptFailure2(['histnr(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1550 assert_equal(-1, histnr('abc')) 1551enddef 1552 1553def Test_hlID() 1554 CheckDefAndScriptFailure2(['hlID(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1555 assert_equal(0, hlID('NonExistingHighlight')) 1556enddef 1557 1558def Test_hlexists() 1559 CheckDefAndScriptFailure2(['hlexists([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1') 1560 assert_equal(0, hlexists('NonExistingHighlight')) 1561enddef 1562 1563def Test_iconv() 1564 CheckDefAndScriptFailure2(['iconv(1, "from", "to")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1565 CheckDefAndScriptFailure2(['iconv("abc", 10, "to")'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 1566 CheckDefAndScriptFailure2(['iconv("abc", "from", 20)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') 1567 assert_equal('abc', iconv('abc', 'fromenc', 'toenc')) 1568enddef 1569 1570def Test_indent() 1571 CheckDefAndScriptFailure2(['indent([1])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1') 1572 CheckDefAndScriptFailure2(['indent(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1') 1573 assert_equal(0, indent(1)) 1574enddef 1575 1576def Test_index() 1577 index(['a', 'b', 'a', 'B'], 'b', 2, true)->assert_equal(3) 1578 CheckDefAndScriptFailure2(['index("a", "a")'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1226: List or Blob required for argument 1') 1579 CheckDefFailure(['index(["1"], 1)'], 'E1013: Argument 2: type mismatch, expected string but got number') 1580 CheckDefAndScriptFailure2(['index(0z10, "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 1581 CheckDefAndScriptFailure2(['index([1], 1, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 1582 CheckDefAndScriptFailure2(['index(0z1020, 10, 1, 2)'], 'E1013: Argument 4: type mismatch, expected bool but got number', 'E1212: Bool required for argument 4') 1583enddef 1584 1585def Test_input() 1586 CheckDefAndScriptFailure2(['input(5)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1587 CheckDefAndScriptFailure2(['input(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1') 1588 CheckDefAndScriptFailure2(['input("p", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 1589 CheckDefAndScriptFailure2(['input("p", "q", 20)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') 1590enddef 1591 1592def Test_inputdialog() 1593 CheckDefAndScriptFailure2(['inputdialog(5)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1594 CheckDefAndScriptFailure2(['inputdialog(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1') 1595 CheckDefAndScriptFailure2(['inputdialog("p", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 1596 CheckDefAndScriptFailure2(['inputdialog("p", "q", 20)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') 1597enddef 1598 1599def Test_inputlist() 1600 CheckDefAndScriptFailure2(['inputlist(10)'], 'E1013: Argument 1: type mismatch, expected list<string> but got number', 'E1211: List required for argument 1') 1601 CheckDefAndScriptFailure2(['inputlist("abc")'], 'E1013: Argument 1: type mismatch, expected list<string> but got string', 'E1211: List required for argument 1') 1602 CheckDefFailure(['inputlist([1, 2, 3])'], 'E1013: Argument 1: type mismatch, expected list<string> but got list<number>') 1603 feedkeys("2\<CR>", 't') 1604 var r: number = inputlist(['a', 'b', 'c']) 1605 assert_equal(2, r) 1606enddef 1607 1608def Test_inputsecret() 1609 CheckDefAndScriptFailure2(['inputsecret(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1610 CheckDefAndScriptFailure2(['inputsecret("Pass:", 20)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 1611 feedkeys("\<CR>", 't') 1612 var ans: string = inputsecret('Pass:', '123') 1613 assert_equal('123', ans) 1614enddef 1615 1616let s:number_one = 1 1617let s:number_two = 2 1618let s:string_keep = 'keep' 1619 1620def Test_insert() 1621 var l = insert([2, 1], 3) 1622 var res = 0 1623 for n in l 1624 res += n 1625 endfor 1626 res->assert_equal(6) 1627 1628 var m: any = [] 1629 insert(m, 4) 1630 call assert_equal([4], m) 1631 extend(m, [6], 0) 1632 call assert_equal([6, 4], m) 1633 1634 var lines =<< trim END 1635 insert(test_null_list(), 123) 1636 END 1637 CheckDefExecAndScriptFailure(lines, 'E1130:', 1) 1638 1639 lines =<< trim END 1640 insert(test_null_blob(), 123) 1641 END 1642 CheckDefExecAndScriptFailure(lines, 'E1131:', 1) 1643 1644 assert_equal([1, 2, 3], insert([2, 3], 1)) 1645 assert_equal([1, 2, 3], insert([2, 3], s:number_one)) 1646 assert_equal([1, 2, 3], insert([1, 2], 3, 2)) 1647 assert_equal([1, 2, 3], insert([1, 2], 3, s:number_two)) 1648 assert_equal(['a', 'b', 'c'], insert(['b', 'c'], 'a')) 1649 assert_equal(0z1234, insert(0z34, 0x12)) 1650 1651 CheckDefAndScriptFailure2(['insert("a", 1)'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1226: List or Blob required for argument 1') 1652 CheckDefFailure(['insert([2, 3], "a")'], 'E1013: Argument 2: type mismatch, expected number but got string') 1653 CheckDefAndScriptFailure2(['insert([2, 3], 1, "x")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 1654enddef 1655 1656def Test_invert() 1657 CheckDefAndScriptFailure2(['invert("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 1658enddef 1659 1660def Test_isdirectory() 1661 CheckDefAndScriptFailure2(['isdirectory(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1') 1662 assert_false(isdirectory('NonExistingDir')) 1663enddef 1664 1665def Test_islocked() 1666 CheckDefAndScriptFailure2(['islocked(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1') 1667 CheckDefAndScriptFailure2(['var n1: number = 10', 'islocked(n1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1668 g:v1 = 10 1669 assert_false(islocked('g:v1')) 1670 lockvar g:v1 1671 assert_true(islocked('g:v1')) 1672 unlet g:v1 1673enddef 1674 1675def Test_items() 1676 CheckDefFailure(['[]->items()'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>') 1677 assert_equal([['a', 10], ['b', 20]], {'a': 10, 'b': 20}->items()) 1678 assert_equal([], {}->items()) 1679enddef 1680 1681def Test_job_getchannel() 1682 if !has('job') 1683 CheckFeature job 1684 else 1685 CheckDefAndScriptFailure2(['job_getchannel("a")'], 'E1013: Argument 1: type mismatch, expected job but got string', 'E1218: Job required for argument 1') 1686 assert_fails('job_getchannel(test_null_job())', 'E916: not a valid job') 1687 endif 1688enddef 1689 1690def Test_job_info() 1691 if !has('job') 1692 CheckFeature job 1693 else 1694 CheckDefAndScriptFailure2(['job_info("a")'], 'E1013: Argument 1: type mismatch, expected job but got string', 'E1218: Job required for argument 1') 1695 assert_fails('job_info(test_null_job())', 'E916: not a valid job') 1696 endif 1697enddef 1698 1699def Test_job_info_return_type() 1700 if !has('job') 1701 CheckFeature job 1702 else 1703 job_start(&shell) 1704 var jobs = job_info() 1705 assert_equal('list<job>', typename(jobs)) 1706 assert_equal('dict<any>', typename(job_info(jobs[0]))) 1707 job_stop(jobs[0]) 1708 endif 1709enddef 1710 1711def Test_job_setoptions() 1712 if !has('job') 1713 CheckFeature job 1714 else 1715 CheckDefAndScriptFailure2(['job_setoptions(test_null_channel(), {})'], 'E1013: Argument 1: type mismatch, expected job but got channel', 'E1218: Job required for argument 1') 1716 CheckDefAndScriptFailure2(['job_setoptions(test_null_job(), [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2') 1717 assert_equal('fail', job_status(test_null_job())) 1718 endif 1719enddef 1720 1721def Test_job_status() 1722 if !has('job') 1723 CheckFeature job 1724 else 1725 CheckDefAndScriptFailure2(['job_status("a")'], 'E1013: Argument 1: type mismatch, expected job but got string', 'E1218: Job required for argument 1') 1726 assert_equal('fail', job_status(test_null_job())) 1727 endif 1728enddef 1729 1730def Test_job_stop() 1731 if !has('job') 1732 CheckFeature job 1733 else 1734 CheckDefAndScriptFailure2(['job_stop("a")'], 'E1013: Argument 1: type mismatch, expected job but got string', 'E1218: Job required for argument 1') 1735 CheckDefAndScriptFailure2(['job_stop(test_null_job(), true)'], 'E1013: Argument 2: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 2') 1736 endif 1737enddef 1738 1739def Test_join() 1740 CheckDefAndScriptFailure2(['join("abc")'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1211: List required for argument 1') 1741 CheckDefAndScriptFailure2(['join([], 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 1742enddef 1743 1744def Test_js_decode() 1745 CheckDefAndScriptFailure2(['js_decode(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1746 assert_equal([1, 2], js_decode('[1,2]')) 1747enddef 1748 1749def Test_json_decode() 1750 CheckDefAndScriptFailure2(['json_decode(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1') 1751 assert_equal(1.0, json_decode('1.0')) 1752enddef 1753 1754def Test_keys() 1755 CheckDefAndScriptFailure2(['keys([])'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1') 1756 assert_equal(['a'], {a: 'v'}->keys()) 1757 assert_equal([], {}->keys()) 1758enddef 1759 1760def Test_keys_return_type() 1761 const var: list<string> = {a: 1, b: 2}->keys() 1762 var->assert_equal(['a', 'b']) 1763enddef 1764 1765def Test_len() 1766 CheckDefAndScriptFailure2(['len(true)'], 'E1013: Argument 1: type mismatch, expected list<any> but got bool', 'E701: Invalid type for len()') 1767 assert_equal(2, "ab"->len()) 1768 assert_equal(3, 456->len()) 1769 assert_equal(0, []->len()) 1770 assert_equal(1, {a: 10}->len()) 1771 assert_equal(4, 0z20304050->len()) 1772enddef 1773 1774def Test_libcall() 1775 CheckFeature libcall 1776 CheckDefAndScriptFailure2(['libcall(1, "b", 3)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1777 CheckDefAndScriptFailure2(['libcall("a", 2, 3)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 1778 CheckDefAndScriptFailure2(['libcall("a", "b", 1.1)'], 'E1013: Argument 3: type mismatch, expected string but got float', 'E1220: String or Number required for argument 3') 1779enddef 1780 1781def Test_libcallnr() 1782 CheckFeature libcall 1783 CheckDefAndScriptFailure2(['libcallnr(1, "b", 3)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1784 CheckDefAndScriptFailure2(['libcallnr("a", 2, 3)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 1785 CheckDefAndScriptFailure2(['libcallnr("a", "b", 1.1)'], 'E1013: Argument 3: type mismatch, expected string but got float', 'E1220: String or Number required for argument 3') 1786enddef 1787 1788def Test_line() 1789 assert_fails('line(true)', 'E1174:') 1790 CheckDefAndScriptFailure2(['line(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1791 CheckDefAndScriptFailure2(['line(".", "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 1792enddef 1793 1794def Test_line2byte() 1795 CheckDefAndScriptFailure2(['line2byte(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1') 1796 assert_equal(-1, line2byte(1)) 1797 assert_equal(-1, line2byte(10000)) 1798enddef 1799 1800def Test_lispindent() 1801 CheckDefAndScriptFailure2(['lispindent({})'], 'E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1220: String or Number required for argument 1') 1802 assert_equal(0, lispindent(1)) 1803enddef 1804 1805def Test_list2str_str2list_utf8() 1806 var s = "\u3042\u3044" 1807 var l = [0x3042, 0x3044] 1808 str2list(s, true)->assert_equal(l) 1809 list2str(l, true)->assert_equal(s) 1810enddef 1811 1812def Test_list2str() 1813 CheckDefAndScriptFailure2(['list2str(".", true)'], 'E1013: Argument 1: type mismatch, expected list<number> but got string', 'E1211: List required for argument 1') 1814 CheckDefAndScriptFailure2(['list2str([1], 0z10)'], 'E1013: Argument 2: type mismatch, expected bool but got blob', 'E1212: Bool required for argument 2') 1815enddef 1816 1817def SID(): number 1818 return expand('<SID>') 1819 ->matchstr('<SNR>\zs\d\+\ze_$') 1820 ->str2nr() 1821enddef 1822 1823def Test_listener_add() 1824 CheckDefAndScriptFailure2(['listener_add("1", true)'], 'E1013: Argument 2: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 2') 1825enddef 1826 1827def Test_listener_flush() 1828 CheckDefAndScriptFailure2(['listener_flush([1])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1') 1829enddef 1830 1831def Test_listener_remove() 1832 CheckDefAndScriptFailure2(['listener_remove("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 1833enddef 1834 1835def Test_lua() 1836 if !has('lua') 1837 CheckFeature lua 1838 endif 1839 CheckDefAndScriptFailure2(['luaeval(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1840enddef 1841 1842def Test_map() 1843 CheckDefAndScriptFailure2(['map("x", "1")'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1228: List, Dictionary or Blob required for argument 1') 1844 CheckDefAndScriptFailure2(['map(1, "1")'], 'E1013: Argument 1: type mismatch, expected list<any> but got number', 'E1228: List, Dictionary or Blob required for argument 1') 1845enddef 1846 1847def Test_map_failure() 1848 CheckFeature job 1849 1850 var lines =<< trim END 1851 vim9script 1852 writefile([], 'Xtmpfile') 1853 silent e Xtmpfile 1854 var d = {[bufnr('%')]: {a: 0}} 1855 au BufReadPost * Func() 1856 def Func() 1857 if d->has_key('') 1858 endif 1859 eval d[expand('<abuf>')]->mapnew((_, v: dict<job>) => 0) 1860 enddef 1861 e 1862 END 1863 CheckScriptFailure(lines, 'E1013:') 1864 au! BufReadPost 1865 delete('Xtmpfile') 1866enddef 1867 1868def Test_map_function_arg() 1869 var lines =<< trim END 1870 def MapOne(i: number, v: string): string 1871 return i .. ':' .. v 1872 enddef 1873 var l = ['a', 'b', 'c'] 1874 map(l, MapOne) 1875 assert_equal(['0:a', '1:b', '2:c'], l) 1876 END 1877 CheckDefAndScriptSuccess(lines) 1878 1879 lines =<< trim END 1880 range(3)->map((a, b, c) => a + b + c) 1881 END 1882 CheckDefExecAndScriptFailure(lines, 'E1190: One argument too few') 1883 lines =<< trim END 1884 range(3)->map((a, b, c, d) => a + b + c + d) 1885 END 1886 CheckDefExecAndScriptFailure(lines, 'E1190: 2 arguments too few') 1887enddef 1888 1889def Test_map_item_type() 1890 var lines =<< trim END 1891 var l = ['a', 'b', 'c'] 1892 map(l, (k, v) => k .. '/' .. v ) 1893 assert_equal(['0/a', '1/b', '2/c'], l) 1894 END 1895 CheckDefAndScriptSuccess(lines) 1896 1897 lines =<< trim END 1898 var l: list<number> = [0] 1899 echo map(l, (_, v) => []) 1900 END 1901 CheckDefExecAndScriptFailure(lines, 'E1012: Type mismatch; expected number but got list<unknown> in map()', 2) 1902 1903 lines =<< trim END 1904 var l: list<number> = range(2) 1905 echo map(l, (_, v) => []) 1906 END 1907 CheckDefExecAndScriptFailure(lines, 'E1012: Type mismatch; expected number but got list<unknown> in map()', 2) 1908 1909 lines =<< trim END 1910 var d: dict<number> = {key: 0} 1911 echo map(d, (_, v) => []) 1912 END 1913 CheckDefExecAndScriptFailure(lines, 'E1012: Type mismatch; expected number but got list<unknown> in map()', 2) 1914enddef 1915 1916def Test_maparg() 1917 var lnum = str2nr(expand('<sflnum>')) 1918 map foo bar 1919 maparg('foo', '', false, true)->assert_equal({ 1920 lnum: lnum + 1, 1921 script: 0, 1922 mode: ' ', 1923 silent: 0, 1924 noremap: 0, 1925 lhs: 'foo', 1926 lhsraw: 'foo', 1927 nowait: 0, 1928 expr: 0, 1929 sid: SID(), 1930 rhs: 'bar', 1931 buffer: 0}) 1932 unmap foo 1933 CheckDefAndScriptFailure2(['maparg(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1934 CheckDefAndScriptFailure2(['maparg("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 1935 CheckDefAndScriptFailure2(['maparg("a", "b", 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3') 1936 CheckDefAndScriptFailure2(['maparg("a", "b", true, 2)'], 'E1013: Argument 4: type mismatch, expected bool but got number', 'E1212: Bool required for argument 4') 1937enddef 1938 1939def Test_maparg_mapset() 1940 nnoremap <F3> :echo "hit F3"<CR> 1941 var mapsave = maparg('<F3>', 'n', false, true) 1942 mapset('n', false, mapsave) 1943 1944 nunmap <F3> 1945enddef 1946 1947def Test_mapcheck() 1948 iabbrev foo foobar 1949 mapcheck('foo', 'i', true)->assert_equal('foobar') 1950 iunabbrev foo 1951 CheckDefAndScriptFailure2(['mapcheck(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1952 CheckDefAndScriptFailure2(['mapcheck("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 1953 CheckDefAndScriptFailure2(['mapcheck("a", "b", 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3') 1954enddef 1955 1956def Test_mapnew() 1957 CheckDefAndScriptFailure2(['mapnew("x", "1")'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1228: List, Dictionary or Blob required for argument 1') 1958 CheckDefAndScriptFailure2(['mapnew(1, "1")'], 'E1013: Argument 1: type mismatch, expected list<any> but got number', 'E1228: List, Dictionary or Blob required for argument 1') 1959enddef 1960 1961def Test_mapset() 1962 CheckDefAndScriptFailure2(['mapset(1, true, {})'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1963 CheckDefAndScriptFailure2(['mapset("a", 2, {})'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2') 1964 CheckDefAndScriptFailure2(['mapset("a", false, [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3') 1965enddef 1966 1967def Test_match() 1968 CheckDefAndScriptFailure2(['match(0z12, "p")'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1') 1969 CheckDefAndScriptFailure2(['match(["s"], [2])'], 'E1013: Argument 2: type mismatch, expected string but got list<number>', 'E1174: String required for argument 2') 1970 CheckDefAndScriptFailure2(['match("s", "p", "q")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 1971 CheckDefAndScriptFailure2(['match("s", "p", 1, "r")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') 1972 assert_equal(2, match('ab12cd', '12')) 1973 assert_equal(-1, match('ab12cd', '34')) 1974 assert_equal(6, match('ab12cd12ef', '12', 4)) 1975 assert_equal(2, match('abcd', '..', 0, 3)) 1976 assert_equal(1, match(['a', 'b', 'c'], 'b')) 1977 assert_equal(-1, match(['a', 'b', 'c'], 'd')) 1978 assert_equal(3, match(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2)) 1979 assert_equal(5, match(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2, 2)) 1980enddef 1981 1982def Test_matchadd() 1983 CheckDefAndScriptFailure2(['matchadd(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1984 CheckDefAndScriptFailure2(['matchadd("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 1985 CheckDefAndScriptFailure2(['matchadd("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 1986 CheckDefAndScriptFailure2(['matchadd("a", "b", 1, "d")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') 1987 CheckDefAndScriptFailure2(['matchadd("a", "b", 1, 1, [])'], 'E1013: Argument 5: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 5') 1988enddef 1989 1990def Test_matchaddpos() 1991 CheckDefAndScriptFailure2(['matchaddpos(1, [1])'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 1992 CheckDefAndScriptFailure2(['matchaddpos("a", "b")'], 'E1013: Argument 2: type mismatch, expected list<any> but got string', 'E1211: List required for argument 2') 1993 CheckDefAndScriptFailure2(['matchaddpos("a", [1], "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 1994 CheckDefAndScriptFailure2(['matchaddpos("a", [1], 1, "d")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') 1995 CheckDefAndScriptFailure2(['matchaddpos("a", [1], 1, 1, [])'], 'E1013: Argument 5: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 5') 1996enddef 1997 1998def Test_matcharg() 1999 CheckDefAndScriptFailure2(['matcharg("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2000enddef 2001 2002def Test_matchdelete() 2003 CheckDefAndScriptFailure2(['matchdelete("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2004 CheckDefAndScriptFailure2(['matchdelete("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2005 CheckDefAndScriptFailure2(['matchdelete(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 2006enddef 2007 2008def Test_matchend() 2009 CheckDefAndScriptFailure2(['matchend(0z12, "p")'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1') 2010 CheckDefAndScriptFailure2(['matchend(["s"], [2])'], 'E1013: Argument 2: type mismatch, expected string but got list<number>', 'E1174: String required for argument 2') 2011 CheckDefAndScriptFailure2(['matchend("s", "p", "q")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 2012 CheckDefAndScriptFailure2(['matchend("s", "p", 1, "r")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') 2013 assert_equal(4, matchend('ab12cd', '12')) 2014 assert_equal(-1, matchend('ab12cd', '34')) 2015 assert_equal(8, matchend('ab12cd12ef', '12', 4)) 2016 assert_equal(4, matchend('abcd', '..', 0, 3)) 2017 assert_equal(1, matchend(['a', 'b', 'c'], 'b')) 2018 assert_equal(-1, matchend(['a', 'b', 'c'], 'd')) 2019 assert_equal(3, matchend(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2)) 2020 assert_equal(5, matchend(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2, 2)) 2021enddef 2022 2023def Test_matchfuzzy() 2024 CheckDefAndScriptFailure2(['matchfuzzy({}, "p")'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 1') 2025 CheckDefAndScriptFailure2(['matchfuzzy([], 1)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 2026 CheckDefAndScriptFailure2(['matchfuzzy([], "a", [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3') 2027enddef 2028 2029def Test_matchfuzzypos() 2030 CheckDefAndScriptFailure2(['matchfuzzypos({}, "p")'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 1') 2031 CheckDefAndScriptFailure2(['matchfuzzypos([], 1)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 2032 CheckDefAndScriptFailure2(['matchfuzzypos([], "a", [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3') 2033enddef 2034 2035def Test_matchlist() 2036 CheckDefAndScriptFailure2(['matchlist(0z12, "p")'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1') 2037 CheckDefAndScriptFailure2(['matchlist(["s"], [2])'], 'E1013: Argument 2: type mismatch, expected string but got list<number>', 'E1174: String required for argument 2') 2038 CheckDefAndScriptFailure2(['matchlist("s", "p", "q")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 2039 CheckDefAndScriptFailure2(['matchlist("s", "p", 1, "r")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') 2040 var l: list<string> = ['12', '', '', '', '', '', '', '', '', ''] 2041 assert_equal(l, matchlist('ab12cd', '12')) 2042 assert_equal([], matchlist('ab12cd', '34')) 2043 assert_equal(l, matchlist('ab12cd12ef', '12', 4)) 2044 l[0] = 'cd' 2045 assert_equal(l, matchlist('abcd', '..', 0, 3)) 2046 l[0] = 'b' 2047 assert_equal(l, matchlist(['a', 'b', 'c'], 'b')) 2048 assert_equal([], matchlist(['a', 'b', 'c'], 'd')) 2049 assert_equal(l, matchlist(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2)) 2050 assert_equal(l, matchlist(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2, 2)) 2051enddef 2052 2053def Test_matchstr() 2054 CheckDefAndScriptFailure2(['matchstr(0z12, "p")'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1') 2055 CheckDefAndScriptFailure2(['matchstr(["s"], [2])'], 'E1013: Argument 2: type mismatch, expected string but got list<number>', 'E1174: String required for argument 2') 2056 CheckDefAndScriptFailure2(['matchstr("s", "p", "q")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 2057 CheckDefAndScriptFailure2(['matchstr("s", "p", 1, "r")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') 2058 assert_equal('12', matchstr('ab12cd', '12')) 2059 assert_equal('', matchstr('ab12cd', '34')) 2060 assert_equal('12', matchstr('ab12cd12ef', '12', 4)) 2061 assert_equal('cd', matchstr('abcd', '..', 0, 3)) 2062 assert_equal('b', matchstr(['a', 'b', 'c'], 'b')) 2063 assert_equal('', matchstr(['a', 'b', 'c'], 'd')) 2064 assert_equal('b', matchstr(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2)) 2065 assert_equal('b', matchstr(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2, 2)) 2066enddef 2067 2068def Test_matchstrpos() 2069 CheckDefAndScriptFailure2(['matchstrpos(0z12, "p")'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1') 2070 CheckDefAndScriptFailure2(['matchstrpos(["s"], [2])'], 'E1013: Argument 2: type mismatch, expected string but got list<number>', 'E1174: String required for argument 2') 2071 CheckDefAndScriptFailure2(['matchstrpos("s", "p", "q")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 2072 CheckDefAndScriptFailure2(['matchstrpos("s", "p", 1, "r")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') 2073 assert_equal(['12', 2, 4], matchstrpos('ab12cd', '12')) 2074 assert_equal(['', -1, -1], matchstrpos('ab12cd', '34')) 2075 assert_equal(['12', 6, 8], matchstrpos('ab12cd12ef', '12', 4)) 2076 assert_equal(['cd', 2, 4], matchstrpos('abcd', '..', 0, 3)) 2077 assert_equal(['b', 1, 0, 1], matchstrpos(['a', 'b', 'c'], 'b')) 2078 assert_equal(['', -1, -1, -1], matchstrpos(['a', 'b', 'c'], 'd')) 2079 assert_equal(['b', 3, 0, 1], 2080 matchstrpos(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2)) 2081 assert_equal(['b', 5, 0, 1], 2082 matchstrpos(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2, 2)) 2083enddef 2084 2085def Test_max() 2086 g:flag = true 2087 var l1: list<number> = g:flag 2088 ? [1, max([2, 3])] 2089 : [4, 5] 2090 assert_equal([1, 3], l1) 2091 2092 g:flag = false 2093 var l2: list<number> = g:flag 2094 ? [1, max([2, 3])] 2095 : [4, 5] 2096 assert_equal([4, 5], l2) 2097 CheckDefAndScriptFailure2(['max(5)'], 'E1013: Argument 1: type mismatch, expected list<any> but got number', 'E1227: List or Dictionary required for argument 1') 2098enddef 2099 2100def Test_menu_info() 2101 CheckDefAndScriptFailure2(['menu_info(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 2102 CheckDefAndScriptFailure2(['menu_info(10, "n")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 2103 CheckDefAndScriptFailure2(['menu_info("File", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 2104 assert_equal({}, menu_info('aMenu')) 2105enddef 2106 2107def Test_min() 2108 g:flag = true 2109 var l1: list<number> = g:flag 2110 ? [1, min([2, 3])] 2111 : [4, 5] 2112 assert_equal([1, 2], l1) 2113 2114 g:flag = false 2115 var l2: list<number> = g:flag 2116 ? [1, min([2, 3])] 2117 : [4, 5] 2118 assert_equal([4, 5], l2) 2119 CheckDefAndScriptFailure2(['min(5)'], 'E1013: Argument 1: type mismatch, expected list<any> but got number', 'E1227: List or Dictionary required for argument 1') 2120enddef 2121 2122def Test_mkdir() 2123 CheckDefAndScriptFailure2(['mkdir(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1') 2124 CheckDefAndScriptFailure2(['mkdir("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 2') 2125 CheckDefAndScriptFailure2(['mkdir("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 2126 delete('a', 'rf') 2127enddef 2128 2129def Test_mode() 2130 CheckDefAndScriptFailure2(['mode("1")'], 'E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1') 2131 CheckDefAndScriptFailure2(['mode(2)'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1') 2132enddef 2133 2134def Test_mzeval() 2135 if !has('mzscheme') 2136 CheckFeature mzscheme 2137 endif 2138 CheckDefAndScriptFailure2(['mzeval(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1') 2139enddef 2140 2141def Test_nextnonblank() 2142 CheckDefAndScriptFailure2(['nextnonblank(null)'], 'E1013: Argument 1: type mismatch, expected string but got special', 'E1220: String or Number required for argument 1') 2143 assert_equal(0, nextnonblank(1)) 2144enddef 2145 2146def Test_nr2char() 2147 nr2char(97, true)->assert_equal('a') 2148 CheckDefAndScriptFailure2(['nr2char("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2149 CheckDefAndScriptFailure2(['nr2char(1, "a")'], 'E1013: Argument 2: type mismatch, expected bool but got string', 'E1212: Bool required for argument 2') 2150enddef 2151 2152def Test_or() 2153 CheckDefAndScriptFailure2(['or("x", 0x2)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2154 CheckDefAndScriptFailure2(['or(0x1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 2155enddef 2156 2157def Test_pathshorten() 2158 CheckDefAndScriptFailure2(['pathshorten(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 2159 CheckDefAndScriptFailure2(['pathshorten("a", "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 2160enddef 2161 2162def Test_perleval() 2163 if !has('perl') 2164 CheckFeature perl 2165 endif 2166 CheckDefAndScriptFailure2(['perleval(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1') 2167enddef 2168 2169def Test_popup_atcursor() 2170 CheckDefAndScriptFailure2(['popup_atcursor({"a": 10}, {})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1224: String, Number or List required for argument 1') 2171 CheckDefAndScriptFailure2(['popup_atcursor("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 2') 2172 2173 # Pass variable of type 'any' to popup_atcursor() 2174 var what: any = 'Hello' 2175 var popupID = what->popup_atcursor({moved: 'any'}) 2176 assert_equal(0, popupID->popup_getoptions().tabpage) 2177 popupID->popup_close() 2178enddef 2179 2180def Test_popup_beval() 2181 CheckDefAndScriptFailure2(['popup_beval({"a": 10}, {})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1224: String, Number or List required for argument 1') 2182 CheckDefAndScriptFailure2(['popup_beval("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 2') 2183enddef 2184 2185def Test_popup_clear() 2186 CheckDefAndScriptFailure2(['popup_clear(["a"])'], 'E1013: Argument 1: type mismatch, expected bool but got list<string>', 'E1212: Bool required for argument 1') 2187 CheckDefAndScriptFailure2(['popup_clear(2)'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1') 2188enddef 2189 2190def Test_popup_close() 2191 CheckDefAndScriptFailure2(['popup_close("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2192enddef 2193 2194def Test_popup_create() 2195 # Pass variable of type 'any' to popup_create() 2196 var what: any = 'Hello' 2197 var popupID = what->popup_create({}) 2198 assert_equal(0, popupID->popup_getoptions().tabpage) 2199 popupID->popup_close() 2200enddef 2201 2202def Test_popup_dialog() 2203 CheckDefAndScriptFailure2(['popup_dialog({"a": 10}, {})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1224: String, Number or List required for argument 1') 2204 CheckDefAndScriptFailure2(['popup_dialog("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 2') 2205enddef 2206 2207def Test_popup_filter_menu() 2208 CheckDefAndScriptFailure2(['popup_filter_menu("x", "")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2209 CheckDefAndScriptFailure2(['popup_filter_menu(1, 1)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 2210enddef 2211 2212def Test_popup_filter_yesno() 2213 CheckDefAndScriptFailure2(['popup_filter_yesno("x", "")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2214 CheckDefAndScriptFailure2(['popup_filter_yesno(1, 1)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 2215enddef 2216 2217def Test_popup_getoptions() 2218 CheckDefAndScriptFailure2(['popup_getoptions("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2219 CheckDefAndScriptFailure2(['popup_getoptions(true)'], 'E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1') 2220enddef 2221 2222def Test_popup_getpos() 2223 CheckDefAndScriptFailure2(['popup_getpos("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2224 CheckDefAndScriptFailure2(['popup_getpos(true)'], 'E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1') 2225enddef 2226 2227def Test_popup_hide() 2228 CheckDefAndScriptFailure2(['popup_hide("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2229 CheckDefAndScriptFailure2(['popup_hide(true)'], 'E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1') 2230enddef 2231 2232def Test_popup_locate() 2233 CheckDefAndScriptFailure2(['popup_locate("a", 20)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2234 CheckDefAndScriptFailure2(['popup_locate(10, "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 2235enddef 2236 2237def Test_popup_menu() 2238 CheckDefAndScriptFailure2(['popup_menu({"a": 10}, {})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1224: String, Number or List required for argument 1') 2239 CheckDefAndScriptFailure2(['popup_menu("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 2') 2240enddef 2241 2242def Test_popup_move() 2243 CheckDefAndScriptFailure2(['popup_move("x", {})'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2244 CheckDefAndScriptFailure2(['popup_move(1, [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2') 2245enddef 2246 2247def Test_popup_notification() 2248 CheckDefAndScriptFailure2(['popup_notification({"a": 10}, {})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1224: String, Number or List required for argument 1') 2249 CheckDefAndScriptFailure2(['popup_notification("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 2') 2250enddef 2251 2252def Test_popup_setoptions() 2253 CheckDefAndScriptFailure2(['popup_setoptions("x", {})'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2254 CheckDefAndScriptFailure2(['popup_setoptions(1, [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2') 2255enddef 2256 2257def Test_popup_settext() 2258 CheckDefAndScriptFailure2(['popup_settext("x", [])'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2259 CheckDefAndScriptFailure2(['popup_settext(1, 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1222: String or List required for argument 2') 2260enddef 2261 2262def Test_popup_show() 2263 CheckDefAndScriptFailure2(['popup_show("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2264 CheckDefAndScriptFailure2(['popup_show(true)'], 'E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1') 2265enddef 2266 2267def Test_prevnonblank() 2268 CheckDefAndScriptFailure2(['prevnonblank(null)'], 'E1013: Argument 1: type mismatch, expected string but got special', 'E1220: String or Number required for argument 1') 2269 assert_equal(0, prevnonblank(1)) 2270enddef 2271 2272def Test_printf() 2273 CheckDefAndScriptFailure2(['printf([1])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1') 2274 printf(0x10)->assert_equal('16') 2275 assert_equal(" abc", "abc"->printf("%4s")) 2276enddef 2277 2278def Test_prompt_getprompt() 2279 if !has('channel') 2280 CheckFeature channel 2281 else 2282 CheckDefAndScriptFailure2(['prompt_getprompt([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1') 2283 assert_equal('', prompt_getprompt('NonExistingBuf')) 2284 endif 2285enddef 2286 2287def Test_prompt_setcallback() 2288 if !has('channel') 2289 CheckFeature channel 2290 else 2291 CheckDefAndScriptFailure2(['prompt_setcallback(true, "1")'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1') 2292 endif 2293enddef 2294 2295def Test_prompt_setinterrupt() 2296 if !has('channel') 2297 CheckFeature channel 2298 else 2299 CheckDefAndScriptFailure2(['prompt_setinterrupt(true, "1")'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1') 2300 endif 2301enddef 2302 2303def Test_prompt_setprompt() 2304 if !has('channel') 2305 CheckFeature channel 2306 else 2307 CheckDefAndScriptFailure2(['prompt_setprompt([], "p")'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1') 2308 CheckDefAndScriptFailure2(['prompt_setprompt(1, [])'], 'E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2') 2309 endif 2310enddef 2311 2312def Test_prop_add() 2313 CheckDefAndScriptFailure2(['prop_add("a", 2, {})'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2314 CheckDefAndScriptFailure2(['prop_add(1, "b", {})'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 2315 CheckDefAndScriptFailure2(['prop_add(1, 2, [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3') 2316enddef 2317 2318def Test_prop_clear() 2319 CheckDefAndScriptFailure2(['prop_clear("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2320 CheckDefAndScriptFailure2(['prop_clear(1, "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 2321 CheckDefAndScriptFailure2(['prop_clear(1, 2, [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3') 2322enddef 2323 2324def Test_prop_find() 2325 CheckDefAndScriptFailure2(['prop_find([1, 2])'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 1') 2326 CheckDefAndScriptFailure2(['prop_find([1, 2], "k")'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 1') 2327 CheckDefAndScriptFailure2(['prop_find({"a": 10}, ["a"])'], 'E1013: Argument 2: type mismatch, expected string but got list<string>', 'E1174: String required for argument 2') 2328enddef 2329 2330def Test_prop_list() 2331 CheckDefAndScriptFailure2(['prop_list("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2332 CheckDefAndScriptFailure2(['prop_list(1, [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2') 2333enddef 2334 2335def Test_prop_remove() 2336 CheckDefAndScriptFailure2(['prop_remove([])'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1') 2337 CheckDefAndScriptFailure2(['prop_remove({}, "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 2338 CheckDefAndScriptFailure2(['prop_remove({}, 1, "b")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 2339enddef 2340 2341def Test_prop_type_add() 2342 CheckDefAndScriptFailure2(['prop_type_add({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1') 2343 CheckDefAndScriptFailure2(['prop_type_add("a", "b")'], 'E1013: Argument 2: type mismatch, expected dict<any> but got string', 'E1206: Dictionary required for argument 2') 2344enddef 2345 2346def Test_prop_type_change() 2347 CheckDefAndScriptFailure2(['prop_type_change({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1') 2348 CheckDefAndScriptFailure2(['prop_type_change("a", "b")'], 'E1013: Argument 2: type mismatch, expected dict<any> but got string', 'E1206: Dictionary required for argument 2') 2349enddef 2350 2351def Test_prop_type_delete() 2352 CheckDefAndScriptFailure2(['prop_type_delete({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1') 2353 CheckDefAndScriptFailure2(['prop_type_delete({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1') 2354 CheckDefAndScriptFailure2(['prop_type_delete("a", "b")'], 'E1013: Argument 2: type mismatch, expected dict<any> but got string', 'E1206: Dictionary required for argument 2') 2355enddef 2356 2357def Test_prop_type_get() 2358 CheckDefAndScriptFailure2(['prop_type_get({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1') 2359 CheckDefAndScriptFailure2(['prop_type_get({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1') 2360 CheckDefAndScriptFailure2(['prop_type_get("a", "b")'], 'E1013: Argument 2: type mismatch, expected dict<any> but got string', 'E1206: Dictionary required for argument 2') 2361enddef 2362 2363def Test_prop_type_list() 2364 CheckDefAndScriptFailure2(['prop_type_list(["a"])'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<string>', 'E1206: Dictionary required for argument 1') 2365 CheckDefAndScriptFailure2(['prop_type_list(2)'], 'E1013: Argument 1: type mismatch, expected dict<any> but got number', 'E1206: Dictionary required for argument 1') 2366enddef 2367 2368def Test_py3eval() 2369 if !has('python3') 2370 CheckFeature python3 2371 endif 2372 CheckDefAndScriptFailure2(['py3eval([2])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1') 2373enddef 2374 2375def Test_pyeval() 2376 if !has('python') 2377 CheckFeature python 2378 endif 2379 CheckDefAndScriptFailure2(['pyeval([2])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1') 2380enddef 2381 2382def Test_pyxeval() 2383 if !has('python') && !has('python3') 2384 CheckFeature python 2385 endif 2386 CheckDefAndScriptFailure2(['pyxeval([2])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1') 2387enddef 2388 2389def Test_rand() 2390 CheckDefAndScriptFailure2(['rand(10)'], 'E1013: Argument 1: type mismatch, expected list<number> but got number', 'E1211: List required for argument 1') 2391 CheckDefFailure(['rand(["a"])'], 'E1013: Argument 1: type mismatch, expected list<number> but got list<string>') 2392 assert_true(rand() >= 0) 2393 assert_true(rand(srand()) >= 0) 2394enddef 2395 2396def Test_range() 2397 CheckDefAndScriptFailure2(['range("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2398 CheckDefAndScriptFailure2(['range(10, "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 2399 CheckDefAndScriptFailure2(['range(10, 20, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 2400enddef 2401 2402def Test_readdir() 2403 eval expand('sautest')->readdir((e) => e[0] !=# '.') 2404 eval expand('sautest')->readdirex((e) => e.name[0] !=# '.') 2405 CheckDefAndScriptFailure2(['readdir(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1') 2406 CheckDefAndScriptFailure2(['readdir("a", "1", [3])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3') 2407enddef 2408 2409def Test_readdirex() 2410 CheckDefAndScriptFailure2(['readdirex(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1') 2411 CheckDefAndScriptFailure2(['readdirex("a", "1", [3])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3') 2412enddef 2413 2414def Test_readblob() 2415 var blob = 0z12341234 2416 writefile(blob, 'Xreadblob') 2417 var read: blob = readblob('Xreadblob') 2418 assert_equal(blob, read) 2419 2420 var lines =<< trim END 2421 var read: list<string> = readblob('Xreadblob') 2422 END 2423 CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected list<string> but got blob', 1) 2424 delete('Xreadblob') 2425enddef 2426 2427def Test_readfile() 2428 var text = ['aaa', 'bbb', 'ccc'] 2429 writefile(text, 'Xreadfile') 2430 var read: list<string> = readfile('Xreadfile') 2431 assert_equal(text, read) 2432 2433 var lines =<< trim END 2434 var read: dict<string> = readfile('Xreadfile') 2435 END 2436 CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected dict<string> but got list<string>', 1) 2437 delete('Xreadfile') 2438 2439 CheckDefAndScriptFailure2(['readfile("a", 0z10)'], 'E1013: Argument 2: type mismatch, expected string but got blob', 'E1174: String required for argument 2') 2440 CheckDefAndScriptFailure2(['readfile("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 2441enddef 2442 2443def Test_reduce() 2444 CheckDefAndScriptFailure2(['reduce({a: 10}, "1")'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<number>', 'E897: List or Blob required') 2445 assert_equal(6, [1, 2, 3]->reduce((r, c) => r + c, 0)) 2446 assert_equal(11, 0z0506->reduce((r, c) => r + c, 0)) 2447enddef 2448 2449def Test_reltime() 2450 CheckFeature reltime 2451 2452 CheckDefExecAndScriptFailure(['[]->reltime()'], 'E474:') 2453 CheckDefExecAndScriptFailure(['[]->reltime([])'], 'E474:') 2454 2455 CheckDefAndScriptFailure2(['reltime("x")'], 'E1013: Argument 1: type mismatch, expected list<number> but got string', 'E1211: List required for argument 1') 2456 CheckDefFailure(['reltime(["x", "y"])'], 'E1013: Argument 1: type mismatch, expected list<number> but got list<string>') 2457 CheckDefAndScriptFailure2(['reltime([1, 2], 10)'], 'E1013: Argument 2: type mismatch, expected list<number> but got number', 'E1211: List required for argument 2') 2458 CheckDefFailure(['reltime([1, 2], ["a", "b"])'], 'E1013: Argument 2: type mismatch, expected list<number> but got list<string>') 2459 var start: list<any> = reltime() 2460 assert_true(type(reltime(start)) == v:t_list) 2461 var end: list<any> = reltime() 2462 assert_true(type(reltime(start, end)) == v:t_list) 2463enddef 2464 2465def Test_reltimefloat() 2466 CheckFeature reltime 2467 2468 CheckDefExecAndScriptFailure(['[]->reltimefloat()'], 'E474:') 2469 2470 CheckDefAndScriptFailure2(['reltimefloat("x")'], 'E1013: Argument 1: type mismatch, expected list<number> but got string', 'E1211: List required for argument 1') 2471 CheckDefFailure(['reltimefloat([1.1])'], 'E1013: Argument 1: type mismatch, expected list<number> but got list<float>') 2472 assert_true(type(reltimefloat(reltime())) == v:t_float) 2473enddef 2474 2475def Test_reltimestr() 2476 CheckFeature reltime 2477 2478 CheckDefExecAndScriptFailure(['[]->reltimestr()'], 'E474:') 2479 2480 CheckDefAndScriptFailure2(['reltimestr(true)'], 'E1013: Argument 1: type mismatch, expected list<number> but got bool', 'E1211: List required for argument 1') 2481 CheckDefFailure(['reltimestr([true])'], 'E1013: Argument 1: type mismatch, expected list<number> but got list<bool>') 2482 assert_true(type(reltimestr(reltime())) == v:t_string) 2483enddef 2484 2485def Test_remote_expr() 2486 CheckFeature clientserver 2487 CheckEnv DISPLAY 2488 CheckDefAndScriptFailure2(['remote_expr(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 2489 CheckDefAndScriptFailure2(['remote_expr("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 2490 CheckDefAndScriptFailure2(['remote_expr("a", "b", 3)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') 2491 CheckDefAndScriptFailure2(['remote_expr("a", "b", "c", "d")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') 2492enddef 2493 2494def Test_remote_foreground() 2495 CheckFeature clientserver 2496 # remote_foreground() doesn't fail on MS-Windows 2497 CheckNotMSWindows 2498 CheckEnv DISPLAY 2499 2500 CheckDefAndScriptFailure2(['remote_foreground(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 2501 assert_fails('remote_foreground("NonExistingServer")', 'E241:') 2502enddef 2503 2504def Test_remote_peek() 2505 CheckFeature clientserver 2506 CheckEnv DISPLAY 2507 CheckDefAndScriptFailure2(['remote_peek(0z10)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1174: String required for argument 1') 2508 CheckDefAndScriptFailure2(['remote_peek("a5b6c7", [1])'], 'E1013: Argument 2: type mismatch, expected string but got list<number>', 'E1174: String required for argument 2') 2509enddef 2510 2511def Test_remote_read() 2512 CheckFeature clientserver 2513 CheckEnv DISPLAY 2514 CheckDefAndScriptFailure2(['remote_read(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 2515 CheckDefAndScriptFailure2(['remote_read("a", "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 2516enddef 2517 2518def Test_remote_send() 2519 CheckFeature clientserver 2520 CheckEnv DISPLAY 2521 CheckDefAndScriptFailure2(['remote_send(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 2522 CheckDefAndScriptFailure2(['remote_send("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 2523 CheckDefAndScriptFailure2(['remote_send("a", "b", 3)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') 2524enddef 2525 2526def Test_remote_startserver() 2527 CheckFeature clientserver 2528 CheckEnv DISPLAY 2529 CheckDefAndScriptFailure2(['remote_startserver({})'], 'E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 1') 2530enddef 2531 2532def Test_remove_const_list() 2533 var l: list<number> = [1, 2, 3, 4] 2534 assert_equal([1, 2], remove(l, 0, 1)) 2535 assert_equal([3, 4], l) 2536enddef 2537 2538def Test_remove() 2539 CheckDefAndScriptFailure2(['remove("a", 1)'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1228: List, Dictionary or Blob required for argument 1') 2540 CheckDefAndScriptFailure2(['remove([], "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 2541 CheckDefAndScriptFailure2(['remove([], 1, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 2542 CheckDefAndScriptFailure2(['remove({}, 1.1)'], 'E1013: Argument 2: type mismatch, expected string but got float', 'E1220: String or Number required for argument 2') 2543 CheckDefAndScriptFailure2(['remove(0z10, "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 2544 CheckDefAndScriptFailure2(['remove(0z20, 1, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 2545 var l: any = [1, 2, 3, 4] 2546 remove(l, 1) 2547 assert_equal([1, 3, 4], l) 2548 remove(l, 0, 1) 2549 assert_equal([4], l) 2550 var b: any = 0z1234.5678.90 2551 remove(b, 1) 2552 assert_equal(0z1256.7890, b) 2553 remove(b, 1, 2) 2554 assert_equal(0z1290, b) 2555 var d: any = {a: 10, b: 20, c: 30} 2556 remove(d, 'b') 2557 assert_equal({a: 10, c: 30}, d) 2558 var d2: any = {1: 'a', 2: 'b', 3: 'c'} 2559 remove(d2, 2) 2560 assert_equal({1: 'a', 3: 'c'}, d2) 2561enddef 2562 2563def Test_remove_return_type() 2564 var l = remove({one: [1, 2], two: [3, 4]}, 'one') 2565 var res = 0 2566 for n in l 2567 res += n 2568 endfor 2569 res->assert_equal(3) 2570enddef 2571 2572def Test_rename() 2573 CheckDefAndScriptFailure2(['rename(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 2574 CheckDefAndScriptFailure2(['rename("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 2575enddef 2576 2577def Test_repeat() 2578 CheckDefAndScriptFailure2(['repeat(1.1, 2)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1224: String, Number or List required for argument 1') 2579 CheckDefAndScriptFailure2(['repeat({a: 10}, 2)'], 'E1013: Argument 1: type mismatch, expected string but got dict<', 'E1224: String, Number or List required for argument 1') 2580 var lines =<< trim END 2581 assert_equal('aaa', repeat('a', 3)) 2582 assert_equal('111', repeat(1, 3)) 2583 assert_equal([1, 1, 1], repeat([1], 3)) 2584 var s = '-' 2585 s ..= repeat(5, 3) 2586 assert_equal('-555', s) 2587 END 2588 CheckDefAndScriptSuccess(lines) 2589enddef 2590 2591def Test_resolve() 2592 CheckDefAndScriptFailure2(['resolve([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1') 2593 assert_equal('SomeFile', resolve('SomeFile')) 2594enddef 2595 2596def Test_reverse() 2597 CheckDefAndScriptFailure2(['reverse(10)'], 'E1013: Argument 1: type mismatch, expected list<any> but got number', 'E1226: List or Blob required for argument 1') 2598 CheckDefAndScriptFailure2(['reverse("abc")'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1226: List or Blob required for argument 1') 2599enddef 2600 2601def Test_reverse_return_type() 2602 var l = reverse([1, 2, 3]) 2603 var res = 0 2604 for n in l 2605 res += n 2606 endfor 2607 res->assert_equal(6) 2608enddef 2609 2610def Test_rubyeval() 2611 if !has('ruby') 2612 CheckFeature ruby 2613 endif 2614 CheckDefAndScriptFailure2(['rubyeval([2])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1') 2615enddef 2616 2617def Test_screenattr() 2618 CheckDefAndScriptFailure2(['screenattr("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2619 CheckDefAndScriptFailure2(['screenattr(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 2620enddef 2621 2622def Test_screenchar() 2623 CheckDefAndScriptFailure2(['screenchar("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2624 CheckDefAndScriptFailure2(['screenchar(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 2625enddef 2626 2627def Test_screenchars() 2628 CheckDefAndScriptFailure2(['screenchars("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2629 CheckDefAndScriptFailure2(['screenchars(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 2630enddef 2631 2632def Test_screenpos() 2633 CheckDefAndScriptFailure2(['screenpos("a", 1, 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2634 CheckDefAndScriptFailure2(['screenpos(1, "b", 1)'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 2635 CheckDefAndScriptFailure2(['screenpos(1, 1, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 2636 assert_equal({col: 1, row: 1, endcol: 1, curscol: 1}, screenpos(1, 1, 1)) 2637enddef 2638 2639def Test_screenstring() 2640 CheckDefAndScriptFailure2(['screenstring("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2641 CheckDefAndScriptFailure2(['screenstring(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 2642enddef 2643 2644def Test_search() 2645 new 2646 setline(1, ['foo', 'bar']) 2647 var val = 0 2648 # skip expr returns boolean 2649 search('bar', 'W', 0, 0, () => val == 1)->assert_equal(2) 2650 :1 2651 search('bar', 'W', 0, 0, () => val == 0)->assert_equal(0) 2652 # skip expr returns number, only 0 and 1 are accepted 2653 :1 2654 search('bar', 'W', 0, 0, () => 0)->assert_equal(2) 2655 :1 2656 search('bar', 'W', 0, 0, () => 1)->assert_equal(0) 2657 assert_fails("search('bar', '', 0, 0, () => -1)", 'E1023:') 2658 assert_fails("search('bar', '', 0, 0, () => -1)", 'E1023:') 2659 2660 setline(1, "find this word") 2661 normal gg 2662 var col = 7 2663 assert_equal(1, search('this', '', 0, 0, 'col(".") > col')) 2664 normal 0 2665 assert_equal([1, 6], searchpos('this', '', 0, 0, 'col(".") > col')) 2666 2667 col = 5 2668 normal 0 2669 assert_equal(0, search('this', '', 0, 0, 'col(".") > col')) 2670 normal 0 2671 assert_equal([0, 0], searchpos('this', '', 0, 0, 'col(".") > col')) 2672 bwipe! 2673 CheckDefAndScriptFailure2(['search(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 2674 CheckDefAndScriptFailure2(['search("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 2675 CheckDefAndScriptFailure2(['search("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 2676 CheckDefAndScriptFailure2(['search("a", "b", 3, "d")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') 2677enddef 2678 2679def Test_searchcount() 2680 new 2681 setline(1, "foo bar") 2682 :/foo 2683 searchcount({recompute: true}) 2684 ->assert_equal({ 2685 exact_match: 1, 2686 current: 1, 2687 total: 1, 2688 maxcount: 99, 2689 incomplete: 0}) 2690 bwipe! 2691 CheckDefAndScriptFailure2(['searchcount([1])'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 1') 2692enddef 2693 2694def Test_searchdecl() 2695 searchdecl('blah', true, true)->assert_equal(1) 2696 CheckDefAndScriptFailure2(['searchdecl(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 2697 CheckDefAndScriptFailure2(['searchdecl("a", 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2') 2698 CheckDefAndScriptFailure2(['searchdecl("a", true, 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3') 2699enddef 2700 2701def Test_searchpair() 2702 new 2703 setline(1, "here { and } there") 2704 2705 normal f{ 2706 var col = 15 2707 assert_equal(1, searchpair('{', '', '}', '', 'col(".") > col')) 2708 assert_equal(12, col('.')) 2709 normal 0f{ 2710 assert_equal([1, 12], searchpairpos('{', '', '}', '', 'col(".") > col')) 2711 2712 col = 8 2713 normal 0f{ 2714 assert_equal(0, searchpair('{', '', '}', '', 'col(".") > col')) 2715 assert_equal(6, col('.')) 2716 normal 0f{ 2717 assert_equal([0, 0], searchpairpos('{', '', '}', '', 'col(".") > col')) 2718 2719 var lines =<< trim END 2720 vim9script 2721 setline(1, '()') 2722 normal gg 2723 def Fail() 2724 try 2725 searchpairpos('(', '', ')', 'nW', '[0]->map("")') 2726 catch 2727 g:caught = 'yes' 2728 endtry 2729 enddef 2730 Fail() 2731 END 2732 CheckScriptSuccess(lines) 2733 assert_equal('yes', g:caught) 2734 unlet g:caught 2735 bwipe! 2736 2737 lines =<< trim END 2738 echo searchpair("a", "b", "c", "d", "f", 33) 2739 END 2740 CheckDefAndScriptFailure2(lines, 'E1001: Variable not found: f', 'E475: Invalid argument: d') 2741 2742 CheckDefAndScriptFailure2(['searchpair(1, "b", "c")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 2743 CheckDefAndScriptFailure2(['searchpair("a", 2, "c")'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 2744 CheckDefAndScriptFailure2(['searchpair("a", "b", 3)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') 2745 CheckDefAndScriptFailure2(['searchpair("a", "b", "c", 4)'], 'E1013: Argument 4: type mismatch, expected string but got number', 'E1174: String required for argument 4') 2746 CheckDefAndScriptFailure2(['searchpair("a", "b", "c", "r", "1", "f")'], 'E1013: Argument 6: type mismatch, expected number but got string', 'E1210: Number required for argument 6') 2747 CheckDefAndScriptFailure2(['searchpair("a", "b", "c", "r", "1", 3, "g")'], 'E1013: Argument 7: type mismatch, expected number but got string', 'E1210: Number required for argument 7') 2748enddef 2749 2750def Test_searchpos() 2751 CheckDefAndScriptFailure2(['searchpos(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 2752 CheckDefAndScriptFailure2(['searchpos("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 2753 CheckDefAndScriptFailure2(['searchpos("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 2754 CheckDefAndScriptFailure2(['searchpos("a", "b", 3, "d")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') 2755enddef 2756 2757def Test_server2client() 2758 CheckFeature clientserver 2759 CheckEnv DISPLAY 2760 CheckDefAndScriptFailure2(['server2client(10, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 2761 CheckDefAndScriptFailure2(['server2client("a", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 2762enddef 2763 2764def Test_shellescape() 2765 CheckDefAndScriptFailure2(['shellescape(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 2766 CheckDefAndScriptFailure2(['shellescape("a", 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2') 2767enddef 2768 2769def Test_set_get_bufline() 2770 # similar to Test_setbufline_getbufline() 2771 var lines =<< trim END 2772 new 2773 var b = bufnr('%') 2774 hide 2775 assert_equal(0, setbufline(b, 1, ['foo', 'bar'])) 2776 assert_equal(['foo'], getbufline(b, 1)) 2777 assert_equal(['bar'], getbufline(b, '$')) 2778 assert_equal(['foo', 'bar'], getbufline(b, 1, 2)) 2779 exe "bd!" b 2780 assert_equal([], getbufline(b, 1, 2)) 2781 2782 split Xtest 2783 setline(1, ['a', 'b', 'c']) 2784 b = bufnr('%') 2785 wincmd w 2786 2787 assert_equal(1, setbufline(b, 5, 'x')) 2788 assert_equal(1, setbufline(b, 5, ['x'])) 2789 assert_equal(1, setbufline(b, 5, [])) 2790 assert_equal(1, setbufline(b, 5, test_null_list())) 2791 2792 assert_equal(1, 'x'->setbufline(bufnr('$') + 1, 1)) 2793 assert_equal(1, ['x']->setbufline(bufnr('$') + 1, 1)) 2794 assert_equal(1, []->setbufline(bufnr('$') + 1, 1)) 2795 assert_equal(1, test_null_list()->setbufline(bufnr('$') + 1, 1)) 2796 2797 assert_equal(['a', 'b', 'c'], getbufline(b, 1, '$')) 2798 2799 assert_equal(0, setbufline(b, 4, ['d', 'e'])) 2800 assert_equal(['c'], b->getbufline(3)) 2801 assert_equal(['d'], getbufline(b, 4)) 2802 assert_equal(['e'], getbufline(b, 5)) 2803 assert_equal([], getbufline(b, 6)) 2804 assert_equal([], getbufline(b, 2, 1)) 2805 2806 if has('job') 2807 setbufline(b, 2, [function('eval'), {key: 123}, string(test_null_job())]) 2808 assert_equal(["function('eval')", 2809 "{'key': 123}", 2810 "no process"], 2811 getbufline(b, 2, 4)) 2812 endif 2813 2814 exe 'bwipe! ' .. b 2815 END 2816 CheckDefAndScriptSuccess(lines) 2817enddef 2818 2819def Test_setbufvar() 2820 setbufvar(bufnr('%'), '&syntax', 'vim') 2821 &syntax->assert_equal('vim') 2822 setbufvar(bufnr('%'), '&ts', 16) 2823 &ts->assert_equal(16) 2824 setbufvar(bufnr('%'), '&ai', true) 2825 &ai->assert_equal(true) 2826 setbufvar(bufnr('%'), '&ft', 'filetype') 2827 &ft->assert_equal('filetype') 2828 2829 settabwinvar(1, 1, '&syntax', 'vam') 2830 &syntax->assert_equal('vam') 2831 settabwinvar(1, 1, '&ts', 15) 2832 &ts->assert_equal(15) 2833 setlocal ts=8 2834 settabwinvar(1, 1, '&list', false) 2835 &list->assert_equal(false) 2836 settabwinvar(1, 1, '&list', true) 2837 &list->assert_equal(true) 2838 setlocal list& 2839 2840 setbufvar('%', 'myvar', 123) 2841 getbufvar('%', 'myvar')->assert_equal(123) 2842 2843 CheckDefAndScriptFailure2(['setbufvar(true, "v", 3)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1') 2844 CheckDefAndScriptFailure2(['setbufvar(1, 2, 3)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 2845enddef 2846 2847def Test_setbufline() 2848 new 2849 var bnum = bufnr('%') 2850 :wincmd w 2851 setbufline(bnum, 1, range(1, 3)) 2852 setbufline(bnum, 4, 'one') 2853 setbufline(bnum, 5, 10) 2854 setbufline(bnum, 6, ['two', 11]) 2855 assert_equal(['1', '2', '3', 'one', '10', 'two', '11'], getbufline(bnum, 1, '$')) 2856 CheckDefAndScriptFailure2(['setbufline([1], 1, "x")'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1') 2857 CheckDefAndScriptFailure2(['setbufline(1, [1], "x")'], 'E1013: Argument 2: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 2') 2858 CheckDefAndScriptFailure2(['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') 2859 bnum->bufwinid()->win_gotoid() 2860 bw! 2861enddef 2862 2863def Test_setcellwidths() 2864 CheckDefAndScriptFailure2(['setcellwidths(1)'], 'E1013: Argument 1: type mismatch, expected list<any> but got number', 'E1211: List required for argument 1') 2865 CheckDefAndScriptFailure2(['setcellwidths({"a": 10})'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<number>', 'E1211: List required for argument 1') 2866enddef 2867 2868def Test_setcharpos() 2869 CheckDefAndScriptFailure2(['setcharpos(1, [])'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 2870 CheckDefFailure(['setcharpos(".", ["a"])'], 'E1013: Argument 2: type mismatch, expected list<number> but got list<string>') 2871 CheckDefAndScriptFailure2(['setcharpos(".", 1)'], 'E1013: Argument 2: type mismatch, expected list<number> but got number', 'E1211: List required for argument 2') 2872enddef 2873 2874def Test_setcharsearch() 2875 CheckDefAndScriptFailure2(['setcharsearch("x")'], 'E1013: Argument 1: type mismatch, expected dict<any> but got string', 'E1206: Dictionary required for argument 1') 2876 CheckDefAndScriptFailure2(['setcharsearch([])'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1') 2877 var d: dict<any> = {char: 'x', forward: 1, until: 1} 2878 setcharsearch(d) 2879 assert_equal(d, getcharsearch()) 2880enddef 2881 2882def Test_setcmdpos() 2883 CheckDefAndScriptFailure2(['setcmdpos("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2884enddef 2885 2886def Test_setcursorcharpos() 2887 CheckDefAndScriptFailure2(['setcursorcharpos(0z10, 1)'], 'E1013: Argument 1: type mismatch, expected number but got blob', 'E1224: String, Number or List required for argument 1') 2888 CheckDefAndScriptFailure2(['setcursorcharpos(1, "2")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 2889 CheckDefAndScriptFailure2(['setcursorcharpos(1, 2, "3")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 2890enddef 2891 2892def Test_setenv() 2893 CheckDefAndScriptFailure2(['setenv(1, 2)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 2894enddef 2895 2896def Test_setfperm() 2897 CheckDefAndScriptFailure2(['setfperm(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 2898 CheckDefAndScriptFailure2(['setfperm("a", 0z10)'], 'E1013: Argument 2: type mismatch, expected string but got blob', 'E1174: String required for argument 2') 2899enddef 2900 2901def Test_setline() 2902 new 2903 setline(1, range(1, 4)) 2904 assert_equal(['1', '2', '3', '4'], getline(1, '$')) 2905 setline(1, ['a', 'b', 'c', 'd']) 2906 assert_equal(['a', 'b', 'c', 'd'], getline(1, '$')) 2907 setline(1, 'one') 2908 assert_equal(['one', 'b', 'c', 'd'], getline(1, '$')) 2909 setline(1, 10) 2910 assert_equal(['10', 'b', 'c', 'd'], getline(1, '$')) 2911 CheckDefAndScriptFailure2(['setline([1], "x")'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1') 2912 bw! 2913enddef 2914 2915def Test_setloclist() 2916 var items = [{filename: '/tmp/file', lnum: 1, valid: true}] 2917 var what = {items: items} 2918 setqflist([], ' ', what) 2919 setloclist(0, [], ' ', what) 2920 CheckDefAndScriptFailure2(['setloclist("1", [])'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2921 CheckDefAndScriptFailure2(['setloclist(1, 2)'], 'E1013: Argument 2: type mismatch, expected list<any> but got number', 'E1211: List required for argument 2') 2922 CheckDefAndScriptFailure2(['setloclist(1, [], 3)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') 2923 CheckDefAndScriptFailure2(['setloclist(1, [], "a", [])'], 'E1013: Argument 4: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 4') 2924enddef 2925 2926def Test_setmatches() 2927 CheckDefAndScriptFailure2(['setmatches({})'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 1') 2928 CheckDefAndScriptFailure2(['setmatches([], "1")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 2929enddef 2930 2931def Test_setpos() 2932 CheckDefAndScriptFailure2(['setpos(1, [])'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 2933 CheckDefFailure(['setpos(".", ["a"])'], 'E1013: Argument 2: type mismatch, expected list<number> but got list<string>') 2934 CheckDefAndScriptFailure2(['setpos(".", 1)'], 'E1013: Argument 2: type mismatch, expected list<number> but got number', 'E1211: List required for argument 2') 2935enddef 2936 2937def Test_setqflist() 2938 CheckDefAndScriptFailure2(['setqflist(1, "")'], 'E1013: Argument 1: type mismatch, expected list<any> but got number', 'E1211: List required for argument 1') 2939 CheckDefAndScriptFailure2(['setqflist([], 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 2940 CheckDefAndScriptFailure2(['setqflist([], "", [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3') 2941enddef 2942 2943def Test_setreg() 2944 setreg('a', ['aaa', 'bbb', 'ccc']) 2945 var reginfo = getreginfo('a') 2946 setreg('a', reginfo) 2947 getreginfo('a')->assert_equal(reginfo) 2948 assert_fails('setreg("ab", 0)', 'E1162:') 2949 CheckDefAndScriptFailure2(['setreg(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 2950 CheckDefAndScriptFailure2(['setreg("a", "b", 3)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') 2951enddef 2952 2953def Test_settabvar() 2954 CheckDefAndScriptFailure2(['settabvar("a", "b", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2955 CheckDefAndScriptFailure2(['settabvar(1, 2, "c")'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 2956enddef 2957 2958def Test_settabwinvar() 2959 CheckDefAndScriptFailure2(['settabwinvar("a", 2, "c", true)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2960 CheckDefAndScriptFailure2(['settabwinvar(1, "b", "c", [])'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 2961 CheckDefAndScriptFailure2(['settabwinvar(1, 1, 3, {})'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') 2962enddef 2963 2964def Test_settagstack() 2965 CheckDefAndScriptFailure2(['settagstack(true, {})'], 'E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1') 2966 CheckDefAndScriptFailure2(['settagstack(1, [1])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 2') 2967 CheckDefAndScriptFailure2(['settagstack(1, {}, 2)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') 2968enddef 2969 2970def Test_setwinvar() 2971 CheckDefAndScriptFailure2(['setwinvar("a", "b", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2972 CheckDefAndScriptFailure2(['setwinvar(1, 2, "c")'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 2973enddef 2974 2975def Test_sha256() 2976 CheckDefAndScriptFailure2(['sha256(100)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 2977 CheckDefAndScriptFailure2(['sha256(0zABCD)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1174: String required for argument 1') 2978 assert_equal('ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad', sha256('abc')) 2979enddef 2980 2981def Test_shiftwidth() 2982 CheckDefAndScriptFailure2(['shiftwidth("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 2983enddef 2984 2985def Test_sign_define() 2986 CheckDefAndScriptFailure2(['sign_define({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1222: String or List required for argument 1') 2987 CheckDefAndScriptFailure2(['sign_define({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1222: String or List required for argument 1') 2988 CheckDefAndScriptFailure2(['sign_define("a", ["b"])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<string>', 'E1206: Dictionary required for argument 2') 2989enddef 2990 2991def Test_sign_getdefined() 2992 CheckDefAndScriptFailure2(['sign_getdefined(["x"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1') 2993 CheckDefAndScriptFailure2(['sign_getdefined(2)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 2994enddef 2995 2996def Test_sign_getplaced() 2997 CheckDefAndScriptFailure2(['sign_getplaced(["x"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1220: String or Number required for argument 1') 2998 CheckDefAndScriptFailure2(['sign_getplaced(1, ["a"])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<string>', 'E1206: Dictionary required for argument 2') 2999 CheckDefAndScriptFailure2(['sign_getplaced("a", 1.1)'], 'E1013: Argument 2: type mismatch, expected dict<any> but got float', 'E1206: Dictionary required for argument 2') 3000enddef 3001 3002def Test_sign_jump() 3003 CheckDefAndScriptFailure2(['sign_jump("a", "b", "c")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3004 CheckDefAndScriptFailure2(['sign_jump(1, 2, 3)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 3005 CheckDefAndScriptFailure2(['sign_jump(1, "b", true)'], 'E1013: Argument 3: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 3') 3006enddef 3007 3008def Test_sign_place() 3009 CheckDefAndScriptFailure2(['sign_place("a", "b", "c", "d")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3010 CheckDefAndScriptFailure2(['sign_place(1, 2, "c", "d")'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 3011 CheckDefAndScriptFailure2(['sign_place(1, "b", 3, "d")'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') 3012 CheckDefAndScriptFailure2(['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') 3013 CheckDefAndScriptFailure2(['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') 3014enddef 3015 3016def Test_sign_placelist() 3017 CheckDefAndScriptFailure2(['sign_placelist("x")'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1211: List required for argument 1') 3018 CheckDefAndScriptFailure2(['sign_placelist({"a": 10})'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<number>', 'E1211: List required for argument 1') 3019enddef 3020 3021def Test_sign_undefine() 3022 CheckDefAndScriptFailure2(['sign_undefine({})'], 'E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1222: String or List required for argument 1') 3023 CheckDefAndScriptFailure2(['sign_undefine([1])'], 'E1013: Argument 1: type mismatch, expected list<string> but got list<number>', 'E155: Unknown sign:') 3024enddef 3025 3026def Test_sign_unplace() 3027 CheckDefAndScriptFailure2(['sign_unplace({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1') 3028 CheckDefAndScriptFailure2(['sign_unplace({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1') 3029 CheckDefAndScriptFailure2(['sign_unplace("a", ["b"])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<string>', 'E1206: Dictionary required for argument 2') 3030enddef 3031 3032def Test_sign_unplacelist() 3033 CheckDefAndScriptFailure2(['sign_unplacelist("x")'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1211: List required for argument 1') 3034 CheckDefAndScriptFailure2(['sign_unplacelist({"a": 10})'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<number>', 'E1211: List required for argument 1') 3035enddef 3036 3037def Test_simplify() 3038 CheckDefAndScriptFailure2(['simplify(100)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3039 call assert_equal('NonExistingFile', simplify('NonExistingFile')) 3040enddef 3041 3042def Test_slice() 3043 assert_equal('12345', slice('012345', 1)) 3044 assert_equal('123', slice('012345', 1, 4)) 3045 assert_equal('1234', slice('012345', 1, -1)) 3046 assert_equal('1', slice('012345', 1, -4)) 3047 assert_equal('', slice('012345', 1, -5)) 3048 assert_equal('', slice('012345', 1, -6)) 3049 3050 assert_equal([1, 2, 3, 4, 5], slice(range(6), 1)) 3051 assert_equal([1, 2, 3], slice(range(6), 1, 4)) 3052 assert_equal([1, 2, 3, 4], slice(range(6), 1, -1)) 3053 assert_equal([1], slice(range(6), 1, -4)) 3054 assert_equal([], slice(range(6), 1, -5)) 3055 assert_equal([], slice(range(6), 1, -6)) 3056 3057 assert_equal(0z1122334455, slice(0z001122334455, 1)) 3058 assert_equal(0z112233, slice(0z001122334455, 1, 4)) 3059 assert_equal(0z11223344, slice(0z001122334455, 1, -1)) 3060 assert_equal(0z11, slice(0z001122334455, 1, -4)) 3061 assert_equal(0z, slice(0z001122334455, 1, -5)) 3062 assert_equal(0z, slice(0z001122334455, 1, -6)) 3063 CheckDefAndScriptFailure2(['slice({"a": 10}, 1)'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<number>', 'E1211: List required for argument 1') 3064 CheckDefAndScriptFailure2(['slice([1, 2, 3], "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 3065 CheckDefAndScriptFailure2(['slice("abc", 1, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 3066enddef 3067 3068def Test_spellsuggest() 3069 if !has('spell') 3070 CheckFeature spell 3071 else 3072 spellsuggest('marrch', 1, true)->assert_equal(['March']) 3073 endif 3074 CheckDefAndScriptFailure2(['spellsuggest(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3075 CheckDefAndScriptFailure2(['spellsuggest("a", "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 3076 CheckDefAndScriptFailure2(['spellsuggest("a", 1, 0z01)'], 'E1013: Argument 3: type mismatch, expected bool but got blob', 'E1212: Bool required for argument 3') 3077enddef 3078 3079def Test_sound_playevent() 3080 CheckFeature sound 3081 CheckDefAndScriptFailure2(['sound_playevent(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3082enddef 3083 3084def Test_sound_playfile() 3085 CheckFeature sound 3086 CheckDefAndScriptFailure2(['sound_playfile(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3087enddef 3088 3089def Test_sound_stop() 3090 CheckFeature sound 3091 CheckDefAndScriptFailure2(['sound_stop("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3092enddef 3093 3094def Test_soundfold() 3095 CheckDefAndScriptFailure2(['soundfold(20)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3096 assert_equal('abc', soundfold('abc')) 3097enddef 3098 3099def Test_sort_return_type() 3100 var res: list<number> 3101 res = [1, 2, 3]->sort() 3102enddef 3103 3104def Test_sort_argument() 3105 var lines =<< trim END 3106 var res = ['b', 'a', 'c']->sort('i') 3107 res->assert_equal(['a', 'b', 'c']) 3108 3109 def Compare(a: number, b: number): number 3110 return a - b 3111 enddef 3112 var l = [3, 6, 7, 1, 8, 2, 4, 5] 3113 sort(l, Compare) 3114 assert_equal([1, 2, 3, 4, 5, 6, 7, 8], l) 3115 END 3116 CheckDefAndScriptSuccess(lines) 3117 CheckDefAndScriptFailure2(['sort("a")'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1211: List required for argument 1') 3118 CheckDefAndScriptFailure2(['sort([1], "", [1])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3') 3119enddef 3120 3121def Test_spellbadword() 3122 CheckDefAndScriptFailure2(['spellbadword(100)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3123 spellbadword('good')->assert_equal(['', '']) 3124enddef 3125 3126def Test_split() 3127 split(' aa bb ', '\W\+', true)->assert_equal(['', 'aa', 'bb', '']) 3128 CheckDefAndScriptFailure2(['split(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3129 CheckDefAndScriptFailure2(['split("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 3130 CheckDefAndScriptFailure2(['split("a", "b", 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3') 3131enddef 3132 3133def Test_srand() 3134 CheckDefAndScriptFailure2(['srand("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3135 type(srand(100))->assert_equal(v:t_list) 3136enddef 3137 3138def Test_state() 3139 CheckDefAndScriptFailure2(['state({})'], 'E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 1') 3140 assert_equal('', state('a')) 3141enddef 3142 3143def Run_str2float() 3144 if !has('float') 3145 CheckFeature float 3146 endif 3147 str2float("1.00")->assert_equal(1.00) 3148 str2float("2e-2")->assert_equal(0.02) 3149 3150 CheckDefAndScriptFailure2(['str2float(123)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3151 endif 3152enddef 3153 3154def Test_str2list() 3155 CheckDefAndScriptFailure2(['str2list(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3156 CheckDefAndScriptFailure2(['str2list("a", 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2') 3157 assert_equal([97], str2list('a')) 3158 assert_equal([97], str2list('a', 1)) 3159 assert_equal([97], str2list('a', true)) 3160enddef 3161 3162def Test_str2nr() 3163 str2nr("1'000'000", 10, true)->assert_equal(1000000) 3164 3165 CheckDefAndScriptFailure2(['str2nr(123)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3166 CheckDefAndScriptFailure2(['str2nr("123", "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 3167 CheckDefAndScriptFailure2(['str2nr("123", 10, "x")'], 'E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3') 3168enddef 3169 3170def Test_strcharlen() 3171 CheckDefAndScriptFailure2(['strcharlen([1])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1') 3172 "abc"->strcharlen()->assert_equal(3) 3173 strcharlen(99)->assert_equal(2) 3174enddef 3175 3176def Test_strcharpart() 3177 CheckDefAndScriptFailure2(['strcharpart(1, 2)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3178 CheckDefAndScriptFailure2(['strcharpart("a", "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 3179 CheckDefAndScriptFailure2(['strcharpart("a", 1, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 3180 CheckDefAndScriptFailure2(['strcharpart("a", 1, 1, 2)'], 'E1013: Argument 4: type mismatch, expected bool but got number', 'E1212: Bool required for argument 4') 3181enddef 3182 3183def Test_strchars() 3184 strchars("A\u20dd", true)->assert_equal(1) 3185 CheckDefAndScriptFailure2(['strchars(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3186 CheckDefAndScriptFailure2(['strchars("a", 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2') 3187 assert_equal(3, strchars('abc')) 3188 assert_equal(3, strchars('abc', 1)) 3189 assert_equal(3, strchars('abc', true)) 3190enddef 3191 3192def Test_strdisplaywidth() 3193 CheckDefAndScriptFailure2(['strdisplaywidth(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3194 CheckDefAndScriptFailure2(['strdisplaywidth("a", "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 3195enddef 3196 3197def Test_strftime() 3198 CheckDefAndScriptFailure2(['strftime(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3199 CheckDefAndScriptFailure2(['strftime("a", "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 3200enddef 3201 3202def Test_strgetchar() 3203 CheckDefAndScriptFailure2(['strgetchar(1, 1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3204 CheckDefAndScriptFailure2(['strgetchar("a", "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 3205enddef 3206 3207def Test_stridx() 3208 CheckDefAndScriptFailure2(['stridx([1], "b")'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1') 3209 CheckDefAndScriptFailure2(['stridx("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 2') 3210 CheckDefAndScriptFailure2(['stridx("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 3211enddef 3212 3213def Test_strlen() 3214 CheckDefAndScriptFailure2(['strlen([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1') 3215 "abc"->strlen()->assert_equal(3) 3216 strlen(99)->assert_equal(2) 3217enddef 3218 3219def Test_strpart() 3220 CheckDefAndScriptFailure2(['strpart(1, 2)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3221 CheckDefAndScriptFailure2(['strpart("a", "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 3222 CheckDefAndScriptFailure2(['strpart("a", 1, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 3223 CheckDefAndScriptFailure2(['strpart("a", 1, 1, 2)'], 'E1013: Argument 4: type mismatch, expected bool but got number', 'E1212: Bool required for argument 4') 3224enddef 3225 3226def Test_strptime() 3227 CheckFunction strptime 3228 CheckDefAndScriptFailure2(['strptime(10, "2021")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3229 CheckDefAndScriptFailure2(['strptime("%Y", 2021)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 3230 # BUG: Directly calling strptime() in this function gives an "E117: Unknown 3231 # function" error on MS-Windows even with the above CheckFunction call for 3232 # strptime(). 3233 #assert_true(strptime('%Y', '2021') != 0) 3234enddef 3235 3236def Test_strridx() 3237 CheckDefAndScriptFailure2(['strridx([1], "b")'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1') 3238 CheckDefAndScriptFailure2(['strridx("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 2') 3239 CheckDefAndScriptFailure2(['strridx("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 3240enddef 3241 3242def Test_strtrans() 3243 CheckDefAndScriptFailure2(['strtrans(20)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3244 assert_equal('abc', strtrans('abc')) 3245enddef 3246 3247def Test_strwidth() 3248 CheckDefAndScriptFailure2(['strwidth(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3249 assert_equal(4, strwidth('abcd')) 3250enddef 3251 3252def Test_submatch() 3253 var pat = 'A\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)' 3254 var Rep = () => range(10)->mapnew((_, v) => submatch(v, true))->string() 3255 var actual = substitute('A123456789', pat, Rep, '') 3256 var expected = "[['A123456789'], ['1'], ['2'], ['3'], ['4'], ['5'], ['6'], ['7'], ['8'], ['9']]" 3257 actual->assert_equal(expected) 3258 CheckDefAndScriptFailure2(['submatch("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3259 CheckDefAndScriptFailure2(['submatch(1, "a")'], 'E1013: Argument 2: type mismatch, expected bool but got string', 'E1212: Bool required for argument 2') 3260enddef 3261 3262def Test_substitute() 3263 var res = substitute('A1234', '\d', 'X', '') 3264 assert_equal('AX234', res) 3265 3266 if has('job') 3267 assert_fails('"text"->substitute(".*", () => test_null_job(), "")', 'E908: using an invalid value as a String: job') 3268 assert_fails('"text"->substitute(".*", () => test_null_channel(), "")', 'E908: using an invalid value as a String: channel') 3269 endif 3270 CheckDefAndScriptFailure2(['substitute(1, "b", "1", "d")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3271 CheckDefAndScriptFailure2(['substitute("a", 2, "1", "d")'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 3272 CheckDefAndScriptFailure2(['substitute("a", "b", "1", 4)'], 'E1013: Argument 4: type mismatch, expected string but got number', 'E1174: String required for argument 4') 3273enddef 3274 3275def Test_swapinfo() 3276 CheckDefAndScriptFailure2(['swapinfo({})'], 'E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 1') 3277 call assert_equal({error: 'Cannot open file'}, swapinfo('x')) 3278enddef 3279 3280def Test_swapname() 3281 CheckDefAndScriptFailure2(['swapname([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1') 3282 assert_fails('swapname("NonExistingBuf")', 'E94:') 3283enddef 3284 3285def Test_synID() 3286 new 3287 setline(1, "text") 3288 synID(1, 1, true)->assert_equal(0) 3289 bwipe! 3290 CheckDefAndScriptFailure2(['synID(0z10, 1, true)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1') 3291 CheckDefAndScriptFailure2(['synID("a", true, false)'], 'E1013: Argument 2: type mismatch, expected number but got bool', 'E1210: Number required for argument 2') 3292 CheckDefAndScriptFailure2(['synID(1, 1, 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3') 3293enddef 3294 3295def Test_synIDattr() 3296 CheckDefAndScriptFailure2(['synIDattr("a", "b")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3297 CheckDefAndScriptFailure2(['synIDattr(1, 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 3298 CheckDefAndScriptFailure2(['synIDattr(1, "b", 3)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') 3299enddef 3300 3301def Test_synIDtrans() 3302 CheckDefAndScriptFailure2(['synIDtrans("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3303enddef 3304 3305def Test_synconcealed() 3306 CheckDefAndScriptFailure2(['synconcealed(0z10, 1)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1') 3307 CheckDefAndScriptFailure2(['synconcealed(1, "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 3308enddef 3309 3310def Test_synstack() 3311 CheckDefAndScriptFailure2(['synstack(0z10, 1)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1') 3312 CheckDefAndScriptFailure2(['synstack(1, "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 3313enddef 3314 3315def Test_system() 3316 CheckDefAndScriptFailure2(['system(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3317 CheckDefAndScriptFailure2(['system("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict<unknown>', 'E1224: String, Number or List required for argument 2') 3318 assert_equal("123\n", system('echo 123')) 3319enddef 3320 3321def Test_systemlist() 3322 CheckDefAndScriptFailure2(['systemlist(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3323 CheckDefAndScriptFailure2(['systemlist("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict<unknown>', 'E1224: String, Number or List required for argument 2') 3324 if has('win32') 3325 call assert_equal(["123\r"], systemlist('echo 123')) 3326 else 3327 call assert_equal(['123'], systemlist('echo 123')) 3328 endif 3329enddef 3330 3331def Test_tabpagebuflist() 3332 CheckDefAndScriptFailure2(['tabpagebuflist("t")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3333 assert_equal([bufnr('')], tabpagebuflist()) 3334 assert_equal([bufnr('')], tabpagebuflist(1)) 3335enddef 3336 3337def Test_tabpagenr() 3338 CheckDefAndScriptFailure2(['tabpagenr(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3339 assert_equal(1, tabpagenr('$')) 3340 assert_equal(1, tabpagenr()) 3341enddef 3342 3343def Test_tabpagewinnr() 3344 CheckDefAndScriptFailure2(['tabpagewinnr("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3345 CheckDefAndScriptFailure2(['tabpagewinnr(1, 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 3346enddef 3347 3348def Test_taglist() 3349 CheckDefAndScriptFailure2(['taglist([1])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1') 3350 CheckDefAndScriptFailure2(['taglist("a", [2])'], 'E1013: Argument 2: type mismatch, expected string but got list<number>', 'E1174: String required for argument 2') 3351enddef 3352 3353def Test_term_dumpload() 3354 CheckRunVimInTerminal 3355 CheckDefAndScriptFailure2(['term_dumpload({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1') 3356 CheckDefAndScriptFailure2(['term_dumpload({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1') 3357 CheckDefAndScriptFailure2(['term_dumpload("a", ["b"])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<string>', 'E1206: Dictionary required for argument 2') 3358enddef 3359 3360def Test_term_dumpdiff() 3361 CheckRunVimInTerminal 3362 CheckDefAndScriptFailure2(['term_dumpdiff(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3363 CheckDefAndScriptFailure2(['term_dumpdiff("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 3364 CheckDefAndScriptFailure2(['term_dumpdiff("a", "b", [1])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3') 3365enddef 3366 3367def Test_term_dumpwrite() 3368 CheckRunVimInTerminal 3369 CheckDefAndScriptFailure2(['term_dumpwrite(true, "b")'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1') 3370 CheckDefAndScriptFailure2(['term_dumpwrite(1, 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 3371 CheckDefAndScriptFailure2(['term_dumpwrite("a", "b", [1])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3') 3372enddef 3373 3374def Test_term_getaltscreen() 3375 CheckRunVimInTerminal 3376 CheckDefAndScriptFailure2(['term_getaltscreen(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1') 3377enddef 3378 3379def Test_term_getansicolors() 3380 CheckRunVimInTerminal 3381 CheckFeature termguicolors 3382 CheckDefAndScriptFailure2(['term_getansicolors(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1220: String or Number required for argument 1') 3383enddef 3384 3385def Test_term_getattr() 3386 CheckRunVimInTerminal 3387 CheckDefAndScriptFailure2(['term_getattr("x", "a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3388 CheckDefAndScriptFailure2(['term_getattr(1, 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 3389enddef 3390 3391def Test_term_getcursor() 3392 CheckRunVimInTerminal 3393 CheckDefAndScriptFailure2(['term_getcursor({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1220: String or Number required for argument 1') 3394enddef 3395 3396def Test_term_getjob() 3397 CheckRunVimInTerminal 3398 CheckDefAndScriptFailure2(['term_getjob(0z10)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1') 3399enddef 3400 3401def Test_term_getline() 3402 CheckRunVimInTerminal 3403 CheckDefAndScriptFailure2(['term_getline(1.1, 1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1') 3404 CheckDefAndScriptFailure2(['term_getline(1, 1.1)'], 'E1013: Argument 2: type mismatch, expected string but got float', 'E1220: String or Number required for argument 2') 3405enddef 3406 3407def Test_term_getscrolled() 3408 CheckRunVimInTerminal 3409 CheckDefAndScriptFailure2(['term_getscrolled(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1') 3410enddef 3411 3412def Test_term_getsize() 3413 CheckRunVimInTerminal 3414 CheckDefAndScriptFailure2(['term_getsize(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1') 3415enddef 3416 3417def Test_term_getstatus() 3418 CheckRunVimInTerminal 3419 CheckDefAndScriptFailure2(['term_getstatus(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1') 3420enddef 3421 3422def Test_term_gettitle() 3423 CheckRunVimInTerminal 3424 CheckDefAndScriptFailure2(['term_gettitle(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1') 3425enddef 3426 3427def Test_term_gettty() 3428 if !has('terminal') 3429 CheckFeature terminal 3430 else 3431 var buf = Run_shell_in_terminal({}) 3432 term_gettty(buf, true)->assert_notequal('') 3433 StopShellInTerminal(buf) 3434 endif 3435 CheckDefAndScriptFailure2(['term_gettty([1])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1') 3436 CheckDefAndScriptFailure2(['term_gettty(1, 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2') 3437enddef 3438 3439def Test_term_scrape() 3440 CheckRunVimInTerminal 3441 CheckDefAndScriptFailure2(['term_scrape(1.1, 1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1') 3442 CheckDefAndScriptFailure2(['term_scrape(1, 1.1)'], 'E1013: Argument 2: type mismatch, expected string but got float', 'E1220: String or Number required for argument 2') 3443enddef 3444 3445def Test_term_sendkeys() 3446 CheckRunVimInTerminal 3447 CheckDefAndScriptFailure2(['term_sendkeys([], "p")'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1') 3448 CheckDefAndScriptFailure2(['term_sendkeys(1, [])'], 'E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2') 3449enddef 3450 3451def Test_term_setansicolors() 3452 CheckRunVimInTerminal 3453 3454 if has('termguicolors') || has('gui') 3455 CheckDefAndScriptFailure2(['term_setansicolors([], "p")'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1') 3456 CheckDefAndScriptFailure2(['term_setansicolors(10, {})'], 'E1013: Argument 2: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 2') 3457 else 3458 throw 'Skipped: Only works with termguicolors or gui feature' 3459 endif 3460enddef 3461 3462def Test_term_setapi() 3463 CheckRunVimInTerminal 3464 CheckDefAndScriptFailure2(['term_setapi([], "p")'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1') 3465 CheckDefAndScriptFailure2(['term_setapi(1, [])'], 'E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2') 3466enddef 3467 3468def Test_term_setkill() 3469 CheckRunVimInTerminal 3470 CheckDefAndScriptFailure2(['term_setkill([], "p")'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1') 3471 CheckDefAndScriptFailure2(['term_setkill(1, [])'], 'E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2') 3472enddef 3473 3474def Test_term_setrestore() 3475 CheckRunVimInTerminal 3476 CheckDefAndScriptFailure2(['term_setrestore([], "p")'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1') 3477 CheckDefAndScriptFailure2(['term_setrestore(1, [])'], 'E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2') 3478enddef 3479 3480def Test_term_setsize() 3481 CheckRunVimInTerminal 3482 CheckDefAndScriptFailure2(['term_setsize(1.1, 2, 3)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1') 3483 CheckDefAndScriptFailure2(['term_setsize(1, "2", 3)'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 3484 CheckDefAndScriptFailure2(['term_setsize(1, 2, "3")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 3485enddef 3486 3487def Test_term_start() 3488 if !has('terminal') 3489 CheckFeature terminal 3490 else 3491 botright new 3492 var winnr = winnr() 3493 term_start(&shell, {curwin: true}) 3494 winnr()->assert_equal(winnr) 3495 bwipe! 3496 endif 3497 CheckDefAndScriptFailure2(['term_start({})'], 'E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1222: String or List required for argument 1') 3498 CheckDefAndScriptFailure2(['term_start([], [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2') 3499 CheckDefAndScriptFailure2(['term_start("", "")'], 'E1013: Argument 2: type mismatch, expected dict<any> but got string', 'E1206: Dictionary required for argument 2') 3500enddef 3501 3502def Test_term_wait() 3503 CheckRunVimInTerminal 3504 CheckDefAndScriptFailure2(['term_wait(0z10, 1)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1') 3505 CheckDefAndScriptFailure2(['term_wait(1, "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 3506enddef 3507 3508def Test_test_alloc_fail() 3509 CheckDefAndScriptFailure2(['test_alloc_fail("a", 10, 20)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3510 CheckDefAndScriptFailure2(['test_alloc_fail(10, "b", 20)'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 3511 CheckDefAndScriptFailure2(['test_alloc_fail(10, 20, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 3512enddef 3513 3514def Test_test_feedinput() 3515 CheckDefAndScriptFailure2(['test_feedinput(test_void())'], 'E1013: Argument 1: type mismatch, expected string but got void', 'E1174: String required for argument 1') 3516 CheckDefAndScriptFailure2(['test_feedinput(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1') 3517enddef 3518 3519def Test_test_getvalue() 3520 CheckDefAndScriptFailure2(['test_getvalue(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1') 3521enddef 3522 3523def Test_test_gui_drop_files() 3524 CheckGui 3525 CheckDefAndScriptFailure2(['test_gui_drop_files("a", 1, 1, 0)'], 'E1013: Argument 1: type mismatch, expected list<string> but got string', 'E1211: List required for argument 1') 3526 CheckDefAndScriptFailure2(['test_gui_drop_files(["x"], "", 1, 0)'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 3527 CheckDefAndScriptFailure2(['test_gui_drop_files(["x"], 1, "", 0)'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 3528 CheckDefAndScriptFailure2(['test_gui_drop_files(["x"], 1, 1, "")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') 3529enddef 3530 3531def Test_test_gui_mouse_event() 3532 CheckGui 3533 CheckDefAndScriptFailure2(['test_gui_mouse_event(1.1, 1, 1, 1, 1)'], 'E1013: Argument 1: type mismatch, expected number but got float', 'E1210: Number required for argument 1') 3534 CheckDefAndScriptFailure2(['test_gui_mouse_event(1, "1", 1, 1, 1)'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 3535 CheckDefAndScriptFailure2(['test_gui_mouse_event(1, 1, "1", 1, 1)'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 3536 CheckDefAndScriptFailure2(['test_gui_mouse_event(1, 1, 1, "1", 1)'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') 3537 CheckDefAndScriptFailure2(['test_gui_mouse_event(1, 1, 1, 1, "1")'], 'E1013: Argument 5: type mismatch, expected number but got string', 'E1210: Number required for argument 5') 3538enddef 3539 3540def Test_test_ignore_error() 3541 CheckDefAndScriptFailure2(['test_ignore_error([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1') 3542 test_ignore_error('RESET') 3543enddef 3544 3545def Test_test_option_not_set() 3546 CheckDefAndScriptFailure2(['test_option_not_set([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1') 3547enddef 3548 3549def Test_test_override() 3550 CheckDefAndScriptFailure2(['test_override(1, 1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3551 CheckDefAndScriptFailure2(['test_override("a", "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 3552enddef 3553 3554def Test_test_scrollbar() 3555 CheckGui 3556 CheckDefAndScriptFailure2(['test_scrollbar(1, 2, 3)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3557 CheckDefAndScriptFailure2(['test_scrollbar("a", "b", 3)'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 3558 CheckDefAndScriptFailure2(['test_scrollbar("a", 2, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 3559enddef 3560 3561def Test_test_setmouse() 3562 CheckDefAndScriptFailure2(['test_setmouse("a", 10)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3563 CheckDefAndScriptFailure2(['test_setmouse(10, "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 3564enddef 3565 3566def Test_test_settime() 3567 CheckDefAndScriptFailure2(['test_settime([1])'], 'E1013: Argument 1: type mismatch, expected number but got list<number>', 'E1210: Number required for argument 1') 3568enddef 3569 3570def Test_test_srand_seed() 3571 CheckDefAndScriptFailure2(['test_srand_seed([1])'], 'E1013: Argument 1: type mismatch, expected number but got list<number>', 'E1210: Number required for argument 1') 3572 CheckDefAndScriptFailure2(['test_srand_seed("10")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3573enddef 3574 3575def Test_timer_info() 3576 CheckDefAndScriptFailure2(['timer_info("id")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3577 assert_equal([], timer_info(100)) 3578 assert_equal([], timer_info()) 3579enddef 3580 3581def Test_timer_pause() 3582 CheckDefAndScriptFailure2(['timer_pause("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3583 CheckDefAndScriptFailure2(['timer_pause(1, "a")'], 'E1013: Argument 2: type mismatch, expected bool but got string', 'E1212: Bool required for argument 2') 3584enddef 3585 3586def Test_timer_paused() 3587 var id = timer_start(50, () => 0) 3588 timer_pause(id, true) 3589 var info = timer_info(id) 3590 info[0]['paused']->assert_equal(1) 3591 timer_stop(id) 3592enddef 3593 3594def Test_timer_start() 3595 CheckDefAndScriptFailure2(['timer_start("a", "1")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3596 CheckDefAndScriptFailure2(['timer_start(1, "1", [1])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3') 3597enddef 3598 3599def Test_timer_stop() 3600 CheckDefAndScriptFailure2(['timer_stop("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3601 assert_equal(0, timer_stop(100)) 3602enddef 3603 3604def Test_tolower() 3605 CheckDefAndScriptFailure2(['tolower(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3606enddef 3607 3608def Test_toupper() 3609 CheckDefAndScriptFailure2(['toupper(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3610enddef 3611 3612def Test_tr() 3613 CheckDefAndScriptFailure2(['tr(1, "a", "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3614 CheckDefAndScriptFailure2(['tr("a", 1, "b")'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') 3615 CheckDefAndScriptFailure2(['tr("a", "a", 1)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') 3616enddef 3617 3618def Test_trim() 3619 CheckDefAndScriptFailure2(['trim(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1') 3620 CheckDefAndScriptFailure2(['trim("a", ["b"])'], 'E1013: Argument 2: type mismatch, expected string but got list<string>', 'E1174: String required for argument 2') 3621 CheckDefAndScriptFailure2(['trim("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 3622enddef 3623 3624def Test_typename() 3625 if has('float') 3626 assert_equal('func([unknown], [unknown]): float', typename(function('pow'))) 3627 endif 3628enddef 3629 3630def Test_undofile() 3631 CheckDefAndScriptFailure2(['undofile(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 3632 assert_equal('.abc.un~', fnamemodify(undofile('abc'), ':t')) 3633enddef 3634 3635def Test_uniq() 3636 CheckDefAndScriptFailure2(['uniq("a")'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1211: List required for argument 1') 3637 CheckDefAndScriptFailure2(['uniq([1], "", [1])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3') 3638enddef 3639 3640def Test_values() 3641 CheckDefAndScriptFailure2(['values([])'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1') 3642 assert_equal([], {}->values()) 3643 assert_equal(['sun'], {star: 'sun'}->values()) 3644enddef 3645 3646def Test_virtcol() 3647 CheckDefAndScriptFailure2(['virtcol(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1222: String or List required for argument 1') 3648 new 3649 setline(1, ['abcdefgh']) 3650 cursor(1, 4) 3651 assert_equal(4, virtcol('.')) 3652 assert_equal(4, virtcol([1, 4])) 3653 assert_equal(9, virtcol([1, '$'])) 3654 assert_equal(0, virtcol([10, '$'])) 3655 bw! 3656enddef 3657 3658def Test_visualmode() 3659 CheckDefAndScriptFailure2(['visualmode("1")'], 'E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1') 3660 CheckDefAndScriptFailure2(['visualmode(2)'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1') 3661enddef 3662 3663def Test_win_execute() 3664 assert_equal("\n" .. winnr(), win_execute(win_getid(), 'echo winnr()')) 3665 assert_equal("\n" .. winnr(), 'echo winnr()'->win_execute(win_getid())) 3666 assert_equal("\n" .. winnr(), win_execute(win_getid(), 'echo winnr()', 'silent')) 3667 assert_equal('', win_execute(342343, 'echo winnr()')) 3668 CheckDefAndScriptFailure2(['win_execute("a", "b", "c")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3669 CheckDefAndScriptFailure2(['win_execute(1, 2, "c")'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1222: String or List required for argument 2') 3670 CheckDefAndScriptFailure2(['win_execute(1, "b", 3)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') 3671enddef 3672 3673def Test_win_findbuf() 3674 CheckDefAndScriptFailure2(['win_findbuf("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3675 assert_equal([], win_findbuf(1000)) 3676 assert_equal([win_getid()], win_findbuf(bufnr(''))) 3677enddef 3678 3679def Test_win_getid() 3680 CheckDefAndScriptFailure2(['win_getid(".")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3681 CheckDefAndScriptFailure2(['win_getid(1, ".")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 3682 assert_equal(win_getid(), win_getid(1, 1)) 3683enddef 3684 3685def Test_win_gettype() 3686 CheckDefAndScriptFailure2(['win_gettype("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3687enddef 3688 3689def Test_win_gotoid() 3690 CheckDefAndScriptFailure2(['win_gotoid("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3691enddef 3692 3693def Test_win_id2tabwin() 3694 CheckDefAndScriptFailure2(['win_id2tabwin("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3695enddef 3696 3697def Test_win_id2win() 3698 CheckDefAndScriptFailure2(['win_id2win("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3699enddef 3700 3701def Test_win_screenpos() 3702 CheckDefAndScriptFailure2(['win_screenpos("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3703enddef 3704 3705def Test_win_splitmove() 3706 split 3707 win_splitmove(1, 2, {vertical: true, rightbelow: true}) 3708 close 3709 CheckDefAndScriptFailure2(['win_splitmove("a", 2)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3710 CheckDefAndScriptFailure2(['win_splitmove(1, "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 3711 CheckDefAndScriptFailure2(['win_splitmove(1, 2, [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3') 3712enddef 3713 3714def Test_winbufnr() 3715 CheckDefAndScriptFailure2(['winbufnr("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3716enddef 3717 3718def Test_winheight() 3719 CheckDefAndScriptFailure2(['winheight("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3720enddef 3721 3722def Test_winlayout() 3723 CheckDefAndScriptFailure2(['winlayout("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3724enddef 3725 3726def Test_winnr() 3727 CheckDefAndScriptFailure2(['winnr([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1') 3728 assert_equal(1, winnr()) 3729 assert_equal(1, winnr('$')) 3730enddef 3731 3732def Test_winrestcmd() 3733 split 3734 var cmd = winrestcmd() 3735 wincmd _ 3736 exe cmd 3737 assert_equal(cmd, winrestcmd()) 3738 close 3739enddef 3740 3741def Test_winrestview() 3742 CheckDefAndScriptFailure2(['winrestview([])'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1') 3743 :%d _ 3744 setline(1, 'Hello World') 3745 winrestview({lnum: 1, col: 6}) 3746 assert_equal([1, 7], [line('.'), col('.')]) 3747enddef 3748 3749def Test_winsaveview() 3750 var view: dict<number> = winsaveview() 3751 3752 var lines =<< trim END 3753 var view: list<number> = winsaveview() 3754 END 3755 CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected list<number> but got dict<number>', 1) 3756enddef 3757 3758def Test_winwidth() 3759 CheckDefAndScriptFailure2(['winwidth("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3760enddef 3761 3762def Test_xor() 3763 CheckDefAndScriptFailure2(['xor("x", 0x2)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') 3764 CheckDefAndScriptFailure2(['xor(0x1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 3765enddef 3766 3767" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker 3768