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 CheckDefFailure(['abs("text")'], 'E1013: Argument 1: type mismatch, expected number but got string', 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_list() 79 var l: list<number> # defaults to empty list 80 add(l, 9) 81 assert_equal([9], l) 82 83 var lines =<< trim END 84 var l: list<number> 85 add(l, "x") 86 END 87 CheckDefFailure(lines, 'E1012:', 2) 88 89 lines =<< trim END 90 var l: list<number> = test_null_list() 91 add(l, 123) 92 END 93 CheckDefExecFailure(lines, 'E1130:', 2) 94enddef 95 96def Test_add_blob() 97 var b1: blob = 0z12 98 add(b1, 0x34) 99 assert_equal(0z1234, b1) 100 101 var b2: blob # defaults to empty blob 102 add(b2, 0x67) 103 assert_equal(0z67, b2) 104 105 var lines =<< trim END 106 var b: blob 107 add(b, "x") 108 END 109 CheckDefFailure(lines, 'E1012:', 2) 110 111 lines =<< trim END 112 var b: blob = test_null_blob() 113 add(b, 123) 114 END 115 CheckDefExecFailure(lines, 'E1131:', 2) 116enddef 117 118def Test_bufname() 119 split SomeFile 120 bufname('%')->assert_equal('SomeFile') 121 edit OtherFile 122 bufname('#')->assert_equal('SomeFile') 123 close 124enddef 125 126def Test_bufnr() 127 var buf = bufnr() 128 bufnr('%')->assert_equal(buf) 129 130 buf = bufnr('Xdummy', true) 131 buf->assert_notequal(-1) 132 exe 'bwipe! ' .. buf 133enddef 134 135def Test_bufwinid() 136 var origwin = win_getid() 137 below split SomeFile 138 var SomeFileID = win_getid() 139 below split OtherFile 140 below split SomeFile 141 bufwinid('SomeFile')->assert_equal(SomeFileID) 142 143 win_gotoid(origwin) 144 only 145 bwipe SomeFile 146 bwipe OtherFile 147enddef 148 149def Test_call_call() 150 var l = [3, 2, 1] 151 call('reverse', [l]) 152 l->assert_equal([1, 2, 3]) 153enddef 154 155def Test_char2nr() 156 char2nr('あ', true)->assert_equal(12354) 157enddef 158 159def Test_col() 160 new 161 setline(1, 'asdf') 162 col([1, '$'])->assert_equal(5) 163enddef 164 165def Test_copy_return_type() 166 var l = copy([1, 2, 3]) 167 var res = 0 168 for n in l 169 res += n 170 endfor 171 res->assert_equal(6) 172 173 var dl = deepcopy([1, 2, 3]) 174 res = 0 175 for n in dl 176 res += n 177 endfor 178 res->assert_equal(6) 179 180 dl = deepcopy([1, 2, 3], true) 181enddef 182 183def Test_count() 184 count('ABC ABC ABC', 'b', true)->assert_equal(3) 185 count('ABC ABC ABC', 'b', false)->assert_equal(0) 186enddef 187 188def Test_cursor() 189 new 190 setline(1, range(4)) 191 cursor(2, 1) 192 assert_equal(2, getcurpos()[1]) 193 cursor('$', 1) 194 assert_equal(4, getcurpos()[1]) 195 196 var lines =<< trim END 197 cursor('2', 1) 198 END 199 CheckDefExecAndScriptFailure(lines, 'E475:') 200enddef 201 202def Test_executable() 203 assert_false(executable("")) 204 assert_false(executable(test_null_string())) 205 206 CheckDefExecFailure(['echo executable(123)'], 'E928:') 207 CheckDefExecFailure(['echo executable(true)'], 'E928:') 208enddef 209 210def Test_exepath() 211 CheckDefExecFailure(['echo exepath(true)'], 'E928:') 212 CheckDefExecFailure(['echo exepath(v:null)'], 'E928:') 213 CheckDefExecFailure(['echo exepath("")'], 'E1142:') 214enddef 215 216def Test_expand() 217 split SomeFile 218 expand('%', true, true)->assert_equal(['SomeFile']) 219 close 220enddef 221 222def Test_extend_arg_types() 223 assert_equal([1, 2, 3], extend([1, 2], [3])) 224 assert_equal([3, 1, 2], extend([1, 2], [3], 0)) 225 assert_equal([1, 3, 2], extend([1, 2], [3], 1)) 226 assert_equal([1, 3, 2], extend([1, 2], [3], s:number_one)) 227 228 assert_equal({a: 1, b: 2, c: 3}, extend({a: 1, b: 2}, {c: 3})) 229 assert_equal({a: 1, b: 4}, extend({a: 1, b: 2}, {b: 4})) 230 assert_equal({a: 1, b: 2}, extend({a: 1, b: 2}, {b: 4}, 'keep')) 231 assert_equal({a: 1, b: 2}, extend({a: 1, b: 2}, {b: 4}, s:string_keep)) 232 233 var res: list<dict<any>> 234 extend(res, mapnew([1, 2], (_, v) => ({}))) 235 assert_equal([{}, {}], res) 236 237 CheckDefFailure(['extend([1, 2], 3)'], 'E1013: Argument 2: type mismatch, expected list<number> but got number') 238 CheckDefFailure(['extend([1, 2], ["x"])'], 'E1013: Argument 2: type mismatch, expected list<number> but got list<string>') 239 CheckDefFailure(['extend([1, 2], [3], "x")'], 'E1013: Argument 3: type mismatch, expected number but got string') 240 241 CheckDefFailure(['extend({a: 1}, 42)'], 'E1013: Argument 2: type mismatch, expected dict<number> but got number') 242 CheckDefFailure(['extend({a: 1}, {b: "x"})'], 'E1013: Argument 2: type mismatch, expected dict<number> but got dict<string>') 243 CheckDefFailure(['extend({a: 1}, {b: 2}, 1)'], 'E1013: Argument 3: type mismatch, expected string but got number') 244enddef 245 246def Test_extend_return_type() 247 var l = extend([1, 2], [3]) 248 var res = 0 249 for n in l 250 res += n 251 endfor 252 res->assert_equal(6) 253enddef 254 255func g:ExtendDict(d) 256 call extend(a:d, #{xx: 'x'}) 257endfunc 258 259def Test_extend_dict_item_type() 260 var lines =<< trim END 261 var d: dict<number> = {a: 1} 262 extend(d, {b: 2}) 263 END 264 CheckDefAndScriptSuccess(lines) 265 266 lines =<< trim END 267 var d: dict<number> = {a: 1} 268 extend(d, {b: 'x'}) 269 END 270 CheckDefFailure(lines, 'E1013: Argument 2: type mismatch, expected dict<number> but got dict<string>', 2) 271 CheckScriptFailure(['vim9script'] + lines, 'E1012:', 3) 272 273 lines =<< trim END 274 var d: dict<number> = {a: 1} 275 g:ExtendDict(d) 276 END 277 CheckDefExecFailure(lines, 'E1012: Type mismatch; expected number but got string', 0) 278 CheckScriptFailure(['vim9script'] + lines, 'E1012:', 1) 279enddef 280 281func g:ExtendList(l) 282 call extend(a:l, ['x']) 283endfunc 284 285def Test_extend_list_item_type() 286 var lines =<< trim END 287 var l: list<number> = [1] 288 extend(l, [2]) 289 END 290 CheckDefAndScriptSuccess(lines) 291 292 lines =<< trim END 293 var l: list<number> = [1] 294 extend(l, ['x']) 295 END 296 CheckDefFailure(lines, 'E1013: Argument 2: type mismatch, expected list<number> but got list<string>', 2) 297 CheckScriptFailure(['vim9script'] + lines, 'E1012:', 3) 298 299 lines =<< trim END 300 var l: list<number> = [1] 301 g:ExtendList(l) 302 END 303 CheckDefExecFailure(lines, 'E1012: Type mismatch; expected number but got string', 0) 304 CheckScriptFailure(['vim9script'] + lines, 'E1012:', 1) 305enddef 306 307def Wrong_dict_key_type(items: list<number>): list<number> 308 return filter(items, (_, val) => get({[val]: 1}, 'x')) 309enddef 310 311def Test_map_function_arg() 312 var lines =<< trim END 313 def MapOne(i: number, v: string): string 314 return i .. ':' .. v 315 enddef 316 var l = ['a', 'b', 'c'] 317 map(l, MapOne) 318 assert_equal(['0:a', '1:b', '2:c'], l) 319 END 320 CheckDefAndScriptSuccess(lines) 321enddef 322 323def Test_map_item_type() 324 var lines =<< trim END 325 var l = ['a', 'b', 'c'] 326 map(l, (k, v) => k .. '/' .. v ) 327 assert_equal(['0/a', '1/b', '2/c'], l) 328 END 329 CheckDefAndScriptSuccess(lines) 330enddef 331 332def Test_filereadable() 333 assert_false(filereadable("")) 334 assert_false(filereadable(test_null_string())) 335 336 CheckDefExecFailure(['echo filereadable(123)'], 'E928:') 337 CheckDefExecFailure(['echo filereadable(true)'], 'E928:') 338enddef 339 340def Test_filewritable() 341 assert_false(filewritable("")) 342 assert_false(filewritable(test_null_string())) 343 344 CheckDefExecFailure(['echo filewritable(123)'], 'E928:') 345 CheckDefExecFailure(['echo filewritable(true)'], 'E928:') 346enddef 347 348def Test_finddir() 349 CheckDefExecFailure(['echo finddir(true)'], 'E928:') 350 CheckDefExecFailure(['echo finddir(v:null)'], 'E928:') 351 CheckDefExecFailure(['echo finddir("")'], 'E1142:') 352enddef 353 354def Test_findfile() 355 CheckDefExecFailure(['echo findfile(true)'], 'E928:') 356 CheckDefExecFailure(['echo findfile(v:null)'], 'E928:') 357 CheckDefExecFailure(['echo findfile("")'], 'E1142:') 358enddef 359 360def Test_fnamemodify() 361 CheckDefSuccess(['echo fnamemodify(test_null_string(), ":p")']) 362 CheckDefSuccess(['echo fnamemodify("", ":p")']) 363 CheckDefSuccess(['echo fnamemodify("file", test_null_string())']) 364 CheckDefSuccess(['echo fnamemodify("file", "")']) 365 366 CheckDefExecFailure(['echo fnamemodify(true, ":p")'], 'E928:') 367 CheckDefExecFailure(['echo fnamemodify(v:null, ":p")'], 'E928:') 368 CheckDefExecFailure(['echo fnamemodify("file", true)'], 'E928:') 369enddef 370 371def Test_filter_wrong_dict_key_type() 372 assert_fails('Wrong_dict_key_type([1, 2, 3])', 'E1012:') 373enddef 374 375def Test_filter_return_type() 376 var l = filter([1, 2, 3], () => 1) 377 var res = 0 378 for n in l 379 res += n 380 endfor 381 res->assert_equal(6) 382enddef 383 384def Test_filter_missing_argument() 385 var dict = {aa: [1], ab: [2], ac: [3], de: [4]} 386 var res = dict->filter((k) => k =~ 'a' && k !~ 'b') 387 res->assert_equal({aa: [1], ac: [3]}) 388enddef 389 390def Test_garbagecollect() 391 garbagecollect(true) 392enddef 393 394def Test_getbufinfo() 395 var bufinfo = getbufinfo(bufnr()) 396 getbufinfo('%')->assert_equal(bufinfo) 397 398 edit Xtestfile1 399 hide edit Xtestfile2 400 hide enew 401 getbufinfo({bufloaded: true, buflisted: true, bufmodified: false}) 402 ->len()->assert_equal(3) 403 bwipe Xtestfile1 Xtestfile2 404enddef 405 406def Test_getbufline() 407 e SomeFile 408 var buf = bufnr() 409 e # 410 var lines = ['aaa', 'bbb', 'ccc'] 411 setbufline(buf, 1, lines) 412 getbufline('#', 1, '$')->assert_equal(lines) 413 getbufline(-1, '$', '$')->assert_equal([]) 414 getbufline(-1, 1, '$')->assert_equal([]) 415 416 bwipe! 417enddef 418 419def Test_getchangelist() 420 new 421 setline(1, 'some text') 422 var changelist = bufnr()->getchangelist() 423 getchangelist('%')->assert_equal(changelist) 424 bwipe! 425enddef 426 427def Test_getchar() 428 while getchar(0) 429 endwhile 430 getchar(true)->assert_equal(0) 431enddef 432 433def Test_getcompletion() 434 set wildignore=*.vim,*~ 435 var l = getcompletion('run', 'file', true) 436 l->assert_equal([]) 437 set wildignore& 438enddef 439 440def Test_getloclist_return_type() 441 var l = getloclist(1) 442 l->assert_equal([]) 443 444 var d = getloclist(1, {items: 0}) 445 d->assert_equal({items: []}) 446enddef 447 448def Test_getfperm() 449 assert_equal('', getfperm("")) 450 assert_equal('', getfperm(test_null_string())) 451 452 CheckDefExecFailure(['echo getfperm(true)'], 'E928:') 453 CheckDefExecFailure(['echo getfperm(v:null)'], 'E928:') 454enddef 455 456def Test_getfsize() 457 assert_equal(-1, getfsize("")) 458 assert_equal(-1, getfsize(test_null_string())) 459 460 CheckDefExecFailure(['echo getfsize(true)'], 'E928:') 461 CheckDefExecFailure(['echo getfsize(v:null)'], 'E928:') 462enddef 463 464def Test_getftime() 465 assert_equal(-1, getftime("")) 466 assert_equal(-1, getftime(test_null_string())) 467 468 CheckDefExecFailure(['echo getftime(true)'], 'E928:') 469 CheckDefExecFailure(['echo getftime(v:null)'], 'E928:') 470enddef 471 472def Test_getftype() 473 assert_equal('', getftype("")) 474 assert_equal('', getftype(test_null_string())) 475 476 CheckDefExecFailure(['echo getftype(true)'], 'E928:') 477 CheckDefExecFailure(['echo getftype(v:null)'], 'E928:') 478enddef 479 480def Test_getqflist_return_type() 481 var l = getqflist() 482 l->assert_equal([]) 483 484 var d = getqflist({items: 0}) 485 d->assert_equal({items: []}) 486enddef 487 488def Test_getreg() 489 var lines = ['aaa', 'bbb', 'ccc'] 490 setreg('a', lines) 491 getreg('a', true, true)->assert_equal(lines) 492enddef 493 494def Test_getreg_return_type() 495 var s1: string = getreg('"') 496 var s2: string = getreg('"', 1) 497 var s3: list<string> = getreg('"', 1, 1) 498enddef 499 500def Test_glob() 501 glob('runtest.vim', true, true, true)->assert_equal(['runtest.vim']) 502enddef 503 504def Test_globpath() 505 globpath('.', 'runtest.vim', true, true, true)->assert_equal(['./runtest.vim']) 506enddef 507 508def Test_has() 509 has('eval', true)->assert_equal(1) 510enddef 511 512def Test_hasmapto() 513 hasmapto('foobar', 'i', true)->assert_equal(0) 514 iabbrev foo foobar 515 hasmapto('foobar', 'i', true)->assert_equal(1) 516 iunabbrev foo 517enddef 518 519def Test_index() 520 index(['a', 'b', 'a', 'B'], 'b', 2, true)->assert_equal(3) 521enddef 522 523let s:number_one = 1 524let s:number_two = 2 525let s:string_keep = 'keep' 526 527def Test_insert() 528 var l = insert([2, 1], 3) 529 var res = 0 530 for n in l 531 res += n 532 endfor 533 res->assert_equal(6) 534 535 assert_equal([1, 2, 3], insert([2, 3], 1)) 536 assert_equal([1, 2, 3], insert([2, 3], s:number_one)) 537 assert_equal([1, 2, 3], insert([1, 2], 3, 2)) 538 assert_equal([1, 2, 3], insert([1, 2], 3, s:number_two)) 539 assert_equal(['a', 'b', 'c'], insert(['b', 'c'], 'a')) 540 assert_equal(0z1234, insert(0z34, 0x12)) 541 542 CheckDefFailure(['insert([2, 3], "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 1) 543 CheckDefFailure(['insert([2, 3], 1, "x")'], 'E1013: Argument 3: type mismatch, expected number but got string', 1) 544enddef 545 546def Test_keys_return_type() 547 const var: list<string> = {a: 1, b: 2}->keys() 548 var->assert_equal(['a', 'b']) 549enddef 550 551def Test_list2str_str2list_utf8() 552 var s = "\u3042\u3044" 553 var l = [0x3042, 0x3044] 554 str2list(s, true)->assert_equal(l) 555 list2str(l, true)->assert_equal(s) 556enddef 557 558def SID(): number 559 return expand('<SID>') 560 ->matchstr('<SNR>\zs\d\+\ze_$') 561 ->str2nr() 562enddef 563 564def Test_maparg() 565 var lnum = str2nr(expand('<sflnum>')) 566 map foo bar 567 maparg('foo', '', false, true)->assert_equal({ 568 lnum: lnum + 1, 569 script: 0, 570 mode: ' ', 571 silent: 0, 572 noremap: 0, 573 lhs: 'foo', 574 lhsraw: 'foo', 575 nowait: 0, 576 expr: 0, 577 sid: SID(), 578 rhs: 'bar', 579 buffer: 0}) 580 unmap foo 581enddef 582 583def Test_mapcheck() 584 iabbrev foo foobar 585 mapcheck('foo', 'i', true)->assert_equal('foobar') 586 iunabbrev foo 587enddef 588 589def Test_maparg_mapset() 590 nnoremap <F3> :echo "hit F3"<CR> 591 var mapsave = maparg('<F3>', 'n', false, true) 592 mapset('n', false, mapsave) 593 594 nunmap <F3> 595enddef 596 597def Test_nr2char() 598 nr2char(97, true)->assert_equal('a') 599enddef 600 601def Test_readdir() 602 eval expand('sautest')->readdir((e) => e[0] !=# '.') 603 eval expand('sautest')->readdirex((e) => e.name[0] !=# '.') 604enddef 605 606def Test_remove_return_type() 607 var l = remove({one: [1, 2], two: [3, 4]}, 'one') 608 var res = 0 609 for n in l 610 res += n 611 endfor 612 res->assert_equal(3) 613enddef 614 615def Test_reverse_return_type() 616 var l = reverse([1, 2, 3]) 617 var res = 0 618 for n in l 619 res += n 620 endfor 621 res->assert_equal(6) 622enddef 623 624def Test_search() 625 new 626 setline(1, ['foo', 'bar']) 627 var val = 0 628 # skip expr returns boolean 629 search('bar', 'W', 0, 0, () => val == 1)->assert_equal(2) 630 :1 631 search('bar', 'W', 0, 0, () => val == 0)->assert_equal(0) 632 # skip expr returns number, only 0 and 1 are accepted 633 :1 634 search('bar', 'W', 0, 0, () => 0)->assert_equal(2) 635 :1 636 search('bar', 'W', 0, 0, () => 1)->assert_equal(0) 637 assert_fails("search('bar', '', 0, 0, () => -1)", 'E1023:') 638 assert_fails("search('bar', '', 0, 0, () => -1)", 'E1023:') 639enddef 640 641def Test_searchcount() 642 new 643 setline(1, "foo bar") 644 :/foo 645 searchcount({recompute: true}) 646 ->assert_equal({ 647 exact_match: 1, 648 current: 1, 649 total: 1, 650 maxcount: 99, 651 incomplete: 0}) 652 bwipe! 653enddef 654 655def Test_searchdecl() 656 searchdecl('blah', true, true)->assert_equal(1) 657enddef 658 659def Test_setbufvar() 660 setbufvar(bufnr('%'), '&syntax', 'vim') 661 &syntax->assert_equal('vim') 662 setbufvar(bufnr('%'), '&ts', 16) 663 &ts->assert_equal(16) 664 setbufvar(bufnr('%'), '&ai', true) 665 &ai->assert_equal(true) 666 setbufvar(bufnr('%'), '&ft', 'filetype') 667 &ft->assert_equal('filetype') 668 669 settabwinvar(1, 1, '&syntax', 'vam') 670 &syntax->assert_equal('vam') 671 settabwinvar(1, 1, '&ts', 15) 672 &ts->assert_equal(15) 673 setlocal ts=8 674 settabwinvar(1, 1, '&list', false) 675 &list->assert_equal(false) 676 settabwinvar(1, 1, '&list', true) 677 &list->assert_equal(true) 678 setlocal list& 679 680 setbufvar('%', 'myvar', 123) 681 getbufvar('%', 'myvar')->assert_equal(123) 682enddef 683 684def Test_setloclist() 685 var items = [{filename: '/tmp/file', lnum: 1, valid: true}] 686 var what = {items: items} 687 setqflist([], ' ', what) 688 setloclist(0, [], ' ', what) 689enddef 690 691def Test_setreg() 692 setreg('a', ['aaa', 'bbb', 'ccc']) 693 var reginfo = getreginfo('a') 694 setreg('a', reginfo) 695 getreginfo('a')->assert_equal(reginfo) 696enddef 697 698def Test_spellsuggest() 699 if !has('spell') 700 MissingFeature 'spell' 701 else 702 spellsuggest('marrch', 1, true)->assert_equal(['March']) 703 endif 704enddef 705 706def Test_sort_return_type() 707 var res: list<number> 708 res = [1, 2, 3]->sort() 709enddef 710 711def Test_sort_argument() 712 var lines =<< trim END 713 var res = ['b', 'a', 'c']->sort('i') 714 res->assert_equal(['a', 'b', 'c']) 715 716 def Compare(a: number, b: number): number 717 return a - b 718 enddef 719 var l = [3, 6, 7, 1, 8, 2, 4, 5] 720 sort(l, Compare) 721 assert_equal([1, 2, 3, 4, 5, 6, 7, 8], l) 722 END 723 CheckDefAndScriptSuccess(lines) 724enddef 725 726def Test_split() 727 split(' aa bb ', '\W\+', true)->assert_equal(['', 'aa', 'bb', '']) 728enddef 729 730def Test_str2nr() 731 str2nr("1'000'000", 10, true)->assert_equal(1000000) 732enddef 733 734def Test_strchars() 735 strchars("A\u20dd", true)->assert_equal(1) 736enddef 737 738def Test_submatch() 739 var pat = 'A\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)' 740 var Rep = () => range(10)->mapnew((_, v) => submatch(v, true))->string() 741 var actual = substitute('A123456789', pat, Rep, '') 742 var expected = "[['A123456789'], ['1'], ['2'], ['3'], ['4'], ['5'], ['6'], ['7'], ['8'], ['9']]" 743 actual->assert_equal(expected) 744enddef 745 746def Test_synID() 747 new 748 setline(1, "text") 749 synID(1, 1, true)->assert_equal(0) 750 bwipe! 751enddef 752 753def Test_term_gettty() 754 if !has('terminal') 755 MissingFeature 'terminal' 756 else 757 var buf = Run_shell_in_terminal({}) 758 term_gettty(buf, true)->assert_notequal('') 759 StopShellInTerminal(buf) 760 endif 761enddef 762 763def Test_term_start() 764 if !has('terminal') 765 MissingFeature 'terminal' 766 else 767 botright new 768 var winnr = winnr() 769 term_start(&shell, {curwin: true}) 770 winnr()->assert_equal(winnr) 771 bwipe! 772 endif 773enddef 774 775def Test_timer_paused() 776 var id = timer_start(50, () => 0) 777 timer_pause(id, true) 778 var info = timer_info(id) 779 info[0]['paused']->assert_equal(1) 780 timer_stop(id) 781enddef 782 783def Test_win_splitmove() 784 split 785 win_splitmove(1, 2, {vertical: true, rightbelow: true}) 786 close 787enddef 788 789def Test_winrestcmd() 790 split 791 var cmd = winrestcmd() 792 wincmd _ 793 exe cmd 794 assert_equal(cmd, winrestcmd()) 795 close 796enddef 797 798def Test_winsaveview() 799 var view: dict<number> = winsaveview() 800 801 var lines =<< trim END 802 var view: list<number> = winsaveview() 803 END 804 CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected list<number> but got dict<number>', 1) 805enddef 806 807 808 809 810" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker 811