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