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