Patch 8.2.3446
Problem:    Not enough tests for empty string arguments.
Solution:   Add tests, fix type check. (Yegappan Lakshmanan, closes #8881)
Files:      runtime/doc/sign.txt, runtime/doc/textprop.txt, src/sign.c,
            src/testdir/test_blob.vim, src/testdir/test_vim9_builtin.vim


*** ../vim-8.2.3445/runtime/doc/sign.txt        2021-01-31 17:02:06.258490157 
+0100
--- runtime/doc/sign.txt        2021-09-17 21:00:55.357185280 +0200
***************
*** 499,510 ****
                        GetBufname()->sign_getplaced()
  <
                                                        *sign_jump()*
! sign_jump({id}, {group}, {expr})
!               Open the buffer {expr} or jump to the window that contains
!               {expr} and position the cursor at sign {id} in group {group}.
                This is similar to the |:sign-jump| command.
  
!               For the use of {expr}, see |bufname()|.
  
                Returns the line number of the sign. Returns -1 if the
                arguments are invalid.
--- 515,527 ----
                        GetBufname()->sign_getplaced()
  <
                                                        *sign_jump()*
! sign_jump({id}, {group}, {buf})
!               Open the buffer {buf} or jump to the window that contains
!               {buf} and position the cursor at sign {id} in group {group}.
                This is similar to the |:sign-jump| command.
  
!               If {group} is an empty string, then the global group is used.
!               For the use of {buf}, see |bufname()|.
  
                Returns the line number of the sign. Returns -1 if the
                arguments are invalid.
*** ../vim-8.2.3445/runtime/doc/textprop.txt    2021-08-16 21:38:38.127122597 
+0200
--- runtime/doc/textprop.txt    2021-09-17 21:00:55.357185280 +0200
***************
*** 160,166 ****
  
                Can also be used as a |method|: >
                        GetLnum()->prop_add(col, props)
! 
                                                *prop_add_list()*
  prop_add_list({props}, [[{lnum}, {col}, {end-lnum}, {end-col}], ...])
                Similar to prop_add(), but attaches a text property at
--- 160,166 ----
  
                Can also be used as a |method|: >
                        GetLnum()->prop_add(col, props)
! <
                                                *prop_add_list()*
  prop_add_list({props}, [[{lnum}, {col}, {end-lnum}, {end-col}], ...])
                Similar to prop_add(), but attaches a text property at
*** ../vim-8.2.3445/src/sign.c  2021-07-27 22:00:39.749712387 +0200
--- src/sign.c  2021-09-17 21:00:55.361185273 +0200
***************
*** 2282,2292 ****
        return;
  
      if (argvars[0].v_type != VAR_UNKNOWN)
-     {
-       if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL)
-           return;
        name = tv_get_string(&argvars[0]);
-     }
  
      sign_getlist(name, rettv->vval.v_list);
  }
--- 2282,2288 ----
*** ../vim-8.2.3445/src/testdir/test_blob.vim   2021-09-14 17:53:39.320540666 
+0200
--- src/testdir/test_blob.vim   2021-09-17 21:00:55.361185273 +0200
***************
*** 663,672 ****
          \ [[0], 0z00],
          \ [[], 0z],
          \ [[0, 0, 0, 0], 0z00000000],
          \ [[170, 187, 204, 221], 0zAABB.CCDD],
          \ ]
    for t in tests
!     call assert_equal(t[0]->list2blob(), t[1])
    endfor
    call assert_fails('let b = list2blob([1, []])', 'E745:')
    call assert_fails('let b = list2blob([-1])', 'E1239:')
--- 663,673 ----
          \ [[0], 0z00],
          \ [[], 0z],
          \ [[0, 0, 0, 0], 0z00000000],
+         \ [[255, 255], 0zFFFF],
          \ [[170, 187, 204, 221], 0zAABB.CCDD],
          \ ]
    for t in tests
!     call assert_equal(t[1], t[0]->list2blob())
    endfor
    call assert_fails('let b = list2blob([1, []])', 'E745:')
    call assert_fails('let b = list2blob([-1])', 'E1239:')
*** ../vim-8.2.3445/src/testdir/test_vim9_builtin.vim   2021-09-14 
17:53:39.320540666 +0200
--- src/testdir/test_vim9_builtin.vim   2021-09-17 21:00:55.361185273 +0200
***************
*** 380,391 ****
  def Test_byte2line()
    CheckDefAndScriptFailure2(['byte2line("1")'], 'E1013: Argument 1: type 
mismatch, expected number but got string', 'E1210: Number required for argument 
1')
    CheckDefAndScriptFailure2(['byte2line([])'], 'E1013: Argument 1: type 
mismatch, expected number but got list<unknown>', 'E1210: Number required for 
argument 1')
!   assert_equal(-1, byte2line(0))
  enddef
  
  def Test_byteidx()
    CheckDefAndScriptFailure2(['byteidx(1, 2)'], 'E1013: Argument 1: type 
mismatch, expected string but got number', 'E1174: String required for argument 
1')
    CheckDefAndScriptFailure2(['byteidx("a", "b")'], 'E1013: Argument 2: type 
mismatch, expected number but got string', 'E1210: Number required for argument 
2')
  enddef
  
  def Test_byteidxcomp()
--- 380,393 ----
  def Test_byte2line()
    CheckDefAndScriptFailure2(['byte2line("1")'], 'E1013: Argument 1: type 
mismatch, expected number but got string', 'E1210: Number required for argument 
1')
    CheckDefAndScriptFailure2(['byte2line([])'], 'E1013: Argument 1: type 
mismatch, expected number but got list<unknown>', 'E1210: Number required for 
argument 1')
!   byte2line(0)->assert_equal(-1)
  enddef
  
  def Test_byteidx()
    CheckDefAndScriptFailure2(['byteidx(1, 2)'], 'E1013: Argument 1: type 
mismatch, expected string but got number', 'E1174: String required for argument 
1')
    CheckDefAndScriptFailure2(['byteidx("a", "b")'], 'E1013: Argument 2: type 
mismatch, expected number but got string', 'E1210: Number required for argument 
2')
+   byteidx('', 0)->assert_equal(0)
+   byteidx('', 1)->assert_equal(-1)
  enddef
  
  def Test_byteidxcomp()
***************
*** 600,605 ****
--- 602,609 ----
    CheckDefAndScriptFailure2(['charidx(0z10, 1)'], 'E1013: Argument 1: type 
mismatch, expected string but got blob', 'E1174: String required for argument 
1')
    CheckDefAndScriptFailure2(['charidx("a", "b")'], 'E1013: Argument 2: type 
mismatch, expected number but got string', 'E1210: Number required for argument 
2')
    CheckDefAndScriptFailure2(['charidx("a", 1, "")'], 'E1013: Argument 3: type 
mismatch, expected bool but got string', 'E1212: Bool required for argument 3')
+   charidx('', 0)->assert_equal(-1)
+   charidx('', 1)->assert_equal(-1)
  enddef
  
  def Test_chdir()
***************
*** 896,901 ****
--- 900,906 ----
    CheckDefAndScriptFailure2(['expand(1)'], 'E1013: Argument 1: type mismatch, 
expected string but got number', 'E1174: String required for argument 1')
    CheckDefAndScriptFailure2(['expand("a", 2)'], 'E1013: Argument 2: type 
mismatch, expected bool but got number', 'E1212: Bool required for argument 2')
    CheckDefAndScriptFailure2(['expand("a", true, 2)'], 'E1013: Argument 3: 
type mismatch, expected bool but got number', 'E1212: Bool required for 
argument 3')
+   expand('')->assert_equal('')
  enddef
  
  def Test_expandcmd()
***************
*** 1275,1280 ****
--- 1280,1286 ----
    assert_equal('srewind', fullcommand('sre'))
    assert_equal('scriptnames', fullcommand('scr'))
    assert_equal('', fullcommand('scg'))
+   fullcommand('')->assert_equal('')
  enddef
  
  def Test_funcref()
***************
*** 1867,1877 ****
--- 1873,1885 ----
  def Test_js_decode()
    CheckDefAndScriptFailure2(['js_decode(10)'], 'E1013: Argument 1: type 
mismatch, expected string but got number', 'E1174: String required for argument 
1')
    assert_equal([1, 2], js_decode('[1,2]'))
+   js_decode('')->assert_equal(v:none)
  enddef
  
  def Test_json_decode()
    CheckDefAndScriptFailure2(['json_decode(true)'], 'E1013: Argument 1: type 
mismatch, expected string but got bool', 'E1174: String required for argument 
1')
    assert_equal(1.0, json_decode('1.0'))
+   json_decode('')->assert_equal(v:none)
  enddef
  
  def Test_keys()
***************
*** 2158,2169 ****
--- 2166,2179 ----
    CheckDefAndScriptFailure2(['matchfuzzy({}, "p")'], 'E1013: Argument 1: type 
mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for 
argument 1')
    CheckDefAndScriptFailure2(['matchfuzzy([], 1)'], 'E1013: Argument 2: type 
mismatch, expected string but got number', 'E1174: String required for argument 
2')
    CheckDefAndScriptFailure2(['matchfuzzy([], "a", [])'], 'E1013: Argument 3: 
type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary 
required for argument 3')
+   matchfuzzy(['abc', 'xyz'], '')->assert_equal([])
  enddef
  
  def Test_matchfuzzypos()
    CheckDefAndScriptFailure2(['matchfuzzypos({}, "p")'], 'E1013: Argument 1: 
type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required 
for argument 1')
    CheckDefAndScriptFailure2(['matchfuzzypos([], 1)'], 'E1013: Argument 2: 
type mismatch, expected string but got number', 'E1174: String required for 
argument 2')
    CheckDefAndScriptFailure2(['matchfuzzypos([], "a", [])'], 'E1013: Argument 
3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary 
required for argument 3')
+   matchfuzzypos(['abc', 'xyz'], '')->assert_equal([[], [], []])
  enddef
  
  def Test_matchlist()
***************
*** 2342,2347 ****
--- 2352,2360 ----
  def Test_popup_filter_menu()
    CheckDefAndScriptFailure2(['popup_filter_menu("x", "")'], 'E1013: Argument 
1: type mismatch, expected number but got string', 'E1210: Number required for 
argument 1')
    CheckDefAndScriptFailure2(['popup_filter_menu(1, 1)'], 'E1013: Argument 2: 
type mismatch, expected string but got number', 'E1174: String required for 
argument 2')
+   var id: number = popup_menu(["one", "two", "three"], {})
+   popup_filter_menu(id, '')
+   popup_close(id)
  enddef
  
  def Test_popup_filter_yesno()
***************
*** 2466,2471 ****
--- 2479,2485 ----
    CheckDefAndScriptFailure2(['prop_find([1, 2])'], 'E1013: Argument 1: type 
mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required 
for argument 1')
    CheckDefAndScriptFailure2(['prop_find([1, 2], "k")'], 'E1013: Argument 1: 
type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary 
required for argument 1')
    CheckDefAndScriptFailure2(['prop_find({"a": 10}, ["a"])'], 'E1013: Argument 
2: type mismatch, expected string but got list<string>', 'E1174: String 
required for argument 2')
+   assert_fails("prop_find({}, '')", 'E474:')
  enddef
  
  def Test_prop_list()
***************
*** 2482,2504 ****
--- 2496,2522 ----
  def Test_prop_type_add()
    CheckDefAndScriptFailure2(['prop_type_add({"a": 10}, "b")'], 'E1013: 
Argument 1: type mismatch, expected string but got dict<number>', 'E1174: 
String required for argument 1')
    CheckDefAndScriptFailure2(['prop_type_add("a", "b")'], 'E1013: Argument 2: 
type mismatch, expected dict<any> but got string', 'E1206: Dictionary required 
for argument 2')
+   assert_fails("prop_type_add('', {highlight: 'Search'})", 'E474:')
  enddef
  
  def Test_prop_type_change()
    CheckDefAndScriptFailure2(['prop_type_change({"a": 10}, "b")'], 'E1013: 
Argument 1: type mismatch, expected string but got dict<number>', 'E1174: 
String required for argument 1')
    CheckDefAndScriptFailure2(['prop_type_change("a", "b")'], 'E1013: Argument 
2: type mismatch, expected dict<any> but got string', 'E1206: Dictionary 
required for argument 2')
+   assert_fails("prop_type_change('', {highlight: 'Search'})", 'E474:')
  enddef
  
  def Test_prop_type_delete()
    CheckDefAndScriptFailure2(['prop_type_delete({"a": 10})'], 'E1013: Argument 
1: type mismatch, expected string but got dict<number>', 'E1174: String 
required for argument 1')
    CheckDefAndScriptFailure2(['prop_type_delete({"a": 10}, "b")'], 'E1013: 
Argument 1: type mismatch, expected string but got dict<number>', 'E1174: 
String required for argument 1')
    CheckDefAndScriptFailure2(['prop_type_delete("a", "b")'], 'E1013: Argument 
2: type mismatch, expected dict<any> but got string', 'E1206: Dictionary 
required for argument 2')
+   assert_fails("prop_type_delete('')", 'E474:')
  enddef
  
  def Test_prop_type_get()
    CheckDefAndScriptFailure2(['prop_type_get({"a": 10})'], 'E1013: Argument 1: 
type mismatch, expected string but got dict<number>', 'E1174: String required 
for argument 1')
    CheckDefAndScriptFailure2(['prop_type_get({"a": 10}, "b")'], 'E1013: 
Argument 1: type mismatch, expected string but got dict<number>', 'E1174: 
String required for argument 1')
    CheckDefAndScriptFailure2(['prop_type_get("a", "b")'], 'E1013: Argument 2: 
type mismatch, expected dict<any> but got string', 'E1206: Dictionary required 
for argument 2')
+   assert_fails("prop_type_get('')", 'E474:')
  enddef
  
  def Test_prop_type_list()
***************
*** 3153,3158 ****
--- 3171,3177 ----
  def Test_sign_getdefined()
    CheckDefAndScriptFailure2(['sign_getdefined(["x"])'], 'E1013: Argument 1: 
type mismatch, expected string but got list<string>', 'E1174: String required 
for argument 1')
    CheckDefAndScriptFailure2(['sign_getdefined(2)'], 'E1013: Argument 1: type 
mismatch, expected string but got number', 'E1174: String required for argument 
1')
+   sign_getdefined('')->assert_equal([])
  enddef
  
  def Test_sign_getplaced()
***************
*** 3173,3178 ****
--- 3192,3198 ----
    CheckDefAndScriptFailure2(['sign_place(1, "b", 3, "d")'], 'E1013: Argument 
3: type mismatch, expected string but got number', 'E1174: String required for 
argument 3')
    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')
    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')
+   assert_fails("sign_place(0, '', '', '')", 'E155:')
  enddef
  
  def Test_sign_placelist()
***************
*** 3303,3314 ****
    assert_equal('', state('a'))
  enddef
  
! def Run_str2float()
    if !has('float')
      CheckFeature float
!   endif
      str2float("1.00")->assert_equal(1.00)
      str2float("2e-2")->assert_equal(0.02)
  
      CheckDefAndScriptFailure2(['str2float(123)'], 'E1013: Argument 1: type 
mismatch, expected string but got number', 'E1174: String required for argument 
1')
    endif
--- 3323,3335 ----
    assert_equal('', state('a'))
  enddef
  
! def Test_str2float()
    if !has('float')
      CheckFeature float
!   else
      str2float("1.00")->assert_equal(1.00)
      str2float("2e-2")->assert_equal(0.02)
+     str2float('')->assert_equal(0.0)
  
      CheckDefAndScriptFailure2(['str2float(123)'], 'E1013: Argument 1: type 
mismatch, expected string but got number', 'E1174: String required for argument 
1')
    endif
***************
*** 3320,3329 ****
--- 3341,3352 ----
    assert_equal([97], str2list('a'))
    assert_equal([97], str2list('a', 1))
    assert_equal([97], str2list('a', true))
+   str2list('')->assert_equal([])
  enddef
  
  def Test_str2nr()
    str2nr("1'000'000", 10, true)->assert_equal(1000000)
+   str2nr('')->assert_equal(0)
  
    CheckDefAndScriptFailure2(['str2nr(123)'], 'E1013: Argument 1: type 
mismatch, expected string but got number', 'E1174: String required for argument 
1')
    CheckDefAndScriptFailure2(['str2nr("123", "x")'], 'E1013: Argument 2: type 
mismatch, expected number but got string', 'E1210: Number required for argument 
2')
***************
*** 3341,3346 ****
--- 3364,3370 ----
    CheckDefAndScriptFailure2(['strcharpart("a", "b")'], 'E1013: Argument 2: 
type mismatch, expected number but got string', 'E1210: Number required for 
argument 2')
    CheckDefAndScriptFailure2(['strcharpart("a", 1, "c")'], 'E1013: Argument 3: 
type mismatch, expected number but got string', 'E1210: Number required for 
argument 3')
    CheckDefAndScriptFailure2(['strcharpart("a", 1, 1, 2)'], 'E1013: Argument 
4: type mismatch, expected bool but got number', 'E1212: Bool required for 
argument 4')
+   strcharpart('', 0)->assert_equal('')
  enddef
  
  def Test_strchars()
***************
*** 3350,3376 ****
    assert_equal(3, strchars('abc'))
    assert_equal(3, strchars('abc', 1))
    assert_equal(3, strchars('abc', true))
  enddef
  
  def Test_strdisplaywidth()
    CheckDefAndScriptFailure2(['strdisplaywidth(1)'], 'E1013: Argument 1: type 
mismatch, expected string but got number', 'E1174: String required for argument 
1')
    CheckDefAndScriptFailure2(['strdisplaywidth("a", "x")'], 'E1013: Argument 
2: type mismatch, expected number but got string', 'E1210: Number required for 
argument 2')
  enddef
  
  def Test_strftime()
!   CheckDefAndScriptFailure2(['strftime(1)'], 'E1013: Argument 1: type 
mismatch, expected string but got number', 'E1174: String required for argument 
1')
!   CheckDefAndScriptFailure2(['strftime("a", "x")'], 'E1013: Argument 2: type 
mismatch, expected number but got string', 'E1210: Number required for argument 
2')
  enddef
  
  def Test_strgetchar()
    CheckDefAndScriptFailure2(['strgetchar(1, 1)'], 'E1013: Argument 1: type 
mismatch, expected string but got number', 'E1174: String required for argument 
1')
    CheckDefAndScriptFailure2(['strgetchar("a", "x")'], 'E1013: Argument 2: 
type mismatch, expected number but got string', 'E1210: Number required for 
argument 2')
  enddef
  
  def Test_stridx()
    CheckDefAndScriptFailure2(['stridx([1], "b")'], 'E1013: Argument 1: type 
mismatch, expected string but got list<number>', 'E1174: String required for 
argument 1')
    CheckDefAndScriptFailure2(['stridx("a", {})'], 'E1013: Argument 2: type 
mismatch, expected string but got dict<unknown>', 'E1174: String required for 
argument 2')
    CheckDefAndScriptFailure2(['stridx("a", "b", "c")'], 'E1013: Argument 3: 
type mismatch, expected number but got string', 'E1210: Number required for 
argument 3')
  enddef
  
  def Test_strlen()
--- 3374,3410 ----
    assert_equal(3, strchars('abc'))
    assert_equal(3, strchars('abc', 1))
    assert_equal(3, strchars('abc', true))
+   strchars('')->assert_equal(0)
  enddef
  
  def Test_strdisplaywidth()
    CheckDefAndScriptFailure2(['strdisplaywidth(1)'], 'E1013: Argument 1: type 
mismatch, expected string but got number', 'E1174: String required for argument 
1')
    CheckDefAndScriptFailure2(['strdisplaywidth("a", "x")'], 'E1013: Argument 
2: type mismatch, expected number but got string', 'E1210: Number required for 
argument 2')
+   strdisplaywidth('')->assert_equal(0)
  enddef
  
  def Test_strftime()
!   if exists('*strftime')
!     CheckDefAndScriptFailure2(['strftime(1)'], 'E1013: Argument 1: type 
mismatch, expected string but got number', 'E1174: String required for argument 
1')
!     CheckDefAndScriptFailure2(['strftime("a", "x")'], 'E1013: Argument 2: 
type mismatch, expected number but got string', 'E1210: Number required for 
argument 2')
!     strftime('')->assert_equal('')
!   endif
  enddef
  
  def Test_strgetchar()
    CheckDefAndScriptFailure2(['strgetchar(1, 1)'], 'E1013: Argument 1: type 
mismatch, expected string but got number', 'E1174: String required for argument 
1')
    CheckDefAndScriptFailure2(['strgetchar("a", "x")'], 'E1013: Argument 2: 
type mismatch, expected number but got string', 'E1210: Number required for 
argument 2')
+   strgetchar('', 0)->assert_equal(-1)
+   strgetchar('', 1)->assert_equal(-1)
  enddef
  
  def Test_stridx()
    CheckDefAndScriptFailure2(['stridx([1], "b")'], 'E1013: Argument 1: type 
mismatch, expected string but got list<number>', 'E1174: String required for 
argument 1')
    CheckDefAndScriptFailure2(['stridx("a", {})'], 'E1013: Argument 2: type 
mismatch, expected string but got dict<unknown>', 'E1174: String required for 
argument 2')
    CheckDefAndScriptFailure2(['stridx("a", "b", "c")'], 'E1013: Argument 3: 
type mismatch, expected number but got string', 'E1210: Number required for 
argument 3')
+   stridx('', '')->assert_equal(0)
+   stridx('', 'a')->assert_equal(-1)
+   stridx('a', '')->assert_equal(0)
  enddef
  
  def Test_strlen()
***************
*** 3384,3415 ****
    CheckDefAndScriptFailure2(['strpart("a", "b")'], 'E1013: Argument 2: type 
mismatch, expected number but got string', 'E1210: Number required for argument 
2')
    CheckDefAndScriptFailure2(['strpart("a", 1, "c")'], 'E1013: Argument 3: 
type mismatch, expected number but got string', 'E1210: Number required for 
argument 3')
    CheckDefAndScriptFailure2(['strpart("a", 1, 1, 2)'], 'E1013: Argument 4: 
type mismatch, expected bool but got number', 'E1212: Bool required for 
argument 4')
  enddef
  
  def Test_strptime()
    CheckFunction strptime
!   CheckDefAndScriptFailure2(['strptime(10, "2021")'], 'E1013: Argument 1: 
type mismatch, expected string but got number', 'E1174: String required for 
argument 1')
!   CheckDefAndScriptFailure2(['strptime("%Y", 2021)'], 'E1013: Argument 2: 
type mismatch, expected string but got number', 'E1174: String required for 
argument 2')
!   # BUG: Directly calling strptime() in this function gives an "E117: Unknown
!   # function" error on MS-Windows even with the above CheckFunction call for
!   # strptime().
!   #assert_true(strptime('%Y', '2021') != 0)
  enddef
  
  def Test_strridx()
    CheckDefAndScriptFailure2(['strridx([1], "b")'], 'E1013: Argument 1: type 
mismatch, expected string but got list<number>', 'E1174: String required for 
argument 1')
    CheckDefAndScriptFailure2(['strridx("a", {})'], 'E1013: Argument 2: type 
mismatch, expected string but got dict<unknown>', 'E1174: String required for 
argument 2')
    CheckDefAndScriptFailure2(['strridx("a", "b", "c")'], 'E1013: Argument 3: 
type mismatch, expected number but got string', 'E1210: Number required for 
argument 3')
  enddef
  
  def Test_strtrans()
    CheckDefAndScriptFailure2(['strtrans(20)'], 'E1013: Argument 1: type 
mismatch, expected string but got number', 'E1174: String required for argument 
1')
    assert_equal('abc', strtrans('abc'))
  enddef
  
  def Test_strwidth()
    CheckDefAndScriptFailure2(['strwidth(10)'], 'E1013: Argument 1: type 
mismatch, expected string but got number', 'E1174: String required for argument 
1')
    assert_equal(4, strwidth('abcd'))
  enddef
  
  def Test_submatch()
--- 3418,3455 ----
    CheckDefAndScriptFailure2(['strpart("a", "b")'], 'E1013: Argument 2: type 
mismatch, expected number but got string', 'E1210: Number required for argument 
2')
    CheckDefAndScriptFailure2(['strpart("a", 1, "c")'], 'E1013: Argument 3: 
type mismatch, expected number but got string', 'E1210: Number required for 
argument 3')
    CheckDefAndScriptFailure2(['strpart("a", 1, 1, 2)'], 'E1013: Argument 4: 
type mismatch, expected bool but got number', 'E1212: Bool required for 
argument 4')
+   strpart('', 0)->assert_equal('')
  enddef
  
  def Test_strptime()
    CheckFunction strptime
!   if exists_compiled('*strptime')
!     CheckDefAndScriptFailure2(['strptime(10, "2021")'], 'E1013: Argument 1: 
type mismatch, expected string but got number', 'E1174: String required for 
argument 1')
!     CheckDefAndScriptFailure2(['strptime("%Y", 2021)'], 'E1013: Argument 2: 
type mismatch, expected string but got number', 'E1174: String required for 
argument 2')
!     assert_true(strptime('%Y', '2021') != 0)
!     assert_true(strptime('%Y', '') == 0)
!   endif
  enddef
  
  def Test_strridx()
    CheckDefAndScriptFailure2(['strridx([1], "b")'], 'E1013: Argument 1: type 
mismatch, expected string but got list<number>', 'E1174: String required for 
argument 1')
    CheckDefAndScriptFailure2(['strridx("a", {})'], 'E1013: Argument 2: type 
mismatch, expected string but got dict<unknown>', 'E1174: String required for 
argument 2')
    CheckDefAndScriptFailure2(['strridx("a", "b", "c")'], 'E1013: Argument 3: 
type mismatch, expected number but got string', 'E1210: Number required for 
argument 3')
+   strridx('', '')->assert_equal(0)
+   strridx('', 'a')->assert_equal(-1)
+   strridx('a', '')->assert_equal(1)
  enddef
  
  def Test_strtrans()
    CheckDefAndScriptFailure2(['strtrans(20)'], 'E1013: Argument 1: type 
mismatch, expected string but got number', 'E1174: String required for argument 
1')
    assert_equal('abc', strtrans('abc'))
+   strtrans('')->assert_equal('')
  enddef
  
  def Test_strwidth()
    CheckDefAndScriptFailure2(['strwidth(10)'], 'E1013: Argument 1: type 
mismatch, expected string but got number', 'E1174: String required for argument 
1')
    assert_equal(4, strwidth('abcd'))
+   strwidth('')->assert_equal(0)
  enddef
  
  def Test_submatch()
***************
*** 3777,3798 ****
--- 3817,3846 ----
  
  def Test_tolower()
    CheckDefAndScriptFailure2(['tolower(1)'], 'E1013: Argument 1: type 
mismatch, expected string but got number', 'E1174: String required for argument 
1')
+   tolower('')->assert_equal('')
  enddef
  
  def Test_toupper()
    CheckDefAndScriptFailure2(['toupper(1)'], 'E1013: Argument 1: type 
mismatch, expected string but got number', 'E1174: String required for argument 
1')
+   toupper('')->assert_equal('')
  enddef
  
  def Test_tr()
    CheckDefAndScriptFailure2(['tr(1, "a", "b")'], 'E1013: Argument 1: type 
mismatch, expected string but got number', 'E1174: String required for argument 
1')
    CheckDefAndScriptFailure2(['tr("a", 1, "b")'], 'E1013: Argument 2: type 
mismatch, expected string but got number', 'E1174: String required for argument 
2')
    CheckDefAndScriptFailure2(['tr("a", "a", 1)'], 'E1013: Argument 3: type 
mismatch, expected string but got number', 'E1174: String required for argument 
3')
+   tr('', '', '')->assert_equal('')
+   tr('ab', '', '')->assert_equal('ab')
+   assert_fails("tr('ab', 'ab', '')", 'E475:')
+   assert_fails("tr('ab', '', 'AB')", 'E475:')
  enddef
  
  def Test_trim()
    CheckDefAndScriptFailure2(['trim(["a"])'], 'E1013: Argument 1: type 
mismatch, expected string but got list<string>', 'E1174: String required for 
argument 1')
    CheckDefAndScriptFailure2(['trim("a", ["b"])'], 'E1013: Argument 2: type 
mismatch, expected string but got list<string>', 'E1174: String required for 
argument 2')
    CheckDefAndScriptFailure2(['trim("a", "b", "c")'], 'E1013: Argument 3: type 
mismatch, expected number but got string', 'E1210: Number required for argument 
3')
+   trim('')->assert_equal('')
+   trim('', '')->assert_equal('')
  enddef
  
  def Test_typename()
***************
*** 3813,3818 ****
--- 3861,3867 ----
  def Test_undofile()
    CheckDefAndScriptFailure2(['undofile(10)'], 'E1013: Argument 1: type 
mismatch, expected string but got number', 'E1174: String required for argument 
1')
    assert_equal('.abc.un~', fnamemodify(undofile('abc'), ':t'))
+   undofile('')->assert_equal('')
  enddef
  
  def Test_uniq()
*** ../vim-8.2.3445/src/version.c       2021-09-17 20:45:26.066836056 +0200
--- src/version.c       2021-09-17 21:04:07.348849910 +0200
***************
*** 759,760 ****
--- 759,762 ----
  {   /* Add new patch number below this line */
+ /**/
+     3446,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
32. You don't know what sex three of your closest friends are, because they
    have neutral nicknames and you never bothered to ask.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///                                                                      \\\
\\\        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/202109171922.18HJMplb2261720%40masaka.moolenaar.net.

Raspunde prin e-mail lui