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