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