To: vim_dev@googlegroups.com Subject: Patch 8.2.3456 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.3456 Problem: Vim9: Not all functions are tested with an empty string argument. Solution: Add tests with empty strings. (Yegappan Lakshmanan, closes #8915) Files: src/evalfunc.c, src/testdir/test_vim9_builtin.vim *** ../vim-8.2.3455/src/evalfunc.c 2021-09-14 16:53:39.316540671 +0100 --- src/evalfunc.c 2021-09-26 18:59:30.442418908 +0100 *************** *** 9647,9655 **** if (in_vim9script() && (check_for_number_arg(argvars, 0) == FAIL ! || (check_for_string_arg(argvars, 1) == FAIL ! || (argvars[1].v_type != VAR_UNKNOWN ! && check_for_opt_string_arg(argvars, 2) == FAIL)))) return; id = (int)tv_get_number(&argvars[0]); --- 9647,9654 ---- if (in_vim9script() && (check_for_number_arg(argvars, 0) == FAIL ! || check_for_string_arg(argvars, 1) == FAIL ! || check_for_opt_string_arg(argvars, 2) == FAIL)) return; id = (int)tv_get_number(&argvars[0]); *** ../vim-8.2.3455/src/testdir/test_vim9_builtin.vim 2021-09-17 20:06:53.124560949 +0100 --- src/testdir/test_vim9_builtin.vim 2021-09-26 18:59:30.442418908 +0100 *************** *** 583,588 **** --- 583,589 ---- def Test_charclass() assert_fails('charclass(true)', 'E1174:') + charclass('')->assert_equal(0) enddef def Test_charcol() *************** *** 908,913 **** --- 909,915 ---- assert_equal("blue sky", expandcmd("`=$FOO .. ' sky'`")) assert_equal("yes", expandcmd("`={a: 'yes'}['a']`")) + expandcmd('')->assert_equal('') enddef def Test_extend_arg_types() *************** *** 1086,1091 **** --- 1088,1094 ---- CheckDefExecFailure(['echo finddir("")'], 'E1175:') CheckDefAndScriptFailure2(['finddir("a", [])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') CheckDefAndScriptFailure2(['finddir("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') + finddir('abc', '')->assert_equal('') enddef def Test_findfile() *************** *** 1100,1105 **** --- 1103,1109 ---- CheckDefExecFailure(['findfile("")'], 'E1175:') CheckDefAndScriptFailure2(['findfile("a", [])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') CheckDefAndScriptFailure2(['findfile("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') + findfile('abc', '')->assert_equal('') enddef def Test_flatten() *************** *** 1188,1193 **** --- 1192,1198 ---- def Test_fnameescape() CheckDefAndScriptFailure2(['fnameescape(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') assert_equal('\+a\%b\|', fnameescape('+a%b|')) + fnameescape('')->assert_equal('') enddef def Test_fnamemodify() *************** *** 1422,1431 **** --- 1427,1438 ---- $SOMEENVVAR = 'some' assert_equal('some', getenv('SOMEENVVAR')) unlet $SOMEENVVAR + getenv('')->assert_equal(v:null) enddef def Test_getfontname() CheckDefAndScriptFailure2(['getfontname(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') + #getfontname('')->assert_equal('') enddef def Test_getfperm() *************** *** 1539,1544 **** --- 1546,1553 ---- CheckDefAndScriptFailure2(['getreg(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['getreg(".", 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2') CheckDefAndScriptFailure2(['getreg(".", 1, "b")'], 'E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3') + @" = 'A1B2C3' + getreg('')->assert_equal('A1B2C3') enddef def Test_getreg_return_type() *************** *** 1552,1557 **** --- 1561,1568 ---- setreg('a', text) getreginfo('a')->assert_equal({regcontents: [text], regtype: 'v', isunnamed: false}) assert_fails('getreginfo("ab")', 'E1162:') + @" = 'D1E2F3' + getreginfo('').regcontents->assert_equal(['D1E2F3']) enddef def Test_getregtype() *************** *** 1559,1564 **** --- 1570,1577 ---- setreg('a', lines) getregtype('a')->assert_equal('V') assert_fails('getregtype("ab")', 'E1162:') + setreg('"', 'ABCD', 'b') + getregtype('')->assert_equal("\4") enddef def Test_gettabinfo() *************** *** 1584,1589 **** --- 1597,1603 ---- CheckDefAndScriptFailure2(['gettext(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') CheckDefExecAndScriptFailure(['gettext("")'], 'E475: Invalid argument') assert_equal('abc', gettext("abc")) + assert_fails('gettext("")', 'E475:') enddef def Test_getwininfo() *************** *** 1605,1615 **** CheckDefAndScriptFailure2(['glob("a", 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2') CheckDefAndScriptFailure2(['glob("a", 1, "b")'], 'E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3') CheckDefAndScriptFailure2(['glob("a", 1, true, 2)'], 'E1013: Argument 4: type mismatch, expected bool but got number', 'E1212: Bool required for argument 4') enddef def Test_glob2regpat() CheckDefAndScriptFailure2(['glob2regpat(null)'], 'E1013: Argument 1: type mismatch, expected string but got special', 'E1174: String required for argument 1') ! assert_equal('^$', glob2regpat('')) enddef def Test_globpath() --- 1619,1630 ---- CheckDefAndScriptFailure2(['glob("a", 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2') CheckDefAndScriptFailure2(['glob("a", 1, "b")'], 'E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3') CheckDefAndScriptFailure2(['glob("a", 1, true, 2)'], 'E1013: Argument 4: type mismatch, expected bool but got number', 'E1212: Bool required for argument 4') + glob('')->assert_equal('') enddef def Test_glob2regpat() CheckDefAndScriptFailure2(['glob2regpat(null)'], 'E1013: Argument 1: type mismatch, expected string but got special', 'E1174: String required for argument 1') ! glob2regpat('')->assert_equal('^$') enddef def Test_globpath() *************** *** 1619,1630 **** --- 1634,1647 ---- CheckDefAndScriptFailure2(['globpath("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3') CheckDefAndScriptFailure2(['globpath("a", "b", true, "d")'], 'E1013: Argument 4: type mismatch, expected bool but got string', 'E1212: Bool required for argument 4') CheckDefAndScriptFailure2(['globpath("a", "b", true, false, "e")'], 'E1013: Argument 5: type mismatch, expected bool but got string', 'E1212: Bool required for argument 5') + globpath('', '')->assert_equal('') enddef def Test_has() has('eval', true)->assert_equal(1) CheckDefAndScriptFailure2(['has(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['has("a", "b")'], 'E1013: Argument 2: type mismatch, expected bool but got string', 'E1212: Bool required for argument 2') + has('')->assert_equal(0) enddef def Test_has_key() *************** *** 1652,1657 **** --- 1669,1675 ---- CheckDefAndScriptFailure2(['hasmapto(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['hasmapto("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') CheckDefAndScriptFailure2(['hasmapto("a", "b", 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3') + hasmapto('', '')->assert_equal(0) enddef def Test_histadd() *************** *** 1681,1691 **** --- 1699,1711 ---- def Test_hlID() CheckDefAndScriptFailure2(['hlID(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') assert_equal(0, hlID('NonExistingHighlight')) + hlID('')->assert_equal(0) enddef def Test_hlexists() CheckDefAndScriptFailure2(['hlexists([])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') assert_equal(0, hlexists('NonExistingHighlight')) + hlexists('')->assert_equal(0) enddef def Test_iconv() *************** *** 1693,1698 **** --- 1713,1719 ---- CheckDefAndScriptFailure2(['iconv("abc", 10, "to")'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') CheckDefAndScriptFailure2(['iconv("abc", "from", 20)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') assert_equal('abc', iconv('abc', 'fromenc', 'toenc')) + iconv('', '', '')->assert_equal('') enddef def Test_indent() *************** *** 1789,1794 **** --- 1810,1816 ---- def Test_isdirectory() CheckDefAndScriptFailure2(['isdirectory(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1') assert_false(isdirectory('NonExistingDir')) + assert_false(isdirectory('')) enddef def Test_islocked() *************** *** 1799,1804 **** --- 1821,1827 ---- lockvar g:v1 assert_true(islocked('g:v1')) unlet g:v1 + islocked('')->assert_equal(-1) enddef def Test_items() *************** *** 1868,1873 **** --- 1891,1897 ---- def Test_join() CheckDefAndScriptFailure2(['join("abc")'], 'E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1') CheckDefAndScriptFailure2(['join([], 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') + join([''], '')->assert_equal('') enddef def Test_js_decode() *************** *** 1971,1981 **** CheckDefAndScriptFailure2(['listener_remove("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef ! def Test_lua() if !has('lua') CheckFeature lua endif CheckDefAndScriptFailure2(['luaeval(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') enddef def Test_map() --- 1995,2008 ---- CheckDefAndScriptFailure2(['listener_remove("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef ! def Test_luaeval() if !has('lua') CheckFeature lua endif CheckDefAndScriptFailure2(['luaeval(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') + if exists_compiled('*luaeval') + luaeval('')->assert_equal(v:null) + endif enddef def Test_map() *************** *** 2073,2078 **** --- 2100,2106 ---- CheckDefAndScriptFailure2(['maparg("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') CheckDefAndScriptFailure2(['maparg("a", "b", 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3') CheckDefAndScriptFailure2(['maparg("a", "b", true, 2)'], 'E1013: Argument 4: type mismatch, expected bool but got number', 'E1212: Bool required for argument 4') + maparg('')->assert_equal('') enddef def Test_maparg_mapset() *************** *** 2090,2095 **** --- 2118,2125 ---- CheckDefAndScriptFailure2(['mapcheck(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['mapcheck("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') CheckDefAndScriptFailure2(['mapcheck("a", "b", 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3') + mapcheck('')->assert_equal('') + mapcheck('', '')->assert_equal('') enddef def Test_mapnew() *************** *** 2116,2121 **** --- 2146,2154 ---- assert_equal(-1, match(['a', 'b', 'c'], 'd')) assert_equal(3, match(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2)) assert_equal(5, match(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2, 2)) + match('', 'a')->assert_equal(-1) + match('abc', '')->assert_equal(0) + match('', '')->assert_equal(0) enddef def Test_matchadd() *************** *** 2160,2165 **** --- 2193,2201 ---- assert_equal(-1, matchend(['a', 'b', 'c'], 'd')) assert_equal(3, matchend(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2)) assert_equal(5, matchend(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2, 2)) + matchend('', 'a')->assert_equal(-1) + matchend('abc', '')->assert_equal(0) + matchend('', '')->assert_equal(0) enddef def Test_matchfuzzy() *************** *** 2192,2197 **** --- 2228,2236 ---- assert_equal([], matchlist(['a', 'b', 'c'], 'd')) assert_equal(l, matchlist(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2)) assert_equal(l, matchlist(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2, 2)) + matchlist('', 'a')->assert_equal([]) + matchlist('abc', '')->assert_equal(repeat([''], 10)) + matchlist('', '')->assert_equal(repeat([''], 10)) enddef def Test_matchstr() *************** *** 2207,2212 **** --- 2246,2254 ---- assert_equal('', matchstr(['a', 'b', 'c'], 'd')) assert_equal('b', matchstr(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2)) assert_equal('b', matchstr(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2, 2)) + matchstr('', 'a')->assert_equal('') + matchstr('abc', '')->assert_equal('') + matchstr('', '')->assert_equal('') enddef def Test_matchstrpos() *************** *** 2224,2229 **** --- 2266,2274 ---- matchstrpos(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2)) assert_equal(['b', 5, 0, 1], matchstrpos(['a', 'b', 'c', 'b', 'd', 'b'], 'b', 2, 2)) + matchstrpos('', 'a')->assert_equal(['', -1, -1]) + matchstrpos('abc', '')->assert_equal(['', 0, 0]) + matchstrpos('', '')->assert_equal(['', 0, 0]) enddef def Test_max() *************** *** 2267,2272 **** --- 2312,2318 ---- CheckDefAndScriptFailure2(['mkdir(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['mkdir("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict', 'E1174: String required for argument 2') CheckDefAndScriptFailure2(['mkdir("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') + CheckDefExecAndScriptFailure(['mkdir("")'], 'E1175: Non-empty string required for argument 1') delete('a', 'rf') enddef *************** *** 2302,2307 **** --- 2348,2354 ---- def Test_pathshorten() CheckDefAndScriptFailure2(['pathshorten(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['pathshorten("a", "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') + pathshorten('')->assert_equal('') enddef def Test_perleval() *************** *** 2606,2611 **** --- 2653,2659 ---- CheckDefAndScriptFailure2(['readfile("a", 0z10)'], 'E1013: Argument 2: type mismatch, expected string but got blob', 'E1174: String required for argument 2') CheckDefAndScriptFailure2(['readfile("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') + CheckDefExecAndScriptFailure(['readfile("")'], 'E1175: Non-empty string required for argument 1') enddef def Test_reduce() *************** *** 2742,2747 **** --- 2790,2796 ---- def Test_rename() CheckDefAndScriptFailure2(['rename(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['rename("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') + rename('', '')->assert_equal(0) enddef def Test_repeat() *************** *** 2761,2766 **** --- 2810,2816 ---- def Test_resolve() CheckDefAndScriptFailure2(['resolve([])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') assert_equal('SomeFile', resolve('SomeFile')) + resolve('')->assert_equal('') enddef def Test_reverse() *************** *** 2886,2891 **** --- 2936,2946 ---- normal 0f{ assert_equal([0, 0], searchpairpos('{', '', '}', '', 'col(".") > col')) + # searchpair with empty strings + normal 8| + assert_equal(0, searchpair('', '', '')) + assert_equal([0, 0], searchpairpos('', '', '')) + var lines =<< trim END vim9script setline(1, '()') *************** *** 2935,2940 **** --- 2990,2998 ---- def Test_shellescape() CheckDefAndScriptFailure2(['shellescape(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['shellescape("a", 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2') + if has('unix') + assert_equal("''", shellescape('')) + endif enddef def Test_set_get_bufline() *************** *** 3065,3076 **** --- 3123,3138 ---- def Test_setenv() CheckDefAndScriptFailure2(['setenv(1, 2)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') + assert_equal(0, setenv('', '')) + assert_equal(0, setenv('', v:null)) enddef def Test_setfperm() CheckDefAndScriptFailure2(['setfperm(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['setfperm("a", 0z10)'], 'E1013: Argument 2: type mismatch, expected string but got blob', 'E1174: String required for argument 2') CheckDefExecAndScriptFailure(['setfperm("Xfile", "")'], 'E475: Invalid argument') + CheckDefExecAndScriptFailure(['setfperm("", "")'], 'E475: Invalid argument') + assert_equal(0, setfperm('', 'rw-r--r--')) enddef def Test_setline() *************** *** 3125,3130 **** --- 3187,3194 ---- assert_fails('setreg("ab", 0)', 'E1162:') CheckDefAndScriptFailure2(['setreg(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['setreg("a", "b", 3)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') + setreg('', '1a2b3c') + assert_equal('1a2b3c', @") enddef def Test_settabvar() *************** *** 3144,3149 **** --- 3208,3214 ---- CheckDefAndScriptFailure2(['settagstack(true, {})'], 'E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1') CheckDefAndScriptFailure2(['settagstack(1, [1])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2') CheckDefAndScriptFailure2(['settagstack(1, {}, 2)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') + assert_fails('settagstack(1, {}, "")', 'E962: Invalid action') enddef def Test_setwinvar() *************** *** 3156,3161 **** --- 3221,3227 ---- CheckDefAndScriptFailure2(['sha256(100)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['sha256(0zABCD)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1174: String required for argument 1') assert_equal('ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad', sha256('abc')) + assert_equal('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', sha256('')) enddef def Test_shiftwidth() *************** *** 3219,3224 **** --- 3285,3291 ---- def Test_simplify() CheckDefAndScriptFailure2(['simplify(100)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') call assert_equal('NonExistingFile', simplify('NonExistingFile')) + simplify('')->assert_equal('') enddef def Test_slice() *************** *** 3277,3282 **** --- 3344,3350 ---- def Test_soundfold() CheckDefAndScriptFailure2(['soundfold(20)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') assert_equal('abc', soundfold('abc')) + assert_equal('', soundfold('')) enddef def Test_sort_return_type() *************** *** 3304,3309 **** --- 3372,3378 ---- def Test_spellbadword() CheckDefAndScriptFailure2(['spellbadword(100)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') spellbadword('good')->assert_equal(['', '']) + spellbadword('')->assert_equal(['', '']) enddef def Test_split() *************** *** 3311,3316 **** --- 3380,3387 ---- CheckDefAndScriptFailure2(['split(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['split("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') CheckDefAndScriptFailure2(['split("a", "b", 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3') + split('')->assert_equal([]) + split('', '')->assert_equal([]) enddef def Test_srand() *************** *** 3473,3478 **** --- 3544,3550 ---- CheckDefAndScriptFailure2(['substitute(1, "b", "1", "d")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['substitute("a", 2, "1", "d")'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') CheckDefAndScriptFailure2(['substitute("a", "b", "1", 4)'], 'E1013: Argument 4: type mismatch, expected string but got number', 'E1174: String required for argument 4') + substitute('', '', '', '')->assert_equal('') enddef def Test_swapinfo() *************** *** 3501,3506 **** --- 3573,3579 ---- CheckDefAndScriptFailure2(['synIDattr("a", "b")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') CheckDefAndScriptFailure2(['synIDattr(1, 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') CheckDefAndScriptFailure2(['synIDattr(1, "b", 3)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') + synIDattr(1, '', '')->assert_equal('') enddef def Test_synIDtrans() *************** *** 3559,3564 **** --- 3632,3639 ---- def Test_taglist() CheckDefAndScriptFailure2(['taglist([1])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['taglist("a", [2])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') + taglist('')->assert_equal(0) + taglist('', '')->assert_equal(0) enddef def Test_term_dumpload() *** ../vim-8.2.3455/src/version.c 2021-09-22 15:43:54.021305851 +0100 --- src/version.c 2021-09-26 19:02:22.996905487 +0100 *************** *** 759,760 **** --- 759,762 ---- { /* Add new patch number below this line */ + /**/ + 3456, /**/ -- hundred-and-one symptoms of being an internet addict: 63. You start using smileys in your snail mail. /// 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 ///