To: vim_dev@googlegroups.com Subject: Patch 8.2.3446 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ 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', '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', '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 but got dict', '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 but got list', '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 but got dict', '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 but got list', '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 but got list', 'E1206: Dictionary required for argument 1') CheckDefAndScriptFailure2(['prop_find([1, 2], "k")'], 'E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1') CheckDefAndScriptFailure2(['prop_find({"a": 10}, ["a"])'], 'E1013: Argument 2: type mismatch, expected string but got list', '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', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['prop_type_add("a", "b")'], 'E1013: Argument 2: type mismatch, expected dict 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', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['prop_type_change("a", "b")'], 'E1013: Argument 2: type mismatch, expected dict 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', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['prop_type_delete({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['prop_type_delete("a", "b")'], 'E1013: Argument 2: type mismatch, expected dict 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', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['prop_type_get({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['prop_type_get("a", "b")'], 'E1013: Argument 2: type mismatch, expected dict 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', '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 but got list', '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', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['stridx("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict', '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', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['stridx("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict', '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', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['strridx("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict', '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', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['strridx("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict', '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', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['trim("a", ["b"])'], 'E1013: Argument 2: type mismatch, expected string but got list', '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 -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///