194738d8fSBram Moolenaar" Test using builtin functions in the Vim9 script language.
294738d8fSBram Moolenaar
394738d8fSBram Moolenaarsource check.vim
494738d8fSBram Moolenaarsource vim9.vim
594738d8fSBram Moolenaar
694738d8fSBram Moolenaar" Test for passing too many or too few arguments to builtin functions
794738d8fSBram Moolenaarfunc Test_internalfunc_arg_error()
894738d8fSBram Moolenaar  let l =<< trim END
994738d8fSBram Moolenaar    def! FArgErr(): float
1094738d8fSBram Moolenaar      return ceil(1.1, 2)
1194738d8fSBram Moolenaar    enddef
1294738d8fSBram Moolenaar    defcompile
1394738d8fSBram Moolenaar  END
1494738d8fSBram Moolenaar  call writefile(l, 'Xinvalidarg')
1594738d8fSBram Moolenaar  call assert_fails('so Xinvalidarg', 'E118:', '', 1, 'FArgErr')
1694738d8fSBram Moolenaar  let l =<< trim END
1794738d8fSBram Moolenaar    def! FArgErr(): float
1894738d8fSBram Moolenaar      return ceil()
1994738d8fSBram Moolenaar    enddef
2094738d8fSBram Moolenaar    defcompile
2194738d8fSBram Moolenaar  END
2294738d8fSBram Moolenaar  call writefile(l, 'Xinvalidarg')
2394738d8fSBram Moolenaar  call assert_fails('so Xinvalidarg', 'E119:', '', 1, 'FArgErr')
2494738d8fSBram Moolenaar  call delete('Xinvalidarg')
2594738d8fSBram Moolenaarendfunc
2694738d8fSBram Moolenaar
2794738d8fSBram Moolenaar" Test for builtin functions returning different types
2894738d8fSBram Moolenaarfunc Test_InternalFuncRetType()
2994738d8fSBram Moolenaar  let lines =<< trim END
3094738d8fSBram Moolenaar    def RetFloat(): float
3194738d8fSBram Moolenaar      return ceil(1.456)
3294738d8fSBram Moolenaar    enddef
3394738d8fSBram Moolenaar
3494738d8fSBram Moolenaar    def RetListAny(): list<any>
35e0de171eSBram Moolenaar      return items({k: 'v'})
3694738d8fSBram Moolenaar    enddef
3794738d8fSBram Moolenaar
3894738d8fSBram Moolenaar    def RetListString(): list<string>
3994738d8fSBram Moolenaar      return split('a:b:c', ':')
4094738d8fSBram Moolenaar    enddef
4194738d8fSBram Moolenaar
4294738d8fSBram Moolenaar    def RetListDictAny(): list<dict<any>>
4394738d8fSBram Moolenaar      return getbufinfo()
4494738d8fSBram Moolenaar    enddef
4594738d8fSBram Moolenaar
4694738d8fSBram Moolenaar    def RetDictNumber(): dict<number>
4794738d8fSBram Moolenaar      return wordcount()
4894738d8fSBram Moolenaar    enddef
4994738d8fSBram Moolenaar
5094738d8fSBram Moolenaar    def RetDictString(): dict<string>
5194738d8fSBram Moolenaar      return environ()
5294738d8fSBram Moolenaar    enddef
5394738d8fSBram Moolenaar  END
5494738d8fSBram Moolenaar  call writefile(lines, 'Xscript')
5594738d8fSBram Moolenaar  source Xscript
5694738d8fSBram Moolenaar
5794738d8fSBram Moolenaar  call RetFloat()->assert_equal(2.0)
5894738d8fSBram Moolenaar  call RetListAny()->assert_equal([['k', 'v']])
5994738d8fSBram Moolenaar  call RetListString()->assert_equal(['a', 'b', 'c'])
6094738d8fSBram Moolenaar  call RetListDictAny()->assert_notequal([])
6194738d8fSBram Moolenaar  call RetDictNumber()->assert_notequal({})
6294738d8fSBram Moolenaar  call RetDictString()->assert_notequal({})
6394738d8fSBram Moolenaar  call delete('Xscript')
6494738d8fSBram Moolenaarendfunc
6594738d8fSBram Moolenaar
6694738d8fSBram Moolenaardef Test_abs()
6794738d8fSBram Moolenaar  assert_equal(0, abs(0))
6894738d8fSBram Moolenaar  assert_equal(2, abs(-2))
6994738d8fSBram Moolenaar  assert_equal(3, abs(3))
704490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['abs("text")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1')
7194738d8fSBram Moolenaar  if has('float')
7294738d8fSBram Moolenaar    assert_equal(0, abs(0))
7394738d8fSBram Moolenaar    assert_equal(2.0, abs(-2.0))
7494738d8fSBram Moolenaar    assert_equal(3.0, abs(3.0))
7594738d8fSBram Moolenaar  endif
7694738d8fSBram Moolenaarenddef
7794738d8fSBram Moolenaar
780ad871dcSYegappan Lakshmanandef Test_add()
7978db17c6SBram Moolenaar  CheckDefAndScriptFailure2(['add({}, 1)'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', 'E1226: List or Blob required for argument 1')
800ad871dcSYegappan Lakshmanan  CheckDefFailure(['add([1], "a")'], 'E1012: Type mismatch; expected number but got string')
810ad871dcSYegappan Lakshmananenddef
820ad871dcSYegappan Lakshmanan
831a71d31bSYegappan Lakshmanandef Test_add_blob()
841a71d31bSYegappan Lakshmanan  var b1: blob = 0z12
851a71d31bSYegappan Lakshmanan  add(b1, 0x34)
861a71d31bSYegappan Lakshmanan  assert_equal(0z1234, b1)
871a71d31bSYegappan Lakshmanan
881a71d31bSYegappan Lakshmanan  var b2: blob # defaults to empty blob
891a71d31bSYegappan Lakshmanan  add(b2, 0x67)
901a71d31bSYegappan Lakshmanan  assert_equal(0z67, b2)
911a71d31bSYegappan Lakshmanan
921a71d31bSYegappan Lakshmanan  var lines =<< trim END
931a71d31bSYegappan Lakshmanan      var b: blob
941a71d31bSYegappan Lakshmanan      add(b, "x")
951a71d31bSYegappan Lakshmanan  END
961a71d31bSYegappan Lakshmanan  CheckDefFailure(lines, 'E1012:', 2)
971a71d31bSYegappan Lakshmanan
981a71d31bSYegappan Lakshmanan  lines =<< trim END
991a71d31bSYegappan Lakshmanan      add(test_null_blob(), 123)
1001a71d31bSYegappan Lakshmanan  END
1011a71d31bSYegappan Lakshmanan  CheckDefExecAndScriptFailure(lines, 'E1131:', 1)
1021a71d31bSYegappan Lakshmanan
1031a71d31bSYegappan Lakshmanan  lines =<< trim END
1041a71d31bSYegappan Lakshmanan      var b: blob = test_null_blob()
1051a71d31bSYegappan Lakshmanan      add(b, 123)
1061a71d31bSYegappan Lakshmanan  END
1071a71d31bSYegappan Lakshmanan  CheckDefExecFailure(lines, 'E1131:', 2)
1081a71d31bSYegappan Lakshmanan
1091a71d31bSYegappan Lakshmanan  # Getting variable with NULL blob allocates a new blob at script level
1101a71d31bSYegappan Lakshmanan  lines =<< trim END
1111a71d31bSYegappan Lakshmanan      vim9script
1121a71d31bSYegappan Lakshmanan      var b: blob = test_null_blob()
1131a71d31bSYegappan Lakshmanan      add(b, 123)
1141a71d31bSYegappan Lakshmanan  END
1151a71d31bSYegappan Lakshmanan  CheckScriptSuccess(lines)
1161a71d31bSYegappan Lakshmananenddef
1171a71d31bSYegappan Lakshmanan
11894738d8fSBram Moolenaardef Test_add_list()
11994738d8fSBram Moolenaar  var l: list<number>  # defaults to empty list
12094738d8fSBram Moolenaar  add(l, 9)
12194738d8fSBram Moolenaar  assert_equal([9], l)
12294738d8fSBram Moolenaar
12394738d8fSBram Moolenaar  var lines =<< trim END
12494738d8fSBram Moolenaar      var l: list<number>
12594738d8fSBram Moolenaar      add(l, "x")
12694738d8fSBram Moolenaar  END
12794738d8fSBram Moolenaar  CheckDefFailure(lines, 'E1012:', 2)
12894738d8fSBram Moolenaar
12994738d8fSBram Moolenaar  lines =<< trim END
130b7c21afeSBram Moolenaar      add(test_null_list(), 123)
131b7c21afeSBram Moolenaar  END
132b7c21afeSBram Moolenaar  CheckDefExecAndScriptFailure(lines, 'E1130:', 1)
133b7c21afeSBram Moolenaar
134b7c21afeSBram Moolenaar  lines =<< trim END
13594738d8fSBram Moolenaar      var l: list<number> = test_null_list()
13694738d8fSBram Moolenaar      add(l, 123)
13794738d8fSBram Moolenaar  END
13894738d8fSBram Moolenaar  CheckDefExecFailure(lines, 'E1130:', 2)
139b7c21afeSBram Moolenaar
140b7c21afeSBram Moolenaar  # Getting variable with NULL list allocates a new list at script level
141b7c21afeSBram Moolenaar  lines =<< trim END
142b7c21afeSBram Moolenaar      vim9script
143b7c21afeSBram Moolenaar      var l: list<number> = test_null_list()
144b7c21afeSBram Moolenaar      add(l, 123)
145b7c21afeSBram Moolenaar  END
146b7c21afeSBram Moolenaar  CheckScriptSuccess(lines)
147f32f0997SBram Moolenaar
148f32f0997SBram Moolenaar  lines =<< trim END
149f32f0997SBram Moolenaar      vim9script
150f32f0997SBram Moolenaar      var l: list<string> = ['a']
151f32f0997SBram Moolenaar      l->add(123)
152f32f0997SBram Moolenaar  END
153f32f0997SBram Moolenaar  CheckScriptFailure(lines, 'E1012: Type mismatch; expected string but got number', 3)
154f055d450SBram Moolenaar
155f055d450SBram Moolenaar  lines =<< trim END
156f055d450SBram Moolenaar      vim9script
157f055d450SBram Moolenaar      var l: list<string>
158f055d450SBram Moolenaar      l->add(123)
159f055d450SBram Moolenaar  END
160f055d450SBram Moolenaar  CheckScriptFailure(lines, 'E1012: Type mismatch; expected string but got number', 3)
16194738d8fSBram Moolenaarenddef
16294738d8fSBram Moolenaar
1637237cab8SYegappan Lakshmanandef Test_and()
1644490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['and("x", 0x2)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
1654490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['and(0x1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
1667237cab8SYegappan Lakshmananenddef
1677237cab8SYegappan Lakshmanan
1683af15ab7SBram Moolenaardef Test_append()
1693af15ab7SBram Moolenaar  new
1703af15ab7SBram Moolenaar  setline(1, range(3))
1713af15ab7SBram Moolenaar  var res1: number = append(1, 'one')
1723af15ab7SBram Moolenaar  assert_equal(0, res1)
1733af15ab7SBram Moolenaar  var res2: bool = append(3, 'two')
1743af15ab7SBram Moolenaar  assert_equal(false, res2)
1753af15ab7SBram Moolenaar  assert_equal(['0', 'one', '1', 'two', '2'], getline(1, 6))
176b2ac7d06SBram Moolenaar
177b2ac7d06SBram Moolenaar  append(0, 'zero')
178b2ac7d06SBram Moolenaar  assert_equal('zero', getline(1))
1791a71d31bSYegappan Lakshmanan  append(0, {a: 10})
1801a71d31bSYegappan Lakshmanan  assert_equal("{'a': 10}", getline(1))
1811a71d31bSYegappan Lakshmanan  append(0, function('min'))
1821a71d31bSYegappan Lakshmanan  assert_equal("function('min')", getline(1))
1834490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['append([1], "x")'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1')
184fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['append("", "x")'], 'E1209: Invalid value for a line number')
1851a71d31bSYegappan Lakshmanan  bwipe!
1861a71d31bSYegappan Lakshmananenddef
1871a71d31bSYegappan Lakshmanan
1881a71d31bSYegappan Lakshmanandef Test_appendbufline()
1891a71d31bSYegappan Lakshmanan  new
1901a71d31bSYegappan Lakshmanan  var bnum: number = bufnr()
1911a71d31bSYegappan Lakshmanan  :wincmd w
1921a71d31bSYegappan Lakshmanan  appendbufline(bnum, 0, range(3))
1931a71d31bSYegappan Lakshmanan  var res1: number = appendbufline(bnum, 1, 'one')
1941a71d31bSYegappan Lakshmanan  assert_equal(0, res1)
1951a71d31bSYegappan Lakshmanan  var res2: bool = appendbufline(bnum, 3, 'two')
1961a71d31bSYegappan Lakshmanan  assert_equal(false, res2)
1971a71d31bSYegappan Lakshmanan  assert_equal(['0', 'one', '1', 'two', '2', ''], getbufline(bnum, 1, '$'))
1981a71d31bSYegappan Lakshmanan  appendbufline(bnum, 0, 'zero')
1991a71d31bSYegappan Lakshmanan  assert_equal(['zero'], getbufline(bnum, 1))
2004490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['appendbufline([1], 1, "x")'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1')
2014490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['appendbufline(1, [1], "x")'], 'E1013: Argument 2: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 2')
20278db17c6SBram Moolenaar  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')
2031a71d31bSYegappan Lakshmanan  bnum->bufwinid()->win_gotoid()
20451491adfSYegappan Lakshmanan  appendbufline('', 0, 'numbers')
20551491adfSYegappan Lakshmanan  getline(1)->assert_equal('numbers')
206b2ac7d06SBram Moolenaar  bwipe!
2073af15ab7SBram Moolenaarenddef
2083af15ab7SBram Moolenaar
2097237cab8SYegappan Lakshmanandef Test_argc()
2104490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['argc("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
2117237cab8SYegappan Lakshmananenddef
2127237cab8SYegappan Lakshmanan
2137237cab8SYegappan Lakshmanandef Test_arglistid()
2144490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['arglistid("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
2154490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['arglistid(1, "y")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
2164490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['arglistid("x", "y")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
2177237cab8SYegappan Lakshmananenddef
2187237cab8SYegappan Lakshmanan
2197237cab8SYegappan Lakshmanandef Test_argv()
2204490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['argv("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
2214490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['argv(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
2224490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['argv("x", "y")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
2235b73992dSYegappan Lakshmananenddef
2245b73992dSYegappan Lakshmanan
2251a71d31bSYegappan Lakshmanandef Test_assert_beeps()
2261a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['assert_beeps(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
2271a71d31bSYegappan Lakshmananenddef
2281a71d31bSYegappan Lakshmanan
2295b73992dSYegappan Lakshmanandef Test_assert_equalfile()
2304490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['assert_equalfile(1, "f2")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
2314490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['assert_equalfile("f1", true)'], 'E1013: Argument 2: type mismatch, expected string but got bool', 'E1174: String required for argument 2')
2324490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['assert_equalfile("f1", "f2", ["a"])'], 'E1013: Argument 3: type mismatch, expected string but got list<string>', 'E1174: String required for argument 3')
2335b73992dSYegappan Lakshmananenddef
2345b73992dSYegappan Lakshmanan
2355b73992dSYegappan Lakshmanandef Test_assert_exception()
2364490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['assert_exception({})'], 'E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 1')
2374490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['assert_exception("E1:", v:null)'], 'E1013: Argument 2: type mismatch, expected string but got special', 'E1174: String required for argument 2')
2385b73992dSYegappan Lakshmananenddef
2395b73992dSYegappan Lakshmanan
240a764e73dSYegappan Lakshmanandef Test_assert_fails()
2414490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['assert_fails([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1')
2424490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['assert_fails("a", true)'], 'E1013: Argument 2: type mismatch, expected string but got bool', 'E1222: String or List required for argument 2')
243a764e73dSYegappan Lakshmanan  CheckDefAndScriptFailure2(['assert_fails("a", "b", "c", "d")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4')
244a764e73dSYegappan Lakshmanan  CheckDefAndScriptFailure2(['assert_fails("a", "b", "c", 4, 5)'], 'E1013: Argument 5: type mismatch, expected string but got number', 'E1174: String required for argument 5')
245a764e73dSYegappan Lakshmananenddef
246a764e73dSYegappan Lakshmanan
247a764e73dSYegappan Lakshmanandef Test_assert_inrange()
2484490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['assert_inrange("a", 2, 3)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1')
2494490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['assert_inrange(1, "b", 3)'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 2')
2504490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['assert_inrange(1, 2, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 3')
251a764e73dSYegappan Lakshmanan  CheckDefAndScriptFailure2(['assert_inrange(1, 2, 3, 4)'], 'E1013: Argument 4: type mismatch, expected string but got number', 'E1174: String required for argument 4')
252a764e73dSYegappan Lakshmananenddef
253a764e73dSYegappan Lakshmanan
2545b73992dSYegappan Lakshmanandef Test_assert_match()
2554490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['assert_match({}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<unknown>', '')
2564490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['assert_match("a", 1)'], 'E1013: Argument 2: type mismatch, expected string but got number', '')
2574490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['assert_match("a", "b", null)'], 'E1013: Argument 3: type mismatch, expected string but got special', '')
2585b73992dSYegappan Lakshmananenddef
2595b73992dSYegappan Lakshmanan
2601a71d31bSYegappan Lakshmanandef Test_assert_nobeep()
2611a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['assert_nobeep(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
2621a71d31bSYegappan Lakshmananenddef
2631a71d31bSYegappan Lakshmanan
2645b73992dSYegappan Lakshmanandef Test_assert_notmatch()
2654490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['assert_notmatch({}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<unknown>', '')
2664490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['assert_notmatch("a", 1)'], 'E1013: Argument 2: type mismatch, expected string but got number', '')
2674490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['assert_notmatch("a", "b", null)'], 'E1013: Argument 3: type mismatch, expected string but got special', '')
2687237cab8SYegappan Lakshmananenddef
2697237cab8SYegappan Lakshmanan
270c72bdd28SYegappan Lakshmanandef Test_assert_report()
271c72bdd28SYegappan Lakshmanan  CheckDefAndScriptFailure2(['assert_report([1, 2])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1')
272c72bdd28SYegappan Lakshmananenddef
273c72bdd28SYegappan Lakshmanan
27432105ae8SBram Moolenaardef Test_balloon_show()
27532105ae8SBram Moolenaar  CheckGui
27632105ae8SBram Moolenaar  CheckFeature balloon_eval
27732105ae8SBram Moolenaar
2784490ec4eSYegappan Lakshmanan  assert_fails('balloon_show(10)', 'E1222:')
2794490ec4eSYegappan Lakshmanan  assert_fails('balloon_show(true)', 'E1222:')
280c72bdd28SYegappan Lakshmanan
2814490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['balloon_show(1.2)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1222: String or List required for argument 1')
2824490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['balloon_show({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1222: String or List required for argument 1')
28332105ae8SBram Moolenaarenddef
28432105ae8SBram Moolenaar
28532105ae8SBram Moolenaardef Test_balloon_split()
2867b45d46cSBram Moolenaar  CheckFeature balloon_eval_term
28732105ae8SBram Moolenaar
288a26f56f6SYegappan Lakshmanan  assert_fails('balloon_split([])', 'E1174:')
28932105ae8SBram Moolenaar  assert_fails('balloon_split(true)', 'E1174:')
29032105ae8SBram Moolenaarenddef
29132105ae8SBram Moolenaar
2925dfe4674SYegappan Lakshmanandef Test_blob2list()
2935dfe4674SYegappan Lakshmanan  CheckDefAndScriptFailure2(['blob2list(10)'], 'E1013: Argument 1: type mismatch, expected blob but got number', 'E1238: Blob required for argument 1')
2945dfe4674SYegappan Lakshmananenddef
2955dfe4674SYegappan Lakshmanan
296f28f2ac4SBram Moolenaardef Test_browse()
297f28f2ac4SBram Moolenaar  CheckFeature browse
298f28f2ac4SBram Moolenaar
29983494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['browse(2, "title", "dir", "file")'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1')
30083494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['browse(true, 2, "dir", "file")'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
30183494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['browse(true, "title", 3, "file")'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3')
30283494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['browse(true, "title", "dir", 4)'], 'E1013: Argument 4: type mismatch, expected string but got number', 'E1174: String required for argument 4')
303f28f2ac4SBram Moolenaarenddef
304f28f2ac4SBram Moolenaar
3055b73992dSYegappan Lakshmanandef Test_browsedir()
3064490ec4eSYegappan Lakshmanan  if has('browse')
3074490ec4eSYegappan Lakshmanan    CheckDefAndScriptFailure2(['browsedir({}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 1')
3084490ec4eSYegappan Lakshmanan    CheckDefAndScriptFailure2(['browsedir("a", [])'], 'E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2')
3094490ec4eSYegappan Lakshmanan  endif
3105b73992dSYegappan Lakshmananenddef
3115b73992dSYegappan Lakshmanan
312a26f56f6SYegappan Lakshmanandef Test_bufadd()
3134490ec4eSYegappan Lakshmanan  assert_fails('bufadd([])', 'E1174:')
314a26f56f6SYegappan Lakshmananenddef
315a26f56f6SYegappan Lakshmanan
31632105ae8SBram Moolenaardef Test_bufexists()
3174490ec4eSYegappan Lakshmanan  assert_fails('bufexists(true)', 'E1220:')
318fc3b7750SYegappan Lakshmanan  bufexists('')->assert_false()
31932105ae8SBram Moolenaarenddef
32032105ae8SBram Moolenaar
3213af15ab7SBram Moolenaardef Test_buflisted()
3223af15ab7SBram Moolenaar  var res: bool = buflisted('asdf')
3233af15ab7SBram Moolenaar  assert_equal(false, res)
3244490ec4eSYegappan Lakshmanan  assert_fails('buflisted(true)', 'E1220:')
3254490ec4eSYegappan Lakshmanan  assert_fails('buflisted([])', 'E1220:')
326fc3b7750SYegappan Lakshmanan  buflisted('')->assert_false()
327a26f56f6SYegappan Lakshmananenddef
328a26f56f6SYegappan Lakshmanan
329a26f56f6SYegappan Lakshmanandef Test_bufload()
3304490ec4eSYegappan Lakshmanan  assert_fails('bufload([])', 'E1220:')
33151491adfSYegappan Lakshmanan  bufload('')->assert_equal(0)
332a26f56f6SYegappan Lakshmananenddef
333a26f56f6SYegappan Lakshmanan
334a26f56f6SYegappan Lakshmanandef Test_bufloaded()
3354490ec4eSYegappan Lakshmanan  assert_fails('bufloaded(true)', 'E1220:')
3364490ec4eSYegappan Lakshmanan  assert_fails('bufloaded([])', 'E1220:')
337fc3b7750SYegappan Lakshmanan  bufloaded('')->assert_false()
3383af15ab7SBram Moolenaarenddef
3393af15ab7SBram Moolenaar
34094738d8fSBram Moolenaardef Test_bufname()
34194738d8fSBram Moolenaar  split SomeFile
34294738d8fSBram Moolenaar  bufname('%')->assert_equal('SomeFile')
34394738d8fSBram Moolenaar  edit OtherFile
34494738d8fSBram Moolenaar  bufname('#')->assert_equal('SomeFile')
34594738d8fSBram Moolenaar  close
3464490ec4eSYegappan Lakshmanan  assert_fails('bufname(true)', 'E1220:')
3474490ec4eSYegappan Lakshmanan  assert_fails('bufname([])', 'E1220:')
34894738d8fSBram Moolenaarenddef
34994738d8fSBram Moolenaar
35094738d8fSBram Moolenaardef Test_bufnr()
35194738d8fSBram Moolenaar  var buf = bufnr()
35294738d8fSBram Moolenaar  bufnr('%')->assert_equal(buf)
35394738d8fSBram Moolenaar
35494738d8fSBram Moolenaar  buf = bufnr('Xdummy', true)
35594738d8fSBram Moolenaar  buf->assert_notequal(-1)
35694738d8fSBram Moolenaar  exe 'bwipe! ' .. buf
3574490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['bufnr([1])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1')
35883494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['bufnr(1, 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2')
35994738d8fSBram Moolenaarenddef
36094738d8fSBram Moolenaar
36194738d8fSBram Moolenaardef Test_bufwinid()
36294738d8fSBram Moolenaar  var origwin = win_getid()
36394738d8fSBram Moolenaar  below split SomeFile
36494738d8fSBram Moolenaar  var SomeFileID = win_getid()
36594738d8fSBram Moolenaar  below split OtherFile
36694738d8fSBram Moolenaar  below split SomeFile
36794738d8fSBram Moolenaar  bufwinid('SomeFile')->assert_equal(SomeFileID)
36894738d8fSBram Moolenaar
36994738d8fSBram Moolenaar  win_gotoid(origwin)
37094738d8fSBram Moolenaar  only
37194738d8fSBram Moolenaar  bwipe SomeFile
37294738d8fSBram Moolenaar  bwipe OtherFile
37332105ae8SBram Moolenaar
3744490ec4eSYegappan Lakshmanan  assert_fails('bufwinid(true)', 'E1220:')
3754490ec4eSYegappan Lakshmanan  assert_fails('bufwinid([])', 'E1220:')
376a26f56f6SYegappan Lakshmananenddef
377a26f56f6SYegappan Lakshmanan
378a26f56f6SYegappan Lakshmanandef Test_bufwinnr()
3794490ec4eSYegappan Lakshmanan  assert_fails('bufwinnr(true)', 'E1220:')
3804490ec4eSYegappan Lakshmanan  assert_fails('bufwinnr([])', 'E1220:')
381a26f56f6SYegappan Lakshmananenddef
382a26f56f6SYegappan Lakshmanan
383a26f56f6SYegappan Lakshmanandef Test_byte2line()
3844490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['byte2line("1")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
3854490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['byte2line([])'], 'E1013: Argument 1: type mismatch, expected number but got list<unknown>', 'E1210: Number required for argument 1')
386820d5525SYegappan Lakshmanan  byte2line(0)->assert_equal(-1)
38794738d8fSBram Moolenaarenddef
38894738d8fSBram Moolenaar
3891a71d31bSYegappan Lakshmanandef Test_byteidx()
3901a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['byteidx(1, 2)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
3911a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['byteidx("a", "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
392820d5525SYegappan Lakshmanan  byteidx('', 0)->assert_equal(0)
393820d5525SYegappan Lakshmanan  byteidx('', 1)->assert_equal(-1)
3941a71d31bSYegappan Lakshmananenddef
3951a71d31bSYegappan Lakshmanan
3961a71d31bSYegappan Lakshmanandef Test_byteidxcomp()
3971a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['byteidxcomp(1, 2)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
3981a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['byteidxcomp("a", "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
3991a71d31bSYegappan Lakshmananenddef
4001a71d31bSYegappan Lakshmanan
40194738d8fSBram Moolenaardef Test_call_call()
40294738d8fSBram Moolenaar  var l = [3, 2, 1]
40394738d8fSBram Moolenaar  call('reverse', [l])
40494738d8fSBram Moolenaar  l->assert_equal([1, 2, 3])
4055bca906bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['call("reverse", 2)'], 'E1013: Argument 2: type mismatch, expected list<any> but got number', 'E1211: List required for argument 2')
4065bca906bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['call("reverse", [2], [1])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3')
40794738d8fSBram Moolenaarenddef
40894738d8fSBram Moolenaar
4095b73992dSYegappan Lakshmanandef Test_ch_canread()
4105b73992dSYegappan Lakshmanan  if !has('channel')
4115b73992dSYegappan Lakshmanan    CheckFeature channel
41283494b4aSYegappan Lakshmanan  else
4134490ec4eSYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_canread(10)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1')
41483494b4aSYegappan Lakshmanan  endif
4155b73992dSYegappan Lakshmananenddef
4165b73992dSYegappan Lakshmanan
4175b73992dSYegappan Lakshmanandef Test_ch_close()
4185b73992dSYegappan Lakshmanan  if !has('channel')
4195b73992dSYegappan Lakshmanan    CheckFeature channel
42083494b4aSYegappan Lakshmanan  else
4214490ec4eSYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_close("c")'], 'E1013: Argument 1: type mismatch, expected channel but got string', 'E1217: Channel or Job required for argument 1')
42283494b4aSYegappan Lakshmanan  endif
4235b73992dSYegappan Lakshmananenddef
4245b73992dSYegappan Lakshmanan
4255b73992dSYegappan Lakshmanandef Test_ch_close_in()
4265b73992dSYegappan Lakshmanan  if !has('channel')
4275b73992dSYegappan Lakshmanan    CheckFeature channel
42883494b4aSYegappan Lakshmanan  else
4294490ec4eSYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_close_in(true)'], 'E1013: Argument 1: type mismatch, expected channel but got bool', 'E1217: Channel or Job required for argument 1')
43083494b4aSYegappan Lakshmanan  endif
43183494b4aSYegappan Lakshmananenddef
43283494b4aSYegappan Lakshmanan
43383494b4aSYegappan Lakshmanandef Test_ch_evalexpr()
43483494b4aSYegappan Lakshmanan  if !has('channel')
43583494b4aSYegappan Lakshmanan    CheckFeature channel
43683494b4aSYegappan Lakshmanan  else
4370ad871dcSYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_evalexpr(1, "a")'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1')
43883494b4aSYegappan Lakshmanan    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')
43983494b4aSYegappan Lakshmanan  endif
44083494b4aSYegappan Lakshmananenddef
44183494b4aSYegappan Lakshmanan
44283494b4aSYegappan Lakshmanandef Test_ch_evalraw()
44383494b4aSYegappan Lakshmanan  if !has('channel')
44483494b4aSYegappan Lakshmanan    CheckFeature channel
44583494b4aSYegappan Lakshmanan  else
4460ad871dcSYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_evalraw(1, "")'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1')
4474490ec4eSYegappan Lakshmanan    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')
44883494b4aSYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_evalraw(test_null_channel(), "", [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3')
44983494b4aSYegappan Lakshmanan  endif
45083494b4aSYegappan Lakshmananenddef
45183494b4aSYegappan Lakshmanan
45283494b4aSYegappan Lakshmanandef Test_ch_getbufnr()
45383494b4aSYegappan Lakshmanan  if !has('channel')
45483494b4aSYegappan Lakshmanan    CheckFeature channel
45583494b4aSYegappan Lakshmanan  else
4560ad871dcSYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_getbufnr(1, "a")'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1')
45783494b4aSYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_getbufnr(test_null_channel(), 1)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
45851491adfSYegappan Lakshmanan    # test empty string argument for ch_getbufnr()
45951491adfSYegappan Lakshmanan    var job: job = job_start(&shell)
46051491adfSYegappan Lakshmanan    job->ch_getbufnr('')->assert_equal(-1)
46151491adfSYegappan Lakshmanan    job_stop(job)
46283494b4aSYegappan Lakshmanan  endif
4635b73992dSYegappan Lakshmananenddef
4645b73992dSYegappan Lakshmanan
4651a71d31bSYegappan Lakshmanandef Test_ch_getjob()
4669ff9c7b9SDominique Pelle  if !has('channel')
4679ff9c7b9SDominique Pelle    CheckFeature channel
4689ff9c7b9SDominique Pelle  else
4694490ec4eSYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_getjob(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1')
4704490ec4eSYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_getjob({"a": 10})'], 'E1013: Argument 1: type mismatch, expected channel but got dict<number>', 'E1217: Channel or Job required for argument 1')
4711a71d31bSYegappan Lakshmanan    assert_equal(0, ch_getjob(test_null_channel()))
4729ff9c7b9SDominique Pelle  endif
4731a71d31bSYegappan Lakshmananenddef
4741a71d31bSYegappan Lakshmanan
4755b73992dSYegappan Lakshmanandef Test_ch_info()
4765b73992dSYegappan Lakshmanan  if !has('channel')
4775b73992dSYegappan Lakshmanan    CheckFeature channel
47883494b4aSYegappan Lakshmanan  else
4794490ec4eSYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_info([1])'], 'E1013: Argument 1: type mismatch, expected channel but got list<number>', 'E1217: Channel or Job required for argument 1')
48083494b4aSYegappan Lakshmanan  endif
4815b73992dSYegappan Lakshmananenddef
4825b73992dSYegappan Lakshmanan
4837973de35SYegappan Lakshmanandef Test_ch_log()
4847973de35SYegappan Lakshmanan  if !has('channel')
4857973de35SYegappan Lakshmanan    CheckFeature channel
4867973de35SYegappan Lakshmanan  else
4877973de35SYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_log(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1')
4887973de35SYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_log("a", 1)'], 'E1013: Argument 2: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 2')
4897973de35SYegappan Lakshmanan  endif
4907973de35SYegappan Lakshmananenddef
4917973de35SYegappan Lakshmanan
492c5809439SBram Moolenaardef Test_ch_logfile()
493886e5e73SBram Moolenaar  if !has('channel')
494886e5e73SBram Moolenaar    CheckFeature channel
49583494b4aSYegappan Lakshmanan  else
496a26f56f6SYegappan Lakshmanan    assert_fails('ch_logfile(true)', 'E1174:')
497a26f56f6SYegappan Lakshmanan    assert_fails('ch_logfile("foo", true)', 'E1174:')
49851491adfSYegappan Lakshmanan    ch_logfile('', '')->assert_equal(0)
4995b73992dSYegappan Lakshmanan
5005b73992dSYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_logfile(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
5015b73992dSYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_logfile("a", true)'], 'E1013: Argument 2: type mismatch, expected string but got bool', 'E1174: String required for argument 2')
50283494b4aSYegappan Lakshmanan  endif
5035b73992dSYegappan Lakshmananenddef
5045b73992dSYegappan Lakshmanan
5055b73992dSYegappan Lakshmanandef Test_ch_open()
5065b73992dSYegappan Lakshmanan  if !has('channel')
5075b73992dSYegappan Lakshmanan    CheckFeature channel
50883494b4aSYegappan Lakshmanan  else
5095b73992dSYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_open({"a": 10}, "a")'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1')
5105b73992dSYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_open("a", [1])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 2')
511fc3b7750SYegappan Lakshmanan    CheckDefExecAndScriptFailure(['ch_open("")'], 'E475: Invalid argument')
51283494b4aSYegappan Lakshmanan  endif
513c5809439SBram Moolenaarenddef
514c5809439SBram Moolenaar
5151a71d31bSYegappan Lakshmanandef Test_ch_read()
5161a71d31bSYegappan Lakshmanan  if !has('channel')
5171a71d31bSYegappan Lakshmanan    CheckFeature channel
51883494b4aSYegappan Lakshmanan  else
5194490ec4eSYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_read(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1')
5204490ec4eSYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_read(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2')
52183494b4aSYegappan Lakshmanan  endif
5221a71d31bSYegappan Lakshmananenddef
5231a71d31bSYegappan Lakshmanan
5241a71d31bSYegappan Lakshmanandef Test_ch_readblob()
5251a71d31bSYegappan Lakshmanan  if !has('channel')
5261a71d31bSYegappan Lakshmanan    CheckFeature channel
52783494b4aSYegappan Lakshmanan  else
5284490ec4eSYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_readblob(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1')
5294490ec4eSYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_readblob(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2')
53083494b4aSYegappan Lakshmanan  endif
5311a71d31bSYegappan Lakshmananenddef
5321a71d31bSYegappan Lakshmanan
5331a71d31bSYegappan Lakshmanandef Test_ch_readraw()
5341a71d31bSYegappan Lakshmanan  if !has('channel')
5351a71d31bSYegappan Lakshmanan    CheckFeature channel
53683494b4aSYegappan Lakshmanan  else
5374490ec4eSYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_readraw(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1')
5384490ec4eSYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_readraw(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2')
53983494b4aSYegappan Lakshmanan  endif
54083494b4aSYegappan Lakshmananenddef
54183494b4aSYegappan Lakshmanan
54283494b4aSYegappan Lakshmanandef Test_ch_sendexpr()
54383494b4aSYegappan Lakshmanan  if !has('channel')
54483494b4aSYegappan Lakshmanan    CheckFeature channel
54583494b4aSYegappan Lakshmanan  else
5460ad871dcSYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_sendexpr(1, "a")'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1')
54783494b4aSYegappan Lakshmanan    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')
54883494b4aSYegappan Lakshmanan  endif
54983494b4aSYegappan Lakshmananenddef
55083494b4aSYegappan Lakshmanan
55183494b4aSYegappan Lakshmanandef Test_ch_sendraw()
55283494b4aSYegappan Lakshmanan  if !has('channel')
55383494b4aSYegappan Lakshmanan    CheckFeature channel
55483494b4aSYegappan Lakshmanan  else
5550ad871dcSYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_sendraw(1, "")'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1')
5564490ec4eSYegappan Lakshmanan    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')
55783494b4aSYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_sendraw(test_null_channel(), "", [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3')
55883494b4aSYegappan Lakshmanan  endif
5591a71d31bSYegappan Lakshmananenddef
5601a71d31bSYegappan Lakshmanan
5611a71d31bSYegappan Lakshmanandef Test_ch_setoptions()
5621a71d31bSYegappan Lakshmanan  if !has('channel')
5631a71d31bSYegappan Lakshmanan    CheckFeature channel
56483494b4aSYegappan Lakshmanan  else
5654490ec4eSYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_setoptions(1, {})'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1')
5664490ec4eSYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_setoptions(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2')
56783494b4aSYegappan Lakshmanan  endif
5681a71d31bSYegappan Lakshmananenddef
5691a71d31bSYegappan Lakshmanan
5701a71d31bSYegappan Lakshmanandef Test_ch_status()
5711a71d31bSYegappan Lakshmanan  if !has('channel')
5721a71d31bSYegappan Lakshmanan    CheckFeature channel
57383494b4aSYegappan Lakshmanan  else
5744490ec4eSYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_status(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1')
5754490ec4eSYegappan Lakshmanan    CheckDefAndScriptFailure2(['ch_status(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2')
57683494b4aSYegappan Lakshmanan  endif
5771a71d31bSYegappan Lakshmananenddef
5781a71d31bSYegappan Lakshmanan
57994738d8fSBram Moolenaardef Test_char2nr()
58094738d8fSBram Moolenaar  char2nr('あ', true)->assert_equal(12354)
581c5809439SBram Moolenaar
582a26f56f6SYegappan Lakshmanan  assert_fails('char2nr(true)', 'E1174:')
583a9a7c0c6SYegappan Lakshmanan  CheckDefAndScriptFailure2(['char2nr(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
58498c2eaedSBram Moolenaar  CheckDefAndScriptFailure2(['char2nr("a", 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2')
585a9a7c0c6SYegappan Lakshmanan  assert_equal(97, char2nr('a', 1))
586a9a7c0c6SYegappan Lakshmanan  assert_equal(97, char2nr('a', 0))
587a9a7c0c6SYegappan Lakshmanan  assert_equal(97, char2nr('a', true))
588a9a7c0c6SYegappan Lakshmanan  assert_equal(97, char2nr('a', false))
5895dfe4674SYegappan Lakshmanan  char2nr('')->assert_equal(0)
590c5809439SBram Moolenaarenddef
591c5809439SBram Moolenaar
592c5809439SBram Moolenaardef Test_charclass()
593a26f56f6SYegappan Lakshmanan  assert_fails('charclass(true)', 'E1174:')
594f8dbd586SYegappan Lakshmanan  charclass('')->assert_equal(0)
595c5809439SBram Moolenaarenddef
596c5809439SBram Moolenaar
5975b73992dSYegappan Lakshmanandef Test_charcol()
5984490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['charcol(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1222: String or List required for argument 1')
5994490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['charcol({a: 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1222: String or List required for argument 1')
600fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['charcol("")'], 'E1209: Invalid value for a line number')
601c72bdd28SYegappan Lakshmanan  new
602c72bdd28SYegappan Lakshmanan  setline(1, ['abcdefgh'])
603c72bdd28SYegappan Lakshmanan  cursor(1, 4)
604c72bdd28SYegappan Lakshmanan  assert_equal(4, charcol('.'))
605c72bdd28SYegappan Lakshmanan  assert_equal(9, charcol([1, '$']))
606c72bdd28SYegappan Lakshmanan  assert_equal(0, charcol([10, '$']))
607c72bdd28SYegappan Lakshmanan  bw!
6085b73992dSYegappan Lakshmananenddef
6095b73992dSYegappan Lakshmanan
6105b73992dSYegappan Lakshmanandef Test_charidx()
6114490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['charidx(0z10, 1)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1174: String required for argument 1')
6124490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['charidx("a", "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
6134490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['charidx("a", 1, "")'], 'E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3')
614820d5525SYegappan Lakshmanan  charidx('', 0)->assert_equal(-1)
615820d5525SYegappan Lakshmanan  charidx('', 1)->assert_equal(-1)
6165b73992dSYegappan Lakshmananenddef
6175b73992dSYegappan Lakshmanan
618c5809439SBram Moolenaardef Test_chdir()
619a26f56f6SYegappan Lakshmanan  assert_fails('chdir(true)', 'E1174:')
620a26f56f6SYegappan Lakshmananenddef
621a26f56f6SYegappan Lakshmanan
622a26f56f6SYegappan Lakshmanandef Test_cindent()
6234490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['cindent([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1')
6244490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['cindent(null)'], 'E1013: Argument 1: type mismatch, expected string but got special', 'E1220: String or Number required for argument 1')
625fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['cindent("")'], 'E1209: Invalid value for a line number')
626a26f56f6SYegappan Lakshmanan  assert_equal(-1, cindent(0))
627a26f56f6SYegappan Lakshmanan  assert_equal(0, cindent('.'))
62894738d8fSBram Moolenaarenddef
62994738d8fSBram Moolenaar
6307237cab8SYegappan Lakshmanandef Test_clearmatches()
6314490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['clearmatches("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
6327237cab8SYegappan Lakshmananenddef
6337237cab8SYegappan Lakshmanan
63494738d8fSBram Moolenaardef Test_col()
63594738d8fSBram Moolenaar  new
636c72bdd28SYegappan Lakshmanan  setline(1, 'abcdefgh')
637c72bdd28SYegappan Lakshmanan  cursor(1, 4)
638c72bdd28SYegappan Lakshmanan  assert_equal(4, col('.'))
639c72bdd28SYegappan Lakshmanan  col([1, '$'])->assert_equal(9)
640c72bdd28SYegappan Lakshmanan  assert_equal(0, col([10, '$']))
641c5809439SBram Moolenaar
6424490ec4eSYegappan Lakshmanan  assert_fails('col(true)', 'E1222:')
6435b73992dSYegappan Lakshmanan
6444490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['col(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1222: String or List required for argument 1')
6454490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['col({a: 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1222: String or List required for argument 1')
6464490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['col(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1222: String or List required for argument 1')
647fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['col("")'], 'E1209: Invalid value for a line number')
6485b73992dSYegappan Lakshmanan  bw!
649c5809439SBram Moolenaarenddef
650c5809439SBram Moolenaar
65183494b4aSYegappan Lakshmanandef Test_complete()
65283494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['complete("1", [])'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
65383494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['complete(1, {})'], 'E1013: Argument 2: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 2')
65483494b4aSYegappan Lakshmananenddef
65583494b4aSYegappan Lakshmanan
65683494b4aSYegappan Lakshmanandef Test_complete_add()
65778db17c6SBram Moolenaar  CheckDefAndScriptFailure2(['complete_add([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1223: String or Dictionary required for argument 1')
65883494b4aSYegappan Lakshmananenddef
65983494b4aSYegappan Lakshmanan
6601a71d31bSYegappan Lakshmanandef Test_complete_info()
6614490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['complete_info("")'], 'E1013: Argument 1: type mismatch, expected list<string> but got string', 'E1211: List required for argument 1')
6624490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['complete_info({})'], 'E1013: Argument 1: type mismatch, expected list<string> but got dict<unknown>', 'E1211: List required for argument 1')
6631a71d31bSYegappan Lakshmanan  assert_equal({'pum_visible': 0, 'mode': '', 'selected': -1, 'items': []}, complete_info())
6641a71d31bSYegappan Lakshmanan  assert_equal({'mode': '', 'items': []}, complete_info(['mode', 'items']))
6651a71d31bSYegappan Lakshmananenddef
6661a71d31bSYegappan Lakshmanan
667c5809439SBram Moolenaardef Test_confirm()
668c5809439SBram Moolenaar  if !has('dialog_con') && !has('dialog_gui')
669c5809439SBram Moolenaar    CheckFeature dialog_con
670c5809439SBram Moolenaar  endif
671c5809439SBram Moolenaar
672a26f56f6SYegappan Lakshmanan  assert_fails('confirm(true)', 'E1174:')
673a26f56f6SYegappan Lakshmanan  assert_fails('confirm("yes", true)', 'E1174:')
674a26f56f6SYegappan Lakshmanan  assert_fails('confirm("yes", "maybe", 2, true)', 'E1174:')
6750ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['confirm(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
6760ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['confirm("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
6770ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['confirm("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
6780ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['confirm("a", "b", 3, 4)'], 'E1013: Argument 4: type mismatch, expected string but got number', 'E1174: String required for argument 4')
679a26f56f6SYegappan Lakshmananenddef
680a26f56f6SYegappan Lakshmanan
68194738d8fSBram Moolenaardef Test_copy_return_type()
68294738d8fSBram Moolenaar  var l = copy([1, 2, 3])
68394738d8fSBram Moolenaar  var res = 0
68494738d8fSBram Moolenaar  for n in l
68594738d8fSBram Moolenaar    res += n
68694738d8fSBram Moolenaar  endfor
68794738d8fSBram Moolenaar  res->assert_equal(6)
68894738d8fSBram Moolenaar
68994738d8fSBram Moolenaar  var dl = deepcopy([1, 2, 3])
69094738d8fSBram Moolenaar  res = 0
69194738d8fSBram Moolenaar  for n in dl
69294738d8fSBram Moolenaar    res += n
69394738d8fSBram Moolenaar  endfor
69494738d8fSBram Moolenaar  res->assert_equal(6)
69594738d8fSBram Moolenaar
69694738d8fSBram Moolenaar  dl = deepcopy([1, 2, 3], true)
69794738d8fSBram Moolenaarenddef
69894738d8fSBram Moolenaar
69994738d8fSBram Moolenaardef Test_count()
70094738d8fSBram Moolenaar  count('ABC ABC ABC', 'b', true)->assert_equal(3)
70194738d8fSBram Moolenaar  count('ABC ABC ABC', 'b', false)->assert_equal(0)
70278db17c6SBram Moolenaar  CheckDefAndScriptFailure2(['count(10, 1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1225: String, List or Dictionary required for argument 1')
70383494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['count("a", [1], 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3')
70483494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['count("a", [1], 0, "b")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4')
70583494b4aSYegappan Lakshmanan  count([1, 2, 2, 3], 2)->assert_equal(2)
70683494b4aSYegappan Lakshmanan  count([1, 2, 2, 3], 2, false, 2)->assert_equal(1)
70783494b4aSYegappan Lakshmanan  count({a: 1.1, b: 2.2, c: 1.1}, 1.1)->assert_equal(2)
70894738d8fSBram Moolenaarenddef
70994738d8fSBram Moolenaar
7107973de35SYegappan Lakshmanandef Test_cscope_connection()
7117973de35SYegappan Lakshmanan  CheckFeature cscope
7127973de35SYegappan Lakshmanan  assert_equal(0, cscope_connection())
7137973de35SYegappan Lakshmanan  CheckDefAndScriptFailure2(['cscope_connection("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
7147973de35SYegappan Lakshmanan  CheckDefAndScriptFailure2(['cscope_connection(1, 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
7157973de35SYegappan Lakshmanan  CheckDefAndScriptFailure2(['cscope_connection(1, "b", 3)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3')
7167973de35SYegappan Lakshmananenddef
7177973de35SYegappan Lakshmanan
7189a963377SBram Moolenaardef Test_cursor()
7199a963377SBram Moolenaar  new
7209a963377SBram Moolenaar  setline(1, range(4))
7219a963377SBram Moolenaar  cursor(2, 1)
7229a963377SBram Moolenaar  assert_equal(2, getcurpos()[1])
7239a963377SBram Moolenaar  cursor('$', 1)
7249a963377SBram Moolenaar  assert_equal(4, getcurpos()[1])
725cd917207SYegappan Lakshmanan  cursor([2, 1])
726cd917207SYegappan Lakshmanan  assert_equal(2, getcurpos()[1])
7279a963377SBram Moolenaar
7289a963377SBram Moolenaar  var lines =<< trim END
7299a963377SBram Moolenaar    cursor('2', 1)
7309a963377SBram Moolenaar  END
7310f1227f7SBram Moolenaar  CheckDefExecAndScriptFailure(lines, 'E1209:')
73278db17c6SBram Moolenaar  CheckDefAndScriptFailure2(['cursor(0z10, 1)'], 'E1013: Argument 1: type mismatch, expected number but got blob', 'E1224: String, Number or List required for argument 1')
73383494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['cursor(1, "2")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
73483494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['cursor(1, 2, "3")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
735fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['cursor("", 2)'], 'E1209: Invalid value for a line number')
7369a963377SBram Moolenaarenddef
7379a963377SBram Moolenaar
7387237cab8SYegappan Lakshmanandef Test_debugbreak()
7397237cab8SYegappan Lakshmanan  CheckMSWindows
7404490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['debugbreak("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
7417237cab8SYegappan Lakshmananenddef
7427237cab8SYegappan Lakshmanan
74383494b4aSYegappan Lakshmanandef Test_deepcopy()
74483494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['deepcopy({}, 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2')
74583494b4aSYegappan Lakshmananenddef
74683494b4aSYegappan Lakshmanan
7473af15ab7SBram Moolenaardef Test_delete()
7483af15ab7SBram Moolenaar  var res: bool = delete('doesnotexist')
7493af15ab7SBram Moolenaar  assert_equal(true, res)
7505b73992dSYegappan Lakshmanan
7514490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['delete(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
7524490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['delete("a", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
753fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['delete("")'], 'E474: Invalid argument')
7543af15ab7SBram Moolenaarenddef
7553af15ab7SBram Moolenaar
75683494b4aSYegappan Lakshmanandef Test_deletebufline()
7574490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['deletebufline([], 2)'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1')
7584490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['deletebufline("a", [])'], 'E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 2')
7594490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['deletebufline("a", 2, 0z10)'], 'E1013: Argument 3: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 3')
76051491adfSYegappan Lakshmanan  new
76151491adfSYegappan Lakshmanan  setline(1, ['one', 'two'])
76251491adfSYegappan Lakshmanan  deletebufline('', 1)
76351491adfSYegappan Lakshmanan  getline(1, '$')->assert_equal(['two'])
76451491adfSYegappan Lakshmanan  bwipe!
76583494b4aSYegappan Lakshmananenddef
76683494b4aSYegappan Lakshmanan
767a26f56f6SYegappan Lakshmanandef Test_diff_filler()
7684490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['diff_filler([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1')
7694490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['diff_filler(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1')
770fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['diff_filler("")'], 'E1209: Invalid value for a line number')
771a26f56f6SYegappan Lakshmanan  assert_equal(0, diff_filler(1))
772a26f56f6SYegappan Lakshmanan  assert_equal(0, diff_filler('.'))
773a26f56f6SYegappan Lakshmananenddef
774a26f56f6SYegappan Lakshmanan
775a9a7c0c6SYegappan Lakshmanandef Test_diff_hlID()
7764490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['diff_hlID(0z10, 1)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1')
777a9a7c0c6SYegappan Lakshmanan  CheckDefAndScriptFailure2(['diff_hlID(1, "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
778fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['diff_hlID("", 10)'], 'E1209: Invalid value for a line number')
779fc3b7750SYegappan Lakshmananenddef
780fc3b7750SYegappan Lakshmanan
781fc3b7750SYegappan Lakshmanandef Test_digraph_get()
782fc3b7750SYegappan Lakshmanan  CheckDefAndScriptFailure2(['digraph_get(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
783fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['digraph_get("")'], 'E1214: Digraph must be just two characters')
784fc3b7750SYegappan Lakshmananenddef
785fc3b7750SYegappan Lakshmanan
786fc3b7750SYegappan Lakshmanandef Test_digraph_getlist()
787fc3b7750SYegappan Lakshmanan  CheckDefAndScriptFailure2(['digraph_getlist(10)'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1')
788fc3b7750SYegappan Lakshmanan  CheckDefAndScriptFailure2(['digraph_getlist("")'], 'E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1')
789fc3b7750SYegappan Lakshmananenddef
790fc3b7750SYegappan Lakshmanan
791fc3b7750SYegappan Lakshmanandef Test_digraph_set()
792fc3b7750SYegappan Lakshmanan  CheckDefAndScriptFailure2(['digraph_set(10, "a")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
793fc3b7750SYegappan Lakshmanan  CheckDefAndScriptFailure2(['digraph_set("ab", 0z10)'], 'E1013: Argument 2: type mismatch, expected string but got blob', 'E1174: String required for argument 2')
794fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['digraph_set("", "a")'], 'E1214: Digraph must be just two characters')
795fc3b7750SYegappan Lakshmananenddef
796fc3b7750SYegappan Lakshmanan
797fc3b7750SYegappan Lakshmanandef Test_digraph_setlist()
798fc3b7750SYegappan Lakshmanan  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')
799fc3b7750SYegappan Lakshmanan  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')
800a9a7c0c6SYegappan Lakshmananenddef
801a9a7c0c6SYegappan Lakshmanan
8021a71d31bSYegappan Lakshmanandef Test_echoraw()
8031a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['echoraw(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
8041a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['echoraw(["x"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1')
8051a71d31bSYegappan Lakshmananenddef
8061a71d31bSYegappan Lakshmanan
807a26f56f6SYegappan Lakshmanandef Test_escape()
8084490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['escape(10, " ")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
8094490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['escape(true, false)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1')
8104490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['escape("a", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
811a26f56f6SYegappan Lakshmanan  assert_equal('a\:b', escape("a:b", ":"))
8125dfe4674SYegappan Lakshmanan  escape('abc', '')->assert_equal('abc')
8135dfe4674SYegappan Lakshmanan  escape('', ':')->assert_equal('')
814a26f56f6SYegappan Lakshmananenddef
815a26f56f6SYegappan Lakshmanan
816a26f56f6SYegappan Lakshmanandef Test_eval()
8174490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['eval(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
8184490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['eval(null)'], 'E1013: Argument 1: type mismatch, expected string but got special', 'E1174: String required for argument 1')
819fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['eval("")'], 'E15: Invalid expression')
820a26f56f6SYegappan Lakshmanan  assert_equal(2, eval('1 + 1'))
821a26f56f6SYegappan Lakshmananenddef
822a26f56f6SYegappan Lakshmanan
8237bb4e74cSBram Moolenaardef Test_executable()
8242a9d5d38SBram Moolenaar  assert_false(executable(""))
8252a9d5d38SBram Moolenaar  assert_false(executable(test_null_string()))
8262a9d5d38SBram Moolenaar
827a26f56f6SYegappan Lakshmanan  CheckDefExecFailure(['echo executable(123)'], 'E1013:')
828a26f56f6SYegappan Lakshmanan  CheckDefExecFailure(['echo executable(true)'], 'E1013:')
8297bb4e74cSBram Moolenaarenddef
8307bb4e74cSBram Moolenaar
831ca81f0e8SBram Moolenaardef Test_execute()
832ca81f0e8SBram Moolenaar  var res = execute("echo 'hello'")
833ca81f0e8SBram Moolenaar  assert_equal("\nhello", res)
834ca81f0e8SBram Moolenaar  res = execute(["echo 'here'", "echo 'there'"])
835ca81f0e8SBram Moolenaar  assert_equal("\nhere\nthere", res)
836ca81f0e8SBram Moolenaar
8374490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['execute(123)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1222: String or List required for argument 1')
8385b73992dSYegappan Lakshmanan  CheckDefFailure(['execute([123])'], 'E1013: Argument 1: type mismatch, expected list<string> but got list<number>')
839ca81f0e8SBram Moolenaar  CheckDefExecFailure(['echo execute(["xx", 123])'], 'E492')
8404490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['execute("xx", 123)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
841ca81f0e8SBram Moolenaarenddef
842ca81f0e8SBram Moolenaar
8437bb4e74cSBram Moolenaardef Test_exepath()
844a26f56f6SYegappan Lakshmanan  CheckDefExecFailure(['echo exepath(true)'], 'E1013:')
845a26f56f6SYegappan Lakshmanan  CheckDefExecFailure(['echo exepath(v:null)'], 'E1013:')
846fa984418SBram Moolenaar  CheckDefExecFailure(['echo exepath("")'], 'E1175:')
8477bb4e74cSBram Moolenaarenddef
8487bb4e74cSBram Moolenaar
8495671f3f0SBram Moolenaarcommand DoSomeCommand let g:didSomeCommand = 4
8505671f3f0SBram Moolenaar
851a26f56f6SYegappan Lakshmanandef Test_exists()
8524490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['exists(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
853a26f56f6SYegappan Lakshmanan  call assert_equal(1, exists('&tabstop'))
854bb7ee7abSBram Moolenaar
85526735990SBram Moolenaar  var lines =<< trim END
856bb7ee7abSBram Moolenaar    if exists('+newoption')
857bb7ee7abSBram Moolenaar      if &newoption == 'ok'
858bb7ee7abSBram Moolenaar      endif
859bb7ee7abSBram Moolenaar    endif
86026735990SBram Moolenaar  END
86126735990SBram Moolenaar  CheckDefFailure(lines, 'E113:')
86226735990SBram Moolenaar  CheckScriptSuccess(lines)
86326735990SBram Moolenaarenddef
86426735990SBram Moolenaar
86526735990SBram Moolenaardef Test_exists_compiled()
86626735990SBram Moolenaar  call assert_equal(1, exists_compiled('&tabstop'))
86726735990SBram Moolenaar  CheckDefAndScriptFailure2(['exists_compiled(10)'], 'E1232:', 'E1233:')
86826735990SBram Moolenaar  CheckDefAndScriptFailure2(['exists_compiled(v:progname)'], 'E1232:', 'E1233:')
86926735990SBram Moolenaar
87026735990SBram Moolenaar  if exists_compiled('+newoption')
871bb7ee7abSBram Moolenaar    if &newoption == 'ok'
872bb7ee7abSBram Moolenaar    endif
873bb7ee7abSBram Moolenaar  endif
87426735990SBram Moolenaar  if exists_compiled('&newoption')
87526735990SBram Moolenaar    if &newoption == 'ok'
87626735990SBram Moolenaar    endif
87726735990SBram Moolenaar  endif
87826735990SBram Moolenaar  if exists_compiled('+tabstop')
879bb7ee7abSBram Moolenaar    assert_equal(8, &tabstop)
880bb7ee7abSBram Moolenaar  else
881bb7ee7abSBram Moolenaar    assert_report('tabstop option not existing?')
882bb7ee7abSBram Moolenaar  endif
88326735990SBram Moolenaar  if exists_compiled('&tabstop')
884bb7ee7abSBram Moolenaar    assert_equal(8, &tabstop)
885bb7ee7abSBram Moolenaar  else
886bb7ee7abSBram Moolenaar    assert_report('tabstop option not existing?')
887bb7ee7abSBram Moolenaar  endif
8885671f3f0SBram Moolenaar
88926735990SBram Moolenaar  if exists_compiled(':DoSomeCommand') >= 2
8905671f3f0SBram Moolenaar    DoSomeCommand
8915671f3f0SBram Moolenaar  endif
8925671f3f0SBram Moolenaar  assert_equal(4, g:didSomeCommand)
89326735990SBram Moolenaar  if exists_compiled(':NoSuchCommand') >= 2
8945671f3f0SBram Moolenaar    NoSuchCommand
8955671f3f0SBram Moolenaar  endif
8965671f3f0SBram Moolenaar
8975671f3f0SBram Moolenaar  var found = false
89826735990SBram Moolenaar  if exists_compiled('*CheckScriptSuccess')
8995671f3f0SBram Moolenaar    found = true
9005671f3f0SBram Moolenaar  endif
9015671f3f0SBram Moolenaar  assert_true(found)
90226735990SBram Moolenaar  if exists_compiled('*NoSuchFunction')
9035671f3f0SBram Moolenaar    NoSuchFunction()
9045671f3f0SBram Moolenaar  endif
90526735990SBram Moolenaar  if exists_compiled('*no_such_function')
9065671f3f0SBram Moolenaar    no_such_function()
9075671f3f0SBram Moolenaar  endif
908a26f56f6SYegappan Lakshmananenddef
909a26f56f6SYegappan Lakshmanan
91094738d8fSBram Moolenaardef Test_expand()
91194738d8fSBram Moolenaar  split SomeFile
91294738d8fSBram Moolenaar  expand('%', true, true)->assert_equal(['SomeFile'])
91394738d8fSBram Moolenaar  close
91483494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['expand(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
91583494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['expand("a", 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2')
91683494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['expand("a", true, 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3')
917820d5525SYegappan Lakshmanan  expand('')->assert_equal('')
91894738d8fSBram Moolenaarenddef
91994738d8fSBram Moolenaar
92002795104SBram Moolenaardef Test_expandcmd()
92102795104SBram Moolenaar  $FOO = "blue"
92202795104SBram Moolenaar  assert_equal("blue sky", expandcmd("`=$FOO .. ' sky'`"))
92302795104SBram Moolenaar
92402795104SBram Moolenaar  assert_equal("yes", expandcmd("`={a: 'yes'}['a']`"))
925f8dbd586SYegappan Lakshmanan  expandcmd('')->assert_equal('')
92602795104SBram Moolenaarenddef
92702795104SBram Moolenaar
928fbcbffe1SBram Moolenaardef Test_extend_arg_types()
929c03f5c67SBram Moolenaar  g:number_one = 1
930c03f5c67SBram Moolenaar  g:string_keep = 'keep'
931c03f5c67SBram Moolenaar  var lines =<< trim END
932fbcbffe1SBram Moolenaar      assert_equal([1, 2, 3], extend([1, 2], [3]))
933fbcbffe1SBram Moolenaar      assert_equal([3, 1, 2], extend([1, 2], [3], 0))
934fbcbffe1SBram Moolenaar      assert_equal([1, 3, 2], extend([1, 2], [3], 1))
935c03f5c67SBram Moolenaar      assert_equal([1, 3, 2], extend([1, 2], [3], g:number_one))
936fbcbffe1SBram Moolenaar
937e0de171eSBram Moolenaar      assert_equal({a: 1, b: 2, c: 3}, extend({a: 1, b: 2}, {c: 3}))
938e0de171eSBram Moolenaar      assert_equal({a: 1, b: 4}, extend({a: 1, b: 2}, {b: 4}))
939e0de171eSBram Moolenaar      assert_equal({a: 1, b: 2}, extend({a: 1, b: 2}, {b: 4}, 'keep'))
940c03f5c67SBram Moolenaar      assert_equal({a: 1, b: 2}, extend({a: 1, b: 2}, {b: 4}, g:string_keep))
941193f6201SBram Moolenaar
942193f6201SBram Moolenaar      var res: list<dict<any>>
94375ab91ffSBram Moolenaar      extend(res, mapnew([1, 2], (_, v) => ({})))
944193f6201SBram Moolenaar      assert_equal([{}, {}], res)
945c03f5c67SBram Moolenaar  END
946c03f5c67SBram Moolenaar  CheckDefAndScriptSuccess(lines)
947fbcbffe1SBram Moolenaar
9484490ec4eSYegappan Lakshmanan  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')
9494490ec4eSYegappan Lakshmanan  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')
9504490ec4eSYegappan Lakshmanan  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>')
951fbcbffe1SBram Moolenaar  CheckDefFailure(['extend([1, 2], [3], "x")'], 'E1013: Argument 3: type mismatch, expected number but got string')
952fbcbffe1SBram Moolenaar
953e0de171eSBram Moolenaar  CheckDefFailure(['extend({a: 1}, 42)'], 'E1013: Argument 2: type mismatch, expected dict<number> but got number')
954e0de171eSBram Moolenaar  CheckDefFailure(['extend({a: 1}, {b: "x"})'], 'E1013: Argument 2: type mismatch, expected dict<number> but got dict<string>')
955e0de171eSBram Moolenaar  CheckDefFailure(['extend({a: 1}, {b: 2}, 1)'], 'E1013: Argument 3: type mismatch, expected string but got number')
956351ead09SBram Moolenaar
957351ead09SBram Moolenaar  CheckDefFailure(['extend([1], ["b"])'], 'E1013: Argument 2: type mismatch, expected list<number> but got list<string>')
958e32e516dSBram Moolenaar  CheckDefExecFailure(['extend([1], ["b", 1])'], 'E1013: Argument 2: type mismatch, expected list<number> but got list<any>')
9597a3fe3e1SBram Moolenaar
9607a3fe3e1SBram Moolenaar  CheckScriptFailure(['vim9script', 'extend([1], ["b", 1])'], 'E1013: Argument 2: type mismatch, expected list<number> but got list<any> in extend()')
961fbcbffe1SBram Moolenaarenddef
962fbcbffe1SBram Moolenaar
963aa210a3aSBram Moolenaarfunc g:ExtendDict(d)
964aa210a3aSBram Moolenaar  call extend(a:d, #{xx: 'x'})
965aa210a3aSBram Moolenaarendfunc
966aa210a3aSBram Moolenaar
967aa210a3aSBram Moolenaardef Test_extend_dict_item_type()
968aa210a3aSBram Moolenaar  var lines =<< trim END
969aa210a3aSBram Moolenaar       var d: dict<number> = {a: 1}
970aa210a3aSBram Moolenaar       extend(d, {b: 2})
971aa210a3aSBram Moolenaar  END
972aa210a3aSBram Moolenaar  CheckDefAndScriptSuccess(lines)
973aa210a3aSBram Moolenaar
974aa210a3aSBram Moolenaar  lines =<< trim END
975aa210a3aSBram Moolenaar       var d: dict<number> = {a: 1}
976aa210a3aSBram Moolenaar       extend(d, {b: 'x'})
977aa210a3aSBram Moolenaar  END
978c03f5c67SBram Moolenaar  CheckDefAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected dict<number> but got dict<string>', 2)
979aa210a3aSBram Moolenaar
980aa210a3aSBram Moolenaar  lines =<< trim END
981aa210a3aSBram Moolenaar       var d: dict<number> = {a: 1}
982aa210a3aSBram Moolenaar       g:ExtendDict(d)
983aa210a3aSBram Moolenaar  END
984aa210a3aSBram Moolenaar  CheckDefExecFailure(lines, 'E1012: Type mismatch; expected number but got string', 0)
985aa210a3aSBram Moolenaar  CheckScriptFailure(['vim9script'] + lines, 'E1012:', 1)
986b56c4419SBram Moolenaar
987b56c4419SBram Moolenaar  lines =<< trim END
988b56c4419SBram Moolenaar       var d: dict<bool>
989b56c4419SBram Moolenaar       extend(d, {b: 0})
990b56c4419SBram Moolenaar  END
991b56c4419SBram Moolenaar  CheckDefAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected dict<bool> but got dict<number>', 2)
992aa210a3aSBram Moolenaarenddef
993aa210a3aSBram Moolenaar
994aa210a3aSBram Moolenaarfunc g:ExtendList(l)
995aa210a3aSBram Moolenaar  call extend(a:l, ['x'])
996aa210a3aSBram Moolenaarendfunc
997aa210a3aSBram Moolenaar
998aa210a3aSBram Moolenaardef Test_extend_list_item_type()
999aa210a3aSBram Moolenaar  var lines =<< trim END
1000aa210a3aSBram Moolenaar       var l: list<number> = [1]
1001aa210a3aSBram Moolenaar       extend(l, [2])
1002aa210a3aSBram Moolenaar  END
1003aa210a3aSBram Moolenaar  CheckDefAndScriptSuccess(lines)
1004aa210a3aSBram Moolenaar
1005aa210a3aSBram Moolenaar  lines =<< trim END
1006aa210a3aSBram Moolenaar       var l: list<number> = [1]
1007aa210a3aSBram Moolenaar       extend(l, ['x'])
1008aa210a3aSBram Moolenaar  END
1009c03f5c67SBram Moolenaar  CheckDefAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected list<number> but got list<string>', 2)
1010aa210a3aSBram Moolenaar
1011aa210a3aSBram Moolenaar  lines =<< trim END
1012aa210a3aSBram Moolenaar       var l: list<number> = [1]
1013aa210a3aSBram Moolenaar       g:ExtendList(l)
1014aa210a3aSBram Moolenaar  END
1015aa210a3aSBram Moolenaar  CheckDefExecFailure(lines, 'E1012: Type mismatch; expected number but got string', 0)
1016aa210a3aSBram Moolenaar  CheckScriptFailure(['vim9script'] + lines, 'E1012:', 1)
1017b56c4419SBram Moolenaar
1018b56c4419SBram Moolenaar  lines =<< trim END
1019b56c4419SBram Moolenaar       var l: list<bool>
1020b56c4419SBram Moolenaar       extend(l, [0])
1021b56c4419SBram Moolenaar  END
1022b56c4419SBram Moolenaar  CheckDefAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected list<bool> but got list<number>', 2)
1023aa210a3aSBram Moolenaarenddef
102494738d8fSBram Moolenaar
10251a71d31bSYegappan Lakshmanandef Test_extend_return_type()
10261a71d31bSYegappan Lakshmanan  var l = extend([1, 2], [3])
10271a71d31bSYegappan Lakshmanan  var res = 0
10281a71d31bSYegappan Lakshmanan  for n in l
10291a71d31bSYegappan Lakshmanan    res += n
10301a71d31bSYegappan Lakshmanan  endfor
10311a71d31bSYegappan Lakshmanan  res->assert_equal(6)
10321a71d31bSYegappan Lakshmananenddef
10331a71d31bSYegappan Lakshmanan
103493e1cae7SBram Moolenaardef Test_extend_with_error_function()
103593e1cae7SBram Moolenaar  var lines =<< trim END
103693e1cae7SBram Moolenaar      vim9script
103793e1cae7SBram Moolenaar      def F()
103893e1cae7SBram Moolenaar        {
103993e1cae7SBram Moolenaar          var m = 10
104093e1cae7SBram Moolenaar        }
104193e1cae7SBram Moolenaar        echo m
104293e1cae7SBram Moolenaar      enddef
104393e1cae7SBram Moolenaar
104493e1cae7SBram Moolenaar      def Test()
104593e1cae7SBram Moolenaar        var d: dict<any> = {}
104693e1cae7SBram Moolenaar        d->extend({A: 10, Func: function('F', [])})
104793e1cae7SBram Moolenaar      enddef
104893e1cae7SBram Moolenaar
104993e1cae7SBram Moolenaar      Test()
105093e1cae7SBram Moolenaar  END
105193e1cae7SBram Moolenaar  CheckScriptFailure(lines, 'E1001: Variable not found: m')
105293e1cae7SBram Moolenaarenddef
105393e1cae7SBram Moolenaar
10541a71d31bSYegappan Lakshmanandef Test_extendnew()
10551a71d31bSYegappan Lakshmanan  assert_equal([1, 2, 'a'], extendnew([1, 2], ['a']))
10561a71d31bSYegappan Lakshmanan  assert_equal({one: 1, two: 'a'}, extendnew({one: 1}, {two: 'a'}))
10571a71d31bSYegappan Lakshmanan
10584490ec4eSYegappan Lakshmanan  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')
10594490ec4eSYegappan Lakshmanan  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')
10604490ec4eSYegappan Lakshmanan  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')
10614490ec4eSYegappan Lakshmanan  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')
10621a71d31bSYegappan Lakshmananenddef
10631a71d31bSYegappan Lakshmanan
1064a26f56f6SYegappan Lakshmanandef Test_feedkeys()
10654490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['feedkeys(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
10664490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['feedkeys("x", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
10674490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['feedkeys([], {})'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1')
1068a26f56f6SYegappan Lakshmanan  g:TestVar = 1
1069a26f56f6SYegappan Lakshmanan  feedkeys(":g:TestVar = 789\n", 'xt')
1070a26f56f6SYegappan Lakshmanan  assert_equal(789, g:TestVar)
1071a26f56f6SYegappan Lakshmanan  unlet g:TestVar
1072a26f56f6SYegappan Lakshmananenddef
1073a26f56f6SYegappan Lakshmanan
10747bb4e74cSBram Moolenaardef Test_filereadable()
10752a9d5d38SBram Moolenaar  assert_false(filereadable(""))
10762a9d5d38SBram Moolenaar  assert_false(filereadable(test_null_string()))
10772a9d5d38SBram Moolenaar
1078a26f56f6SYegappan Lakshmanan  CheckDefExecFailure(['echo filereadable(123)'], 'E1013:')
1079a26f56f6SYegappan Lakshmanan  CheckDefExecFailure(['echo filereadable(true)'], 'E1013:')
10807bb4e74cSBram Moolenaarenddef
10817bb4e74cSBram Moolenaar
10827bb4e74cSBram Moolenaardef Test_filewritable()
10832a9d5d38SBram Moolenaar  assert_false(filewritable(""))
10842a9d5d38SBram Moolenaar  assert_false(filewritable(test_null_string()))
10852a9d5d38SBram Moolenaar
1086a26f56f6SYegappan Lakshmanan  CheckDefExecFailure(['echo filewritable(123)'], 'E1013:')
1087a26f56f6SYegappan Lakshmanan  CheckDefExecFailure(['echo filewritable(true)'], 'E1013:')
10887bb4e74cSBram Moolenaarenddef
10897bb4e74cSBram Moolenaar
10907bb4e74cSBram Moolenaardef Test_finddir()
109110c83ddeSBram Moolenaar  mkdir('Xtestdir')
109210c83ddeSBram Moolenaar  finddir('Xtestdir', '**', -1)->assert_equal(['Xtestdir'])
109310c83ddeSBram Moolenaar  var lines =<< trim END
109410c83ddeSBram Moolenaar      var l: list<string> = finddir('nothing', '*;', -1)
109510c83ddeSBram Moolenaar  END
109610c83ddeSBram Moolenaar  CheckDefAndScriptSuccess(lines)
109710c83ddeSBram Moolenaar  delete('Xtestdir', 'rf')
109810c83ddeSBram Moolenaar
10995b73992dSYegappan Lakshmanan  CheckDefAndScriptFailure2(['finddir(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1')
11005b73992dSYegappan Lakshmanan  CheckDefAndScriptFailure2(['finddir(v:null)'], 'E1013: Argument 1: type mismatch, expected string but got special', 'E1174: String required for argument 1')
1101fa984418SBram Moolenaar  CheckDefExecFailure(['echo finddir("")'], 'E1175:')
11024490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['finddir("a", [])'], 'E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2')
11034490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['finddir("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
1104f8dbd586SYegappan Lakshmanan  finddir('abc', '')->assert_equal('')
11057bb4e74cSBram Moolenaarenddef
11067bb4e74cSBram Moolenaar
11077bb4e74cSBram Moolenaardef Test_findfile()
110810c83ddeSBram Moolenaar  findfile('runtest.vim', '**', -1)->assert_equal(['runtest.vim'])
110910c83ddeSBram Moolenaar  var lines =<< trim END
111010c83ddeSBram Moolenaar      var l: list<string> = findfile('nothing', '*;', -1)
111110c83ddeSBram Moolenaar  END
111210c83ddeSBram Moolenaar  CheckDefAndScriptSuccess(lines)
111310c83ddeSBram Moolenaar
11145b73992dSYegappan Lakshmanan  CheckDefExecFailure(['findfile(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool')
11155b73992dSYegappan Lakshmanan  CheckDefExecFailure(['findfile(v:null)'], 'E1013: Argument 1: type mismatch, expected string but got special')
11165b73992dSYegappan Lakshmanan  CheckDefExecFailure(['findfile("")'], 'E1175:')
11174490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['findfile("a", [])'], 'E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2')
11184490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['findfile("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
1119f8dbd586SYegappan Lakshmanan  findfile('abc', '')->assert_equal('')
11207bb4e74cSBram Moolenaarenddef
11217bb4e74cSBram Moolenaar
1122b3bf33a7SBram Moolenaardef Test_flatten()
1123b3bf33a7SBram Moolenaar  var lines =<< trim END
1124b3bf33a7SBram Moolenaar      echo flatten([1, 2, 3])
1125b3bf33a7SBram Moolenaar  END
1126b3bf33a7SBram Moolenaar  CheckDefAndScriptFailure(lines, 'E1158:')
1127b3bf33a7SBram Moolenaarenddef
1128b3bf33a7SBram Moolenaar
11293b690069SBram Moolenaardef Test_flattennew()
11303b690069SBram Moolenaar  var lines =<< trim END
11313b690069SBram Moolenaar      var l = [1, [2, [3, 4]], 5]
11323b690069SBram Moolenaar      call assert_equal([1, 2, 3, 4, 5], flattennew(l))
11333b690069SBram Moolenaar      call assert_equal([1, [2, [3, 4]], 5], l)
11343b690069SBram Moolenaar
11353b690069SBram Moolenaar      call assert_equal([1, 2, [3, 4], 5], flattennew(l, 1))
11363b690069SBram Moolenaar      call assert_equal([1, [2, [3, 4]], 5], l)
1137b3bf33a7SBram Moolenaar
1138b3bf33a7SBram Moolenaar      var ll: list<list<string>> = [['a', 'b', 'c']]
1139b3bf33a7SBram Moolenaar      assert_equal(['a', 'b', 'c'], ll->flattennew())
11403b690069SBram Moolenaar  END
11413b690069SBram Moolenaar  CheckDefAndScriptSuccess(lines)
11423b690069SBram Moolenaar
114383494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['flattennew({})'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 1')
114483494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['flattennew([], "1")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
11453b690069SBram Moolenaarenddef
11463b690069SBram Moolenaar
11477237cab8SYegappan Lakshmanan" Test for float functions argument type
11487237cab8SYegappan Lakshmanandef Test_float_funcs_args()
11497237cab8SYegappan Lakshmanan  CheckFeature float
11507237cab8SYegappan Lakshmanan
11517237cab8SYegappan Lakshmanan  # acos()
11524490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['acos("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1')
11537237cab8SYegappan Lakshmanan  # asin()
11544490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['asin("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1')
11557237cab8SYegappan Lakshmanan  # atan()
11564490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['atan("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1')
11577237cab8SYegappan Lakshmanan  # atan2()
11584490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['atan2("a", 1.1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1')
11594490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['atan2(1.2, "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 2')
11604490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['atan2(1.2)'], 'E119:', 'E119:')
11617237cab8SYegappan Lakshmanan  # ceil()
11624490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['ceil("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1')
11637237cab8SYegappan Lakshmanan  # cos()
11644490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['cos("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1')
11657237cab8SYegappan Lakshmanan  # cosh()
11664490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['cosh("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1')
11677237cab8SYegappan Lakshmanan  # exp()
11684490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['exp("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1')
11697237cab8SYegappan Lakshmanan  # float2nr()
11704490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['float2nr("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1')
11717237cab8SYegappan Lakshmanan  # floor()
11724490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['floor("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1')
11737237cab8SYegappan Lakshmanan  # fmod()
11744490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['fmod(1.1, "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 2')
11754490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['fmod("a", 1.1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1')
11764490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['fmod(1.1)'], 'E119:', 'E119:')
11777237cab8SYegappan Lakshmanan  # isinf()
11784490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['isinf("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1')
11797237cab8SYegappan Lakshmanan  # isnan()
11804490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['isnan("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1')
11817237cab8SYegappan Lakshmanan  # log()
11824490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['log("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1')
11837237cab8SYegappan Lakshmanan  # log10()
11844490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['log10("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1')
11857237cab8SYegappan Lakshmanan  # pow()
11864490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['pow("a", 1.1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1')
11874490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['pow(1.1, "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 2')
11884490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['pow(1.1)'], 'E119:', 'E119:')
11897237cab8SYegappan Lakshmanan  # round()
11904490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['round("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1')
11917237cab8SYegappan Lakshmanan  # sin()
11924490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sin("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1')
11937237cab8SYegappan Lakshmanan  # sinh()
11944490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sinh("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1')
11957237cab8SYegappan Lakshmanan  # sqrt()
11964490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sqrt("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1')
11977237cab8SYegappan Lakshmanan  # tan()
11984490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['tan("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1')
11997237cab8SYegappan Lakshmanan  # tanh()
12004490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['tanh("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1')
12017237cab8SYegappan Lakshmanan  # trunc()
12024490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['trunc("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1')
12037237cab8SYegappan Lakshmananenddef
12047237cab8SYegappan Lakshmanan
1205a26f56f6SYegappan Lakshmanandef Test_fnameescape()
12064490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['fnameescape(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
1207a26f56f6SYegappan Lakshmanan  assert_equal('\+a\%b\|', fnameescape('+a%b|'))
1208f8dbd586SYegappan Lakshmanan  fnameescape('')->assert_equal('')
1209a26f56f6SYegappan Lakshmananenddef
1210a26f56f6SYegappan Lakshmanan
12117bb4e74cSBram Moolenaardef Test_fnamemodify()
12122a9d5d38SBram Moolenaar  CheckDefSuccess(['echo fnamemodify(test_null_string(), ":p")'])
12132a9d5d38SBram Moolenaar  CheckDefSuccess(['echo fnamemodify("", ":p")'])
12142a9d5d38SBram Moolenaar  CheckDefSuccess(['echo fnamemodify("file", test_null_string())'])
12152a9d5d38SBram Moolenaar  CheckDefSuccess(['echo fnamemodify("file", "")'])
12162a9d5d38SBram Moolenaar
1217a26f56f6SYegappan Lakshmanan  CheckDefExecFailure(['echo fnamemodify(true, ":p")'], 'E1013: Argument 1: type mismatch, expected string but got bool')
1218a26f56f6SYegappan Lakshmanan  CheckDefExecFailure(['echo fnamemodify(v:null, ":p")'], 'E1013: Argument 1: type mismatch, expected string but got special')
1219a26f56f6SYegappan Lakshmanan  CheckDefExecFailure(['echo fnamemodify("file", true)'],  'E1013: Argument 2: type mismatch, expected string but got bool')
12207bb4e74cSBram Moolenaarenddef
12217bb4e74cSBram Moolenaar
12222e5910bfSBram Moolenaardef Wrong_dict_key_type(items: list<number>): list<number>
12232e5910bfSBram Moolenaar  return filter(items, (_, val) => get({[val]: 1}, 'x'))
12242e5910bfSBram Moolenaarenddef
12252e5910bfSBram Moolenaar
12260ad871dcSYegappan Lakshmanandef Test_filter()
122778db17c6SBram Moolenaar  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')
12280ad871dcSYegappan Lakshmanan  assert_equal([], filter([1, 2, 3], '0'))
12290ad871dcSYegappan Lakshmanan  assert_equal([1, 2, 3], filter([1, 2, 3], '1'))
12300ad871dcSYegappan Lakshmanan  assert_equal({b: 20}, filter({a: 10, b: 20}, 'v:val == 20'))
12310ad871dcSYegappan Lakshmananenddef
12320ad871dcSYegappan Lakshmanan
123394738d8fSBram Moolenaardef Test_filter_wrong_dict_key_type()
12342e5910bfSBram Moolenaar  assert_fails('Wrong_dict_key_type([1, v:null, 3])', 'E1013:')
123594738d8fSBram Moolenaarenddef
123694738d8fSBram Moolenaar
123794738d8fSBram Moolenaardef Test_filter_return_type()
1238bb8a7ce0SBram Moolenaar  var l = filter([1, 2, 3], (_, _) => 1)
123994738d8fSBram Moolenaar  var res = 0
124094738d8fSBram Moolenaar  for n in l
124194738d8fSBram Moolenaar    res += n
124294738d8fSBram Moolenaar  endfor
124394738d8fSBram Moolenaar  res->assert_equal(6)
124494738d8fSBram Moolenaarenddef
124594738d8fSBram Moolenaar
1246fc0e8f5cSBram Moolenaardef Test_filter_missing_argument()
1247fc0e8f5cSBram Moolenaar  var dict = {aa: [1], ab: [2], ac: [3], de: [4]}
1248bb8a7ce0SBram Moolenaar  var res = dict->filter((k, _) => k =~ 'a' && k !~ 'b')
1249fc0e8f5cSBram Moolenaar  res->assert_equal({aa: [1], ac: [3]})
1250fc0e8f5cSBram Moolenaarenddef
125194738d8fSBram Moolenaar
1252a26f56f6SYegappan Lakshmanandef Test_foldclosed()
12534490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['foldclosed(function("min"))'], 'E1013: Argument 1: type mismatch, expected string but got func(...): any', 'E1220: String or Number required for argument 1')
1254fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['foldclosed("")'], 'E1209: Invalid value for a line number')
1255a26f56f6SYegappan Lakshmanan  assert_equal(-1, foldclosed(1))
1256a26f56f6SYegappan Lakshmanan  assert_equal(-1, foldclosed('$'))
1257a26f56f6SYegappan Lakshmananenddef
1258a26f56f6SYegappan Lakshmanan
1259a26f56f6SYegappan Lakshmanandef Test_foldclosedend()
12604490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['foldclosedend(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1')
1261fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['foldclosedend("")'], 'E1209: Invalid value for a line number')
1262a26f56f6SYegappan Lakshmanan  assert_equal(-1, foldclosedend(1))
1263a26f56f6SYegappan Lakshmanan  assert_equal(-1, foldclosedend('w0'))
1264a26f56f6SYegappan Lakshmananenddef
1265a26f56f6SYegappan Lakshmanan
1266a26f56f6SYegappan Lakshmanandef Test_foldlevel()
12674490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['foldlevel(0z10)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1')
1268fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['foldlevel("")'], 'E1209: Invalid value for a line number')
1269a26f56f6SYegappan Lakshmanan  assert_equal(0, foldlevel(1))
1270a26f56f6SYegappan Lakshmanan  assert_equal(0, foldlevel('.'))
1271a26f56f6SYegappan Lakshmananenddef
1272a26f56f6SYegappan Lakshmanan
1273a26f56f6SYegappan Lakshmanandef Test_foldtextresult()
12744490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['foldtextresult(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1')
1275fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['foldtextresult("")'], 'E1209: Invalid value for a line number')
1276a26f56f6SYegappan Lakshmanan  assert_equal('', foldtextresult(1))
1277a26f56f6SYegappan Lakshmanan  assert_equal('', foldtextresult('.'))
1278a26f56f6SYegappan Lakshmananenddef
1279a26f56f6SYegappan Lakshmanan
12807d840e9aSBram Moolenaardef Test_fullcommand()
12817d840e9aSBram Moolenaar  assert_equal('next', fullcommand('n'))
12827d840e9aSBram Moolenaar  assert_equal('noremap', fullcommand('no'))
12837d840e9aSBram Moolenaar  assert_equal('noremap', fullcommand('nor'))
12847d840e9aSBram Moolenaar  assert_equal('normal', fullcommand('norm'))
12857d840e9aSBram Moolenaar
12867d840e9aSBram Moolenaar  assert_equal('', fullcommand('k'))
12877d840e9aSBram Moolenaar  assert_equal('keepmarks', fullcommand('ke'))
12887d840e9aSBram Moolenaar  assert_equal('keepmarks', fullcommand('kee'))
12897d840e9aSBram Moolenaar  assert_equal('keepmarks', fullcommand('keep'))
12907d840e9aSBram Moolenaar  assert_equal('keepjumps', fullcommand('keepj'))
12917d840e9aSBram Moolenaar
12927d840e9aSBram Moolenaar  assert_equal('dlist', fullcommand('dl'))
12937d840e9aSBram Moolenaar  assert_equal('', fullcommand('dp'))
12947d840e9aSBram Moolenaar  assert_equal('delete', fullcommand('del'))
12957d840e9aSBram Moolenaar  assert_equal('', fullcommand('dell'))
12967d840e9aSBram Moolenaar  assert_equal('', fullcommand('delp'))
12977d840e9aSBram Moolenaar
12987d840e9aSBram Moolenaar  assert_equal('srewind', fullcommand('sre'))
12997d840e9aSBram Moolenaar  assert_equal('scriptnames', fullcommand('scr'))
13007d840e9aSBram Moolenaar  assert_equal('', fullcommand('scg'))
1301820d5525SYegappan Lakshmanan  fullcommand('')->assert_equal('')
13027d840e9aSBram Moolenaarenddef
13037d840e9aSBram Moolenaar
13045bca906bSYegappan Lakshmanandef Test_funcref()
13055bca906bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['funcref("reverse", 2)'], 'E1013: Argument 2: type mismatch, expected list<any> but got number', 'E1211: List required for argument 2')
13065bca906bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['funcref("reverse", [2], [1])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3')
13075bca906bSYegappan Lakshmananenddef
13085bca906bSYegappan Lakshmanan
13095bca906bSYegappan Lakshmanandef Test_function()
13105bca906bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['function("reverse", 2)'], 'E1013: Argument 2: type mismatch, expected list<any> but got number', 'E1211: List required for argument 2')
13115bca906bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['function("reverse", [2], [1])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3')
13125bca906bSYegappan Lakshmananenddef
13135bca906bSYegappan Lakshmanan
131494738d8fSBram Moolenaardef Test_garbagecollect()
131594738d8fSBram Moolenaar  garbagecollect(true)
13164490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['garbagecollect("1")'], 'E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1')
13174490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['garbagecollect(20)'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1')
131894738d8fSBram Moolenaarenddef
131994738d8fSBram Moolenaar
1320a764e73dSYegappan Lakshmanandef Test_get()
1321a764e73dSYegappan Lakshmanan  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')
1322a764e73dSYegappan Lakshmanan  [3, 5, 2]->get(1)->assert_equal(5)
1323a764e73dSYegappan Lakshmanan  [3, 5, 2]->get(3)->assert_equal(0)
1324a764e73dSYegappan Lakshmanan  [3, 5, 2]->get(3, 9)->assert_equal(9)
1325a764e73dSYegappan Lakshmanan  assert_equal(get(0z102030, 2), 0x30)
1326a764e73dSYegappan Lakshmanan  {a: 7, b: 11, c: 13}->get('c')->assert_equal(13)
1327a764e73dSYegappan Lakshmanan  {10: 'a', 20: 'b', 30: 'd'}->get(20)->assert_equal('b')
1328a764e73dSYegappan Lakshmanan  function('max')->get('name')->assert_equal('max')
1329a764e73dSYegappan Lakshmanan  var F: func = function('min', [[5, 8, 6]])
1330a764e73dSYegappan Lakshmanan  F->get('name')->assert_equal('min')
1331a764e73dSYegappan Lakshmanan  F->get('args')->assert_equal([[5, 8, 6]])
1332f723701dSBram Moolenaar
1333f723701dSBram Moolenaar  var lines =<< trim END
1334f723701dSBram Moolenaar      vim9script
1335f723701dSBram Moolenaar      def DoThat(): number
1336f723701dSBram Moolenaar        var Getqflist: func = function('getqflist', [{id: 42}])
1337f723701dSBram Moolenaar        return Getqflist()->get('id', 77)
1338f723701dSBram Moolenaar      enddef
1339f723701dSBram Moolenaar      assert_equal(0, DoThat())
1340f723701dSBram Moolenaar  END
1341f723701dSBram Moolenaar  CheckScriptSuccess(lines)
1342a764e73dSYegappan Lakshmananenddef
1343a764e73dSYegappan Lakshmanan
134494738d8fSBram Moolenaardef Test_getbufinfo()
134594738d8fSBram Moolenaar  var bufinfo = getbufinfo(bufnr())
134694738d8fSBram Moolenaar  getbufinfo('%')->assert_equal(bufinfo)
134794738d8fSBram Moolenaar
134894738d8fSBram Moolenaar  edit Xtestfile1
134994738d8fSBram Moolenaar  hide edit Xtestfile2
135094738d8fSBram Moolenaar  hide enew
1351e0de171eSBram Moolenaar  getbufinfo({bufloaded: true, buflisted: true, bufmodified: false})
135294738d8fSBram Moolenaar      ->len()->assert_equal(3)
135394738d8fSBram Moolenaar  bwipe Xtestfile1 Xtestfile2
1354cd917207SYegappan Lakshmanan  CheckDefAndScriptFailure2(['getbufinfo(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1')
135594738d8fSBram Moolenaarenddef
135694738d8fSBram Moolenaar
135794738d8fSBram Moolenaardef Test_getbufline()
135894738d8fSBram Moolenaar  e SomeFile
135994738d8fSBram Moolenaar  var buf = bufnr()
1360b8bd2e6eSBram Moolenaar  sp Otherfile
136194738d8fSBram Moolenaar  var lines = ['aaa', 'bbb', 'ccc']
136294738d8fSBram Moolenaar  setbufline(buf, 1, lines)
136394738d8fSBram Moolenaar  getbufline('#', 1, '$')->assert_equal(lines)
1364e6e70a10SBram Moolenaar  getbufline(-1, '$', '$')->assert_equal([])
1365e6e70a10SBram Moolenaar  getbufline(-1, 1, '$')->assert_equal([])
136694738d8fSBram Moolenaar
136794738d8fSBram Moolenaar  bwipe!
13684490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getbufline([], 2)'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1')
13694490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getbufline("a", [])'], 'E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 2')
13704490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getbufline("a", 2, 0z10)'], 'E1013: Argument 3: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 3')
137194738d8fSBram Moolenaarenddef
137294738d8fSBram Moolenaar
13737973de35SYegappan Lakshmanandef Test_getbufvar()
13744490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getbufvar(true, "v")'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1')
13757973de35SYegappan Lakshmanan  CheckDefAndScriptFailure2(['getbufvar(1, 2, 3)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
13767973de35SYegappan Lakshmananenddef
13777973de35SYegappan Lakshmanan
137894738d8fSBram Moolenaardef Test_getchangelist()
137994738d8fSBram Moolenaar  new
138094738d8fSBram Moolenaar  setline(1, 'some text')
138194738d8fSBram Moolenaar  var changelist = bufnr()->getchangelist()
138294738d8fSBram Moolenaar  getchangelist('%')->assert_equal(changelist)
138394738d8fSBram Moolenaar  bwipe!
138494738d8fSBram Moolenaarenddef
138594738d8fSBram Moolenaar
138694738d8fSBram Moolenaardef Test_getchar()
138794738d8fSBram Moolenaar  while getchar(0)
138894738d8fSBram Moolenaar  endwhile
138994738d8fSBram Moolenaar  getchar(true)->assert_equal(0)
13901a71d31bSYegappan Lakshmanan  getchar(1)->assert_equal(0)
13914490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getchar(2)'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1')
13924490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getchar("1")'], 'E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1')
13931a71d31bSYegappan Lakshmananenddef
13941a71d31bSYegappan Lakshmanan
13951a71d31bSYegappan Lakshmanandef Test_getcharpos()
13961a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getcharpos(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1')
13971a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getcharpos(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
1398fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['getcharpos("")'], 'E1209: Invalid value for a line number')
13991a71d31bSYegappan Lakshmananenddef
14001a71d31bSYegappan Lakshmanan
14011a71d31bSYegappan Lakshmanandef Test_getcharstr()
14024490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getcharstr(2)'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1')
14034490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getcharstr("1")'], 'E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1')
140494738d8fSBram Moolenaarenddef
140594738d8fSBram Moolenaar
140694738d8fSBram Moolenaardef Test_getcompletion()
140794738d8fSBram Moolenaar  set wildignore=*.vim,*~
140894738d8fSBram Moolenaar  var l = getcompletion('run', 'file', true)
140994738d8fSBram Moolenaar  l->assert_equal([])
141094738d8fSBram Moolenaar  set wildignore&
141183494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getcompletion(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
141283494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getcompletion("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
141383494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getcompletion("a", "b", 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3')
1414fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['getcompletion("a", "")'], 'E475: Invalid argument')
1415fc3b7750SYegappan Lakshmanan  getcompletion('', 'messages')->assert_equal(['clear'])
141694738d8fSBram Moolenaarenddef
141794738d8fSBram Moolenaar
14187237cab8SYegappan Lakshmanandef Test_getcurpos()
1419fc3b7750SYegappan Lakshmanan  CheckDefAndScriptFailure2(['getcurpos("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
14207237cab8SYegappan Lakshmananenddef
14217237cab8SYegappan Lakshmanan
14227237cab8SYegappan Lakshmanandef Test_getcursorcharpos()
14234490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getcursorcharpos("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
14247237cab8SYegappan Lakshmananenddef
14257237cab8SYegappan Lakshmanan
14267237cab8SYegappan Lakshmanandef Test_getcwd()
14274490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getcwd("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
14284490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getcwd("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
14294490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getcwd(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
14307237cab8SYegappan Lakshmananenddef
14317237cab8SYegappan Lakshmanan
143283494b4aSYegappan Lakshmanandef Test_getenv()
143383494b4aSYegappan Lakshmanan  if getenv('does-not_exist') == ''
143483494b4aSYegappan Lakshmanan    assert_report('getenv() should return null')
143583494b4aSYegappan Lakshmanan  endif
143683494b4aSYegappan Lakshmanan  if getenv('does-not_exist') == null
143783494b4aSYegappan Lakshmanan  else
143883494b4aSYegappan Lakshmanan    assert_report('getenv() should return null')
143983494b4aSYegappan Lakshmanan  endif
144083494b4aSYegappan Lakshmanan  $SOMEENVVAR = 'some'
144183494b4aSYegappan Lakshmanan  assert_equal('some', getenv('SOMEENVVAR'))
144283494b4aSYegappan Lakshmanan  unlet $SOMEENVVAR
1443f8dbd586SYegappan Lakshmanan  getenv('')->assert_equal(v:null)
144483494b4aSYegappan Lakshmananenddef
144583494b4aSYegappan Lakshmanan
1446a26f56f6SYegappan Lakshmanandef Test_getfontname()
14474490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getfontname(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
1448f8dbd586SYegappan Lakshmanan  #getfontname('')->assert_equal('')
1449a26f56f6SYegappan Lakshmananenddef
1450a26f56f6SYegappan Lakshmanan
14517bb4e74cSBram Moolenaardef Test_getfperm()
14522a9d5d38SBram Moolenaar  assert_equal('', getfperm(""))
14532a9d5d38SBram Moolenaar  assert_equal('', getfperm(test_null_string()))
14542a9d5d38SBram Moolenaar
1455a26f56f6SYegappan Lakshmanan  CheckDefExecFailure(['echo getfperm(true)'], 'E1013:')
1456a26f56f6SYegappan Lakshmanan  CheckDefExecFailure(['echo getfperm(v:null)'], 'E1013:')
14577bb4e74cSBram Moolenaarenddef
14587bb4e74cSBram Moolenaar
14597bb4e74cSBram Moolenaardef Test_getfsize()
14602a9d5d38SBram Moolenaar  assert_equal(-1, getfsize(""))
14612a9d5d38SBram Moolenaar  assert_equal(-1, getfsize(test_null_string()))
14622a9d5d38SBram Moolenaar
1463a26f56f6SYegappan Lakshmanan  CheckDefExecFailure(['echo getfsize(true)'], 'E1013:')
1464a26f56f6SYegappan Lakshmanan  CheckDefExecFailure(['echo getfsize(v:null)'], 'E1013:')
14657bb4e74cSBram Moolenaarenddef
14667bb4e74cSBram Moolenaar
14677bb4e74cSBram Moolenaardef Test_getftime()
14682a9d5d38SBram Moolenaar  assert_equal(-1, getftime(""))
14692a9d5d38SBram Moolenaar  assert_equal(-1, getftime(test_null_string()))
14702a9d5d38SBram Moolenaar
1471a26f56f6SYegappan Lakshmanan  CheckDefExecFailure(['echo getftime(true)'], 'E1013:')
1472a26f56f6SYegappan Lakshmanan  CheckDefExecFailure(['echo getftime(v:null)'], 'E1013:')
14737bb4e74cSBram Moolenaarenddef
14747bb4e74cSBram Moolenaar
14757bb4e74cSBram Moolenaardef Test_getftype()
14762a9d5d38SBram Moolenaar  assert_equal('', getftype(""))
14772a9d5d38SBram Moolenaar  assert_equal('', getftype(test_null_string()))
14782a9d5d38SBram Moolenaar
1479a26f56f6SYegappan Lakshmanan  CheckDefExecFailure(['echo getftype(true)'], 'E1013:')
1480a26f56f6SYegappan Lakshmanan  CheckDefExecFailure(['echo getftype(v:null)'], 'E1013:')
14817bb4e74cSBram Moolenaarenddef
14827bb4e74cSBram Moolenaar
14837237cab8SYegappan Lakshmanandef Test_getjumplist()
14844490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getjumplist("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
14854490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getjumplist("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
14864490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getjumplist(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
14877237cab8SYegappan Lakshmananenddef
14887237cab8SYegappan Lakshmanan
14890f1227f7SBram Moolenaardef Test_getline()
14900f1227f7SBram Moolenaar  var lines =<< trim END
14910f1227f7SBram Moolenaar      new
14920f1227f7SBram Moolenaar      setline(1, ['hello', 'there', 'again'])
14930f1227f7SBram Moolenaar      assert_equal('hello', getline(1))
14940f1227f7SBram Moolenaar      assert_equal('hello', getline('.'))
14950f1227f7SBram Moolenaar
14960f1227f7SBram Moolenaar      normal 2Gvjv
14970f1227f7SBram Moolenaar      assert_equal('there', getline("'<"))
14980f1227f7SBram Moolenaar      assert_equal('again', getline("'>"))
14990f1227f7SBram Moolenaar  END
15000f1227f7SBram Moolenaar  CheckDefAndScriptSuccess(lines)
15010f1227f7SBram Moolenaar
15020f1227f7SBram Moolenaar  lines =<< trim END
15030f1227f7SBram Moolenaar      echo getline('1')
15040f1227f7SBram Moolenaar  END
15050f1227f7SBram Moolenaar  CheckDefExecAndScriptFailure(lines, 'E1209:')
15064490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getline(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1')
15074490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getline(1, true)'], 'E1013: Argument 2: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 2')
1508fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['getline("")'], 'E1209: Invalid value for a line number')
15090f1227f7SBram Moolenaarenddef
15100f1227f7SBram Moolenaar
15111a71d31bSYegappan Lakshmanandef Test_getloclist()
15124490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getloclist("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
15134490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getloclist(1, [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2')
15141a71d31bSYegappan Lakshmananenddef
15151a71d31bSYegappan Lakshmanan
15161a71d31bSYegappan Lakshmanandef Test_getloclist_return_type()
15171a71d31bSYegappan Lakshmanan  var l = getloclist(1)
15181a71d31bSYegappan Lakshmanan  l->assert_equal([])
15191a71d31bSYegappan Lakshmanan
15201a71d31bSYegappan Lakshmanan  var d = getloclist(1, {items: 0})
15211a71d31bSYegappan Lakshmanan  d->assert_equal({items: []})
15221a71d31bSYegappan Lakshmananenddef
15231a71d31bSYegappan Lakshmanan
1524a26f56f6SYegappan Lakshmanandef Test_getmarklist()
15254490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getmarklist([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1')
1526a26f56f6SYegappan Lakshmanan  assert_equal([], getmarklist(10000))
1527a26f56f6SYegappan Lakshmanan  assert_fails('getmarklist("a%b@#")', 'E94:')
1528a26f56f6SYegappan Lakshmananenddef
1529a26f56f6SYegappan Lakshmanan
15307237cab8SYegappan Lakshmanandef Test_getmatches()
15314490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getmatches("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
15327237cab8SYegappan Lakshmananenddef
15337237cab8SYegappan Lakshmanan
1534a26f56f6SYegappan Lakshmanandef Test_getpos()
15354490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getpos(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
1536a26f56f6SYegappan Lakshmanan  assert_equal([0, 1, 1, 0], getpos('.'))
15370f1227f7SBram Moolenaar  CheckDefExecFailure(['getpos("a")'], 'E1209:')
1538fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['getpos("")'], 'E1209: Invalid value for a line number')
1539a26f56f6SYegappan Lakshmananenddef
1540a26f56f6SYegappan Lakshmanan
1541a26f56f6SYegappan Lakshmanandef Test_getqflist()
15424490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getqflist([])'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1')
1543a26f56f6SYegappan Lakshmanan  call assert_equal({}, getqflist({}))
1544a26f56f6SYegappan Lakshmananenddef
1545a26f56f6SYegappan Lakshmanan
154694738d8fSBram Moolenaardef Test_getqflist_return_type()
154794738d8fSBram Moolenaar  var l = getqflist()
154894738d8fSBram Moolenaar  l->assert_equal([])
154994738d8fSBram Moolenaar
1550e0de171eSBram Moolenaar  var d = getqflist({items: 0})
1551e0de171eSBram Moolenaar  d->assert_equal({items: []})
155294738d8fSBram Moolenaarenddef
155394738d8fSBram Moolenaar
155494738d8fSBram Moolenaardef Test_getreg()
155594738d8fSBram Moolenaar  var lines = ['aaa', 'bbb', 'ccc']
155694738d8fSBram Moolenaar  setreg('a', lines)
155794738d8fSBram Moolenaar  getreg('a', true, true)->assert_equal(lines)
1558418a29f0SBram Moolenaar  assert_fails('getreg("ab")', 'E1162:')
155983494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getreg(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
156083494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getreg(".", 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2')
156183494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getreg(".", 1, "b")'], 'E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3')
1562f8dbd586SYegappan Lakshmanan  @" = 'A1B2C3'
1563f8dbd586SYegappan Lakshmanan  getreg('')->assert_equal('A1B2C3')
156494738d8fSBram Moolenaarenddef
156594738d8fSBram Moolenaar
156694738d8fSBram Moolenaardef Test_getreg_return_type()
156794738d8fSBram Moolenaar  var s1: string = getreg('"')
156894738d8fSBram Moolenaar  var s2: string = getreg('"', 1)
156994738d8fSBram Moolenaar  var s3: list<string> = getreg('"', 1, 1)
157094738d8fSBram Moolenaarenddef
157194738d8fSBram Moolenaar
1572418a29f0SBram Moolenaardef Test_getreginfo()
1573418a29f0SBram Moolenaar  var text = 'abc'
1574418a29f0SBram Moolenaar  setreg('a', text)
1575418a29f0SBram Moolenaar  getreginfo('a')->assert_equal({regcontents: [text], regtype: 'v', isunnamed: false})
1576418a29f0SBram Moolenaar  assert_fails('getreginfo("ab")', 'E1162:')
1577f8dbd586SYegappan Lakshmanan  @" = 'D1E2F3'
1578f8dbd586SYegappan Lakshmanan  getreginfo('').regcontents->assert_equal(['D1E2F3'])
1579418a29f0SBram Moolenaarenddef
1580418a29f0SBram Moolenaar
1581418a29f0SBram Moolenaardef Test_getregtype()
1582418a29f0SBram Moolenaar  var lines = ['aaa', 'bbb', 'ccc']
1583418a29f0SBram Moolenaar  setreg('a', lines)
1584418a29f0SBram Moolenaar  getregtype('a')->assert_equal('V')
1585418a29f0SBram Moolenaar  assert_fails('getregtype("ab")', 'E1162:')
1586f8dbd586SYegappan Lakshmanan  setreg('"', 'ABCD', 'b')
1587f8dbd586SYegappan Lakshmanan  getregtype('')->assert_equal("\<C-V>4")
1588418a29f0SBram Moolenaarenddef
1589418a29f0SBram Moolenaar
15907237cab8SYegappan Lakshmanandef Test_gettabinfo()
15914490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['gettabinfo("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
15927237cab8SYegappan Lakshmananenddef
15937237cab8SYegappan Lakshmanan
159483494b4aSYegappan Lakshmanandef Test_gettabvar()
159583494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['gettabvar("a", "b")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
159683494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['gettabvar(1, 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
159783494b4aSYegappan Lakshmananenddef
159883494b4aSYegappan Lakshmanan
159983494b4aSYegappan Lakshmanandef Test_gettabwinvar()
160083494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['gettabwinvar("a", 2, "c")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
160183494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['gettabwinvar(1, "b", "c", [])'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
160283494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['gettabwinvar(1, 1, 3, {})'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3')
160383494b4aSYegappan Lakshmananenddef
160483494b4aSYegappan Lakshmanan
16057237cab8SYegappan Lakshmanandef Test_gettagstack()
16064490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['gettagstack("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
16077237cab8SYegappan Lakshmananenddef
16087237cab8SYegappan Lakshmanan
1609a26f56f6SYegappan Lakshmanandef Test_gettext()
16104490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['gettext(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
1611fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['gettext("")'], 'E475: Invalid argument')
1612a26f56f6SYegappan Lakshmanan  assert_equal('abc', gettext("abc"))
1613f8dbd586SYegappan Lakshmanan  assert_fails('gettext("")', 'E475:')
1614a26f56f6SYegappan Lakshmananenddef
1615a26f56f6SYegappan Lakshmanan
16167237cab8SYegappan Lakshmanandef Test_getwininfo()
16174490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getwininfo("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
16187237cab8SYegappan Lakshmananenddef
16197237cab8SYegappan Lakshmanan
16207237cab8SYegappan Lakshmanandef Test_getwinpos()
16214490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getwinpos("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
16227237cab8SYegappan Lakshmananenddef
16237237cab8SYegappan Lakshmanan
162483494b4aSYegappan Lakshmanandef Test_getwinvar()
162583494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getwinvar("a", "b")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
162683494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['getwinvar(1, 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
162783494b4aSYegappan Lakshmananenddef
162883494b4aSYegappan Lakshmanan
162994738d8fSBram Moolenaardef Test_glob()
163094738d8fSBram Moolenaar  glob('runtest.vim', true, true, true)->assert_equal(['runtest.vim'])
163183494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['glob(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
163283494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['glob("a", 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2')
163383494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['glob("a", 1, "b")'], 'E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3')
163483494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['glob("a", 1, true, 2)'], 'E1013: Argument 4: type mismatch, expected bool but got number', 'E1212: Bool required for argument 4')
1635f8dbd586SYegappan Lakshmanan  glob('')->assert_equal('')
163694738d8fSBram Moolenaarenddef
163794738d8fSBram Moolenaar
1638a26f56f6SYegappan Lakshmanandef Test_glob2regpat()
16394490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['glob2regpat(null)'], 'E1013: Argument 1: type mismatch, expected string but got special', 'E1174: String required for argument 1')
1640f8dbd586SYegappan Lakshmanan  glob2regpat('')->assert_equal('^$')
1641a26f56f6SYegappan Lakshmananenddef
1642a26f56f6SYegappan Lakshmanan
164394738d8fSBram Moolenaardef Test_globpath()
164494738d8fSBram Moolenaar  globpath('.', 'runtest.vim', true, true, true)->assert_equal(['./runtest.vim'])
164583494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['globpath(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
164683494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['globpath("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
164783494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['globpath("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3')
164883494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['globpath("a", "b", true, "d")'], 'E1013: Argument 4: type mismatch, expected bool but got string', 'E1212: Bool required for argument 4')
164983494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['globpath("a", "b", true, false, "e")'], 'E1013: Argument 5: type mismatch, expected bool but got string', 'E1212: Bool required for argument 5')
1650f8dbd586SYegappan Lakshmanan  globpath('', '')->assert_equal('')
165194738d8fSBram Moolenaarenddef
165294738d8fSBram Moolenaar
165394738d8fSBram Moolenaardef Test_has()
165494738d8fSBram Moolenaar  has('eval', true)->assert_equal(1)
165583494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['has(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1')
165683494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['has("a", "b")'], 'E1013: Argument 2: type mismatch, expected bool but got string', 'E1212: Bool required for argument 2')
1657f8dbd586SYegappan Lakshmanan  has('')->assert_equal(0)
165894738d8fSBram Moolenaarenddef
165994738d8fSBram Moolenaar
16605b73992dSYegappan Lakshmanandef Test_has_key()
16611aeddeb8SBram Moolenaar  var d = {123: 'xx'}
16621aeddeb8SBram Moolenaar  assert_true(has_key(d, '123'))
16631aeddeb8SBram Moolenaar  assert_true(has_key(d, 123))
16641aeddeb8SBram Moolenaar  assert_false(has_key(d, 'x'))
16651aeddeb8SBram Moolenaar  assert_false(has_key(d, 99))
16661aeddeb8SBram Moolenaar
16674490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['has_key([1, 2], "k")'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 1')
16684490ec4eSYegappan Lakshmanan  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')
16695b73992dSYegappan Lakshmananenddef
16705b73992dSYegappan Lakshmanan
16717237cab8SYegappan Lakshmanandef Test_haslocaldir()
16724490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['haslocaldir("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
16734490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['haslocaldir("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
16744490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['haslocaldir(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
16757237cab8SYegappan Lakshmananenddef
16767237cab8SYegappan Lakshmanan
167794738d8fSBram Moolenaardef Test_hasmapto()
167894738d8fSBram Moolenaar  hasmapto('foobar', 'i', true)->assert_equal(0)
167994738d8fSBram Moolenaar  iabbrev foo foobar
168094738d8fSBram Moolenaar  hasmapto('foobar', 'i', true)->assert_equal(1)
168194738d8fSBram Moolenaar  iunabbrev foo
168283494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['hasmapto(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
168383494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['hasmapto("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
168483494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['hasmapto("a", "b", 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3')
1685f8dbd586SYegappan Lakshmanan  hasmapto('', '')->assert_equal(0)
168694738d8fSBram Moolenaarenddef
168794738d8fSBram Moolenaar
1688a26f56f6SYegappan Lakshmanandef Test_histadd()
16894490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['histadd(1, "x")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
16904490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['histadd(":", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
1691a26f56f6SYegappan Lakshmanan  histadd("search", 'skyblue')
1692a26f56f6SYegappan Lakshmanan  assert_equal('skyblue', histget('/', -1))
1693fc3b7750SYegappan Lakshmanan  histadd("search", '')->assert_equal(0)
1694a26f56f6SYegappan Lakshmananenddef
1695a26f56f6SYegappan Lakshmanan
16960ad871dcSYegappan Lakshmanandef Test_histdel()
16970ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['histdel(1, "x")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
16984490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['histdel(":", true)'], 'E1013: Argument 2: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 2')
1699fc3b7750SYegappan Lakshmanan  histdel('search', '')->assert_equal(0)
17000ad871dcSYegappan Lakshmananenddef
17010ad871dcSYegappan Lakshmanan
17021a71d31bSYegappan Lakshmanandef Test_histget()
17031a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['histget(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
17041a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['histget("a", "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
17051a71d31bSYegappan Lakshmananenddef
17061a71d31bSYegappan Lakshmanan
1707a26f56f6SYegappan Lakshmanandef Test_histnr()
17084490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['histnr(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
1709a26f56f6SYegappan Lakshmanan  assert_equal(-1, histnr('abc'))
1710a26f56f6SYegappan Lakshmananenddef
1711a26f56f6SYegappan Lakshmanan
1712a26f56f6SYegappan Lakshmanandef Test_hlID()
17134490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['hlID(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
1714a26f56f6SYegappan Lakshmanan  assert_equal(0, hlID('NonExistingHighlight'))
1715f8dbd586SYegappan Lakshmanan  hlID('')->assert_equal(0)
1716a26f56f6SYegappan Lakshmananenddef
1717a26f56f6SYegappan Lakshmanan
1718a26f56f6SYegappan Lakshmanandef Test_hlexists()
17194490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['hlexists([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1')
1720a26f56f6SYegappan Lakshmanan  assert_equal(0, hlexists('NonExistingHighlight'))
1721f8dbd586SYegappan Lakshmanan  hlexists('')->assert_equal(0)
1722a26f56f6SYegappan Lakshmananenddef
1723a26f56f6SYegappan Lakshmanan
1724d1a8d658SYegappan Lakshmanandef Test_hlget()
1725d1a8d658SYegappan Lakshmanan  CheckDefAndScriptFailure2(['hlget([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1')
1726d1a8d658SYegappan Lakshmanan  hlget('')->assert_equal([])
1727d1a8d658SYegappan Lakshmananenddef
1728d1a8d658SYegappan Lakshmanan
1729d1a8d658SYegappan Lakshmanandef Test_hlset()
1730d1a8d658SYegappan Lakshmanan  CheckDefAndScriptFailure2(['hlset("id")'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1211: List required for argument 1')
1731d1a8d658SYegappan Lakshmanan  hlset([])->assert_equal(0)
1732d1a8d658SYegappan Lakshmananenddef
1733d1a8d658SYegappan Lakshmanan
1734a26f56f6SYegappan Lakshmanandef Test_iconv()
17354490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['iconv(1, "from", "to")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
17364490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['iconv("abc", 10, "to")'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
17374490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['iconv("abc", "from", 20)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3')
1738a26f56f6SYegappan Lakshmanan  assert_equal('abc', iconv('abc', 'fromenc', 'toenc'))
1739f8dbd586SYegappan Lakshmanan  iconv('', '', '')->assert_equal('')
1740a26f56f6SYegappan Lakshmananenddef
1741a26f56f6SYegappan Lakshmanan
17421a71d31bSYegappan Lakshmanandef Test_indent()
17434490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['indent([1])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1')
17444490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['indent(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1')
1745fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['indent("")'], 'E1209: Invalid value for a line number')
17461a71d31bSYegappan Lakshmanan  assert_equal(0, indent(1))
17471a71d31bSYegappan Lakshmananenddef
17481a71d31bSYegappan Lakshmanan
174994738d8fSBram Moolenaardef Test_index()
175094738d8fSBram Moolenaar  index(['a', 'b', 'a', 'B'], 'b', 2, true)->assert_equal(3)
175178db17c6SBram Moolenaar  CheckDefAndScriptFailure2(['index("a", "a")'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1226: List or Blob required for argument 1')
17520ad871dcSYegappan Lakshmanan  CheckDefFailure(['index(["1"], 1)'], 'E1013: Argument 2: type mismatch, expected string but got number')
17530ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['index(0z10, "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
17540ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['index([1], 1, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
17550ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['index(0z1020, 10, 1, 2)'], 'E1013: Argument 4: type mismatch, expected bool but got number', 'E1212: Bool required for argument 4')
175694738d8fSBram Moolenaarenddef
175794738d8fSBram Moolenaar
17581a71d31bSYegappan Lakshmanandef Test_input()
17594490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['input(5)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
17604490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['input(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1')
17614490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['input("p", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
17624490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['input("p", "q", 20)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3')
17631a71d31bSYegappan Lakshmananenddef
17641a71d31bSYegappan Lakshmanan
17651a71d31bSYegappan Lakshmanandef Test_inputdialog()
17664490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['inputdialog(5)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
17674490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['inputdialog(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1')
17684490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['inputdialog("p", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
17694490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['inputdialog("p", "q", 20)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3')
17701a71d31bSYegappan Lakshmananenddef
17711a71d31bSYegappan Lakshmanan
1772a26f56f6SYegappan Lakshmanandef Test_inputlist()
17734490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['inputlist(10)'], 'E1013: Argument 1: type mismatch, expected list<string> but got number', 'E1211: List required for argument 1')
17744490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['inputlist("abc")'], 'E1013: Argument 1: type mismatch, expected list<string> but got string', 'E1211: List required for argument 1')
1775a26f56f6SYegappan Lakshmanan  CheckDefFailure(['inputlist([1, 2, 3])'], 'E1013: Argument 1: type mismatch, expected list<string> but got list<number>')
1776a26f56f6SYegappan Lakshmanan  feedkeys("2\<CR>", 't')
1777a26f56f6SYegappan Lakshmanan  var r: number = inputlist(['a', 'b', 'c'])
1778a26f56f6SYegappan Lakshmanan  assert_equal(2, r)
1779a26f56f6SYegappan Lakshmananenddef
1780a26f56f6SYegappan Lakshmanan
1781a26f56f6SYegappan Lakshmanandef Test_inputsecret()
17824490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['inputsecret(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
17834490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['inputsecret("Pass:", 20)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
1784a26f56f6SYegappan Lakshmanan  feedkeys("\<CR>", 't')
1785a26f56f6SYegappan Lakshmanan  var ans: string = inputsecret('Pass:', '123')
1786a26f56f6SYegappan Lakshmanan  assert_equal('123', ans)
1787a26f56f6SYegappan Lakshmananenddef
1788a26f56f6SYegappan Lakshmanan
1789193f6201SBram Moolenaarlet s:number_one = 1
1790193f6201SBram Moolenaarlet s:number_two = 2
1791193f6201SBram Moolenaarlet s:string_keep = 'keep'
1792193f6201SBram Moolenaar
1793ca17453eSBram Moolenaardef Test_insert()
179494738d8fSBram Moolenaar  var l = insert([2, 1], 3)
179594738d8fSBram Moolenaar  var res = 0
179694738d8fSBram Moolenaar  for n in l
179794738d8fSBram Moolenaar    res += n
179894738d8fSBram Moolenaar  endfor
179994738d8fSBram Moolenaar  res->assert_equal(6)
1800ca17453eSBram Moolenaar
180134fcb697SYegappan Lakshmanan  var m: any = []
180234fcb697SYegappan Lakshmanan  insert(m, 4)
180334fcb697SYegappan Lakshmanan  call assert_equal([4], m)
180434fcb697SYegappan Lakshmanan  extend(m, [6], 0)
180534fcb697SYegappan Lakshmanan  call assert_equal([6, 4], m)
180634fcb697SYegappan Lakshmanan
180739211cbaSBram Moolenaar  var lines =<< trim END
180839211cbaSBram Moolenaar      insert(test_null_list(), 123)
180939211cbaSBram Moolenaar  END
181039211cbaSBram Moolenaar  CheckDefExecAndScriptFailure(lines, 'E1130:', 1)
181139211cbaSBram Moolenaar
181239211cbaSBram Moolenaar  lines =<< trim END
181339211cbaSBram Moolenaar      insert(test_null_blob(), 123)
181439211cbaSBram Moolenaar  END
181539211cbaSBram Moolenaar  CheckDefExecAndScriptFailure(lines, 'E1131:', 1)
181639211cbaSBram Moolenaar
1817ca17453eSBram Moolenaar  assert_equal([1, 2, 3], insert([2, 3], 1))
1818193f6201SBram Moolenaar  assert_equal([1, 2, 3], insert([2, 3], s:number_one))
1819ca17453eSBram Moolenaar  assert_equal([1, 2, 3], insert([1, 2], 3, 2))
1820193f6201SBram Moolenaar  assert_equal([1, 2, 3], insert([1, 2], 3, s:number_two))
1821ca17453eSBram Moolenaar  assert_equal(['a', 'b', 'c'], insert(['b', 'c'], 'a'))
1822ca17453eSBram Moolenaar  assert_equal(0z1234, insert(0z34, 0x12))
1823193f6201SBram Moolenaar
182478db17c6SBram Moolenaar  CheckDefAndScriptFailure2(['insert("a", 1)'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1226: List or Blob required for argument 1')
18254490ec4eSYegappan Lakshmanan  CheckDefFailure(['insert([2, 3], "a")'], 'E1013: Argument 2: type mismatch, expected number but got string')
18264490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['insert([2, 3], 1, "x")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
182794738d8fSBram Moolenaarenddef
182894738d8fSBram Moolenaar
18297237cab8SYegappan Lakshmanandef Test_invert()
18304490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['invert("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
18317237cab8SYegappan Lakshmananenddef
18327237cab8SYegappan Lakshmanan
1833a26f56f6SYegappan Lakshmanandef Test_isdirectory()
18344490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['isdirectory(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1')
1835a26f56f6SYegappan Lakshmanan  assert_false(isdirectory('NonExistingDir'))
1836f8dbd586SYegappan Lakshmanan  assert_false(isdirectory(''))
1837a26f56f6SYegappan Lakshmananenddef
1838a26f56f6SYegappan Lakshmanan
18391a71d31bSYegappan Lakshmanandef Test_islocked()
18401a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['islocked(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1')
18411a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['var n1: number = 10', 'islocked(n1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
18421a71d31bSYegappan Lakshmanan  g:v1 = 10
18431a71d31bSYegappan Lakshmanan  assert_false(islocked('g:v1'))
18441a71d31bSYegappan Lakshmanan  lockvar g:v1
18451a71d31bSYegappan Lakshmanan  assert_true(islocked('g:v1'))
18461a71d31bSYegappan Lakshmanan  unlet g:v1
1847f8dbd586SYegappan Lakshmanan  islocked('')->assert_equal(-1)
18481a71d31bSYegappan Lakshmananenddef
18491a71d31bSYegappan Lakshmanan
1850a26f56f6SYegappan Lakshmanandef Test_items()
1851a26f56f6SYegappan Lakshmanan  CheckDefFailure(['[]->items()'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>')
1852a26f56f6SYegappan Lakshmanan  assert_equal([['a', 10], ['b', 20]], {'a': 10, 'b': 20}->items())
1853a26f56f6SYegappan Lakshmanan  assert_equal([], {}->items())
1854a26f56f6SYegappan Lakshmananenddef
1855a26f56f6SYegappan Lakshmanan
18561a71d31bSYegappan Lakshmanandef Test_job_getchannel()
18579ff9c7b9SDominique Pelle  if !has('job')
18589ff9c7b9SDominique Pelle    CheckFeature job
18599ff9c7b9SDominique Pelle  else
18604490ec4eSYegappan Lakshmanan    CheckDefAndScriptFailure2(['job_getchannel("a")'], 'E1013: Argument 1: type mismatch, expected job but got string', 'E1218: Job required for argument 1')
18611a71d31bSYegappan Lakshmanan    assert_fails('job_getchannel(test_null_job())', 'E916: not a valid job')
18629ff9c7b9SDominique Pelle  endif
18631a71d31bSYegappan Lakshmananenddef
18641a71d31bSYegappan Lakshmanan
18651a71d31bSYegappan Lakshmanandef Test_job_info()
18669ff9c7b9SDominique Pelle  if !has('job')
18679ff9c7b9SDominique Pelle    CheckFeature job
18689ff9c7b9SDominique Pelle  else
18694490ec4eSYegappan Lakshmanan    CheckDefAndScriptFailure2(['job_info("a")'], 'E1013: Argument 1: type mismatch, expected job but got string', 'E1218: Job required for argument 1')
18701a71d31bSYegappan Lakshmanan    assert_fails('job_info(test_null_job())', 'E916: not a valid job')
18719ff9c7b9SDominique Pelle  endif
18721a71d31bSYegappan Lakshmananenddef
18731a71d31bSYegappan Lakshmanan
18741a71d31bSYegappan Lakshmanandef Test_job_info_return_type()
18759ff9c7b9SDominique Pelle  if !has('job')
18769ff9c7b9SDominique Pelle    CheckFeature job
18779ff9c7b9SDominique Pelle  else
18781a71d31bSYegappan Lakshmanan    job_start(&shell)
18791a71d31bSYegappan Lakshmanan    var jobs = job_info()
18801a71d31bSYegappan Lakshmanan    assert_equal('list<job>', typename(jobs))
18811a71d31bSYegappan Lakshmanan    assert_equal('dict<any>', typename(job_info(jobs[0])))
18821a71d31bSYegappan Lakshmanan    job_stop(jobs[0])
18831a71d31bSYegappan Lakshmanan  endif
18841a71d31bSYegappan Lakshmananenddef
18851a71d31bSYegappan Lakshmanan
188683494b4aSYegappan Lakshmanandef Test_job_setoptions()
188783494b4aSYegappan Lakshmanan  if !has('job')
188883494b4aSYegappan Lakshmanan    CheckFeature job
188983494b4aSYegappan Lakshmanan  else
18900ad871dcSYegappan Lakshmanan    CheckDefAndScriptFailure2(['job_setoptions(test_null_channel(), {})'], 'E1013: Argument 1: type mismatch, expected job but got channel', 'E1218: Job required for argument 1')
189183494b4aSYegappan Lakshmanan    CheckDefAndScriptFailure2(['job_setoptions(test_null_job(), [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2')
189283494b4aSYegappan Lakshmanan    assert_equal('fail', job_status(test_null_job()))
189383494b4aSYegappan Lakshmanan  endif
189483494b4aSYegappan Lakshmananenddef
189583494b4aSYegappan Lakshmanan
18961a71d31bSYegappan Lakshmanandef Test_job_status()
18979ff9c7b9SDominique Pelle  if !has('job')
18989ff9c7b9SDominique Pelle    CheckFeature job
18999ff9c7b9SDominique Pelle  else
19004490ec4eSYegappan Lakshmanan    CheckDefAndScriptFailure2(['job_status("a")'], 'E1013: Argument 1: type mismatch, expected job but got string', 'E1218: Job required for argument 1')
19011a71d31bSYegappan Lakshmanan    assert_equal('fail', job_status(test_null_job()))
19029ff9c7b9SDominique Pelle  endif
19031a71d31bSYegappan Lakshmananenddef
19041a71d31bSYegappan Lakshmanan
190583494b4aSYegappan Lakshmanandef Test_job_stop()
190683494b4aSYegappan Lakshmanan  if !has('job')
190783494b4aSYegappan Lakshmanan    CheckFeature job
190883494b4aSYegappan Lakshmanan  else
19090ad871dcSYegappan Lakshmanan    CheckDefAndScriptFailure2(['job_stop("a")'], 'E1013: Argument 1: type mismatch, expected job but got string', 'E1218: Job required for argument 1')
19104490ec4eSYegappan Lakshmanan    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')
191183494b4aSYegappan Lakshmanan  endif
191283494b4aSYegappan Lakshmananenddef
191383494b4aSYegappan Lakshmanan
191483494b4aSYegappan Lakshmanandef Test_join()
191583494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['join("abc")'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1211: List required for argument 1')
191683494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['join([], 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
1917f8dbd586SYegappan Lakshmanan  join([''], '')->assert_equal('')
191883494b4aSYegappan Lakshmananenddef
191983494b4aSYegappan Lakshmanan
1920a26f56f6SYegappan Lakshmanandef Test_js_decode()
19214490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['js_decode(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
1922a26f56f6SYegappan Lakshmanan  assert_equal([1, 2], js_decode('[1,2]'))
1923820d5525SYegappan Lakshmanan  js_decode('')->assert_equal(v:none)
1924a26f56f6SYegappan Lakshmananenddef
1925a26f56f6SYegappan Lakshmanan
1926a26f56f6SYegappan Lakshmanandef Test_json_decode()
19274490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['json_decode(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1')
1928a26f56f6SYegappan Lakshmanan  assert_equal(1.0, json_decode('1.0'))
1929820d5525SYegappan Lakshmanan  json_decode('')->assert_equal(v:none)
1930a26f56f6SYegappan Lakshmananenddef
1931a26f56f6SYegappan Lakshmanan
1932a26f56f6SYegappan Lakshmanandef Test_keys()
19334490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['keys([])'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1')
1934a26f56f6SYegappan Lakshmanan  assert_equal(['a'], {a: 'v'}->keys())
1935a26f56f6SYegappan Lakshmanan  assert_equal([], {}->keys())
1936a26f56f6SYegappan Lakshmananenddef
1937a26f56f6SYegappan Lakshmanan
193894738d8fSBram Moolenaardef Test_keys_return_type()
1939e0de171eSBram Moolenaar  const var: list<string> = {a: 1, b: 2}->keys()
194094738d8fSBram Moolenaar  var->assert_equal(['a', 'b'])
194194738d8fSBram Moolenaarenddef
194294738d8fSBram Moolenaar
1943a764e73dSYegappan Lakshmanandef Test_len()
1944a764e73dSYegappan Lakshmanan  CheckDefAndScriptFailure2(['len(true)'], 'E1013: Argument 1: type mismatch, expected list<any> but got bool', 'E701: Invalid type for len()')
1945a764e73dSYegappan Lakshmanan  assert_equal(2, "ab"->len())
1946a764e73dSYegappan Lakshmanan  assert_equal(3, 456->len())
1947a764e73dSYegappan Lakshmanan  assert_equal(0, []->len())
1948a764e73dSYegappan Lakshmanan  assert_equal(1, {a: 10}->len())
1949a764e73dSYegappan Lakshmanan  assert_equal(4, 0z20304050->len())
1950a764e73dSYegappan Lakshmananenddef
1951a764e73dSYegappan Lakshmanan
19525bca906bSYegappan Lakshmanandef Test_libcall()
19535bca906bSYegappan Lakshmanan  CheckFeature libcall
19545bca906bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['libcall(1, "b", 3)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
19555bca906bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['libcall("a", 2, 3)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
19564490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['libcall("a", "b", 1.1)'], 'E1013: Argument 3: type mismatch, expected string but got float', 'E1220: String or Number required for argument 3')
19575bca906bSYegappan Lakshmananenddef
19585bca906bSYegappan Lakshmanan
19595bca906bSYegappan Lakshmanandef Test_libcallnr()
19605bca906bSYegappan Lakshmanan  CheckFeature libcall
19615bca906bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['libcallnr(1, "b", 3)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
19625bca906bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['libcallnr("a", 2, 3)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
19634490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['libcallnr("a", "b", 1.1)'], 'E1013: Argument 3: type mismatch, expected string but got float', 'E1220: String or Number required for argument 3')
19645bca906bSYegappan Lakshmananenddef
19655bca906bSYegappan Lakshmanan
1966c5809439SBram Moolenaardef Test_line()
1967a26f56f6SYegappan Lakshmanan  assert_fails('line(true)', 'E1174:')
19681a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['line(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
19691a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['line(".", "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
1970fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['line("")'], 'E1209: Invalid value for a line number')
1971a26f56f6SYegappan Lakshmananenddef
1972a26f56f6SYegappan Lakshmanan
1973a26f56f6SYegappan Lakshmanandef Test_line2byte()
19744490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['line2byte(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1')
1975fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['line2byte("")'], 'E1209: Invalid value for a line number')
1976a26f56f6SYegappan Lakshmanan  assert_equal(-1, line2byte(1))
1977a26f56f6SYegappan Lakshmanan  assert_equal(-1, line2byte(10000))
1978a26f56f6SYegappan Lakshmananenddef
1979a26f56f6SYegappan Lakshmanan
1980a26f56f6SYegappan Lakshmanandef Test_lispindent()
19814490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['lispindent({})'], 'E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1220: String or Number required for argument 1')
1982fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['lispindent("")'], 'E1209: Invalid value for a line number')
1983a26f56f6SYegappan Lakshmanan  assert_equal(0, lispindent(1))
1984c5809439SBram Moolenaarenddef
1985c5809439SBram Moolenaar
19865dfe4674SYegappan Lakshmanandef Test_list2blob()
19875dfe4674SYegappan Lakshmanan  CheckDefAndScriptFailure2(['list2blob(10)'], 'E1013: Argument 1: type mismatch, expected list<number> but got number', 'E1211: List required for argument 1')
19885dfe4674SYegappan Lakshmanan  CheckDefFailure(['list2blob([0z10, 0z02])'], 'E1013: Argument 1: type mismatch, expected list<number> but got list<blob>')
19895dfe4674SYegappan Lakshmananenddef
19905dfe4674SYegappan Lakshmanan
199194738d8fSBram Moolenaardef Test_list2str_str2list_utf8()
199294738d8fSBram Moolenaar  var s = "\u3042\u3044"
199394738d8fSBram Moolenaar  var l = [0x3042, 0x3044]
199494738d8fSBram Moolenaar  str2list(s, true)->assert_equal(l)
199594738d8fSBram Moolenaar  list2str(l, true)->assert_equal(s)
199694738d8fSBram Moolenaarenddef
199794738d8fSBram Moolenaar
199883494b4aSYegappan Lakshmanandef Test_list2str()
199983494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['list2str(".", true)'], 'E1013: Argument 1: type mismatch, expected list<number> but got string', 'E1211: List required for argument 1')
200083494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['list2str([1], 0z10)'], 'E1013: Argument 2: type mismatch, expected bool but got blob', 'E1212: Bool required for argument 2')
200183494b4aSYegappan Lakshmananenddef
200283494b4aSYegappan Lakshmanan
200394738d8fSBram Moolenaardef SID(): number
200494738d8fSBram Moolenaar  return expand('<SID>')
200594738d8fSBram Moolenaar          ->matchstr('<SNR>\zs\d\+\ze_$')
200694738d8fSBram Moolenaar          ->str2nr()
200794738d8fSBram Moolenaarenddef
200894738d8fSBram Moolenaar
20095bca906bSYegappan Lakshmanandef Test_listener_add()
20104490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['listener_add("1", true)'], 'E1013: Argument 2: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 2')
20115bca906bSYegappan Lakshmananenddef
20125bca906bSYegappan Lakshmanan
20135b73992dSYegappan Lakshmanandef Test_listener_flush()
20144490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['listener_flush([1])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1')
20155b73992dSYegappan Lakshmananenddef
20165b73992dSYegappan Lakshmanan
20177237cab8SYegappan Lakshmanandef Test_listener_remove()
20184490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['listener_remove("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
20197237cab8SYegappan Lakshmananenddef
20207237cab8SYegappan Lakshmanan
2021f8dbd586SYegappan Lakshmanandef Test_luaeval()
2022a764e73dSYegappan Lakshmanan  if !has('lua')
2023a764e73dSYegappan Lakshmanan    CheckFeature lua
2024a764e73dSYegappan Lakshmanan  endif
2025a764e73dSYegappan Lakshmanan  CheckDefAndScriptFailure2(['luaeval(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
2026f8dbd586SYegappan Lakshmanan  if exists_compiled('*luaeval')
2027f8dbd586SYegappan Lakshmanan    luaeval('')->assert_equal(v:null)
2028f8dbd586SYegappan Lakshmanan  endif
2029a764e73dSYegappan Lakshmananenddef
2030a764e73dSYegappan Lakshmanan
20310ad871dcSYegappan Lakshmanandef Test_map()
203278db17c6SBram Moolenaar  CheckDefAndScriptFailure2(['map("x", "1")'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1228: List, Dictionary or Blob required for argument 1')
203378db17c6SBram Moolenaar  CheckDefAndScriptFailure2(['map(1, "1")'], 'E1013: Argument 1: type mismatch, expected list<any> but got number', 'E1228: List, Dictionary or Blob required for argument 1')
20340ad871dcSYegappan Lakshmananenddef
20350ad871dcSYegappan Lakshmanan
203683494b4aSYegappan Lakshmanandef Test_map_failure()
203783494b4aSYegappan Lakshmanan  CheckFeature job
203883494b4aSYegappan Lakshmanan
203983494b4aSYegappan Lakshmanan  var lines =<< trim END
204083494b4aSYegappan Lakshmanan      vim9script
204183494b4aSYegappan Lakshmanan      writefile([], 'Xtmpfile')
204283494b4aSYegappan Lakshmanan      silent e Xtmpfile
204383494b4aSYegappan Lakshmanan      var d = {[bufnr('%')]: {a: 0}}
204483494b4aSYegappan Lakshmanan      au BufReadPost * Func()
204583494b4aSYegappan Lakshmanan      def Func()
204683494b4aSYegappan Lakshmanan          if d->has_key('')
204783494b4aSYegappan Lakshmanan          endif
204883494b4aSYegappan Lakshmanan          eval d[expand('<abuf>')]->mapnew((_, v: dict<job>) => 0)
204983494b4aSYegappan Lakshmanan      enddef
205083494b4aSYegappan Lakshmanan      e
205183494b4aSYegappan Lakshmanan  END
205283494b4aSYegappan Lakshmanan  CheckScriptFailure(lines, 'E1013:')
205383494b4aSYegappan Lakshmanan  au! BufReadPost
205483494b4aSYegappan Lakshmanan  delete('Xtmpfile')
205583494b4aSYegappan Lakshmananenddef
205683494b4aSYegappan Lakshmanan
205770250fb4SBram Moolenaardef Test_map_function_arg()
205870250fb4SBram Moolenaar  var lines =<< trim END
205970250fb4SBram Moolenaar      def MapOne(i: number, v: string): string
206070250fb4SBram Moolenaar        return i .. ':' .. v
206170250fb4SBram Moolenaar      enddef
206270250fb4SBram Moolenaar      var l = ['a', 'b', 'c']
206370250fb4SBram Moolenaar      map(l, MapOne)
206470250fb4SBram Moolenaar      assert_equal(['0:a', '1:b', '2:c'], l)
206570250fb4SBram Moolenaar  END
206670250fb4SBram Moolenaar  CheckDefAndScriptSuccess(lines)
20678da6d6dbSBram Moolenaar
20688da6d6dbSBram Moolenaar  lines =<< trim END
20698da6d6dbSBram Moolenaar      range(3)->map((a, b, c) => a + b + c)
20708da6d6dbSBram Moolenaar  END
20718da6d6dbSBram Moolenaar  CheckDefExecAndScriptFailure(lines, 'E1190: One argument too few')
20728da6d6dbSBram Moolenaar  lines =<< trim END
20738da6d6dbSBram Moolenaar      range(3)->map((a, b, c, d) => a + b + c + d)
20748da6d6dbSBram Moolenaar  END
20758da6d6dbSBram Moolenaar  CheckDefExecAndScriptFailure(lines, 'E1190: 2 arguments too few')
207670250fb4SBram Moolenaarenddef
207770250fb4SBram Moolenaar
207870250fb4SBram Moolenaardef Test_map_item_type()
207970250fb4SBram Moolenaar  var lines =<< trim END
208070250fb4SBram Moolenaar      var l = ['a', 'b', 'c']
208170250fb4SBram Moolenaar      map(l, (k, v) => k .. '/' .. v )
208270250fb4SBram Moolenaar      assert_equal(['0/a', '1/b', '2/c'], l)
208370250fb4SBram Moolenaar  END
208470250fb4SBram Moolenaar  CheckDefAndScriptSuccess(lines)
208570250fb4SBram Moolenaar
208670250fb4SBram Moolenaar  lines =<< trim END
208770250fb4SBram Moolenaar    var l: list<number> = [0]
208870250fb4SBram Moolenaar    echo map(l, (_, v) => [])
208970250fb4SBram Moolenaar  END
20907a3fe3e1SBram Moolenaar  CheckDefExecAndScriptFailure(lines, 'E1012: Type mismatch; expected number but got list<unknown> in map()', 2)
209170250fb4SBram Moolenaar
209270250fb4SBram Moolenaar  lines =<< trim END
209370250fb4SBram Moolenaar    var l: list<number> = range(2)
209470250fb4SBram Moolenaar    echo map(l, (_, v) => [])
209570250fb4SBram Moolenaar  END
20967a3fe3e1SBram Moolenaar  CheckDefExecAndScriptFailure(lines, 'E1012: Type mismatch; expected number but got list<unknown> in map()', 2)
209770250fb4SBram Moolenaar
209870250fb4SBram Moolenaar  lines =<< trim END
209970250fb4SBram Moolenaar    var d: dict<number> = {key: 0}
210070250fb4SBram Moolenaar    echo map(d, (_, v) => [])
210170250fb4SBram Moolenaar  END
21027a3fe3e1SBram Moolenaar  CheckDefExecAndScriptFailure(lines, 'E1012: Type mismatch; expected number but got list<unknown> in map()', 2)
210370250fb4SBram Moolenaarenddef
210470250fb4SBram Moolenaar
210594738d8fSBram Moolenaardef Test_maparg()
210694738d8fSBram Moolenaar  var lnum = str2nr(expand('<sflnum>'))
210794738d8fSBram Moolenaar  map foo bar
2108e0de171eSBram Moolenaar  maparg('foo', '', false, true)->assert_equal({
210994738d8fSBram Moolenaar        lnum: lnum + 1,
211094738d8fSBram Moolenaar        script: 0,
211194738d8fSBram Moolenaar        mode: ' ',
211294738d8fSBram Moolenaar        silent: 0,
211394738d8fSBram Moolenaar        noremap: 0,
211494738d8fSBram Moolenaar        lhs: 'foo',
211594738d8fSBram Moolenaar        lhsraw: 'foo',
211694738d8fSBram Moolenaar        nowait: 0,
211794738d8fSBram Moolenaar        expr: 0,
211894738d8fSBram Moolenaar        sid: SID(),
211994738d8fSBram Moolenaar        rhs: 'bar',
212094738d8fSBram Moolenaar        buffer: 0})
212194738d8fSBram Moolenaar  unmap foo
212283494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['maparg(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
212383494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['maparg("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
212483494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['maparg("a", "b", 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3')
212583494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['maparg("a", "b", true, 2)'], 'E1013: Argument 4: type mismatch, expected bool but got number', 'E1212: Bool required for argument 4')
2126f8dbd586SYegappan Lakshmanan  maparg('')->assert_equal('')
212794738d8fSBram Moolenaarenddef
212894738d8fSBram Moolenaar
212994738d8fSBram Moolenaardef Test_maparg_mapset()
213094738d8fSBram Moolenaar  nnoremap <F3> :echo "hit F3"<CR>
213194738d8fSBram Moolenaar  var mapsave = maparg('<F3>', 'n', false, true)
213294738d8fSBram Moolenaar  mapset('n', false, mapsave)
213394738d8fSBram Moolenaar
213494738d8fSBram Moolenaar  nunmap <F3>
213594738d8fSBram Moolenaarenddef
213694738d8fSBram Moolenaar
213783494b4aSYegappan Lakshmanandef Test_mapcheck()
213883494b4aSYegappan Lakshmanan  iabbrev foo foobar
213983494b4aSYegappan Lakshmanan  mapcheck('foo', 'i', true)->assert_equal('foobar')
214083494b4aSYegappan Lakshmanan  iunabbrev foo
214183494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['mapcheck(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
214283494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['mapcheck("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
214383494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['mapcheck("a", "b", 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3')
2144f8dbd586SYegappan Lakshmanan  mapcheck('')->assert_equal('')
2145f8dbd586SYegappan Lakshmanan  mapcheck('', '')->assert_equal('')
2146027c4ab4SBram Moolenaarenddef
214783494b4aSYegappan Lakshmanan
21480ad871dcSYegappan Lakshmanandef Test_mapnew()
214978db17c6SBram Moolenaar  CheckDefAndScriptFailure2(['mapnew("x", "1")'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1228: List, Dictionary or Blob required for argument 1')
215078db17c6SBram Moolenaar  CheckDefAndScriptFailure2(['mapnew(1, "1")'], 'E1013: Argument 1: type mismatch, expected list<any> but got number', 'E1228: List, Dictionary or Blob required for argument 1')
21510ad871dcSYegappan Lakshmananenddef
21520ad871dcSYegappan Lakshmanan
215383494b4aSYegappan Lakshmanandef Test_mapset()
215483494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['mapset(1, true, {})'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
215583494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['mapset("a", 2, {})'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2')
215683494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['mapset("a", false, [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3')
2157027c4ab4SBram Moolenaarenddef
2158027c4ab4SBram Moolenaar
2159a9a7c0c6SYegappan Lakshmanandef Test_match()
21604490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['match(0z12, "p")'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1')
2161a9a7c0c6SYegappan Lakshmanan  CheckDefAndScriptFailure2(['match(["s"], [2])'], 'E1013: Argument 2: type mismatch, expected string but got list<number>', 'E1174: String required for argument 2')
2162a9a7c0c6SYegappan Lakshmanan  CheckDefAndScriptFailure2(['match("s", "p", "q")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
2163a9a7c0c6SYegappan Lakshmanan  CheckDefAndScriptFailure2(['match("s", "p", 1, "r")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4')
2164a9a7c0c6SYegappan Lakshmanan  assert_equal(2, match('ab12cd', '12'))
2165a9a7c0c6SYegappan Lakshmanan  assert_equal(-1, match('ab12cd', '34'))
2166a9a7c0c6SYegappan Lakshmanan  assert_equal(6, match('ab12cd12ef', '12', 4))
2167a9a7c0c6SYegappan Lakshmanan  assert_equal(2, match('abcd', '..', 0, 3))
2168a9a7c0c6SYegappan Lakshmanan  assert_equal(1, match(['a', 'b', 'c'], 'b'))
2169a9a7c0c6SYegappan Lakshmanan  assert_equal(-1, match(['a', 'b', 'c'], 'd'))
2170a9a7c0c6SYegappan Lakshmanan  assert_equal(3, match(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2))
2171a9a7c0c6SYegappan Lakshmanan  assert_equal(5, match(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2, 2))
2172f8dbd586SYegappan Lakshmanan  match('', 'a')->assert_equal(-1)
2173f8dbd586SYegappan Lakshmanan  match('abc', '')->assert_equal(0)
2174f8dbd586SYegappan Lakshmanan  match('', '')->assert_equal(0)
2175a9a7c0c6SYegappan Lakshmananenddef
2176a9a7c0c6SYegappan Lakshmanan
21770ad871dcSYegappan Lakshmanandef Test_matchadd()
21780ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchadd(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
21790ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchadd("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
21800ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchadd("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
21810ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchadd("a", "b", 1, "d")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4')
21820ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchadd("a", "b", 1, 1, [])'], 'E1013: Argument 5: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 5')
2183fc3b7750SYegappan Lakshmanan  matchadd('', 'a')->assert_equal(-1)
2184fc3b7750SYegappan Lakshmanan  matchadd('Search', '')->assert_equal(-1)
21850ad871dcSYegappan Lakshmananenddef
21860ad871dcSYegappan Lakshmanan
21870ad871dcSYegappan Lakshmanandef Test_matchaddpos()
21880ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchaddpos(1, [1])'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
21897973de35SYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchaddpos("a", "b")'], 'E1013: Argument 2: type mismatch, expected list<any> but got string', 'E1211: List required for argument 2')
21900ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchaddpos("a", [1], "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
21910ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchaddpos("a", [1], 1, "d")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4')
21920ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchaddpos("a", [1], 1, 1, [])'], 'E1013: Argument 5: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 5')
2193fc3b7750SYegappan Lakshmanan  matchaddpos('', [1])->assert_equal(-1)
21940ad871dcSYegappan Lakshmananenddef
21950ad871dcSYegappan Lakshmanan
21967237cab8SYegappan Lakshmanandef Test_matcharg()
21974490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['matcharg("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
21987237cab8SYegappan Lakshmananenddef
21997237cab8SYegappan Lakshmanan
22007237cab8SYegappan Lakshmanandef Test_matchdelete()
22014490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchdelete("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
22024490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchdelete("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
22034490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchdelete(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
22047237cab8SYegappan Lakshmananenddef
22057237cab8SYegappan Lakshmanan
2206a9a7c0c6SYegappan Lakshmanandef Test_matchend()
22074490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchend(0z12, "p")'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1')
2208a9a7c0c6SYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchend(["s"], [2])'], 'E1013: Argument 2: type mismatch, expected string but got list<number>', 'E1174: String required for argument 2')
2209a9a7c0c6SYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchend("s", "p", "q")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
2210a9a7c0c6SYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchend("s", "p", 1, "r")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4')
2211a9a7c0c6SYegappan Lakshmanan  assert_equal(4, matchend('ab12cd', '12'))
2212a9a7c0c6SYegappan Lakshmanan  assert_equal(-1, matchend('ab12cd', '34'))
2213a9a7c0c6SYegappan Lakshmanan  assert_equal(8, matchend('ab12cd12ef', '12', 4))
2214a9a7c0c6SYegappan Lakshmanan  assert_equal(4, matchend('abcd', '..', 0, 3))
2215a9a7c0c6SYegappan Lakshmanan  assert_equal(1, matchend(['a', 'b', 'c'], 'b'))
2216a9a7c0c6SYegappan Lakshmanan  assert_equal(-1, matchend(['a', 'b', 'c'], 'd'))
2217a9a7c0c6SYegappan Lakshmanan  assert_equal(3, matchend(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2))
2218a9a7c0c6SYegappan Lakshmanan  assert_equal(5, matchend(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2, 2))
2219f8dbd586SYegappan Lakshmanan  matchend('', 'a')->assert_equal(-1)
2220f8dbd586SYegappan Lakshmanan  matchend('abc', '')->assert_equal(0)
2221f8dbd586SYegappan Lakshmanan  matchend('', '')->assert_equal(0)
2222a9a7c0c6SYegappan Lakshmananenddef
2223a9a7c0c6SYegappan Lakshmanan
222483494b4aSYegappan Lakshmanandef Test_matchfuzzy()
222583494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchfuzzy({}, "p")'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 1')
222683494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchfuzzy([], 1)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
222783494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchfuzzy([], "a", [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3')
2228820d5525SYegappan Lakshmanan  matchfuzzy(['abc', 'xyz'], '')->assert_equal([])
222983494b4aSYegappan Lakshmananenddef
223083494b4aSYegappan Lakshmanan
223183494b4aSYegappan Lakshmanandef Test_matchfuzzypos()
223283494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchfuzzypos({}, "p")'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 1')
223383494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchfuzzypos([], 1)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
223483494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchfuzzypos([], "a", [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3')
2235820d5525SYegappan Lakshmanan  matchfuzzypos(['abc', 'xyz'], '')->assert_equal([[], [], []])
223683494b4aSYegappan Lakshmananenddef
223783494b4aSYegappan Lakshmanan
2238a9a7c0c6SYegappan Lakshmanandef Test_matchlist()
22394490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchlist(0z12, "p")'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1')
2240a9a7c0c6SYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchlist(["s"], [2])'], 'E1013: Argument 2: type mismatch, expected string but got list<number>', 'E1174: String required for argument 2')
2241a9a7c0c6SYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchlist("s", "p", "q")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
2242a9a7c0c6SYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchlist("s", "p", 1, "r")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4')
2243a9a7c0c6SYegappan Lakshmanan  var l: list<string> = ['12',  '', '', '', '', '', '', '', '', '']
2244a9a7c0c6SYegappan Lakshmanan  assert_equal(l, matchlist('ab12cd', '12'))
2245a9a7c0c6SYegappan Lakshmanan  assert_equal([], matchlist('ab12cd', '34'))
2246a9a7c0c6SYegappan Lakshmanan  assert_equal(l, matchlist('ab12cd12ef', '12', 4))
2247a9a7c0c6SYegappan Lakshmanan  l[0] = 'cd'
2248a9a7c0c6SYegappan Lakshmanan  assert_equal(l, matchlist('abcd', '..', 0, 3))
2249a9a7c0c6SYegappan Lakshmanan  l[0] = 'b'
2250a9a7c0c6SYegappan Lakshmanan  assert_equal(l, matchlist(['a', 'b', 'c'], 'b'))
2251a9a7c0c6SYegappan Lakshmanan  assert_equal([], matchlist(['a', 'b', 'c'], 'd'))
2252a9a7c0c6SYegappan Lakshmanan  assert_equal(l, matchlist(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2))
2253a9a7c0c6SYegappan Lakshmanan  assert_equal(l, matchlist(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2, 2))
2254f8dbd586SYegappan Lakshmanan  matchlist('', 'a')->assert_equal([])
2255f8dbd586SYegappan Lakshmanan  matchlist('abc', '')->assert_equal(repeat([''], 10))
2256f8dbd586SYegappan Lakshmanan  matchlist('', '')->assert_equal(repeat([''], 10))
2257a9a7c0c6SYegappan Lakshmananenddef
2258a9a7c0c6SYegappan Lakshmanan
2259a9a7c0c6SYegappan Lakshmanandef Test_matchstr()
22604490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchstr(0z12, "p")'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1')
2261a9a7c0c6SYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchstr(["s"], [2])'], 'E1013: Argument 2: type mismatch, expected string but got list<number>', 'E1174: String required for argument 2')
2262a9a7c0c6SYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchstr("s", "p", "q")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
2263a9a7c0c6SYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchstr("s", "p", 1, "r")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4')
2264a9a7c0c6SYegappan Lakshmanan  assert_equal('12', matchstr('ab12cd', '12'))
2265a9a7c0c6SYegappan Lakshmanan  assert_equal('', matchstr('ab12cd', '34'))
2266a9a7c0c6SYegappan Lakshmanan  assert_equal('12', matchstr('ab12cd12ef', '12', 4))
2267a9a7c0c6SYegappan Lakshmanan  assert_equal('cd', matchstr('abcd', '..', 0, 3))
2268a9a7c0c6SYegappan Lakshmanan  assert_equal('b', matchstr(['a', 'b', 'c'], 'b'))
2269a9a7c0c6SYegappan Lakshmanan  assert_equal('', matchstr(['a', 'b', 'c'], 'd'))
2270a9a7c0c6SYegappan Lakshmanan  assert_equal('b', matchstr(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2))
2271a9a7c0c6SYegappan Lakshmanan  assert_equal('b', matchstr(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2, 2))
2272f8dbd586SYegappan Lakshmanan  matchstr('', 'a')->assert_equal('')
2273f8dbd586SYegappan Lakshmanan  matchstr('abc', '')->assert_equal('')
2274f8dbd586SYegappan Lakshmanan  matchstr('', '')->assert_equal('')
2275a9a7c0c6SYegappan Lakshmananenddef
2276a9a7c0c6SYegappan Lakshmanan
2277a9a7c0c6SYegappan Lakshmanandef Test_matchstrpos()
22784490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchstrpos(0z12, "p")'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1')
2279a9a7c0c6SYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchstrpos(["s"], [2])'], 'E1013: Argument 2: type mismatch, expected string but got list<number>', 'E1174: String required for argument 2')
2280a9a7c0c6SYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchstrpos("s", "p", "q")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
2281a9a7c0c6SYegappan Lakshmanan  CheckDefAndScriptFailure2(['matchstrpos("s", "p", 1, "r")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4')
2282a9a7c0c6SYegappan Lakshmanan  assert_equal(['12', 2, 4], matchstrpos('ab12cd', '12'))
2283a9a7c0c6SYegappan Lakshmanan  assert_equal(['', -1, -1], matchstrpos('ab12cd', '34'))
2284a9a7c0c6SYegappan Lakshmanan  assert_equal(['12', 6, 8], matchstrpos('ab12cd12ef', '12', 4))
2285a9a7c0c6SYegappan Lakshmanan  assert_equal(['cd', 2, 4], matchstrpos('abcd', '..', 0, 3))
2286a9a7c0c6SYegappan Lakshmanan  assert_equal(['b', 1, 0, 1], matchstrpos(['a', 'b', 'c'], 'b'))
2287a9a7c0c6SYegappan Lakshmanan  assert_equal(['', -1, -1, -1], matchstrpos(['a', 'b', 'c'], 'd'))
2288a9a7c0c6SYegappan Lakshmanan  assert_equal(['b', 3, 0, 1],
2289a9a7c0c6SYegappan Lakshmanan                    matchstrpos(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2))
2290a9a7c0c6SYegappan Lakshmanan  assert_equal(['b', 5, 0, 1],
2291a9a7c0c6SYegappan Lakshmanan                    matchstrpos(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2, 2))
2292f8dbd586SYegappan Lakshmanan  matchstrpos('', 'a')->assert_equal(['', -1, -1])
2293f8dbd586SYegappan Lakshmanan  matchstrpos('abc', '')->assert_equal(['', 0, 0])
2294f8dbd586SYegappan Lakshmanan  matchstrpos('', '')->assert_equal(['', 0, 0])
2295a9a7c0c6SYegappan Lakshmananenddef
2296a9a7c0c6SYegappan Lakshmanan
22979ae3705bSBram Moolenaardef Test_max()
22989ae3705bSBram Moolenaar  g:flag = true
22999ae3705bSBram Moolenaar  var l1: list<number> = g:flag
23009ae3705bSBram Moolenaar          ? [1, max([2, 3])]
23019ae3705bSBram Moolenaar          : [4, 5]
23029ae3705bSBram Moolenaar  assert_equal([1, 3], l1)
23039ae3705bSBram Moolenaar
23049ae3705bSBram Moolenaar  g:flag = false
23059ae3705bSBram Moolenaar  var l2: list<number> = g:flag
23069ae3705bSBram Moolenaar          ? [1, max([2, 3])]
23079ae3705bSBram Moolenaar          : [4, 5]
23089ae3705bSBram Moolenaar  assert_equal([4, 5], l2)
23094490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['max(5)'], 'E1013: Argument 1: type mismatch, expected list<any> but got number', 'E1227: List or Dictionary required for argument 1')
23109ae3705bSBram Moolenaarenddef
23119ae3705bSBram Moolenaar
2312a26f56f6SYegappan Lakshmanandef Test_menu_info()
23134490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['menu_info(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
23144490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['menu_info(10, "n")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
23154490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['menu_info("File", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
2316a26f56f6SYegappan Lakshmanan  assert_equal({}, menu_info('aMenu'))
2317a26f56f6SYegappan Lakshmananenddef
2318a26f56f6SYegappan Lakshmanan
23199ae3705bSBram Moolenaardef Test_min()
23209ae3705bSBram Moolenaar  g:flag = true
23219ae3705bSBram Moolenaar  var l1: list<number> = g:flag
23229ae3705bSBram Moolenaar          ? [1, min([2, 3])]
23239ae3705bSBram Moolenaar          : [4, 5]
23249ae3705bSBram Moolenaar  assert_equal([1, 2], l1)
23259ae3705bSBram Moolenaar
23269ae3705bSBram Moolenaar  g:flag = false
23279ae3705bSBram Moolenaar  var l2: list<number> = g:flag
23289ae3705bSBram Moolenaar          ? [1, min([2, 3])]
23299ae3705bSBram Moolenaar          : [4, 5]
23309ae3705bSBram Moolenaar  assert_equal([4, 5], l2)
23314490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['min(5)'], 'E1013: Argument 1: type mismatch, expected list<any> but got number', 'E1227: List or Dictionary required for argument 1')
23329ae3705bSBram Moolenaarenddef
23339ae3705bSBram Moolenaar
23345b73992dSYegappan Lakshmanandef Test_mkdir()
23354490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['mkdir(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1')
23364490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['mkdir("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 2')
23374490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['mkdir("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
2338f8dbd586SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['mkdir("")'], 'E1175: Non-empty string required for argument 1')
23395b73992dSYegappan Lakshmanan  delete('a', 'rf')
23405b73992dSYegappan Lakshmananenddef
23415b73992dSYegappan Lakshmanan
23421a71d31bSYegappan Lakshmanandef Test_mode()
23434490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['mode("1")'], 'E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1')
23444490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['mode(2)'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1')
23451a71d31bSYegappan Lakshmananenddef
23461a71d31bSYegappan Lakshmanan
23471a71d31bSYegappan Lakshmanandef Test_mzeval()
23481a71d31bSYegappan Lakshmanan  if !has('mzscheme')
23491a71d31bSYegappan Lakshmanan    CheckFeature mzscheme
23501a71d31bSYegappan Lakshmanan  endif
23514490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['mzeval(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1')
23521a71d31bSYegappan Lakshmananenddef
23531a71d31bSYegappan Lakshmanan
2354a26f56f6SYegappan Lakshmanandef Test_nextnonblank()
23554490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['nextnonblank(null)'], 'E1013: Argument 1: type mismatch, expected string but got special', 'E1220: String or Number required for argument 1')
2356fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['nextnonblank("")'], 'E1209: Invalid value for a line number')
2357a26f56f6SYegappan Lakshmanan  assert_equal(0, nextnonblank(1))
2358a26f56f6SYegappan Lakshmananenddef
2359a26f56f6SYegappan Lakshmanan
236094738d8fSBram Moolenaardef Test_nr2char()
236194738d8fSBram Moolenaar  nr2char(97, true)->assert_equal('a')
236283494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['nr2char("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
236383494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['nr2char(1, "a")'], 'E1013: Argument 2: type mismatch, expected bool but got string', 'E1212: Bool required for argument 2')
236494738d8fSBram Moolenaarenddef
236594738d8fSBram Moolenaar
23667237cab8SYegappan Lakshmanandef Test_or()
23674490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['or("x", 0x2)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
23684490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['or(0x1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
23695b73992dSYegappan Lakshmananenddef
23705b73992dSYegappan Lakshmanan
23711a71d31bSYegappan Lakshmanandef Test_pathshorten()
23721a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['pathshorten(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
23731a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['pathshorten("a", "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
2374f8dbd586SYegappan Lakshmanan  pathshorten('')->assert_equal('')
23751a71d31bSYegappan Lakshmananenddef
23761a71d31bSYegappan Lakshmanan
23771a71d31bSYegappan Lakshmanandef Test_perleval()
23781a71d31bSYegappan Lakshmanan  if !has('perl')
23791a71d31bSYegappan Lakshmanan    CheckFeature perl
23801a71d31bSYegappan Lakshmanan  endif
23814490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['perleval(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1')
23821a71d31bSYegappan Lakshmananenddef
23831a71d31bSYegappan Lakshmanan
2384c72bdd28SYegappan Lakshmanandef Test_popup_atcursor()
238578db17c6SBram Moolenaar  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')
23864490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['popup_atcursor("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 2')
2387841e498cSYegappan Lakshmanan
2388841e498cSYegappan Lakshmanan  # Pass variable of type 'any' to popup_atcursor()
2389841e498cSYegappan Lakshmanan  var what: any = 'Hello'
2390841e498cSYegappan Lakshmanan  var popupID = what->popup_atcursor({moved: 'any'})
2391841e498cSYegappan Lakshmanan  assert_equal(0, popupID->popup_getoptions().tabpage)
2392841e498cSYegappan Lakshmanan  popupID->popup_close()
2393c72bdd28SYegappan Lakshmananenddef
2394c72bdd28SYegappan Lakshmanan
2395c72bdd28SYegappan Lakshmanandef Test_popup_beval()
239678db17c6SBram Moolenaar  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')
23974490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['popup_beval("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 2')
2398c72bdd28SYegappan Lakshmananenddef
2399c72bdd28SYegappan Lakshmanan
24001a71d31bSYegappan Lakshmanandef Test_popup_clear()
24014490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['popup_clear(["a"])'], 'E1013: Argument 1: type mismatch, expected bool but got list<string>', 'E1212: Bool required for argument 1')
24024490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['popup_clear(2)'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1')
24031a71d31bSYegappan Lakshmananenddef
24041a71d31bSYegappan Lakshmanan
2405a764e73dSYegappan Lakshmanandef Test_popup_close()
2406a764e73dSYegappan Lakshmanan  CheckDefAndScriptFailure2(['popup_close("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
2407a764e73dSYegappan Lakshmananenddef
2408a764e73dSYegappan Lakshmanan
2409841e498cSYegappan Lakshmanandef Test_popup_create()
2410841e498cSYegappan Lakshmanan  # Pass variable of type 'any' to popup_create()
2411841e498cSYegappan Lakshmanan  var what: any = 'Hello'
2412841e498cSYegappan Lakshmanan  var popupID = what->popup_create({})
2413841e498cSYegappan Lakshmanan  assert_equal(0, popupID->popup_getoptions().tabpage)
2414841e498cSYegappan Lakshmanan  popupID->popup_close()
2415841e498cSYegappan Lakshmananenddef
2416841e498cSYegappan Lakshmanan
2417c72bdd28SYegappan Lakshmanandef Test_popup_dialog()
241878db17c6SBram Moolenaar  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')
24194490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['popup_dialog("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 2')
2420c72bdd28SYegappan Lakshmananenddef
2421c72bdd28SYegappan Lakshmanan
24221a71d31bSYegappan Lakshmanandef Test_popup_filter_menu()
24231a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['popup_filter_menu("x", "")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
24241a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['popup_filter_menu(1, 1)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
2425820d5525SYegappan Lakshmanan  var id: number = popup_menu(["one", "two", "three"], {})
2426820d5525SYegappan Lakshmanan  popup_filter_menu(id, '')
2427820d5525SYegappan Lakshmanan  popup_close(id)
24281a71d31bSYegappan Lakshmananenddef
24291a71d31bSYegappan Lakshmanan
24301a71d31bSYegappan Lakshmanandef Test_popup_filter_yesno()
24311a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['popup_filter_yesno("x", "")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
24321a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['popup_filter_yesno(1, 1)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
24331a71d31bSYegappan Lakshmananenddef
24341a71d31bSYegappan Lakshmanan
24351a71d31bSYegappan Lakshmanandef Test_popup_getoptions()
24364490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['popup_getoptions("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
24374490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['popup_getoptions(true)'], 'E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1')
24381a71d31bSYegappan Lakshmananenddef
24391a71d31bSYegappan Lakshmanan
24401a71d31bSYegappan Lakshmanandef Test_popup_getpos()
24414490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['popup_getpos("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
24424490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['popup_getpos(true)'], 'E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1')
24431a71d31bSYegappan Lakshmananenddef
24441a71d31bSYegappan Lakshmanan
24451a71d31bSYegappan Lakshmanandef Test_popup_hide()
24464490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['popup_hide("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
24474490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['popup_hide(true)'], 'E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1')
24481a71d31bSYegappan Lakshmananenddef
24491a71d31bSYegappan Lakshmanan
24505b73992dSYegappan Lakshmanandef Test_popup_locate()
24514490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['popup_locate("a", 20)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
24524490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['popup_locate(10, "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
24537237cab8SYegappan Lakshmananenddef
24547237cab8SYegappan Lakshmanan
2455c72bdd28SYegappan Lakshmanandef Test_popup_menu()
245678db17c6SBram Moolenaar  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')
24574490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['popup_menu("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 2')
2458c72bdd28SYegappan Lakshmananenddef
2459c72bdd28SYegappan Lakshmanan
24601a71d31bSYegappan Lakshmanandef Test_popup_move()
24611a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['popup_move("x", {})'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
24621a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['popup_move(1, [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2')
24631a71d31bSYegappan Lakshmananenddef
24641a71d31bSYegappan Lakshmanan
2465c72bdd28SYegappan Lakshmanandef Test_popup_notification()
246678db17c6SBram Moolenaar  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')
24674490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['popup_notification("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 2')
2468c72bdd28SYegappan Lakshmananenddef
2469c72bdd28SYegappan Lakshmanan
24701a71d31bSYegappan Lakshmanandef Test_popup_setoptions()
24711a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['popup_setoptions("x", {})'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
24721a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['popup_setoptions(1, [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2')
24731a71d31bSYegappan Lakshmananenddef
24741a71d31bSYegappan Lakshmanan
24750ad871dcSYegappan Lakshmanandef Test_popup_settext()
24760ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['popup_settext("x", [])'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
24774490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['popup_settext(1, 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1222: String or List required for argument 2')
24780ad871dcSYegappan Lakshmananenddef
24790ad871dcSYegappan Lakshmanan
24801a71d31bSYegappan Lakshmanandef Test_popup_show()
24814490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['popup_show("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
24824490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['popup_show(true)'], 'E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1')
24831a71d31bSYegappan Lakshmananenddef
24841a71d31bSYegappan Lakshmanan
2485a26f56f6SYegappan Lakshmanandef Test_prevnonblank()
24864490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['prevnonblank(null)'], 'E1013: Argument 1: type mismatch, expected string but got special', 'E1220: String or Number required for argument 1')
2487fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['prevnonblank("")'], 'E1209: Invalid value for a line number')
2488a26f56f6SYegappan Lakshmanan  assert_equal(0, prevnonblank(1))
2489a26f56f6SYegappan Lakshmananenddef
2490a26f56f6SYegappan Lakshmanan
2491a764e73dSYegappan Lakshmanandef Test_printf()
24924490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['printf([1])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1')
2493a764e73dSYegappan Lakshmanan  printf(0x10)->assert_equal('16')
2494a764e73dSYegappan Lakshmanan  assert_equal(" abc", "abc"->printf("%4s"))
2495a764e73dSYegappan Lakshmananenddef
2496a764e73dSYegappan Lakshmanan
2497a26f56f6SYegappan Lakshmanandef Test_prompt_getprompt()
24989ff9c7b9SDominique Pelle  if !has('channel')
24999ff9c7b9SDominique Pelle    CheckFeature channel
25009ff9c7b9SDominique Pelle  else
25014490ec4eSYegappan Lakshmanan    CheckDefAndScriptFailure2(['prompt_getprompt([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1')
2502a26f56f6SYegappan Lakshmanan    assert_equal('', prompt_getprompt('NonExistingBuf'))
250374509239SDominique Pelle  endif
2504a26f56f6SYegappan Lakshmananenddef
2505a26f56f6SYegappan Lakshmanan
25067973de35SYegappan Lakshmanandef Test_prompt_setcallback()
25077973de35SYegappan Lakshmanan  if !has('channel')
25087973de35SYegappan Lakshmanan    CheckFeature channel
25097973de35SYegappan Lakshmanan  else
25104490ec4eSYegappan Lakshmanan    CheckDefAndScriptFailure2(['prompt_setcallback(true, "1")'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1')
25117973de35SYegappan Lakshmanan  endif
25127973de35SYegappan Lakshmananenddef
25137973de35SYegappan Lakshmanan
25147973de35SYegappan Lakshmanandef Test_prompt_setinterrupt()
25157973de35SYegappan Lakshmanan  if !has('channel')
25167973de35SYegappan Lakshmanan    CheckFeature channel
25177973de35SYegappan Lakshmanan  else
25184490ec4eSYegappan Lakshmanan    CheckDefAndScriptFailure2(['prompt_setinterrupt(true, "1")'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1')
25197973de35SYegappan Lakshmanan  endif
25207973de35SYegappan Lakshmananenddef
25217973de35SYegappan Lakshmanan
2522a9a7c0c6SYegappan Lakshmanandef Test_prompt_setprompt()
2523a9a7c0c6SYegappan Lakshmanan  if !has('channel')
2524a9a7c0c6SYegappan Lakshmanan    CheckFeature channel
252583494b4aSYegappan Lakshmanan  else
25264490ec4eSYegappan Lakshmanan    CheckDefAndScriptFailure2(['prompt_setprompt([], "p")'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1')
2527a9a7c0c6SYegappan Lakshmanan    CheckDefAndScriptFailure2(['prompt_setprompt(1, [])'], 'E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2')
252883494b4aSYegappan Lakshmanan  endif
252983494b4aSYegappan Lakshmananenddef
253083494b4aSYegappan Lakshmanan
253183494b4aSYegappan Lakshmanandef Test_prop_add()
253283494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['prop_add("a", 2, {})'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
253383494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['prop_add(1, "b", {})'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
253483494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['prop_add(1, 2, [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3')
253583494b4aSYegappan Lakshmananenddef
253683494b4aSYegappan Lakshmanan
2537ccfb7c67SYegappan Lakshmanandef Test_prop_add_list()
2538ccfb7c67SYegappan Lakshmanan  CheckDefAndScriptFailure2(['prop_add_list([], [])'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1')
2539ccfb7c67SYegappan Lakshmanan  CheckDefAndScriptFailure2(['prop_add_list({}, {})'], 'E1013: Argument 2: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 2')
2540ccfb7c67SYegappan Lakshmananenddef
2541ccfb7c67SYegappan Lakshmanan
254283494b4aSYegappan Lakshmanandef Test_prop_clear()
254383494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['prop_clear("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
254483494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['prop_clear(1, "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
254583494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['prop_clear(1, 2, [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3')
2546a9a7c0c6SYegappan Lakshmananenddef
2547a9a7c0c6SYegappan Lakshmanan
25485b73992dSYegappan Lakshmanandef Test_prop_find()
25494490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['prop_find([1, 2])'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 1')
25504490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['prop_find([1, 2], "k")'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 1')
25514490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['prop_find({"a": 10}, ["a"])'], 'E1013: Argument 2: type mismatch, expected string but got list<string>', 'E1174: String required for argument 2')
2552820d5525SYegappan Lakshmanan  assert_fails("prop_find({}, '')", 'E474:')
25535b73992dSYegappan Lakshmananenddef
25545b73992dSYegappan Lakshmanan
25551a71d31bSYegappan Lakshmanandef Test_prop_list()
25561a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['prop_list("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
25571a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['prop_list(1, [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2')
25581a71d31bSYegappan Lakshmananenddef
25591a71d31bSYegappan Lakshmanan
256083494b4aSYegappan Lakshmanandef Test_prop_remove()
256183494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['prop_remove([])'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1')
256283494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['prop_remove({}, "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
256383494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['prop_remove({}, 1, "b")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
256483494b4aSYegappan Lakshmananenddef
256583494b4aSYegappan Lakshmanan
25665b73992dSYegappan Lakshmanandef Test_prop_type_add()
25674490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['prop_type_add({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1')
25684490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['prop_type_add("a", "b")'], 'E1013: Argument 2: type mismatch, expected dict<any> but got string', 'E1206: Dictionary required for argument 2')
2569820d5525SYegappan Lakshmanan  assert_fails("prop_type_add('', {highlight: 'Search'})", 'E474:')
25705b73992dSYegappan Lakshmananenddef
25715b73992dSYegappan Lakshmanan
25725b73992dSYegappan Lakshmanandef Test_prop_type_change()
25734490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['prop_type_change({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1')
25744490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['prop_type_change("a", "b")'], 'E1013: Argument 2: type mismatch, expected dict<any> but got string', 'E1206: Dictionary required for argument 2')
2575820d5525SYegappan Lakshmanan  assert_fails("prop_type_change('', {highlight: 'Search'})", 'E474:')
25765b73992dSYegappan Lakshmananenddef
25775b73992dSYegappan Lakshmanan
25785b73992dSYegappan Lakshmanandef Test_prop_type_delete()
25794490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['prop_type_delete({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1')
25804490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['prop_type_delete({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1')
25814490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['prop_type_delete("a", "b")'], 'E1013: Argument 2: type mismatch, expected dict<any> but got string', 'E1206: Dictionary required for argument 2')
2582820d5525SYegappan Lakshmanan  assert_fails("prop_type_delete('')", 'E474:')
25835b73992dSYegappan Lakshmananenddef
25845b73992dSYegappan Lakshmanan
25855b73992dSYegappan Lakshmanandef Test_prop_type_get()
25864490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['prop_type_get({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1')
25874490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['prop_type_get({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1')
25884490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['prop_type_get("a", "b")'], 'E1013: Argument 2: type mismatch, expected dict<any> but got string', 'E1206: Dictionary required for argument 2')
2589820d5525SYegappan Lakshmanan  assert_fails("prop_type_get('')", 'E474:')
25905b73992dSYegappan Lakshmananenddef
25915b73992dSYegappan Lakshmanan
25921a71d31bSYegappan Lakshmanandef Test_prop_type_list()
25934490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['prop_type_list(["a"])'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<string>', 'E1206: Dictionary required for argument 1')
25944490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['prop_type_list(2)'], 'E1013: Argument 1: type mismatch, expected dict<any> but got number', 'E1206: Dictionary required for argument 1')
25951a71d31bSYegappan Lakshmananenddef
25961a71d31bSYegappan Lakshmanan
25971a71d31bSYegappan Lakshmanandef Test_py3eval()
25981a71d31bSYegappan Lakshmanan  if !has('python3')
25991a71d31bSYegappan Lakshmanan    CheckFeature python3
26001a71d31bSYegappan Lakshmanan  endif
26014490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['py3eval([2])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1')
26021a71d31bSYegappan Lakshmananenddef
26031a71d31bSYegappan Lakshmanan
26041a71d31bSYegappan Lakshmanandef Test_pyeval()
26051a71d31bSYegappan Lakshmanan  if !has('python')
26061a71d31bSYegappan Lakshmanan    CheckFeature python
26071a71d31bSYegappan Lakshmanan  endif
26084490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['pyeval([2])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1')
26091a71d31bSYegappan Lakshmananenddef
26101a71d31bSYegappan Lakshmanan
26111a71d31bSYegappan Lakshmanandef Test_pyxeval()
26121a71d31bSYegappan Lakshmanan  if !has('python') && !has('python3')
26131a71d31bSYegappan Lakshmanan    CheckFeature python
26141a71d31bSYegappan Lakshmanan  endif
26154490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['pyxeval([2])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1')
26161a71d31bSYegappan Lakshmananenddef
26171a71d31bSYegappan Lakshmanan
2618a26f56f6SYegappan Lakshmanandef Test_rand()
26194490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['rand(10)'], 'E1013: Argument 1: type mismatch, expected list<number> but got number', 'E1211: List required for argument 1')
2620a26f56f6SYegappan Lakshmanan  CheckDefFailure(['rand(["a"])'], 'E1013: Argument 1: type mismatch, expected list<number> but got list<string>')
2621a26f56f6SYegappan Lakshmanan  assert_true(rand() >= 0)
2622a26f56f6SYegappan Lakshmanan  assert_true(rand(srand()) >= 0)
2623a26f56f6SYegappan Lakshmananenddef
2624a26f56f6SYegappan Lakshmanan
26255b73992dSYegappan Lakshmanandef Test_range()
26264490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['range("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
26274490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['range(10, "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
26284490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['range(10, 20, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
26295b73992dSYegappan Lakshmananenddef
26305b73992dSYegappan Lakshmanan
263194738d8fSBram Moolenaardef Test_readdir()
26322949cfdbSBram Moolenaar  eval expand('sautest')->readdir((e) => e[0] !=# '.')
26332949cfdbSBram Moolenaar  eval expand('sautest')->readdirex((e) => e.name[0] !=# '.')
26345bca906bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['readdir(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1')
26355bca906bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['readdir("a", "1", [3])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3')
2636fc3b7750SYegappan Lakshmanan  if has('unix')
2637fc3b7750SYegappan Lakshmanan    # only fails on Unix-like systems
2638fc3b7750SYegappan Lakshmanan    assert_fails('readdir("")', 'E484: Can''t open file')
2639fc3b7750SYegappan Lakshmanan  endif
26405bca906bSYegappan Lakshmananenddef
26415bca906bSYegappan Lakshmanan
26425bca906bSYegappan Lakshmanandef Test_readdirex()
26435bca906bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['readdirex(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1')
26445bca906bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['readdirex("a", "1", [3])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3')
2645fc3b7750SYegappan Lakshmanan  if has('unix')
2646fc3b7750SYegappan Lakshmanan    # only fails on Unix-like systems
2647fc3b7750SYegappan Lakshmanan    assert_fails('readdirex("")', 'E484: Can''t open file')
2648fc3b7750SYegappan Lakshmanan  endif
264994738d8fSBram Moolenaarenddef
265094738d8fSBram Moolenaar
2651c423ad77SBram Moolenaardef Test_readblob()
2652c423ad77SBram Moolenaar  var blob = 0z12341234
2653c423ad77SBram Moolenaar  writefile(blob, 'Xreadblob')
2654c423ad77SBram Moolenaar  var read: blob = readblob('Xreadblob')
2655c423ad77SBram Moolenaar  assert_equal(blob, read)
2656c423ad77SBram Moolenaar
2657c423ad77SBram Moolenaar  var lines =<< trim END
2658c423ad77SBram Moolenaar      var read: list<string> = readblob('Xreadblob')
2659c423ad77SBram Moolenaar  END
2660c423ad77SBram Moolenaar  CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected list<string> but got blob', 1)
2661fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['readblob("")'], 'E484: Can''t open file <empty>')
2662c423ad77SBram Moolenaar  delete('Xreadblob')
2663c423ad77SBram Moolenaarenddef
2664c423ad77SBram Moolenaar
2665c423ad77SBram Moolenaardef Test_readfile()
2666c423ad77SBram Moolenaar  var text = ['aaa', 'bbb', 'ccc']
2667c423ad77SBram Moolenaar  writefile(text, 'Xreadfile')
2668c423ad77SBram Moolenaar  var read: list<string> = readfile('Xreadfile')
2669c423ad77SBram Moolenaar  assert_equal(text, read)
2670c423ad77SBram Moolenaar
2671c423ad77SBram Moolenaar  var lines =<< trim END
2672c423ad77SBram Moolenaar      var read: dict<string> = readfile('Xreadfile')
2673c423ad77SBram Moolenaar  END
2674c423ad77SBram Moolenaar  CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected dict<string> but got list<string>', 1)
2675c423ad77SBram Moolenaar  delete('Xreadfile')
26765b73992dSYegappan Lakshmanan
26774490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['readfile("a", 0z10)'], 'E1013: Argument 2: type mismatch, expected string but got blob', 'E1174: String required for argument 2')
26784490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['readfile("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
2679f8dbd586SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['readfile("")'], 'E1175: Non-empty string required for argument 1')
2680c423ad77SBram Moolenaarenddef
2681c423ad77SBram Moolenaar
26820ad871dcSYegappan Lakshmanandef Test_reduce()
26830ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['reduce({a: 10}, "1")'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<number>', 'E897: List or Blob required')
26840ad871dcSYegappan Lakshmanan  assert_equal(6, [1, 2, 3]->reduce((r, c) => r + c, 0))
26850ad871dcSYegappan Lakshmanan  assert_equal(11, 0z0506->reduce((r, c) => r + c, 0))
26860ad871dcSYegappan Lakshmananenddef
26870ad871dcSYegappan Lakshmanan
2688a26f56f6SYegappan Lakshmanandef Test_reltime()
2689c816a2c2SBram Moolenaar  CheckFeature reltime
2690c816a2c2SBram Moolenaar
2691c816a2c2SBram Moolenaar  CheckDefExecAndScriptFailure(['[]->reltime()'], 'E474:')
2692c816a2c2SBram Moolenaar  CheckDefExecAndScriptFailure(['[]->reltime([])'], 'E474:')
2693c816a2c2SBram Moolenaar
26944490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['reltime("x")'], 'E1013: Argument 1: type mismatch, expected list<number> but got string', 'E1211: List required for argument 1')
2695a26f56f6SYegappan Lakshmanan  CheckDefFailure(['reltime(["x", "y"])'], 'E1013: Argument 1: type mismatch, expected list<number> but got list<string>')
26964490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['reltime([1, 2], 10)'], 'E1013: Argument 2: type mismatch, expected list<number> but got number', 'E1211: List required for argument 2')
2697a26f56f6SYegappan Lakshmanan  CheckDefFailure(['reltime([1, 2], ["a", "b"])'], 'E1013: Argument 2: type mismatch, expected list<number> but got list<string>')
2698a26f56f6SYegappan Lakshmanan  var start: list<any> = reltime()
2699a26f56f6SYegappan Lakshmanan  assert_true(type(reltime(start)) == v:t_list)
2700a26f56f6SYegappan Lakshmanan  var end: list<any> = reltime()
2701a26f56f6SYegappan Lakshmanan  assert_true(type(reltime(start, end)) == v:t_list)
2702a26f56f6SYegappan Lakshmananenddef
2703a26f56f6SYegappan Lakshmanan
2704a26f56f6SYegappan Lakshmanandef Test_reltimefloat()
2705c816a2c2SBram Moolenaar  CheckFeature reltime
2706c816a2c2SBram Moolenaar
2707c816a2c2SBram Moolenaar  CheckDefExecAndScriptFailure(['[]->reltimefloat()'], 'E474:')
2708c816a2c2SBram Moolenaar
27094490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['reltimefloat("x")'], 'E1013: Argument 1: type mismatch, expected list<number> but got string', 'E1211: List required for argument 1')
2710a26f56f6SYegappan Lakshmanan  CheckDefFailure(['reltimefloat([1.1])'], 'E1013: Argument 1: type mismatch, expected list<number> but got list<float>')
2711a26f56f6SYegappan Lakshmanan  assert_true(type(reltimefloat(reltime())) == v:t_float)
2712a26f56f6SYegappan Lakshmananenddef
2713a26f56f6SYegappan Lakshmanan
2714a26f56f6SYegappan Lakshmanandef Test_reltimestr()
2715c816a2c2SBram Moolenaar  CheckFeature reltime
2716c816a2c2SBram Moolenaar
2717c816a2c2SBram Moolenaar  CheckDefExecAndScriptFailure(['[]->reltimestr()'], 'E474:')
2718c816a2c2SBram Moolenaar
27194490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['reltimestr(true)'], 'E1013: Argument 1: type mismatch, expected list<number> but got bool', 'E1211: List required for argument 1')
2720a26f56f6SYegappan Lakshmanan  CheckDefFailure(['reltimestr([true])'], 'E1013: Argument 1: type mismatch, expected list<number> but got list<bool>')
2721a26f56f6SYegappan Lakshmanan  assert_true(type(reltimestr(reltime())) == v:t_string)
2722a26f56f6SYegappan Lakshmananenddef
2723a26f56f6SYegappan Lakshmanan
272483494b4aSYegappan Lakshmanandef Test_remote_expr()
272583494b4aSYegappan Lakshmanan  CheckFeature clientserver
272683494b4aSYegappan Lakshmanan  CheckEnv DISPLAY
272783494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['remote_expr(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
272883494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['remote_expr("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
272983494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['remote_expr("a", "b", 3)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3')
273083494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['remote_expr("a", "b", "c", "d")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4')
273151491adfSYegappan Lakshmanan  CheckDefExecAndScriptFailure(['remote_expr("", "")'], 'E241: Unable to send to ')
273283494b4aSYegappan Lakshmananenddef
273383494b4aSYegappan Lakshmanan
2734a26f56f6SYegappan Lakshmanandef Test_remote_foreground()
2735a26f56f6SYegappan Lakshmanan  CheckFeature clientserver
2736a26f56f6SYegappan Lakshmanan  # remote_foreground() doesn't fail on MS-Windows
2737a26f56f6SYegappan Lakshmanan  CheckNotMSWindows
2738d6fa7bd5SBram Moolenaar  CheckEnv DISPLAY
2739d6fa7bd5SBram Moolenaar
27404490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['remote_foreground(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
2741a26f56f6SYegappan Lakshmanan  assert_fails('remote_foreground("NonExistingServer")', 'E241:')
274251491adfSYegappan Lakshmanan  assert_fails('remote_foreground("")', 'E241:')
2743a26f56f6SYegappan Lakshmananenddef
2744a26f56f6SYegappan Lakshmanan
27455b73992dSYegappan Lakshmanandef Test_remote_peek()
27465b73992dSYegappan Lakshmanan  CheckFeature clientserver
27475b73992dSYegappan Lakshmanan  CheckEnv DISPLAY
27484490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['remote_peek(0z10)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1174: String required for argument 1')
27494490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['remote_peek("a5b6c7", [1])'], 'E1013: Argument 2: type mismatch, expected string but got list<number>', 'E1174: String required for argument 2')
2750fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['remote_peek("")'], 'E573: Invalid server id used')
27515b73992dSYegappan Lakshmananenddef
27525b73992dSYegappan Lakshmanan
27531a71d31bSYegappan Lakshmanandef Test_remote_read()
27541a71d31bSYegappan Lakshmanan  CheckFeature clientserver
27551a71d31bSYegappan Lakshmanan  CheckEnv DISPLAY
27561a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['remote_read(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
27571a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['remote_read("a", "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
2758fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['remote_read("")'], 'E573: Invalid server id used')
27591a71d31bSYegappan Lakshmananenddef
27601a71d31bSYegappan Lakshmanan
276183494b4aSYegappan Lakshmanandef Test_remote_send()
276283494b4aSYegappan Lakshmanan  CheckFeature clientserver
276383494b4aSYegappan Lakshmanan  CheckEnv DISPLAY
276483494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['remote_send(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
276583494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['remote_send("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
276683494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['remote_send("a", "b", 3)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3')
276751491adfSYegappan Lakshmanan  assert_fails('remote_send("", "")', 'E241:')
276883494b4aSYegappan Lakshmananenddef
276983494b4aSYegappan Lakshmanan
2770a26f56f6SYegappan Lakshmanandef Test_remote_startserver()
27715b73992dSYegappan Lakshmanan  CheckFeature clientserver
27725b73992dSYegappan Lakshmanan  CheckEnv DISPLAY
27734490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['remote_startserver({})'], 'E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 1')
2774a26f56f6SYegappan Lakshmananenddef
2775a26f56f6SYegappan Lakshmanan
2776885971e2SBram Moolenaardef Test_remove_const_list()
2777885971e2SBram Moolenaar  var l: list<number> = [1, 2, 3, 4]
2778885971e2SBram Moolenaar  assert_equal([1, 2], remove(l, 0, 1))
2779885971e2SBram Moolenaar  assert_equal([3, 4], l)
2780885971e2SBram Moolenaarenddef
2781885971e2SBram Moolenaar
278283494b4aSYegappan Lakshmanandef Test_remove()
278378db17c6SBram Moolenaar  CheckDefAndScriptFailure2(['remove("a", 1)'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1228: List, Dictionary or Blob required for argument 1')
278483494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['remove([], "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
278583494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['remove([], 1, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
27864490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['remove({}, 1.1)'], 'E1013: Argument 2: type mismatch, expected string but got float', 'E1220: String or Number required for argument 2')
278783494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['remove(0z10, "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
278883494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['remove(0z20, 1, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
278983494b4aSYegappan Lakshmanan  var l: any = [1, 2, 3, 4]
279083494b4aSYegappan Lakshmanan  remove(l, 1)
279183494b4aSYegappan Lakshmanan  assert_equal([1, 3, 4], l)
279283494b4aSYegappan Lakshmanan  remove(l, 0, 1)
279383494b4aSYegappan Lakshmanan  assert_equal([4], l)
279483494b4aSYegappan Lakshmanan  var b: any = 0z1234.5678.90
279583494b4aSYegappan Lakshmanan  remove(b, 1)
279683494b4aSYegappan Lakshmanan  assert_equal(0z1256.7890, b)
279783494b4aSYegappan Lakshmanan  remove(b, 1, 2)
279883494b4aSYegappan Lakshmanan  assert_equal(0z1290, b)
279983494b4aSYegappan Lakshmanan  var d: any = {a: 10, b: 20, c: 30}
280083494b4aSYegappan Lakshmanan  remove(d, 'b')
280183494b4aSYegappan Lakshmanan  assert_equal({a: 10, c: 30}, d)
280283494b4aSYegappan Lakshmanan  var d2: any = {1: 'a', 2: 'b', 3: 'c'}
280383494b4aSYegappan Lakshmanan  remove(d2, 2)
280483494b4aSYegappan Lakshmanan  assert_equal({1: 'a', 3: 'c'}, d2)
280583494b4aSYegappan Lakshmananenddef
280683494b4aSYegappan Lakshmanan
280794738d8fSBram Moolenaardef Test_remove_return_type()
2808e0de171eSBram Moolenaar  var l = remove({one: [1, 2], two: [3, 4]}, 'one')
280994738d8fSBram Moolenaar  var res = 0
281094738d8fSBram Moolenaar  for n in l
281194738d8fSBram Moolenaar    res += n
281294738d8fSBram Moolenaar  endfor
281394738d8fSBram Moolenaar  res->assert_equal(3)
281494738d8fSBram Moolenaarenddef
281594738d8fSBram Moolenaar
2816a26f56f6SYegappan Lakshmanandef Test_rename()
28174490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['rename(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
28184490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['rename("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
2819f8dbd586SYegappan Lakshmanan  rename('', '')->assert_equal(0)
2820a26f56f6SYegappan Lakshmananenddef
2821a26f56f6SYegappan Lakshmanan
28220ad871dcSYegappan Lakshmanandef Test_repeat()
282378db17c6SBram Moolenaar  CheckDefAndScriptFailure2(['repeat(1.1, 2)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1224: String, Number or List required for argument 1')
282478db17c6SBram Moolenaar  CheckDefAndScriptFailure2(['repeat({a: 10}, 2)'], 'E1013: Argument 1: type mismatch, expected string but got dict<', 'E1224: String, Number or List required for argument 1')
28251780f08bSBram Moolenaar  var lines =<< trim END
28260ad871dcSYegappan Lakshmanan      assert_equal('aaa', repeat('a', 3))
28270ad871dcSYegappan Lakshmanan      assert_equal('111', repeat(1, 3))
28280ad871dcSYegappan Lakshmanan      assert_equal([1, 1, 1], repeat([1], 3))
28291780f08bSBram Moolenaar      var s = '-'
28301780f08bSBram Moolenaar      s ..= repeat(5, 3)
28311780f08bSBram Moolenaar      assert_equal('-555', s)
28321780f08bSBram Moolenaar  END
28331780f08bSBram Moolenaar  CheckDefAndScriptSuccess(lines)
28340ad871dcSYegappan Lakshmananenddef
28350ad871dcSYegappan Lakshmanan
2836a26f56f6SYegappan Lakshmanandef Test_resolve()
28374490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['resolve([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1')
2838a26f56f6SYegappan Lakshmanan  assert_equal('SomeFile', resolve('SomeFile'))
2839f8dbd586SYegappan Lakshmanan  resolve('')->assert_equal('')
2840a26f56f6SYegappan Lakshmananenddef
2841a26f56f6SYegappan Lakshmanan
28425b73992dSYegappan Lakshmanandef Test_reverse()
284378db17c6SBram Moolenaar  CheckDefAndScriptFailure2(['reverse(10)'], 'E1013: Argument 1: type mismatch, expected list<any> but got number', 'E1226: List or Blob required for argument 1')
284478db17c6SBram Moolenaar  CheckDefAndScriptFailure2(['reverse("abc")'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1226: List or Blob required for argument 1')
28455b73992dSYegappan Lakshmananenddef
28465b73992dSYegappan Lakshmanan
284794738d8fSBram Moolenaardef Test_reverse_return_type()
284894738d8fSBram Moolenaar  var l = reverse([1, 2, 3])
284994738d8fSBram Moolenaar  var res = 0
285094738d8fSBram Moolenaar  for n in l
285194738d8fSBram Moolenaar    res += n
285294738d8fSBram Moolenaar  endfor
285394738d8fSBram Moolenaar  res->assert_equal(6)
285494738d8fSBram Moolenaarenddef
285594738d8fSBram Moolenaar
28561a71d31bSYegappan Lakshmanandef Test_rubyeval()
28571a71d31bSYegappan Lakshmanan  if !has('ruby')
28581a71d31bSYegappan Lakshmanan    CheckFeature ruby
28591a71d31bSYegappan Lakshmanan  endif
28604490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['rubyeval([2])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1')
28611a71d31bSYegappan Lakshmananenddef
28621a71d31bSYegappan Lakshmanan
28637237cab8SYegappan Lakshmanandef Test_screenattr()
28644490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['screenattr("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
28654490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['screenattr(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
28667237cab8SYegappan Lakshmananenddef
28677237cab8SYegappan Lakshmanan
28687237cab8SYegappan Lakshmanandef Test_screenchar()
28694490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['screenchar("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
28704490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['screenchar(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
28717237cab8SYegappan Lakshmananenddef
28727237cab8SYegappan Lakshmanan
28737237cab8SYegappan Lakshmanandef Test_screenchars()
28744490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['screenchars("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
28754490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['screenchars(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
28767237cab8SYegappan Lakshmananenddef
28777237cab8SYegappan Lakshmanan
2878a26f56f6SYegappan Lakshmanandef Test_screenpos()
28794490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['screenpos("a", 1, 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
28804490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['screenpos(1, "b", 1)'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
28814490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['screenpos(1, 1, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
2882a26f56f6SYegappan Lakshmanan  assert_equal({col: 1, row: 1, endcol: 1, curscol: 1}, screenpos(1, 1, 1))
2883a26f56f6SYegappan Lakshmananenddef
2884a26f56f6SYegappan Lakshmanan
28857237cab8SYegappan Lakshmanandef Test_screenstring()
28864490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['screenstring("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
28874490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['screenstring(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
28887237cab8SYegappan Lakshmananenddef
28897237cab8SYegappan Lakshmanan
289094738d8fSBram Moolenaardef Test_search()
289194738d8fSBram Moolenaar  new
289294738d8fSBram Moolenaar  setline(1, ['foo', 'bar'])
289394738d8fSBram Moolenaar  var val = 0
289494738d8fSBram Moolenaar  # skip expr returns boolean
28952949cfdbSBram Moolenaar  search('bar', 'W', 0, 0, () => val == 1)->assert_equal(2)
289694738d8fSBram Moolenaar  :1
28972949cfdbSBram Moolenaar  search('bar', 'W', 0, 0, () => val == 0)->assert_equal(0)
289894738d8fSBram Moolenaar  # skip expr returns number, only 0 and 1 are accepted
289994738d8fSBram Moolenaar  :1
29002949cfdbSBram Moolenaar  search('bar', 'W', 0, 0, () => 0)->assert_equal(2)
290194738d8fSBram Moolenaar  :1
29022949cfdbSBram Moolenaar  search('bar', 'W', 0, 0, () => 1)->assert_equal(0)
29032949cfdbSBram Moolenaar  assert_fails("search('bar', '', 0, 0, () => -1)", 'E1023:')
29042949cfdbSBram Moolenaar  assert_fails("search('bar', '', 0, 0, () => -1)", 'E1023:')
2905f06ab6baSBram Moolenaar
2906f06ab6baSBram Moolenaar  setline(1, "find this word")
2907f06ab6baSBram Moolenaar  normal gg
2908f06ab6baSBram Moolenaar  var col = 7
2909f06ab6baSBram Moolenaar  assert_equal(1, search('this', '', 0, 0, 'col(".") > col'))
2910f06ab6baSBram Moolenaar  normal 0
2911f06ab6baSBram Moolenaar  assert_equal([1, 6], searchpos('this', '', 0, 0, 'col(".") > col'))
2912f06ab6baSBram Moolenaar
2913f06ab6baSBram Moolenaar  col = 5
2914f06ab6baSBram Moolenaar  normal 0
2915f06ab6baSBram Moolenaar  assert_equal(0, search('this', '', 0, 0, 'col(".") > col'))
2916f06ab6baSBram Moolenaar  normal 0
2917f06ab6baSBram Moolenaar  assert_equal([0, 0], searchpos('this', '', 0, 0, 'col(".") > col'))
2918f06ab6baSBram Moolenaar  bwipe!
29190ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['search(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
29200ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['search("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
29210ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['search("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
29220ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['search("a", "b", 3, "d")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4')
292394738d8fSBram Moolenaarenddef
292494738d8fSBram Moolenaar
292594738d8fSBram Moolenaardef Test_searchcount()
292694738d8fSBram Moolenaar  new
292794738d8fSBram Moolenaar  setline(1, "foo bar")
292894738d8fSBram Moolenaar  :/foo
2929e0de171eSBram Moolenaar  searchcount({recompute: true})
2930e0de171eSBram Moolenaar      ->assert_equal({
293194738d8fSBram Moolenaar          exact_match: 1,
293294738d8fSBram Moolenaar          current: 1,
293394738d8fSBram Moolenaar          total: 1,
293494738d8fSBram Moolenaar          maxcount: 99,
293594738d8fSBram Moolenaar          incomplete: 0})
293694738d8fSBram Moolenaar  bwipe!
29374490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['searchcount([1])'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 1')
293894738d8fSBram Moolenaarenddef
293994738d8fSBram Moolenaar
294083494b4aSYegappan Lakshmanandef Test_searchdecl()
294183494b4aSYegappan Lakshmanan  searchdecl('blah', true, true)->assert_equal(1)
294283494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['searchdecl(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
294383494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['searchdecl("a", 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2')
294483494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['searchdecl("a", true, 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3')
294583494b4aSYegappan Lakshmananenddef
294683494b4aSYegappan Lakshmanan
2947f18332fbSBram Moolenaardef Test_searchpair()
2948f18332fbSBram Moolenaar  new
2949f18332fbSBram Moolenaar  setline(1, "here { and } there")
2950f06ab6baSBram Moolenaar
2951f18332fbSBram Moolenaar  normal f{
2952f18332fbSBram Moolenaar  var col = 15
2953f18332fbSBram Moolenaar  assert_equal(1, searchpair('{', '', '}', '', 'col(".") > col'))
2954f18332fbSBram Moolenaar  assert_equal(12, col('.'))
2955f06ab6baSBram Moolenaar  normal 0f{
2956f06ab6baSBram Moolenaar  assert_equal([1, 12], searchpairpos('{', '', '}', '', 'col(".") > col'))
2957f06ab6baSBram Moolenaar
2958f18332fbSBram Moolenaar  col = 8
2959f18332fbSBram Moolenaar  normal 0f{
2960f18332fbSBram Moolenaar  assert_equal(0, searchpair('{', '', '}', '', 'col(".") > col'))
2961f18332fbSBram Moolenaar  assert_equal(6, col('.'))
2962f06ab6baSBram Moolenaar  normal 0f{
2963f06ab6baSBram Moolenaar  assert_equal([0, 0], searchpairpos('{', '', '}', '', 'col(".") > col'))
2964f06ab6baSBram Moolenaar
2965f8dbd586SYegappan Lakshmanan  # searchpair with empty strings
2966f8dbd586SYegappan Lakshmanan  normal 8|
2967f8dbd586SYegappan Lakshmanan  assert_equal(0, searchpair('', '', ''))
2968f8dbd586SYegappan Lakshmanan  assert_equal([0, 0], searchpairpos('', '', ''))
2969f8dbd586SYegappan Lakshmanan
2970ff65288aSBram Moolenaar  var lines =<< trim END
2971ff65288aSBram Moolenaar      vim9script
2972ff65288aSBram Moolenaar      setline(1, '()')
2973ff65288aSBram Moolenaar      normal gg
2974ff65288aSBram Moolenaar      def Fail()
2975ff65288aSBram Moolenaar        try
2976ff65288aSBram Moolenaar          searchpairpos('(', '', ')', 'nW', '[0]->map("")')
2977ff65288aSBram Moolenaar        catch
2978cbe178e3SBram Moolenaar          g:caught = 'yes'
2979ff65288aSBram Moolenaar        endtry
2980ff65288aSBram Moolenaar      enddef
2981ff65288aSBram Moolenaar      Fail()
2982ff65288aSBram Moolenaar  END
2983cbe178e3SBram Moolenaar  CheckScriptSuccess(lines)
2984cbe178e3SBram Moolenaar  assert_equal('yes', g:caught)
2985cbe178e3SBram Moolenaar  unlet g:caught
29865bca906bSYegappan Lakshmanan  bwipe!
29875a234eb1SBram Moolenaar
29885a234eb1SBram Moolenaar  lines =<< trim END
2989dd0b287cSBram Moolenaar      echo searchpair("a", "b", "c", "d", "f", 33)
29905a234eb1SBram Moolenaar  END
2991dd0b287cSBram Moolenaar  CheckDefAndScriptFailure2(lines, 'E1001: Variable not found: f', 'E475: Invalid argument: d')
2992dd0b287cSBram Moolenaar
29937973de35SYegappan Lakshmanan  CheckDefAndScriptFailure2(['searchpair(1, "b", "c")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
29947973de35SYegappan Lakshmanan  CheckDefAndScriptFailure2(['searchpair("a", 2, "c")'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
29957973de35SYegappan Lakshmanan  CheckDefAndScriptFailure2(['searchpair("a", "b", 3)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3')
29967973de35SYegappan Lakshmanan  CheckDefAndScriptFailure2(['searchpair("a", "b", "c", 4)'], 'E1013: Argument 4: type mismatch, expected string but got number', 'E1174: String required for argument 4')
29975bca906bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['searchpair("a", "b", "c", "r", "1", "f")'], 'E1013: Argument 6: type mismatch, expected number but got string', 'E1210: Number required for argument 6')
29985bca906bSYegappan Lakshmanan  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')
2999f18332fbSBram Moolenaarenddef
3000f18332fbSBram Moolenaar
30010ad871dcSYegappan Lakshmanandef Test_searchpos()
30020ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['searchpos(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
30030ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['searchpos("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
30040ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['searchpos("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
30050ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['searchpos("a", "b", 3, "d")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4')
30060ad871dcSYegappan Lakshmananenddef
30070ad871dcSYegappan Lakshmanan
30085b73992dSYegappan Lakshmanandef Test_server2client()
30095b73992dSYegappan Lakshmanan  CheckFeature clientserver
30105b73992dSYegappan Lakshmanan  CheckEnv DISPLAY
30114490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['server2client(10, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
30124490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['server2client("a", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
3013fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['server2client("", "a")'], 'E573: Invalid server id used')
301451491adfSYegappan Lakshmanan  CheckDefExecAndScriptFailure(['server2client("", "")'], 'E573: Invalid server id used')
30155b73992dSYegappan Lakshmananenddef
30165b73992dSYegappan Lakshmanan
301783494b4aSYegappan Lakshmanandef Test_shellescape()
301883494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['shellescape(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
301983494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['shellescape("a", 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2')
3020f8dbd586SYegappan Lakshmanan  if has('unix')
3021f8dbd586SYegappan Lakshmanan    assert_equal("''", shellescape(''))
3022f8dbd586SYegappan Lakshmanan  endif
302383494b4aSYegappan Lakshmananenddef
302483494b4aSYegappan Lakshmanan
302534453208SBram Moolenaardef Test_set_get_bufline()
302634453208SBram Moolenaar  # similar to Test_setbufline_getbufline()
302734453208SBram Moolenaar  var lines =<< trim END
302834453208SBram Moolenaar      new
302934453208SBram Moolenaar      var b = bufnr('%')
303034453208SBram Moolenaar      hide
303134453208SBram Moolenaar      assert_equal(0, setbufline(b, 1, ['foo', 'bar']))
303234453208SBram Moolenaar      assert_equal(['foo'], getbufline(b, 1))
303334453208SBram Moolenaar      assert_equal(['bar'], getbufline(b, '$'))
303434453208SBram Moolenaar      assert_equal(['foo', 'bar'], getbufline(b, 1, 2))
303534453208SBram Moolenaar      exe "bd!" b
303634453208SBram Moolenaar      assert_equal([], getbufline(b, 1, 2))
303734453208SBram Moolenaar
303834453208SBram Moolenaar      split Xtest
303934453208SBram Moolenaar      setline(1, ['a', 'b', 'c'])
304034453208SBram Moolenaar      b = bufnr('%')
304134453208SBram Moolenaar      wincmd w
304234453208SBram Moolenaar
304334453208SBram Moolenaar      assert_equal(1, setbufline(b, 5, 'x'))
304434453208SBram Moolenaar      assert_equal(1, setbufline(b, 5, ['x']))
304534453208SBram Moolenaar      assert_equal(1, setbufline(b, 5, []))
304634453208SBram Moolenaar      assert_equal(1, setbufline(b, 5, test_null_list()))
304734453208SBram Moolenaar
304834453208SBram Moolenaar      assert_equal(1, 'x'->setbufline(bufnr('$') + 1, 1))
304934453208SBram Moolenaar      assert_equal(1, ['x']->setbufline(bufnr('$') + 1, 1))
305034453208SBram Moolenaar      assert_equal(1, []->setbufline(bufnr('$') + 1, 1))
305134453208SBram Moolenaar      assert_equal(1, test_null_list()->setbufline(bufnr('$') + 1, 1))
305234453208SBram Moolenaar
305334453208SBram Moolenaar      assert_equal(['a', 'b', 'c'], getbufline(b, 1, '$'))
305434453208SBram Moolenaar
305534453208SBram Moolenaar      assert_equal(0, setbufline(b, 4, ['d', 'e']))
305634453208SBram Moolenaar      assert_equal(['c'], b->getbufline(3))
305734453208SBram Moolenaar      assert_equal(['d'], getbufline(b, 4))
305834453208SBram Moolenaar      assert_equal(['e'], getbufline(b, 5))
305934453208SBram Moolenaar      assert_equal([], getbufline(b, 6))
306034453208SBram Moolenaar      assert_equal([], getbufline(b, 2, 1))
306134453208SBram Moolenaar
306200385114SBram Moolenaar      if has('job')
30631328bde9SBram Moolenaar        setbufline(b, 2, [function('eval'), {key: 123}, string(test_null_job())])
306434453208SBram Moolenaar        assert_equal(["function('eval')",
306534453208SBram Moolenaar                        "{'key': 123}",
306634453208SBram Moolenaar                        "no process"],
306734453208SBram Moolenaar                        getbufline(b, 2, 4))
306800385114SBram Moolenaar      endif
306934453208SBram Moolenaar
307034453208SBram Moolenaar      exe 'bwipe! ' .. b
307134453208SBram Moolenaar  END
307234453208SBram Moolenaar  CheckDefAndScriptSuccess(lines)
307334453208SBram Moolenaarenddef
307434453208SBram Moolenaar
307594738d8fSBram Moolenaardef Test_setbufvar()
307694738d8fSBram Moolenaar  setbufvar(bufnr('%'), '&syntax', 'vim')
307794738d8fSBram Moolenaar  &syntax->assert_equal('vim')
307894738d8fSBram Moolenaar  setbufvar(bufnr('%'), '&ts', 16)
307994738d8fSBram Moolenaar  &ts->assert_equal(16)
308031a201a0SBram Moolenaar  setbufvar(bufnr('%'), '&ai', true)
308131a201a0SBram Moolenaar  &ai->assert_equal(true)
308231a201a0SBram Moolenaar  setbufvar(bufnr('%'), '&ft', 'filetype')
308331a201a0SBram Moolenaar  &ft->assert_equal('filetype')
308431a201a0SBram Moolenaar
308594738d8fSBram Moolenaar  settabwinvar(1, 1, '&syntax', 'vam')
308694738d8fSBram Moolenaar  &syntax->assert_equal('vam')
308794738d8fSBram Moolenaar  settabwinvar(1, 1, '&ts', 15)
308894738d8fSBram Moolenaar  &ts->assert_equal(15)
308994738d8fSBram Moolenaar  setlocal ts=8
3090b0d8182fSBram Moolenaar  settabwinvar(1, 1, '&list', false)
3091b0d8182fSBram Moolenaar  &list->assert_equal(false)
309231a201a0SBram Moolenaar  settabwinvar(1, 1, '&list', true)
309331a201a0SBram Moolenaar  &list->assert_equal(true)
309431a201a0SBram Moolenaar  setlocal list&
309594738d8fSBram Moolenaar
309694738d8fSBram Moolenaar  setbufvar('%', 'myvar', 123)
309794738d8fSBram Moolenaar  getbufvar('%', 'myvar')->assert_equal(123)
30987973de35SYegappan Lakshmanan
30994490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setbufvar(true, "v", 3)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1')
31007973de35SYegappan Lakshmanan  CheckDefAndScriptFailure2(['setbufvar(1, 2, 3)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
3101fc3b7750SYegappan Lakshmanan  assert_fails('setbufvar("%", "", 10)', 'E461: Illegal variable name')
310294738d8fSBram Moolenaarenddef
310394738d8fSBram Moolenaar
31041a71d31bSYegappan Lakshmanandef Test_setbufline()
31051a71d31bSYegappan Lakshmanan  new
31061a71d31bSYegappan Lakshmanan  var bnum = bufnr('%')
31071a71d31bSYegappan Lakshmanan  :wincmd w
31081a71d31bSYegappan Lakshmanan  setbufline(bnum, 1, range(1, 3))
31091a71d31bSYegappan Lakshmanan  setbufline(bnum, 4, 'one')
31101a71d31bSYegappan Lakshmanan  setbufline(bnum, 5, 10)
31111a71d31bSYegappan Lakshmanan  setbufline(bnum, 6, ['two', 11])
31121a71d31bSYegappan Lakshmanan  assert_equal(['1', '2', '3', 'one', '10', 'two', '11'], getbufline(bnum, 1, '$'))
31134490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setbufline([1], 1, "x")'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1')
31144490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setbufline(1, [1], "x")'], 'E1013: Argument 2: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 2')
311578db17c6SBram Moolenaar  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')
31161a71d31bSYegappan Lakshmanan  bnum->bufwinid()->win_gotoid()
311751491adfSYegappan Lakshmanan  setbufline('', 1, 'nombres')
311851491adfSYegappan Lakshmanan  getline(1)->assert_equal('nombres')
31191a71d31bSYegappan Lakshmanan  bw!
31201a71d31bSYegappan Lakshmananenddef
31211a71d31bSYegappan Lakshmanan
31221a71d31bSYegappan Lakshmanandef Test_setcellwidths()
31234490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setcellwidths(1)'], 'E1013: Argument 1: type mismatch, expected list<any> but got number', 'E1211: List required for argument 1')
31244490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setcellwidths({"a": 10})'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<number>', 'E1211: List required for argument 1')
31251a71d31bSYegappan Lakshmananenddef
31261a71d31bSYegappan Lakshmanan
312783494b4aSYegappan Lakshmanandef Test_setcharpos()
312883494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setcharpos(1, [])'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
312983494b4aSYegappan Lakshmanan  CheckDefFailure(['setcharpos(".", ["a"])'], 'E1013: Argument 2: type mismatch, expected list<number> but got list<string>')
313083494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setcharpos(".", 1)'], 'E1013: Argument 2: type mismatch, expected list<number> but got number', 'E1211: List required for argument 2')
3131fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['setcharpos("", [0, 1, 1, 1])'], 'E474: Invalid argument')
313283494b4aSYegappan Lakshmananenddef
313383494b4aSYegappan Lakshmanan
313483494b4aSYegappan Lakshmanandef Test_setcharsearch()
31354490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setcharsearch("x")'], 'E1013: Argument 1: type mismatch, expected dict<any> but got string', 'E1206: Dictionary required for argument 1')
31364490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setcharsearch([])'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1')
313783494b4aSYegappan Lakshmanan  var d: dict<any> = {char: 'x', forward: 1, until: 1}
313883494b4aSYegappan Lakshmanan  setcharsearch(d)
313983494b4aSYegappan Lakshmanan  assert_equal(d, getcharsearch())
314083494b4aSYegappan Lakshmananenddef
314183494b4aSYegappan Lakshmanan
314283494b4aSYegappan Lakshmanandef Test_setcmdpos()
31434490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setcmdpos("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
314483494b4aSYegappan Lakshmananenddef
314583494b4aSYegappan Lakshmanan
314683494b4aSYegappan Lakshmanandef Test_setcursorcharpos()
314778db17c6SBram Moolenaar  CheckDefAndScriptFailure2(['setcursorcharpos(0z10, 1)'], 'E1013: Argument 1: type mismatch, expected number but got blob', 'E1224: String, Number or List required for argument 1')
314883494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setcursorcharpos(1, "2")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
314983494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setcursorcharpos(1, 2, "3")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
3150fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['setcursorcharpos("", 10)'], 'E1209: Invalid value for a line number')
315183494b4aSYegappan Lakshmananenddef
315283494b4aSYegappan Lakshmanan
3153a764e73dSYegappan Lakshmanandef Test_setenv()
3154a764e73dSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setenv(1, 2)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
3155f8dbd586SYegappan Lakshmanan  assert_equal(0, setenv('', ''))
3156f8dbd586SYegappan Lakshmanan  assert_equal(0, setenv('', v:null))
3157a764e73dSYegappan Lakshmananenddef
3158a764e73dSYegappan Lakshmanan
315983494b4aSYegappan Lakshmanandef Test_setfperm()
31604490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setfperm(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
31614490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setfperm("a", 0z10)'], 'E1013: Argument 2: type mismatch, expected string but got blob', 'E1174: String required for argument 2')
3162fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['setfperm("Xfile", "")'], 'E475: Invalid argument')
3163f8dbd586SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['setfperm("", "")'], 'E475: Invalid argument')
3164f8dbd586SYegappan Lakshmanan  assert_equal(0, setfperm('', 'rw-r--r--'))
316583494b4aSYegappan Lakshmananenddef
316683494b4aSYegappan Lakshmanan
3167c72bdd28SYegappan Lakshmanandef Test_setline()
3168c72bdd28SYegappan Lakshmanan  new
3169c72bdd28SYegappan Lakshmanan  setline(1, range(1, 4))
3170c72bdd28SYegappan Lakshmanan  assert_equal(['1', '2', '3', '4'], getline(1, '$'))
3171c72bdd28SYegappan Lakshmanan  setline(1, ['a', 'b', 'c', 'd'])
3172c72bdd28SYegappan Lakshmanan  assert_equal(['a', 'b', 'c', 'd'], getline(1, '$'))
3173c72bdd28SYegappan Lakshmanan  setline(1, 'one')
3174c72bdd28SYegappan Lakshmanan  assert_equal(['one', 'b', 'c', 'd'], getline(1, '$'))
31751a71d31bSYegappan Lakshmanan  setline(1, 10)
31761a71d31bSYegappan Lakshmanan  assert_equal(['10', 'b', 'c', 'd'], getline(1, '$'))
31774490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setline([1], "x")'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1')
3178fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['setline("", "x")'], 'E1209: Invalid value for a line number')
3179c72bdd28SYegappan Lakshmanan  bw!
3180c72bdd28SYegappan Lakshmananenddef
3181c72bdd28SYegappan Lakshmanan
318294738d8fSBram Moolenaardef Test_setloclist()
3183e0de171eSBram Moolenaar  var items = [{filename: '/tmp/file', lnum: 1, valid: true}]
3184e0de171eSBram Moolenaar  var what = {items: items}
318594738d8fSBram Moolenaar  setqflist([], ' ', what)
318694738d8fSBram Moolenaar  setloclist(0, [], ' ', what)
318783494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setloclist("1", [])'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
318883494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setloclist(1, 2)'], 'E1013: Argument 2: type mismatch, expected list<any> but got number', 'E1211: List required for argument 2')
318983494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setloclist(1, [], 3)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3')
319083494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setloclist(1, [], "a", [])'], 'E1013: Argument 4: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 4')
319183494b4aSYegappan Lakshmananenddef
319283494b4aSYegappan Lakshmanan
319383494b4aSYegappan Lakshmanandef Test_setmatches()
319483494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setmatches({})'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 1')
319583494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setmatches([], "1")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
319683494b4aSYegappan Lakshmananenddef
319783494b4aSYegappan Lakshmanan
319883494b4aSYegappan Lakshmanandef Test_setpos()
319983494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setpos(1, [])'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
320083494b4aSYegappan Lakshmanan  CheckDefFailure(['setpos(".", ["a"])'], 'E1013: Argument 2: type mismatch, expected list<number> but got list<string>')
320183494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setpos(".", 1)'], 'E1013: Argument 2: type mismatch, expected list<number> but got number', 'E1211: List required for argument 2')
3202fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['setpos("", [0, 1, 1, 1])'], 'E474: Invalid argument')
320383494b4aSYegappan Lakshmananenddef
320483494b4aSYegappan Lakshmanan
320583494b4aSYegappan Lakshmanandef Test_setqflist()
320683494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setqflist(1, "")'], 'E1013: Argument 1: type mismatch, expected list<any> but got number', 'E1211: List required for argument 1')
320783494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setqflist([], 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
320883494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setqflist([], "", [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3')
320994738d8fSBram Moolenaarenddef
321094738d8fSBram Moolenaar
321194738d8fSBram Moolenaardef Test_setreg()
321294738d8fSBram Moolenaar  setreg('a', ['aaa', 'bbb', 'ccc'])
321394738d8fSBram Moolenaar  var reginfo = getreginfo('a')
321494738d8fSBram Moolenaar  setreg('a', reginfo)
321594738d8fSBram Moolenaar  getreginfo('a')->assert_equal(reginfo)
3216418a29f0SBram Moolenaar  assert_fails('setreg("ab", 0)', 'E1162:')
3217a764e73dSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setreg(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
3218a764e73dSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setreg("a", "b", 3)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3')
3219f8dbd586SYegappan Lakshmanan  setreg('', '1a2b3c')
3220f8dbd586SYegappan Lakshmanan  assert_equal('1a2b3c', @")
322194738d8fSBram Moolenaarenddef
322294738d8fSBram Moolenaar
322383494b4aSYegappan Lakshmanandef Test_settabvar()
322483494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['settabvar("a", "b", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
322583494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['settabvar(1, 2, "c")'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
3226fc3b7750SYegappan Lakshmanan  assert_fails('settabvar(1, "", 10)', 'E461: Illegal variable name')
322783494b4aSYegappan Lakshmananenddef
322883494b4aSYegappan Lakshmanan
322983494b4aSYegappan Lakshmanandef Test_settabwinvar()
323083494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['settabwinvar("a", 2, "c", true)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
323183494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['settabwinvar(1, "b", "c", [])'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
323283494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['settabwinvar(1, 1, 3, {})'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3')
3233fc3b7750SYegappan Lakshmanan  assert_fails('settabwinvar(1, 1, "", 10)', 'E461: Illegal variable name')
323483494b4aSYegappan Lakshmananenddef
323583494b4aSYegappan Lakshmanan
323683494b4aSYegappan Lakshmanandef Test_settagstack()
323783494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['settagstack(true, {})'], 'E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1')
323883494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['settagstack(1, [1])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 2')
323983494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['settagstack(1, {}, 2)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3')
3240f8dbd586SYegappan Lakshmanan  assert_fails('settagstack(1, {}, "")', 'E962: Invalid action')
324183494b4aSYegappan Lakshmananenddef
324283494b4aSYegappan Lakshmanan
324383494b4aSYegappan Lakshmanandef Test_setwinvar()
324483494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setwinvar("a", "b", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
324583494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['setwinvar(1, 2, "c")'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
3246fc3b7750SYegappan Lakshmanan  assert_fails('setwinvar(1, "", 10)', 'E461: Illegal variable name')
324783494b4aSYegappan Lakshmananenddef
324883494b4aSYegappan Lakshmanan
3249a26f56f6SYegappan Lakshmanandef Test_sha256()
32504490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sha256(100)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
32514490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sha256(0zABCD)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1174: String required for argument 1')
3252a26f56f6SYegappan Lakshmanan  assert_equal('ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad', sha256('abc'))
3253f8dbd586SYegappan Lakshmanan  assert_equal('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', sha256(''))
3254a26f56f6SYegappan Lakshmananenddef
3255a26f56f6SYegappan Lakshmanan
32567237cab8SYegappan Lakshmanandef Test_shiftwidth()
32574490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['shiftwidth("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
32585b73992dSYegappan Lakshmananenddef
32595b73992dSYegappan Lakshmanan
32605b73992dSYegappan Lakshmanandef Test_sign_define()
32614490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sign_define({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1222: String or List required for argument 1')
32624490ec4eSYegappan Lakshmanan  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')
32630ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sign_define("a", ["b"])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<string>', 'E1206: Dictionary required for argument 2')
32645b73992dSYegappan Lakshmananenddef
32655b73992dSYegappan Lakshmanan
32661a71d31bSYegappan Lakshmanandef Test_sign_getdefined()
32671a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sign_getdefined(["x"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1')
32681a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sign_getdefined(2)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
3269820d5525SYegappan Lakshmanan  sign_getdefined('')->assert_equal([])
32701a71d31bSYegappan Lakshmananenddef
32711a71d31bSYegappan Lakshmanan
327283494b4aSYegappan Lakshmanandef Test_sign_getplaced()
32734490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sign_getplaced(["x"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1220: String or Number required for argument 1')
327483494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sign_getplaced(1, ["a"])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<string>', 'E1206: Dictionary required for argument 2')
327583494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sign_getplaced("a", 1.1)'], 'E1013: Argument 2: type mismatch, expected dict<any> but got float', 'E1206: Dictionary required for argument 2')
327651491adfSYegappan Lakshmanan  CheckDefExecAndScriptFailure(['sign_getplaced(bufnr(), {lnum: ""})'], 'E1030: Using a String as a Number:')
327751491adfSYegappan Lakshmanan  sign_getplaced('')->assert_equal([{signs: [], bufnr: bufnr()}])
327883494b4aSYegappan Lakshmananenddef
327983494b4aSYegappan Lakshmanan
32800ad871dcSYegappan Lakshmanandef Test_sign_jump()
32810ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sign_jump("a", "b", "c")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
32820ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sign_jump(1, 2, 3)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
32834490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sign_jump(1, "b", true)'], 'E1013: Argument 3: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 3')
32840ad871dcSYegappan Lakshmananenddef
32850ad871dcSYegappan Lakshmanan
32860ad871dcSYegappan Lakshmanandef Test_sign_place()
32870ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sign_place("a", "b", "c", "d")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
32880ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sign_place(1, 2, "c", "d")'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
32890ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sign_place(1, "b", 3, "d")'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3')
32904490ec4eSYegappan Lakshmanan  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')
32910ad871dcSYegappan Lakshmanan  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')
329251491adfSYegappan Lakshmanan  CheckDefExecAndScriptFailure(['sign_place(0, "", "MySign", bufnr(), {lnum: ""})'], 'E1209: Invalid value for a line number: ""')
3293820d5525SYegappan Lakshmanan  assert_fails("sign_place(0, '', '', '')", 'E155:')
32940ad871dcSYegappan Lakshmananenddef
32950ad871dcSYegappan Lakshmanan
32961a71d31bSYegappan Lakshmanandef Test_sign_placelist()
32974490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sign_placelist("x")'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1211: List required for argument 1')
32984490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sign_placelist({"a": 10})'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<number>', 'E1211: List required for argument 1')
329951491adfSYegappan Lakshmanan  CheckDefExecAndScriptFailure(['sign_placelist([{"name": "MySign", "buffer": bufnr(), "lnum": ""}])'], 'E1209: Invalid value for a line number: ""')
3300*2a16dc66SYegappan Lakshmanan  assert_fails('sign_placelist([{name: "MySign", buffer: "", lnum: 1}])', 'E155:')
33011a71d31bSYegappan Lakshmananenddef
33021a71d31bSYegappan Lakshmanan
33035b73992dSYegappan Lakshmanandef Test_sign_undefine()
33044490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sign_undefine({})'], 'E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1222: String or List required for argument 1')
33055b73992dSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sign_undefine([1])'], 'E1013: Argument 1: type mismatch, expected list<string> but got list<number>', 'E155: Unknown sign:')
33065b73992dSYegappan Lakshmananenddef
33075b73992dSYegappan Lakshmanan
33085b73992dSYegappan Lakshmanandef Test_sign_unplace()
33094490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sign_unplace({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1')
33104490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sign_unplace({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1')
33114490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sign_unplace("a", ["b"])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<string>', 'E1206: Dictionary required for argument 2')
33127237cab8SYegappan Lakshmananenddef
33137237cab8SYegappan Lakshmanan
33141a71d31bSYegappan Lakshmanandef Test_sign_unplacelist()
33154490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sign_unplacelist("x")'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1211: List required for argument 1')
33164490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sign_unplacelist({"a": 10})'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<number>', 'E1211: List required for argument 1')
33171a71d31bSYegappan Lakshmananenddef
33181a71d31bSYegappan Lakshmanan
3319a26f56f6SYegappan Lakshmanandef Test_simplify()
33204490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['simplify(100)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
3321a26f56f6SYegappan Lakshmanan  call assert_equal('NonExistingFile', simplify('NonExistingFile'))
3322f8dbd586SYegappan Lakshmanan  simplify('')->assert_equal('')
3323a26f56f6SYegappan Lakshmananenddef
3324a26f56f6SYegappan Lakshmanan
33256601b629SBram Moolenaardef Test_slice()
33266601b629SBram Moolenaar  assert_equal('12345', slice('012345', 1))
33276601b629SBram Moolenaar  assert_equal('123', slice('012345', 1, 4))
33286601b629SBram Moolenaar  assert_equal('1234', slice('012345', 1, -1))
33296601b629SBram Moolenaar  assert_equal('1', slice('012345', 1, -4))
33306601b629SBram Moolenaar  assert_equal('', slice('012345', 1, -5))
33316601b629SBram Moolenaar  assert_equal('', slice('012345', 1, -6))
33326601b629SBram Moolenaar
33336601b629SBram Moolenaar  assert_equal([1, 2, 3, 4, 5], slice(range(6), 1))
33346601b629SBram Moolenaar  assert_equal([1, 2, 3], slice(range(6), 1, 4))
33356601b629SBram Moolenaar  assert_equal([1, 2, 3, 4], slice(range(6), 1, -1))
33366601b629SBram Moolenaar  assert_equal([1], slice(range(6), 1, -4))
33376601b629SBram Moolenaar  assert_equal([], slice(range(6), 1, -5))
33386601b629SBram Moolenaar  assert_equal([], slice(range(6), 1, -6))
33396601b629SBram Moolenaar
33406601b629SBram Moolenaar  assert_equal(0z1122334455, slice(0z001122334455, 1))
33416601b629SBram Moolenaar  assert_equal(0z112233, slice(0z001122334455, 1, 4))
33426601b629SBram Moolenaar  assert_equal(0z11223344, slice(0z001122334455, 1, -1))
33436601b629SBram Moolenaar  assert_equal(0z11, slice(0z001122334455, 1, -4))
33446601b629SBram Moolenaar  assert_equal(0z, slice(0z001122334455, 1, -5))
33456601b629SBram Moolenaar  assert_equal(0z, slice(0z001122334455, 1, -6))
334683494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['slice({"a": 10}, 1)'], 'E1013: Argument 1: type mismatch, expected list<any> but got dict<number>', 'E1211: List required for argument 1')
334783494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['slice([1, 2, 3], "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
334883494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['slice("abc", 1, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
33496601b629SBram Moolenaarenddef
33506601b629SBram Moolenaar
335194738d8fSBram Moolenaardef Test_spellsuggest()
335294738d8fSBram Moolenaar  if !has('spell')
33539ff9c7b9SDominique Pelle    CheckFeature spell
335494738d8fSBram Moolenaar  else
335594738d8fSBram Moolenaar    spellsuggest('marrch', 1, true)->assert_equal(['March'])
335694738d8fSBram Moolenaar  endif
335783494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['spellsuggest(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
335883494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['spellsuggest("a", "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
335983494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['spellsuggest("a", 1, 0z01)'], 'E1013: Argument 3: type mismatch, expected bool but got blob', 'E1212: Bool required for argument 3')
3360fc3b7750SYegappan Lakshmanan  spellsuggest('')->assert_equal([])
336194738d8fSBram Moolenaarenddef
336294738d8fSBram Moolenaar
33635bca906bSYegappan Lakshmanandef Test_sound_playevent()
33645bca906bSYegappan Lakshmanan  CheckFeature sound
33655bca906bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sound_playevent(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
33665bca906bSYegappan Lakshmananenddef
33675bca906bSYegappan Lakshmanan
33685bca906bSYegappan Lakshmanandef Test_sound_playfile()
33695bca906bSYegappan Lakshmanan  CheckFeature sound
33705bca906bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sound_playfile(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
33715bca906bSYegappan Lakshmananenddef
33725bca906bSYegappan Lakshmanan
3373a26f56f6SYegappan Lakshmanandef Test_sound_stop()
3374a26f56f6SYegappan Lakshmanan  CheckFeature sound
33754490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sound_stop("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
3376a26f56f6SYegappan Lakshmananenddef
3377a26f56f6SYegappan Lakshmanan
3378a26f56f6SYegappan Lakshmanandef Test_soundfold()
33794490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['soundfold(20)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
3380a26f56f6SYegappan Lakshmanan  assert_equal('abc', soundfold('abc'))
3381f8dbd586SYegappan Lakshmanan  assert_equal('', soundfold(''))
3382a26f56f6SYegappan Lakshmananenddef
3383a26f56f6SYegappan Lakshmanan
338494738d8fSBram Moolenaardef Test_sort_return_type()
338594738d8fSBram Moolenaar  var res: list<number>
338694738d8fSBram Moolenaar  res = [1, 2, 3]->sort()
338794738d8fSBram Moolenaarenddef
338894738d8fSBram Moolenaar
338994738d8fSBram Moolenaardef Test_sort_argument()
339008cf0c0dSBram Moolenaar  var lines =<< trim END
339194738d8fSBram Moolenaar    var res = ['b', 'a', 'c']->sort('i')
339294738d8fSBram Moolenaar    res->assert_equal(['a', 'b', 'c'])
339308cf0c0dSBram Moolenaar
339408cf0c0dSBram Moolenaar    def Compare(a: number, b: number): number
339508cf0c0dSBram Moolenaar      return a - b
339608cf0c0dSBram Moolenaar    enddef
339708cf0c0dSBram Moolenaar    var l = [3, 6, 7, 1, 8, 2, 4, 5]
339808cf0c0dSBram Moolenaar    sort(l, Compare)
339908cf0c0dSBram Moolenaar    assert_equal([1, 2, 3, 4, 5, 6, 7, 8], l)
340008cf0c0dSBram Moolenaar  END
340108cf0c0dSBram Moolenaar  CheckDefAndScriptSuccess(lines)
34020ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sort("a")'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1211: List required for argument 1')
34030ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['sort([1], "", [1])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3')
340494738d8fSBram Moolenaarenddef
340594738d8fSBram Moolenaar
3406a26f56f6SYegappan Lakshmanandef Test_spellbadword()
34074490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['spellbadword(100)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
3408a26f56f6SYegappan Lakshmanan  spellbadword('good')->assert_equal(['', ''])
3409f8dbd586SYegappan Lakshmanan  spellbadword('')->assert_equal(['', ''])
3410a26f56f6SYegappan Lakshmananenddef
3411a26f56f6SYegappan Lakshmanan
341294738d8fSBram Moolenaardef Test_split()
341394738d8fSBram Moolenaar  split('  aa  bb  ', '\W\+', true)->assert_equal(['', 'aa', 'bb', ''])
341483494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['split(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
341583494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['split("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
341683494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['split("a", "b", 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3')
3417f8dbd586SYegappan Lakshmanan  split('')->assert_equal([])
3418f8dbd586SYegappan Lakshmanan  split('', '')->assert_equal([])
341994738d8fSBram Moolenaarenddef
342094738d8fSBram Moolenaar
3421a26f56f6SYegappan Lakshmanandef Test_srand()
34224490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['srand("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
3423a26f56f6SYegappan Lakshmanan  type(srand(100))->assert_equal(v:t_list)
3424a26f56f6SYegappan Lakshmananenddef
3425a26f56f6SYegappan Lakshmanan
3426a26f56f6SYegappan Lakshmanandef Test_state()
34274490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['state({})'], 'E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 1')
3428a26f56f6SYegappan Lakshmanan  assert_equal('', state('a'))
3429a26f56f6SYegappan Lakshmananenddef
3430a26f56f6SYegappan Lakshmanan
3431820d5525SYegappan Lakshmanandef Test_str2float()
343280ad3e25SBram Moolenaar  if !has('float')
34339ff9c7b9SDominique Pelle    CheckFeature float
3434820d5525SYegappan Lakshmanan  else
343580ad3e25SBram Moolenaar    str2float("1.00")->assert_equal(1.00)
343680ad3e25SBram Moolenaar    str2float("2e-2")->assert_equal(0.02)
3437820d5525SYegappan Lakshmanan    str2float('')->assert_equal(0.0)
343880ad3e25SBram Moolenaar
34394490ec4eSYegappan Lakshmanan    CheckDefAndScriptFailure2(['str2float(123)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
344080ad3e25SBram Moolenaar  endif
344180ad3e25SBram Moolenaarenddef
344280ad3e25SBram Moolenaar
3443a9a7c0c6SYegappan Lakshmanandef Test_str2list()
3444a9a7c0c6SYegappan Lakshmanan  CheckDefAndScriptFailure2(['str2list(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
344598c2eaedSBram Moolenaar  CheckDefAndScriptFailure2(['str2list("a", 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2')
3446a9a7c0c6SYegappan Lakshmanan  assert_equal([97], str2list('a'))
3447a9a7c0c6SYegappan Lakshmanan  assert_equal([97], str2list('a', 1))
3448a9a7c0c6SYegappan Lakshmanan  assert_equal([97], str2list('a', true))
3449820d5525SYegappan Lakshmanan  str2list('')->assert_equal([])
3450a9a7c0c6SYegappan Lakshmananenddef
3451a9a7c0c6SYegappan Lakshmanan
345294738d8fSBram Moolenaardef Test_str2nr()
345394738d8fSBram Moolenaar  str2nr("1'000'000", 10, true)->assert_equal(1000000)
3454820d5525SYegappan Lakshmanan  str2nr('')->assert_equal(0)
3455f2b26bcfSBram Moolenaar
34564490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['str2nr(123)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
34574490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['str2nr("123", "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
34584490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['str2nr("123", 10, "x")'], 'E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3')
345994738d8fSBram Moolenaarenddef
346094738d8fSBram Moolenaar
34611a71d31bSYegappan Lakshmanandef Test_strcharlen()
34624490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['strcharlen([1])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1')
34631a71d31bSYegappan Lakshmanan  "abc"->strcharlen()->assert_equal(3)
34641a71d31bSYegappan Lakshmanan  strcharlen(99)->assert_equal(2)
34651a71d31bSYegappan Lakshmananenddef
34661a71d31bSYegappan Lakshmanan
346783494b4aSYegappan Lakshmanandef Test_strcharpart()
346883494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['strcharpart(1, 2)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
346983494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['strcharpart("a", "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
347083494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['strcharpart("a", 1, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
347183494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['strcharpart("a", 1, 1, 2)'], 'E1013: Argument 4: type mismatch, expected bool but got number', 'E1212: Bool required for argument 4')
3472820d5525SYegappan Lakshmanan  strcharpart('', 0)->assert_equal('')
347383494b4aSYegappan Lakshmananenddef
347483494b4aSYegappan Lakshmanan
347594738d8fSBram Moolenaardef Test_strchars()
347694738d8fSBram Moolenaar  strchars("A\u20dd", true)->assert_equal(1)
3477a9a7c0c6SYegappan Lakshmanan  CheckDefAndScriptFailure2(['strchars(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
347898c2eaedSBram Moolenaar  CheckDefAndScriptFailure2(['strchars("a", 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2')
3479a9a7c0c6SYegappan Lakshmanan  assert_equal(3, strchars('abc'))
3480a9a7c0c6SYegappan Lakshmanan  assert_equal(3, strchars('abc', 1))
3481a9a7c0c6SYegappan Lakshmanan  assert_equal(3, strchars('abc', true))
3482820d5525SYegappan Lakshmanan  strchars('')->assert_equal(0)
348394738d8fSBram Moolenaarenddef
348494738d8fSBram Moolenaar
34851a71d31bSYegappan Lakshmanandef Test_strdisplaywidth()
34861a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['strdisplaywidth(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
34871a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['strdisplaywidth("a", "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
3488820d5525SYegappan Lakshmanan  strdisplaywidth('')->assert_equal(0)
34891a71d31bSYegappan Lakshmananenddef
34901a71d31bSYegappan Lakshmanan
34911a71d31bSYegappan Lakshmanandef Test_strftime()
3492820d5525SYegappan Lakshmanan  if exists('*strftime')
34931a71d31bSYegappan Lakshmanan    CheckDefAndScriptFailure2(['strftime(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
34941a71d31bSYegappan Lakshmanan    CheckDefAndScriptFailure2(['strftime("a", "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
3495820d5525SYegappan Lakshmanan    strftime('')->assert_equal('')
3496820d5525SYegappan Lakshmanan  endif
34971a71d31bSYegappan Lakshmananenddef
34981a71d31bSYegappan Lakshmanan
34991a71d31bSYegappan Lakshmanandef Test_strgetchar()
35001a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['strgetchar(1, 1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
35011a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['strgetchar("a", "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
3502820d5525SYegappan Lakshmanan  strgetchar('', 0)->assert_equal(-1)
3503820d5525SYegappan Lakshmanan  strgetchar('', 1)->assert_equal(-1)
35041a71d31bSYegappan Lakshmananenddef
35051a71d31bSYegappan Lakshmanan
35065b73992dSYegappan Lakshmanandef Test_stridx()
35074490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['stridx([1], "b")'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1')
35084490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['stridx("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 2')
35094490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['stridx("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
3510820d5525SYegappan Lakshmanan  stridx('', '')->assert_equal(0)
3511820d5525SYegappan Lakshmanan  stridx('', 'a')->assert_equal(-1)
3512820d5525SYegappan Lakshmanan  stridx('a', '')->assert_equal(0)
35135b73992dSYegappan Lakshmananenddef
35145b73992dSYegappan Lakshmanan
3515a26f56f6SYegappan Lakshmanandef Test_strlen()
35164490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['strlen([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1')
3517a26f56f6SYegappan Lakshmanan  "abc"->strlen()->assert_equal(3)
3518a26f56f6SYegappan Lakshmanan  strlen(99)->assert_equal(2)
3519a26f56f6SYegappan Lakshmananenddef
3520a26f56f6SYegappan Lakshmanan
352183494b4aSYegappan Lakshmanandef Test_strpart()
352283494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['strpart(1, 2)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
352383494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['strpart("a", "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
352483494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['strpart("a", 1, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
352583494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['strpart("a", 1, 1, 2)'], 'E1013: Argument 4: type mismatch, expected bool but got number', 'E1212: Bool required for argument 4')
3526820d5525SYegappan Lakshmanan  strpart('', 0)->assert_equal('')
352783494b4aSYegappan Lakshmananenddef
352883494b4aSYegappan Lakshmanan
3529a26f56f6SYegappan Lakshmanandef Test_strptime()
3530a26f56f6SYegappan Lakshmanan  CheckFunction strptime
3531820d5525SYegappan Lakshmanan  if exists_compiled('*strptime')
35324490ec4eSYegappan Lakshmanan    CheckDefAndScriptFailure2(['strptime(10, "2021")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
35334490ec4eSYegappan Lakshmanan    CheckDefAndScriptFailure2(['strptime("%Y", 2021)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
3534820d5525SYegappan Lakshmanan    assert_true(strptime('%Y', '2021') != 0)
3535820d5525SYegappan Lakshmanan    assert_true(strptime('%Y', '') == 0)
3536820d5525SYegappan Lakshmanan  endif
3537a26f56f6SYegappan Lakshmananenddef
3538a26f56f6SYegappan Lakshmanan
35395b73992dSYegappan Lakshmanandef Test_strridx()
35404490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['strridx([1], "b")'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1')
35414490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['strridx("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 2')
35424490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['strridx("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
3543820d5525SYegappan Lakshmanan  strridx('', '')->assert_equal(0)
3544820d5525SYegappan Lakshmanan  strridx('', 'a')->assert_equal(-1)
3545820d5525SYegappan Lakshmanan  strridx('a', '')->assert_equal(1)
35465b73992dSYegappan Lakshmananenddef
35475b73992dSYegappan Lakshmanan
3548a26f56f6SYegappan Lakshmanandef Test_strtrans()
35494490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['strtrans(20)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
3550a26f56f6SYegappan Lakshmanan  assert_equal('abc', strtrans('abc'))
3551820d5525SYegappan Lakshmanan  strtrans('')->assert_equal('')
3552a26f56f6SYegappan Lakshmananenddef
3553a26f56f6SYegappan Lakshmanan
3554a26f56f6SYegappan Lakshmanandef Test_strwidth()
35554490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['strwidth(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
3556a26f56f6SYegappan Lakshmanan  assert_equal(4, strwidth('abcd'))
3557820d5525SYegappan Lakshmanan  strwidth('')->assert_equal(0)
3558a26f56f6SYegappan Lakshmananenddef
3559a26f56f6SYegappan Lakshmanan
356094738d8fSBram Moolenaardef Test_submatch()
356194738d8fSBram Moolenaar  var pat = 'A\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)'
356275ab91ffSBram Moolenaar  var Rep = () => range(10)->mapnew((_, v) => submatch(v, true))->string()
356394738d8fSBram Moolenaar  var actual = substitute('A123456789', pat, Rep, '')
356494738d8fSBram Moolenaar  var expected = "[['A123456789'], ['1'], ['2'], ['3'], ['4'], ['5'], ['6'], ['7'], ['8'], ['9']]"
356594738d8fSBram Moolenaar  actual->assert_equal(expected)
356683494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['submatch("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
356783494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['submatch(1, "a")'], 'E1013: Argument 2: type mismatch, expected bool but got string', 'E1212: Bool required for argument 2')
356894738d8fSBram Moolenaarenddef
356994738d8fSBram Moolenaar
35701328bde9SBram Moolenaardef Test_substitute()
35711328bde9SBram Moolenaar  var res = substitute('A1234', '\d', 'X', '')
35721328bde9SBram Moolenaar  assert_equal('AX234', res)
35731328bde9SBram Moolenaar
35741328bde9SBram Moolenaar  if has('job')
357507329325SBram Moolenaar    assert_fails('"text"->substitute(".*", () => test_null_job(), "")', 'E908: using an invalid value as a String: job')
357607329325SBram Moolenaar    assert_fails('"text"->substitute(".*", () => test_null_channel(), "")', 'E908: using an invalid value as a String: channel')
35771328bde9SBram Moolenaar  endif
35785bca906bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['substitute(1, "b", "1", "d")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
35795bca906bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['substitute("a", 2, "1", "d")'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
35805bca906bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['substitute("a", "b", "1", 4)'], 'E1013: Argument 4: type mismatch, expected string but got number', 'E1174: String required for argument 4')
3581f8dbd586SYegappan Lakshmanan  substitute('', '', '', '')->assert_equal('')
35821328bde9SBram Moolenaarenddef
35831328bde9SBram Moolenaar
3584a26f56f6SYegappan Lakshmanandef Test_swapinfo()
35854490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['swapinfo({})'], 'E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 1')
3586fc3b7750SYegappan Lakshmanan  call swapinfo('x')->assert_equal({error: 'Cannot open file'})
3587fc3b7750SYegappan Lakshmanan  call swapinfo('')->assert_equal({error: 'Cannot open file'})
3588a26f56f6SYegappan Lakshmananenddef
3589a26f56f6SYegappan Lakshmanan
3590a26f56f6SYegappan Lakshmanandef Test_swapname()
35914490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['swapname([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1')
3592a26f56f6SYegappan Lakshmanan  assert_fails('swapname("NonExistingBuf")', 'E94:')
3593a26f56f6SYegappan Lakshmananenddef
3594a26f56f6SYegappan Lakshmanan
359594738d8fSBram Moolenaardef Test_synID()
359694738d8fSBram Moolenaar  new
359794738d8fSBram Moolenaar  setline(1, "text")
359894738d8fSBram Moolenaar  synID(1, 1, true)->assert_equal(0)
359994738d8fSBram Moolenaar  bwipe!
36004490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['synID(0z10, 1, true)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1')
360183494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['synID("a", true, false)'], 'E1013: Argument 2: type mismatch, expected number but got bool', 'E1210: Number required for argument 2')
360283494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['synID(1, 1, 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3')
3603fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['synID("", 10, true)'], 'E1209: Invalid value for a line number')
360494738d8fSBram Moolenaarenddef
360594738d8fSBram Moolenaar
36067973de35SYegappan Lakshmanandef Test_synIDattr()
36077973de35SYegappan Lakshmanan  CheckDefAndScriptFailure2(['synIDattr("a", "b")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
36087973de35SYegappan Lakshmanan  CheckDefAndScriptFailure2(['synIDattr(1, 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
36097973de35SYegappan Lakshmanan  CheckDefAndScriptFailure2(['synIDattr(1, "b", 3)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3')
3610f8dbd586SYegappan Lakshmanan  synIDattr(1, '', '')->assert_equal('')
36117973de35SYegappan Lakshmananenddef
36127973de35SYegappan Lakshmanan
3613a26f56f6SYegappan Lakshmanandef Test_synIDtrans()
36144490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['synIDtrans("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
3615a26f56f6SYegappan Lakshmananenddef
3616a26f56f6SYegappan Lakshmanan
3617a9a7c0c6SYegappan Lakshmanandef Test_synconcealed()
36184490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['synconcealed(0z10, 1)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1')
3619a9a7c0c6SYegappan Lakshmanan  CheckDefAndScriptFailure2(['synconcealed(1, "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
3620fc3b7750SYegappan Lakshmanan  if has('conceal')
3621fc3b7750SYegappan Lakshmanan    CheckDefExecAndScriptFailure(['synconcealed("", 4)'], 'E1209: Invalid value for a line number')
3622fc3b7750SYegappan Lakshmanan  endif
3623a9a7c0c6SYegappan Lakshmananenddef
3624a9a7c0c6SYegappan Lakshmanan
3625a9a7c0c6SYegappan Lakshmanandef Test_synstack()
36264490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['synstack(0z10, 1)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1')
3627a9a7c0c6SYegappan Lakshmanan  CheckDefAndScriptFailure2(['synstack(1, "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
3628fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['synstack("", 4)'], 'E1209: Invalid value for a line number')
3629a9a7c0c6SYegappan Lakshmananenddef
3630a9a7c0c6SYegappan Lakshmanan
36310ad871dcSYegappan Lakshmanandef Test_system()
36320ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['system(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
363378db17c6SBram Moolenaar  CheckDefAndScriptFailure2(['system("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict<unknown>', 'E1224: String, Number or List required for argument 2')
36347e6a2a64SYegappan Lakshmanan  assert_equal("123\n", system('echo 123'))
36350ad871dcSYegappan Lakshmananenddef
36360ad871dcSYegappan Lakshmanan
36370ad871dcSYegappan Lakshmanandef Test_systemlist()
36380ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['systemlist(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
363978db17c6SBram Moolenaar  CheckDefAndScriptFailure2(['systemlist("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict<unknown>', 'E1224: String, Number or List required for argument 2')
36407e6a2a64SYegappan Lakshmanan  if has('win32')
36417e6a2a64SYegappan Lakshmanan    call assert_equal(["123\r"], systemlist('echo 123'))
36427e6a2a64SYegappan Lakshmanan  else
36437e6a2a64SYegappan Lakshmanan    call assert_equal(['123'], systemlist('echo 123'))
36447e6a2a64SYegappan Lakshmanan  endif
36450ad871dcSYegappan Lakshmananenddef
36460ad871dcSYegappan Lakshmanan
3647a26f56f6SYegappan Lakshmanandef Test_tabpagebuflist()
36484490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['tabpagebuflist("t")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
3649a26f56f6SYegappan Lakshmanan  assert_equal([bufnr('')], tabpagebuflist())
3650a26f56f6SYegappan Lakshmanan  assert_equal([bufnr('')], tabpagebuflist(1))
3651a26f56f6SYegappan Lakshmananenddef
3652a26f56f6SYegappan Lakshmanan
3653a26f56f6SYegappan Lakshmanandef Test_tabpagenr()
36544490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['tabpagenr(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
3655fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['tabpagenr("")'], 'E15: Invalid expression')
3656a26f56f6SYegappan Lakshmanan  assert_equal(1, tabpagenr('$'))
3657a26f56f6SYegappan Lakshmanan  assert_equal(1, tabpagenr())
3658a26f56f6SYegappan Lakshmananenddef
3659a26f56f6SYegappan Lakshmanan
36601a71d31bSYegappan Lakshmanandef Test_tabpagewinnr()
36611a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['tabpagewinnr("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
36621a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['tabpagewinnr(1, 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
3663fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['tabpagewinnr(1, "")'], 'E15: Invalid expression')
36641a71d31bSYegappan Lakshmananenddef
36651a71d31bSYegappan Lakshmanan
36665b73992dSYegappan Lakshmanandef Test_taglist()
36674490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['taglist([1])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1')
36684490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['taglist("a", [2])'], 'E1013: Argument 2: type mismatch, expected string but got list<number>', 'E1174: String required for argument 2')
3669f8dbd586SYegappan Lakshmanan  taglist('')->assert_equal(0)
3670f8dbd586SYegappan Lakshmanan  taglist('', '')->assert_equal(0)
36715b73992dSYegappan Lakshmananenddef
36725b73992dSYegappan Lakshmanan
36735b73992dSYegappan Lakshmanandef Test_term_dumpload()
36745b73992dSYegappan Lakshmanan  CheckRunVimInTerminal
36755b73992dSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_dumpload({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1')
36765b73992dSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_dumpload({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1174: String required for argument 1')
36775b73992dSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_dumpload("a", ["b"])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<string>', 'E1206: Dictionary required for argument 2')
3678fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['term_dumpload("")'], 'E485: Can''t read file')
36795b73992dSYegappan Lakshmananenddef
36805b73992dSYegappan Lakshmanan
36810ad871dcSYegappan Lakshmanandef Test_term_dumpdiff()
36820ad871dcSYegappan Lakshmanan  CheckRunVimInTerminal
36830ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_dumpdiff(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
36840ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_dumpdiff("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
36850ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_dumpdiff("a", "b", [1])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3')
3686fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['term_dumpdiff("", "")'], 'E485: Can''t read file')
36870ad871dcSYegappan Lakshmananenddef
36880ad871dcSYegappan Lakshmanan
36890ad871dcSYegappan Lakshmanandef Test_term_dumpwrite()
36900ad871dcSYegappan Lakshmanan  CheckRunVimInTerminal
36914490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_dumpwrite(true, "b")'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1')
36920ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_dumpwrite(1, 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
36930ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_dumpwrite("a", "b", [1])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3')
36940ad871dcSYegappan Lakshmananenddef
36950ad871dcSYegappan Lakshmanan
36965b73992dSYegappan Lakshmanandef Test_term_getaltscreen()
36975b73992dSYegappan Lakshmanan  CheckRunVimInTerminal
36984490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_getaltscreen(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1')
36995b73992dSYegappan Lakshmananenddef
37005b73992dSYegappan Lakshmanan
37015b73992dSYegappan Lakshmanandef Test_term_getansicolors()
37025b73992dSYegappan Lakshmanan  CheckRunVimInTerminal
3703ee41052cSDominique Pelle  CheckFeature termguicolors
37044490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_getansicolors(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1220: String or Number required for argument 1')
37055b73992dSYegappan Lakshmananenddef
37065b73992dSYegappan Lakshmanan
37071a71d31bSYegappan Lakshmanandef Test_term_getattr()
37081a71d31bSYegappan Lakshmanan  CheckRunVimInTerminal
37091a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_getattr("x", "a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
37101a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_getattr(1, 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
37111a71d31bSYegappan Lakshmananenddef
37121a71d31bSYegappan Lakshmanan
37135b73992dSYegappan Lakshmanandef Test_term_getcursor()
37145b73992dSYegappan Lakshmanan  CheckRunVimInTerminal
37154490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_getcursor({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1220: String or Number required for argument 1')
37165b73992dSYegappan Lakshmananenddef
37175b73992dSYegappan Lakshmanan
37185b73992dSYegappan Lakshmanandef Test_term_getjob()
37195b73992dSYegappan Lakshmanan  CheckRunVimInTerminal
37204490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_getjob(0z10)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1')
37215b73992dSYegappan Lakshmananenddef
37225b73992dSYegappan Lakshmanan
3723cd917207SYegappan Lakshmanandef Test_term_getline()
3724cd917207SYegappan Lakshmanan  CheckRunVimInTerminal
37254490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_getline(1.1, 1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1')
37264490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_getline(1, 1.1)'], 'E1013: Argument 2: type mismatch, expected string but got float', 'E1220: String or Number required for argument 2')
3727cd917207SYegappan Lakshmananenddef
3728cd917207SYegappan Lakshmanan
37295b73992dSYegappan Lakshmanandef Test_term_getscrolled()
37305b73992dSYegappan Lakshmanan  CheckRunVimInTerminal
37314490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_getscrolled(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1')
37325b73992dSYegappan Lakshmananenddef
37335b73992dSYegappan Lakshmanan
37345b73992dSYegappan Lakshmanandef Test_term_getsize()
37355b73992dSYegappan Lakshmanan  CheckRunVimInTerminal
37364490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_getsize(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1')
37375b73992dSYegappan Lakshmananenddef
37385b73992dSYegappan Lakshmanan
37395b73992dSYegappan Lakshmanandef Test_term_getstatus()
37405b73992dSYegappan Lakshmanan  CheckRunVimInTerminal
37414490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_getstatus(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1')
37425b73992dSYegappan Lakshmananenddef
37435b73992dSYegappan Lakshmanan
37445b73992dSYegappan Lakshmanandef Test_term_gettitle()
37455b73992dSYegappan Lakshmanan  CheckRunVimInTerminal
37464490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_gettitle(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1')
37475b73992dSYegappan Lakshmananenddef
37485b73992dSYegappan Lakshmanan
374994738d8fSBram Moolenaardef Test_term_gettty()
375094738d8fSBram Moolenaar  if !has('terminal')
37519ff9c7b9SDominique Pelle    CheckFeature terminal
375294738d8fSBram Moolenaar  else
375394738d8fSBram Moolenaar    var buf = Run_shell_in_terminal({})
375494738d8fSBram Moolenaar    term_gettty(buf, true)->assert_notequal('')
375594738d8fSBram Moolenaar    StopShellInTerminal(buf)
375694738d8fSBram Moolenaar  endif
37574490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_gettty([1])'], 'E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1220: String or Number required for argument 1')
375883494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_gettty(1, 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2')
375994738d8fSBram Moolenaarenddef
376094738d8fSBram Moolenaar
3761cd917207SYegappan Lakshmanandef Test_term_scrape()
3762cd917207SYegappan Lakshmanan  CheckRunVimInTerminal
37634490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_scrape(1.1, 1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1')
37644490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_scrape(1, 1.1)'], 'E1013: Argument 2: type mismatch, expected string but got float', 'E1220: String or Number required for argument 2')
3765cd917207SYegappan Lakshmananenddef
3766cd917207SYegappan Lakshmanan
3767a9a7c0c6SYegappan Lakshmanandef Test_term_sendkeys()
3768a9a7c0c6SYegappan Lakshmanan  CheckRunVimInTerminal
37694490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_sendkeys([], "p")'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1')
3770a9a7c0c6SYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_sendkeys(1, [])'], 'E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2')
3771a9a7c0c6SYegappan Lakshmananenddef
3772a9a7c0c6SYegappan Lakshmanan
377383494b4aSYegappan Lakshmanandef Test_term_setansicolors()
377483494b4aSYegappan Lakshmanan  CheckRunVimInTerminal
37752ec28aecSDominique Pelle
37762ec28aecSDominique Pelle  if has('termguicolors') || has('gui')
37774490ec4eSYegappan Lakshmanan    CheckDefAndScriptFailure2(['term_setansicolors([], "p")'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1')
377883494b4aSYegappan Lakshmanan    CheckDefAndScriptFailure2(['term_setansicolors(10, {})'], 'E1013: Argument 2: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 2')
37792ec28aecSDominique Pelle  else
37802ec28aecSDominique Pelle    throw 'Skipped: Only works with termguicolors or gui feature'
37812ec28aecSDominique Pelle  endif
378283494b4aSYegappan Lakshmananenddef
378383494b4aSYegappan Lakshmanan
3784a9a7c0c6SYegappan Lakshmanandef Test_term_setapi()
3785a9a7c0c6SYegappan Lakshmanan  CheckRunVimInTerminal
37864490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_setapi([], "p")'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1')
3787a9a7c0c6SYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_setapi(1, [])'], 'E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2')
3788a9a7c0c6SYegappan Lakshmananenddef
3789a9a7c0c6SYegappan Lakshmanan
3790a9a7c0c6SYegappan Lakshmanandef Test_term_setkill()
3791a9a7c0c6SYegappan Lakshmanan  CheckRunVimInTerminal
37924490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_setkill([], "p")'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1')
3793a9a7c0c6SYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_setkill(1, [])'], 'E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2')
3794a9a7c0c6SYegappan Lakshmananenddef
3795a9a7c0c6SYegappan Lakshmanan
3796a9a7c0c6SYegappan Lakshmanandef Test_term_setrestore()
3797a9a7c0c6SYegappan Lakshmanan  CheckRunVimInTerminal
37984490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_setrestore([], "p")'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1')
3799a9a7c0c6SYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_setrestore(1, [])'], 'E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2')
3800a9a7c0c6SYegappan Lakshmananenddef
3801cd917207SYegappan Lakshmanan
3802cd917207SYegappan Lakshmanandef Test_term_setsize()
3803cd917207SYegappan Lakshmanan  CheckRunVimInTerminal
38044490ec4eSYegappan Lakshmanan  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')
3805cd917207SYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_setsize(1, "2", 3)'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
3806cd917207SYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_setsize(1, 2, "3")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
3807cd917207SYegappan Lakshmananenddef
3808cd917207SYegappan Lakshmanan
380994738d8fSBram Moolenaardef Test_term_start()
381094738d8fSBram Moolenaar  if !has('terminal')
38119ff9c7b9SDominique Pelle    CheckFeature terminal
381294738d8fSBram Moolenaar  else
381394738d8fSBram Moolenaar    botright new
381494738d8fSBram Moolenaar    var winnr = winnr()
3815e0de171eSBram Moolenaar    term_start(&shell, {curwin: true})
381694738d8fSBram Moolenaar    winnr()->assert_equal(winnr)
381794738d8fSBram Moolenaar    bwipe!
381894738d8fSBram Moolenaar  endif
38194490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_start({})'], 'E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1222: String or List required for argument 1')
3820cd917207SYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_start([], [])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2')
3821cd917207SYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_start("", "")'], 'E1013: Argument 2: type mismatch, expected dict<any> but got string', 'E1206: Dictionary required for argument 2')
3822fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['term_start("")'], 'E474: Invalid argument')
382394738d8fSBram Moolenaarenddef
382494738d8fSBram Moolenaar
3825a9a7c0c6SYegappan Lakshmanandef Test_term_wait()
3826a9a7c0c6SYegappan Lakshmanan  CheckRunVimInTerminal
38274490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_wait(0z10, 1)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1')
3828a9a7c0c6SYegappan Lakshmanan  CheckDefAndScriptFailure2(['term_wait(1, "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
3829a9a7c0c6SYegappan Lakshmananenddef
3830a9a7c0c6SYegappan Lakshmanan
38315b73992dSYegappan Lakshmanandef Test_test_alloc_fail()
38324490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['test_alloc_fail("a", 10, 20)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
38334490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['test_alloc_fail(10, "b", 20)'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
38344490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['test_alloc_fail(10, 20, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
38355b73992dSYegappan Lakshmananenddef
38365b73992dSYegappan Lakshmanan
38375b73992dSYegappan Lakshmanandef Test_test_feedinput()
38384490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['test_feedinput(test_void())'], 'E1013: Argument 1: type mismatch, expected string but got void', 'E1174: String required for argument 1')
38394490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['test_feedinput(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1')
38405b73992dSYegappan Lakshmananenddef
38415b73992dSYegappan Lakshmanan
38425b73992dSYegappan Lakshmanandef Test_test_getvalue()
38434490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['test_getvalue(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1')
38445b73992dSYegappan Lakshmananenddef
38455b73992dSYegappan Lakshmanan
38465bca906bSYegappan Lakshmanandef Test_test_gui_drop_files()
38475bca906bSYegappan Lakshmanan  CheckGui
38485bca906bSYegappan Lakshmanan  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')
38495bca906bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['test_gui_drop_files(["x"], "", 1, 0)'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
38505bca906bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['test_gui_drop_files(["x"], 1, "", 0)'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
38515bca906bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['test_gui_drop_files(["x"], 1, 1, "")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4')
38525bca906bSYegappan Lakshmananenddef
38535bca906bSYegappan Lakshmanan
385483494b4aSYegappan Lakshmanandef Test_test_gui_mouse_event()
385583494b4aSYegappan Lakshmanan  CheckGui
385683494b4aSYegappan Lakshmanan  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')
385783494b4aSYegappan Lakshmanan  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')
385883494b4aSYegappan Lakshmanan  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')
385983494b4aSYegappan Lakshmanan  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')
386083494b4aSYegappan Lakshmanan  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')
386183494b4aSYegappan Lakshmananenddef
386283494b4aSYegappan Lakshmanan
38635b73992dSYegappan Lakshmanandef Test_test_ignore_error()
38644490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['test_ignore_error([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1')
38655b73992dSYegappan Lakshmanan  test_ignore_error('RESET')
38665b73992dSYegappan Lakshmananenddef
38675b73992dSYegappan Lakshmanan
38685b73992dSYegappan Lakshmanandef Test_test_option_not_set()
38694490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['test_option_not_set([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1')
38705b73992dSYegappan Lakshmananenddef
38715b73992dSYegappan Lakshmanan
38721a71d31bSYegappan Lakshmanandef Test_test_override()
38731a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['test_override(1, 1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
38741a71d31bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['test_override("a", "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
38751a71d31bSYegappan Lakshmananenddef
38761a71d31bSYegappan Lakshmanan
38775bca906bSYegappan Lakshmanandef Test_test_scrollbar()
38785bca906bSYegappan Lakshmanan  CheckGui
38795bca906bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['test_scrollbar(1, 2, 3)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
38805bca906bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['test_scrollbar("a", "b", 3)'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
38815bca906bSYegappan Lakshmanan  CheckDefAndScriptFailure2(['test_scrollbar("a", 2, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
38825bca906bSYegappan Lakshmananenddef
38835bca906bSYegappan Lakshmanan
38845b73992dSYegappan Lakshmanandef Test_test_setmouse()
38854490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['test_setmouse("a", 10)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
38864490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['test_setmouse(10, "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
38875b73992dSYegappan Lakshmananenddef
38885b73992dSYegappan Lakshmanan
38895b73992dSYegappan Lakshmanandef Test_test_settime()
38904490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['test_settime([1])'], 'E1013: Argument 1: type mismatch, expected number but got list<number>', 'E1210: Number required for argument 1')
38915b73992dSYegappan Lakshmananenddef
38925b73992dSYegappan Lakshmanan
38935b73992dSYegappan Lakshmanandef Test_test_srand_seed()
38944490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['test_srand_seed([1])'], 'E1013: Argument 1: type mismatch, expected number but got list<number>', 'E1210: Number required for argument 1')
38954490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['test_srand_seed("10")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
38965b73992dSYegappan Lakshmananenddef
38975b73992dSYegappan Lakshmanan
3898a26f56f6SYegappan Lakshmanandef Test_timer_info()
38994490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['timer_info("id")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
3900a26f56f6SYegappan Lakshmanan  assert_equal([], timer_info(100))
3901a26f56f6SYegappan Lakshmanan  assert_equal([], timer_info())
3902a26f56f6SYegappan Lakshmananenddef
3903a26f56f6SYegappan Lakshmanan
390483494b4aSYegappan Lakshmanandef Test_timer_pause()
390583494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['timer_pause("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
390683494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['timer_pause(1, "a")'], 'E1013: Argument 2: type mismatch, expected bool but got string', 'E1212: Bool required for argument 2')
390783494b4aSYegappan Lakshmananenddef
390883494b4aSYegappan Lakshmanan
390994738d8fSBram Moolenaardef Test_timer_paused()
39102949cfdbSBram Moolenaar  var id = timer_start(50, () => 0)
391194738d8fSBram Moolenaar  timer_pause(id, true)
391294738d8fSBram Moolenaar  var info = timer_info(id)
391394738d8fSBram Moolenaar  info[0]['paused']->assert_equal(1)
391494738d8fSBram Moolenaar  timer_stop(id)
391594738d8fSBram Moolenaarenddef
391694738d8fSBram Moolenaar
39177973de35SYegappan Lakshmanandef Test_timer_start()
39187973de35SYegappan Lakshmanan  CheckDefAndScriptFailure2(['timer_start("a", "1")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
39197973de35SYegappan Lakshmanan  CheckDefAndScriptFailure2(['timer_start(1, "1", [1])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3')
39207973de35SYegappan Lakshmananenddef
39217973de35SYegappan Lakshmanan
3922a26f56f6SYegappan Lakshmanandef Test_timer_stop()
39234490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['timer_stop("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
3924a26f56f6SYegappan Lakshmanan  assert_equal(0, timer_stop(100))
3925a26f56f6SYegappan Lakshmananenddef
3926a26f56f6SYegappan Lakshmanan
39277237cab8SYegappan Lakshmanandef Test_tolower()
39284490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['tolower(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
3929820d5525SYegappan Lakshmanan  tolower('')->assert_equal('')
39307237cab8SYegappan Lakshmananenddef
39317237cab8SYegappan Lakshmanan
39327237cab8SYegappan Lakshmanandef Test_toupper()
39334490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['toupper(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
3934820d5525SYegappan Lakshmanan  toupper('')->assert_equal('')
39357237cab8SYegappan Lakshmananenddef
39367237cab8SYegappan Lakshmanan
39377237cab8SYegappan Lakshmanandef Test_tr()
39384490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['tr(1, "a", "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
39394490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['tr("a", 1, "b")'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2')
39404490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['tr("a", "a", 1)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3')
3941820d5525SYegappan Lakshmanan  tr('', '', '')->assert_equal('')
3942820d5525SYegappan Lakshmanan  tr('ab', '', '')->assert_equal('ab')
3943820d5525SYegappan Lakshmanan  assert_fails("tr('ab', 'ab', '')", 'E475:')
3944820d5525SYegappan Lakshmanan  assert_fails("tr('ab', '', 'AB')", 'E475:')
39455b73992dSYegappan Lakshmananenddef
39465b73992dSYegappan Lakshmanan
39475b73992dSYegappan Lakshmanandef Test_trim()
39484490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['trim(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1')
39494490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['trim("a", ["b"])'], 'E1013: Argument 2: type mismatch, expected string but got list<string>', 'E1174: String required for argument 2')
39504490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['trim("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3')
3951820d5525SYegappan Lakshmanan  trim('')->assert_equal('')
3952820d5525SYegappan Lakshmanan  trim('', '')->assert_equal('')
39537237cab8SYegappan Lakshmananenddef
39547237cab8SYegappan Lakshmanan
39559da32e4dSBram Moolenaardef Test_typename()
39569da32e4dSBram Moolenaar  if has('float')
39579da32e4dSBram Moolenaar    assert_equal('func([unknown], [unknown]): float', typename(function('pow')))
39589da32e4dSBram Moolenaar  endif
3959c8103b4cSBram Moolenaar  assert_equal('func', test_null_partial()->typename())
3960c8103b4cSBram Moolenaar  assert_equal('list<unknown>', test_null_list()->typename())
3961c8103b4cSBram Moolenaar  assert_equal('dict<unknown>', test_null_dict()->typename())
3962c8103b4cSBram Moolenaar  if has('job')
3963c8103b4cSBram Moolenaar    assert_equal('job', test_null_job()->typename())
3964c8103b4cSBram Moolenaar  endif
3965c8103b4cSBram Moolenaar  if has('channel')
3966c8103b4cSBram Moolenaar    assert_equal('channel', test_null_channel()->typename())
3967c8103b4cSBram Moolenaar  endif
39689da32e4dSBram Moolenaarenddef
39699da32e4dSBram Moolenaar
3970a26f56f6SYegappan Lakshmanandef Test_undofile()
39714490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['undofile(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1')
3972a26f56f6SYegappan Lakshmanan  assert_equal('.abc.un~', fnamemodify(undofile('abc'), ':t'))
3973820d5525SYegappan Lakshmanan  undofile('')->assert_equal('')
3974a26f56f6SYegappan Lakshmananenddef
3975a26f56f6SYegappan Lakshmanan
39760ad871dcSYegappan Lakshmanandef Test_uniq()
39770ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['uniq("a")'], 'E1013: Argument 1: type mismatch, expected list<any> but got string', 'E1211: List required for argument 1')
39780ad871dcSYegappan Lakshmanan  CheckDefAndScriptFailure2(['uniq([1], "", [1])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3')
39790ad871dcSYegappan Lakshmananenddef
39800ad871dcSYegappan Lakshmanan
3981a26f56f6SYegappan Lakshmanandef Test_values()
39824490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['values([])'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1')
3983a26f56f6SYegappan Lakshmanan  assert_equal([], {}->values())
3984a26f56f6SYegappan Lakshmanan  assert_equal(['sun'], {star: 'sun'}->values())
3985a26f56f6SYegappan Lakshmananenddef
3986a26f56f6SYegappan Lakshmanan
39875b73992dSYegappan Lakshmanandef Test_virtcol()
39884490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['virtcol(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1222: String or List required for argument 1')
3989fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['virtcol("")'], 'E1209: Invalid value for a line number')
3990c72bdd28SYegappan Lakshmanan  new
3991c72bdd28SYegappan Lakshmanan  setline(1, ['abcdefgh'])
3992c72bdd28SYegappan Lakshmanan  cursor(1, 4)
3993c72bdd28SYegappan Lakshmanan  assert_equal(4, virtcol('.'))
3994841e498cSYegappan Lakshmanan  assert_equal(4, virtcol([1, 4]))
3995c72bdd28SYegappan Lakshmanan  assert_equal(9, virtcol([1, '$']))
3996c72bdd28SYegappan Lakshmanan  assert_equal(0, virtcol([10, '$']))
3997c72bdd28SYegappan Lakshmanan  bw!
39985b73992dSYegappan Lakshmananenddef
39995b73992dSYegappan Lakshmanan
40001a71d31bSYegappan Lakshmanandef Test_visualmode()
40014490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['visualmode("1")'], 'E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1')
40024490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['visualmode(2)'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1')
40031a71d31bSYegappan Lakshmananenddef
40041a71d31bSYegappan Lakshmanan
400537487e16SBram Moolenaardef Test_win_execute()
400637487e16SBram Moolenaar  assert_equal("\n" .. winnr(), win_execute(win_getid(), 'echo winnr()'))
40075231224eSBram Moolenaar  assert_equal("\n" .. winnr(), 'echo winnr()'->win_execute(win_getid()))
40085231224eSBram Moolenaar  assert_equal("\n" .. winnr(), win_execute(win_getid(), 'echo winnr()', 'silent'))
400937487e16SBram Moolenaar  assert_equal('', win_execute(342343, 'echo winnr()'))
40104490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['win_execute("a", "b", "c")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
40114490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['win_execute(1, 2, "c")'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1222: String or List required for argument 2')
40124490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['win_execute(1, "b", 3)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3')
401337487e16SBram Moolenaarenddef
401437487e16SBram Moolenaar
4015a26f56f6SYegappan Lakshmanandef Test_win_findbuf()
40164490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['win_findbuf("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
4017a26f56f6SYegappan Lakshmanan  assert_equal([], win_findbuf(1000))
4018a26f56f6SYegappan Lakshmanan  assert_equal([win_getid()], win_findbuf(bufnr('')))
4019a26f56f6SYegappan Lakshmananenddef
4020a26f56f6SYegappan Lakshmanan
4021a26f56f6SYegappan Lakshmanandef Test_win_getid()
40224490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['win_getid(".")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
40234490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['win_getid(1, ".")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
4024a26f56f6SYegappan Lakshmanan  assert_equal(win_getid(), win_getid(1, 1))
4025a26f56f6SYegappan Lakshmananenddef
4026a26f56f6SYegappan Lakshmanan
40271a71d31bSYegappan Lakshmanandef Test_win_gettype()
40284490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['win_gettype("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
40291a71d31bSYegappan Lakshmananenddef
40301a71d31bSYegappan Lakshmanan
40311a71d31bSYegappan Lakshmanandef Test_win_gotoid()
40324490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['win_gotoid("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
40331a71d31bSYegappan Lakshmananenddef
40341a71d31bSYegappan Lakshmanan
40351a71d31bSYegappan Lakshmanandef Test_win_id2tabwin()
40364490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['win_id2tabwin("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
40371a71d31bSYegappan Lakshmananenddef
40381a71d31bSYegappan Lakshmanan
40391a71d31bSYegappan Lakshmanandef Test_win_id2win()
40404490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['win_id2win("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
40411a71d31bSYegappan Lakshmananenddef
40421a71d31bSYegappan Lakshmanan
40431a71d31bSYegappan Lakshmanandef Test_win_screenpos()
40444490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['win_screenpos("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
40451a71d31bSYegappan Lakshmananenddef
40461a71d31bSYegappan Lakshmanan
404794738d8fSBram Moolenaardef Test_win_splitmove()
404894738d8fSBram Moolenaar  split
4049e0de171eSBram Moolenaar  win_splitmove(1, 2, {vertical: true, rightbelow: true})
405094738d8fSBram Moolenaar  close
405183494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['win_splitmove("a", 2)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
405283494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['win_splitmove(1, "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
405383494b4aSYegappan Lakshmanan  CheckDefAndScriptFailure2(['win_splitmove(1, 2, [])'], 'E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3')
405494738d8fSBram Moolenaarenddef
405594738d8fSBram Moolenaar
40561a71d31bSYegappan Lakshmanandef Test_winbufnr()
40574490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['winbufnr("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
40581a71d31bSYegappan Lakshmananenddef
40591a71d31bSYegappan Lakshmanan
40601a71d31bSYegappan Lakshmanandef Test_winheight()
40614490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['winheight("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
40621a71d31bSYegappan Lakshmananenddef
40631a71d31bSYegappan Lakshmanan
40641a71d31bSYegappan Lakshmanandef Test_winlayout()
40654490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['winlayout("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
40661a71d31bSYegappan Lakshmananenddef
40671a71d31bSYegappan Lakshmanan
4068a26f56f6SYegappan Lakshmanandef Test_winnr()
40694490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['winnr([])'], 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1')
4070fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['winnr("")'], 'E15: Invalid expression')
4071a26f56f6SYegappan Lakshmanan  assert_equal(1, winnr())
4072a26f56f6SYegappan Lakshmanan  assert_equal(1, winnr('$'))
4073a26f56f6SYegappan Lakshmananenddef
4074a26f56f6SYegappan Lakshmanan
4075285b15fcSBram Moolenaardef Test_winrestcmd()
4076285b15fcSBram Moolenaar  split
4077285b15fcSBram Moolenaar  var cmd = winrestcmd()
4078285b15fcSBram Moolenaar  wincmd _
4079285b15fcSBram Moolenaar  exe cmd
4080285b15fcSBram Moolenaar  assert_equal(cmd, winrestcmd())
4081285b15fcSBram Moolenaar  close
4082285b15fcSBram Moolenaarenddef
4083285b15fcSBram Moolenaar
4084a26f56f6SYegappan Lakshmanandef Test_winrestview()
40854490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['winrestview([])'], 'E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1')
4086a26f56f6SYegappan Lakshmanan  :%d _
4087a26f56f6SYegappan Lakshmanan  setline(1, 'Hello World')
4088a26f56f6SYegappan Lakshmanan  winrestview({lnum: 1, col: 6})
4089a26f56f6SYegappan Lakshmanan  assert_equal([1, 7], [line('.'), col('.')])
4090a26f56f6SYegappan Lakshmananenddef
4091a26f56f6SYegappan Lakshmanan
409243b69b39SBram Moolenaardef Test_winsaveview()
409343b69b39SBram Moolenaar  var view: dict<number> = winsaveview()
409443b69b39SBram Moolenaar
409543b69b39SBram Moolenaar  var lines =<< trim END
409643b69b39SBram Moolenaar      var view: list<number> = winsaveview()
409743b69b39SBram Moolenaar  END
409843b69b39SBram Moolenaar  CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected list<number> but got dict<number>', 1)
409943b69b39SBram Moolenaarenddef
410043b69b39SBram Moolenaar
41017237cab8SYegappan Lakshmanandef Test_winwidth()
41024490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['winwidth("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
41037237cab8SYegappan Lakshmananenddef
41047237cab8SYegappan Lakshmanan
41057237cab8SYegappan Lakshmanandef Test_xor()
41064490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['xor("x", 0x2)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1')
41074490ec4eSYegappan Lakshmanan  CheckDefAndScriptFailure2(['xor(0x1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2')
41087237cab8SYegappan Lakshmananenddef
410994738d8fSBram Moolenaar
4110fc3b7750SYegappan Lakshmanandef Test_writefile()
4111fc3b7750SYegappan Lakshmanan  CheckDefExecAndScriptFailure(['writefile(["a"], "")'], 'E482: Can''t create file <empty>')
4112fc3b7750SYegappan Lakshmananenddef
4113fc3b7750SYegappan Lakshmanan
411494738d8fSBram Moolenaar" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
4115