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